ejercicios de lenguaje c

Insertar descripción de la imagen aquí

Bienvenido a mi: mundo

Espero que el artículo del autor le resulte útil. Corríjame si hay alguna deficiencia. ¡Aprendamos y comuniquémonos juntos!


Prefacio


Rellenar los espacios en blanco:

primera pregunta

Insertar descripción de la imagen aquí

Idea de solución de pregunta:
esta pregunta examina nuestra comprensión de la prioridad del operador + comprensión de las matrices bidimensionales;
Baidu: explicación detallada de la prioridad del operador ; en la expresión X[i][j] , la prioridad del operador de referencia de subíndice es la más alta; así que si lo desmontas primero, podrás entender mejor su estructura:
Insertar descripción de la imagen aquí
A continuación, mira las opciones por turno: Opción A: *(X[ i ]+j);
El operador de referencia de subíndice "[ ]" es mejor que el corchete " ( )" tiene una prioridad más alta . Dado que es una matriz bidimensional, puede considerarse como una colección de matrices unidimensionales; y esta opción es equivalente a X[i][j]; opción B: * X
( i) [ j ]; Debe saber que "[ ]" precede a " * ", por lo que el operador de referencia de subíndice opera primero. Esta es una expresión incorrecta; opción C: *(X+i+j); Esta opción se
puede entender como X[i+j] que es completamente inconsistente con X[i][j];
opción D: ( (X+i)+j); se puede entender que esta opción es consistente con ;

Pregunta 2

Cuando los archivos de contexto y encabezado son normales, la salida del siguiente código es ()Insertar descripción de la imagen aquí

Ideas para resolver problemas:
esta pregunta parece relativamente simple, pero si no presta atención a un pequeño detalle, puede perderlo todo; es un problema de recursividad de función ;
la salida recursiva es "Geneius" y la salida es "suieneG ", pero aquí se necesita atención especial: la primera entrada recursiva es ++s, omitiendo "G", por lo que no se imprime G; por lo que
Insertar descripción de la imagen aquí
la salida final es: suiene

Pregunta 3

El número de veces del siguiente bucle for es ( )

for(int i = 0 ; i || i++ < 5;);

Ideas para resolver problemas:
esta pregunta examina el "o" lógico, el "o" lógico, si es verdadero, es verdadero, si ambos son falsos, es falso; simplemente ingresando al ciclo, i = 0; ingresando a la condición de juicio , i es 0. es falso, luego vea i++<5, esta expresión se calcula, si esto es verdadero, luego ingrese al ciclo, cuando i ya esté ++ en el segundo ciclo, entonces i=1, esto significa que si es cierto, no ingresará la expresión i++<5; i no cambiará, por lo que la expresión caerá en un bucle infinito;

El número de veces debe ser: ilimitado;

Pregunta 4

Insertar descripción de la imagen aquí

La opción A no considera la alineación de la memoria. Opción B, examine la comparación de tipos dobles. Debido al error en los números de punto flotante, no se puede juzgar directamente si los dos números son iguales. Por lo general, el valor absoluto de la diferencia entre los dos números se compara con si es menor. que un número muy pequeño (específicamente, usted mismo puede configurar ese número como error) para determinar la igualdad. Opción C, a es la primera dirección de la matriz, que es una constante y no se puede cambiar, por lo que A, B y C son incorrectos. Elija D.


Preguntas de programación:

primera pregunta:


Dirección: dirección del DO


Insertar descripción de la imagen aquí

Ideas para resolver problemas: clasificación + punteros dobles
Primero ordene las dos matrices y luego use dos punteros para atravesar las dos matrices. Luego cree una matriz arr que almacene elementos que se cruzan, es previsible que los elementos agregados a la matriz arr deban ser crecientes. Para garantizar la unicidad de los elementos agregados, necesitamos registrar adicionalmente la variable prve para representar el último elemento agregado a la matriz de respuestas.
Inicialmente, los dos punteros apuntan a las cabezas de las dos matrices respectivamente.
Luego, cada vez que los dos punteros apuntan a los elementos de la matriz, si no son iguales, el puntero más pequeño se mueve un bit hacia la derecha; si son iguales, se considera que no es igual a prve; de ​​lo contrario, se almacena en la matriz de intersección arr. y actualice el valor de prve, cambiando el valor de prve al valor del elemento que acaba de intersectarse; Luego, ambos punteros se mueven un bit hacia la derecha al mismo tiempo. Cuando al menos un puntero excede el rango de la matriz, el recorrido finaliza.

Código:

int cmp (const void *e1,const void*e2)
{
    
    
    return *(int*)e1-*(int*)e2;
}

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
    
    
    //首先进行排序
    qsort(nums1,nums1Size,sizeof(int),cmp );
    qsort(nums2,nums2Size,sizeof(int),cmp );
    //创造一个数组存放相交的数组
    int *arr=(int*)malloc(sizeof(int) * (nums1Size + nums2Size));
    //设置两个指针
    int sur1=0;
    int sur2=0;
    int prve=-1;//记录上一个的相交值,判断是否要存入
    int j=0;
    while(sur1<nums1Size && sur2<nums2Size)
    {
    
    
        int num1=nums1[sur1],num2=nums2[sur2];
        if(num1==num2)
        {
    
    
            if(prve!=num1)//判断出不是相同的相交值
            {
    
    
                arr[j]=num1;
                j++;
                prve=num1;
                sur1++;
                sur2++;
            }
            else
            {
    
    
                sur1++;
                sur2++;
            }
        }
        else if(num1<num2)
        {
    
    
                sur1++;
        }
        else
        {
    
    
            sur2++;
        }
    }
    *returnSize=j;//相交数组个数
    return arr;
}

Segunda pregunta:


Dirección: dirección del DO


Insertar descripción de la imagen aquí

Idea de resolución de problemas:
primero calcule la suma de todos los elementos en la matriz y regístrela como total; al atravesar i, la suma de los elementos de la izquierda es suma, luego la suma de los elementos de la derecha es total- nums[i]-suma, cuando la izquierda y la derecha Cuando la suma de los elementos es igual, hay una ecuación: 2*sum + nums[i] =total;
Insertar descripción de la imagen aquí

Código:

int pivotIndex(int* nums, int numsSize){
    
    
    int total=0;
    for(int i=0;i<numsSize;i++)
    {
    
    
        total+=nums[i];
    }
    int sum=0;
    for(int i=0;i<numsSize;i++)
    {
    
    
        if(2*sum+nums[i]==total)
        {
    
    
            return i;
        }
        sum+=nums[i];
    }
    return -1;
}

Resumir

El conocimiento es infinito y el viaje de exploración es aburrido. Déjame compartir la diversión:
Lu Xun dijo una vez: Rompe tus piernas, te dará un par de muletas y luego te dirá que ni siquiera puedes caminar sin él, así que aprende a estar agradecido.


Al final: gracias por el apoyo.

Lo que también quiero decirte es:
---------- Atrévete con todo el proceso y sé indiferente a los resultados, esto
también me digo a mí mismo.

Supongo que te gusta

Origin blog.csdn.net/m0_66780695/article/details/132542048
Recomendado
Clasificación