[Revisión para el examen de ingreso de posgrado] Nuevos ejercicios y análisis del lenguaje C de Li Chunbao (corrección de respuestas incorrectas)

Nuevos ejercicios y análisis del lenguaje C

Al hacer ejercicios, encontré algunas respuestas incorrectas y escribí un blog para corregirlas. Las correcciones son bienvenidas~
Compilar con g++.

Capitulo dos

inserte la descripción de la imagen aquí
C. La forma de expresión de b es incorrecta y es correcta si se agrega 0x1e2b. Entonces C está mal.
D. Después de e es un número entero. Reglas de nomenclatura de exponentes: hay un número antes de e y un número entero después. Entonces D está mal.


inserte la descripción de la imagen aquí
La multiplicación y la división tienen la misma prioridad que el resto.Entonces la interpretación correcta es la siguiente:
2.5+1*7%2/4=2.5+7%2/4=2.5+1/4=2.5+0=2.5.
Luego unifique la precisión.


tercer capitulo

inserte la descripción de la imagen aquí
Según las siguientes opciones, podemos saber que el título es -1.


inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
A. La expresión constante después del caso no es un número entero, y tampoco lo es el número entero después del cambio
B. Hay un error de punto y coma después del cambio (a)
C. La expresión constante después del caso no es un número entero
D. Hay un punto y coma después del cambio (a+b) Si no hay punto y coma, la respuesta correcta es D.


inserte la descripción de la imagen aquí
Falta una S, debería poder verla.


inserte la descripción de la imagen aquí
La suma de números pares en la parte de salida debería generar directamente c en lugar de c-11.

#include <stdio.h>
int main()
{
    
    
    int a,b,c;
    a=c=0;
    for (int i = 0; i < 10; i+=2)
    {
    
    
        a+=i;
        b=i+1;
        c+=b;
    }
    printf("even = %d\n",a);
    printf("odd = %d\n",c);
} // namespace std;


inserte la descripción de la imagen aquí

  1. j%2==1 salida cuando la condición de juicio es 1
  2. Hay comas entre cada conjunto (las comas entre números se pueden hacer con un si)
#include<stdio.h>
int main(){
    
    
    int n,m,i,j,k;
    printf("n=");
    scanf("%d",&n);
    //计算具有子集的个数
    m=1;
    for(i=1;i<=n;i++){
    
    
        m=m*2;
    }
    m--;
    for(i=0;i<=m;i++){
    
    
        printf("{");
        j=i;
        k=0;
        while(j!=0){
    
    
            if(j%2==1) printf("%d",k);
            k++;
            j/=2;
        }
        printf("},");
        if((i+1)%5==0) printf("\n");
    }
    printf("\n");
}

Capítulo cuatro

inserte la descripción de la imagen aquí
Al definir una matriz, si el número de valores iniciales asignados es igual a la longitud de la matriz, la longitud de la matriz se puede omitir, por lo tanto, cuando solo se asignan valores iniciales a algunos elementos de la matriz, la declaración de la longitud de la matriz no se puede omitir. Entonces las respuestas son A y B.
Abreviatura: las matrices unidimensionales se pueden omitir, las filas de matrices bidimensionales se pueden omitir, las columnas no.


Aqui hay unoAmbigüedad:
inserte la descripción de la imagen aquí
El libro dice: Al definir una matriz estática, se inicializará con todos los 0. Esta definición no es una matriz estática, por lo que el valor inicial solo se asigna a los dos primeros elementos.
Se dice en Internet: la matriz se inicializa y hay caracteres ilegibles almacenados en ella, pero siempre que se inicialice un número, el resto de los datos se completarán automáticamente con 0, por lo que los elementos de la matriz son todos 0.
Para la ambigüedad entre los dos, primero siga la definición en el libro Además, el libro de Su Xiaohong también menciona que al definir una matriz estática, a los elementos de la matriz se les asignará 0.


inserte la descripción de la imagen aquí
Veamos la décima pregunta de juicio: si desea hacer que los valores de todos los elementos en una matriz sean 0, puede escribir int a[10]={0*10};. ¿Es correcta esta afirmación?

En mi opinión:El título es equivalente a int a[10]={0}, lo que significa que solo se asigna el valor inicial al primer elemento y el valor de los siguientes 9 elementos por defecto es 0. Extensión: int a[10]={1*10}, ¿es correcto y cuál es el resultado de la
inicialización ?
Resultado de salida: 10,0,0,0,0,0,0,0,0,0


inserte la descripción de la imagen aquí


capítulo cinco

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
5-2-4:
A. El puntero p apunta a la cadena "eres tú". segmento de programacorrecto
B. a es una constante de dirección y no se puede realizar la operación ++a. Error de segmento de programa
C. a[11] la memoria de matriz es 11, y la cadena a la que apunta st es 11+1 (hay '\0\ al final), la memoria de matriz no es suficiente. Error de segmento de programa
D. No se declara el tamaño de la matriz. Error de segmentación
5-2-11:
A. El puntero p apunta a la cadena "eres tú". El segmento de programa es
B correcto. a es una constante de dirección y no se puede realizar la operación ++a. segmento de programaerror
C. La memoria de matriz de a[11] es 11, y la cadena a la que apunta st es 11+1 (hay '\0\ al final), la memoria de matriz no es suficiente. segmento de programaerror
D. El puntero p apunta a la cadena "w are you". El segmento del programa es correcto.


inserte la descripción de la imagen aquí

#include<stdio.h>
#include<string.h>
int main(){
    
    
    char *ptr1,*ptr2;
    ptr1=ptr2="abcde";
    while(*ptr2!='\0')
        putchar(*ptr2++);
    while(--ptr2>=ptr1)
        putchar(*ptr2);
    putchar('\n');
}

La respuesta a esta pregunta es incorrecta y la salida del compilador es:abcdeedcba


inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
La respuesta a esta pregunta es incorrecta y la salida del compilador es:

greeting[0]=Hello
greeting[1]=Good morning
greeting[2]=How are you
Hello
Good morning
How are you

Capítulo Seis

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Reservar conocimiento:
inserte la descripción de la imagen aquí
Cuando el nombre o la dirección de la matriz se usa como un parámetro real, las tres formas son equivalentes.

A) Parámetro 2, la longitud de la matriz no está limitada. Correcto
B) Parámetro 2, longitud de matriz 41, &a[9] es 41 de 9-50. Correcto
C) Parámetro 2, el puntero se llama con la dirección. Correcto
D) El parámetro 2 es un número entero y no se puede pasar en una dirección. Incorrecto

Preguntas frecuentes de referencia


inserte la descripción de la imagen aquí
La respuesta a esta pregunta se hizo de manera incorrecta, y lo que se debe preguntar es la definición correcta.
Cuando se utiliza una matriz bidimensional como parámetro formal, se puede omitir el tamaño de la primera dimensión, pero no se puede omitir el tamaño de la segunda dimensión y debe ser coherente con el tamaño de la segunda dimensión de la matriz de parámetros reales. Entonces la respuesta correcta es C.
respuesta a la pregunta de referencia


inserte la descripción de la imagen aquí
Esta pregunta no debe ordenar las cadenas de mayor a menor, sino generar la cadena con la mayor longitud. La respuesta correspondiente es B es correcta.


inserte la descripción de la imagen aquí
El formato de salida es incorrecto, el formato correcto es: 1,3,2


Capítulo VII

inserte la descripción de la imagen aquí
La respuesta debe ser D.
R. Después de a.next, se le debe asignar la dirección de c, además, esta forma es incorrecta, porque la variable a no tiene el atributo de next.
B. Primero, después de vincular p y q, q.next se convierte en q.q.next y p.next en la segunda oración hacen que sus campos de puntero se refieran entre sí, lo que no puede formar una lista correctamente vinculada.
C. Después de conectar esta opción con p y q, el error inverso es similar a B, y los campos de puntero de p y q apuntan entre sí.
D. Primero, el campo puntero p de la variable a apunta a la variable c, y luego deja que el campo puntero de la variable c apunte a la variable b. La respuesta es correcta.
además,Cuando no hay un nombre de variable, primero debe conectar la parte posterior y luego conectar la parte frontal; de lo contrario, el enlace se romperá.
Enlace de respuesta de referencia


Capítulo nueve

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
La respuesta a esta pregunta esD.
R. Cada byte del archivo de texto pone un código ASCII, que representa un carácter. Los archivos de texto también se denominan archivos de código ASCII, que son legibles. Por lo tanto la opción A es correcta.
B. Dado que los datos se almacenan en forma binaria en la computadora, los datos en el archivo binario se pueden leer directamente sin convertir el código ASCII en binario como un archivo de texto, por lo que la velocidad es más rápida. Por lo tanto la opción B es correcta.
C. En el archivo de texto, los datos se almacenan en forma de código ASCII. Es difícil para el usuario determinar cuántos bytes ocupa un dato, por lo que no es adecuado utilizar el método de lectura y escritura aleatoria. Por lo tanto la opción C es correcta.
D. Los datos se almacenan en forma binaria y el número de bytes ocupados es fijo, por lo que se pueden leer y escribir aleatoriamente y, por supuesto, también se pueden leer y escribir secuencialmente. Por lo tanto, se selecciona la opción D.
Enlace de respuesta de referencia


Supongo que te gusta

Origin blog.csdn.net/m0_52427832/article/details/131109382
Recomendado
Clasificación