Práctica diaria del lenguaje C (11)

Prólogo: Serie
de capacitación diaria , cada número contiene 5 preguntas de opción múltiple y 2 preguntas de programación . El blogger explicará con el mayor detalle posible para que los principiantes puedan escuchar con claridad. La serie de práctica diaria se seguirá actualizando y debe haber una actualización dentro de los tres días durante las vacaciones de verano, una vez que comiencen las clases se actualizará de acuerdo con la situación académica.

Cinco preguntas de opción múltiple:

1. Después de ejecutar el siguiente programa, el valor de salida es ()

#include<stdio.h>
int main()
{
int a = 1,b = 3,c = 5,d = 4;
int x = 0;
if (a < b)//1
if (c < d) x = 1;//2
else//3
if (a < c)//4
if (b < d) x = 2;//5
else x = 3;//6
else x = 6;//7
else x = 7;//8
printf("%d", x);
}

A、1 B、2 C、3 D、6

Análisis: preguntas propensas a errores, observe el código y descubra que la operación realizada antes del código 1 es simplemente inicializar la variable. Después del código 1, hay muchos if, else, este lugar en realidad examina la coincidencia de if y else. El problema es que la coincidencia de if y else se adhiere al principio de proximidad sin la influencia de factores externos , es decir, la distancia relativa entre if y else coincidirá entre sí. En base a esto, podemos concluir que 2 y 3 coinciden, 5 y 6 partido, 4 y 7 partido, 1 y 8 partido

Después de comprender la relación de coincidencia, podemos simplemente seguir el código: primero, se establece a <b, luego 2, c <d no se establece, luego 3 y luego 4, se establece a <c, hasta 5, b <d es establecido, Sea x = 2, el resto del resto no necesita ir, porque ya ha sido coincidente antes. Entonces la impresión final es 2, elija B

Expansión: Qué se imprimirá cuando a=4, b=3, c=5, d=4 (otros permanecen sin cambios),                                           

Análisis extendido: de acuerdo con el problema de coincidencia de if y else, cuando a <b no está establecido, ha alcanzado el código 8, sea x = 7, por lo que se imprimirá 7 al final

2. El resultado del siguiente programa es ()

#include<stdio.h>
int main()
{
	int m = 6;
	if (m++ > 6)
	printf("%d\n", m);
	else 
	printf("%d\n", --m);
}

A、4 B、5 C、 7 D、 6

Análisis: Los amigos que han hecho un buen trabajo frente a la pregunta probablemente piensen que es simple cuando ven esta pregunta. Primero defina e inicialice m = 6, luego vaya a if, publique ++, use ++ primero, por lo que 6>6 no es verdadero, vaya a else, en este momento m = 7, y finalmente pre--, primero-- y luego use, entonces m-1=6, e imprima, para que el resultado final sea 6, elija D

3. El resultado de ejecutar el siguiente programa es ()

#include<stdio.h>
int main()
{
	int k;
	int a[3][3] = { 1,2,3,4,5,6,7,8,9 };
	for (k = 0; k < 3; k++) 
	printf("%d ", a[2 - k][k]);
}

A、3 6 9 B、7 5 3 C、9 6 3 D、3 5 7

Análisis: observe el código y descubra que la parte principal es una impresión circular. Primero, se define una matriz bidimensional, se almacenan 1, 2, 3, 4, 5, 6, 7, 8, 9 en ella, y luego el contenido correspondiente en la matriz bidimensional se imprime en el bucle.

El número de ciclos es pequeño y no es necesario encontrar la regla para sustituir directamente. Cuando k = 0, imprima a [2] [0]; cuando k = 1, imprima a [1] [1]; cuando k =2, imprime un[ 0][2]. a[2][0] imprime el primer elemento de la tercera línea según el subíndice de la matriz, que es 7, a[1][1] imprime el segundo elemento de la segunda línea, 5, a[0] [ 2] Imprima el tercer elemento de la primera fila, 3. En resumen, elija B

4. Hay dos matrices de caracteres a y b, entonces la siguiente afirmación correcta es _________() [opción múltiple]
A, printf("%s %s", a,b); B, scanf("%s %s " ,a,b);

C、scanf("%s %s",&a+1,&b+1);D、printf("%s %s",&a,&b);

Análisis: las preguntas propensas a errores examinan su comprensión integral de los punteros, scanf y printf. Lo primero que debemos entender es que los nombres de las matrices a menudo representan sus direcciones iniciales. No hay ninguna situación especial en esta pregunta . Te contaré sobre una situación especial en la siguiente pregunta.

Opción A, imprime a y b en forma de cadena, sin tomar la dirección, pero el nombre de la matriz en sí es la dirección en este momento, por lo que está bien y A es correcta. Opción B, use scanf para modificar las cadenas de a y b. En este momento, el nombre de la matriz sigue siendo la dirección, no hay problema y B es correcto.

Opción C, la dirección obtenida tomando primero la dirección del nombre de la matriz es de hecho la primera dirección de la matriz, pero su peso es la matriz completa, ¿qué significa? Es decir, a + 1 es omitir un elemento, y &a+1 es omitir toda la matriz, C está fuera de los límites, por lo que es incorrecto. Opción D, tomar la dirección del nombre de la matriz, obtener la primera dirección de la matriz e imprimirla, no hay problema, D es correcta

 5. El resultado del programa que se ejecuta en la plataforma de 32 bits es ()

#include<stdio.h>
int main()
{
	int a = 0;
	char b[9] = "abc";
	int arr[3] = { 0 };
	printf("%d ", sizeof(&a));//1
	printf("%d ", sizeof(a));//2
	printf("%d ", sizeof(&b));//3
	printf("%d ", sizeof(b));//4
	printf("%d ", sizeof(&arr));//5
	printf("%d ", sizeof(arr));//6
}

A、4 4 4 4 4 4 B、4 4 4 9 4 3 C、4 4 4 9 4 12 D、4 4 4 9 4 4

Análisis: el número de bytes de la dirección en la plataforma de 32 bits es 4, por lo que cuando se encuentra una dirección, se juzga directamente como 4. código 1, dirección, letra de imprenta 4. Código 2, el tamaño de bytes de la variable entera es 4, imprima 4. código 3, dirección, letra de imprenta 4. Código 4, nombre de matriz, dirección, imprimir 4, código 5, dirección, imprimir 4, código 6, dirección, imprimir 4, entonces la respuesta es 4 4 4 4 4 4, elija A, parece razonable, pero es grande error. Cuando se usa sizeof, el nombre de la matriz no representa la dirección del primer elemento de la matriz sino la matriz completa.    En otras palabras, sizeof (matriz) calcula el número de bytes ocupados por toda la matriz, por lo que el código 4 y el código 6 deben imprime 9 y 12, entonces la respuesta es, 4, 4, 4, 9, 4, 12 elige C 

 Pregunta de programación 1:

Sitio web oficial de LeetCode: una plataforma de crecimiento tecnológico amada por los geeks globales

int diagonalSum(int** mat, int matSize, int* matColSize){
int sum=0;
int i=0;
for(i=0;i<matSize;i++)
{
   sum+=mat[i][matSize-i-1]+mat[i][i];
   //将对角线上的加起来
}
if(matSize%2!=0)
//为奇数有重复,要减去
{
  i=matSize/2;
  sum-=mat[i][i];
}
return sum;
}

Pregunta de programación 2:

Sitio web oficial de LeetCode: una plataforma de crecimiento tecnológico amada por los geeks globales

Consejos: preste atención a los detalles, evite cruzar el límite y evite ignorar circunstancias especiales. Lo segundo a tener en cuenta es que el lugar donde ya hay flores no se puede volver a plantar.

bool canPlaceFlowers(int* flowerbed, int flowerbedSize, int n) {
    int i = 0;
    int count = 0;
    if (n == 0)
        //特殊情况单独处理
        return true;
    if (flowerbedSize == 1)
        //特殊情况单独处理
    {
        if (flowerbed[0] == 0)
            return true;
        else
            return false;
    }

    for (i = 0; i < flowerbedSize; i++)
    {
        if (flowerbed[i] == 1)
            //有花了就直接跳过
        {
            continue;
        }
        if (i == 0)
            //第一个元素和最后一个元素正常处理会越界,单独考虑
        {
            if (flowerbed[1] == 0)
            {
                flowerbed[0] = 1;
                count++;
                //种上了计数器+1并修改对应位置的值
                continue;
                //种上了就直接返回
            }
            else
                continue;
            //没种上意味着不能种也返回
        }

        if (i == flowerbedSize - 1)
        {
            if (flowerbed[flowerbedSize - 2] == 0)
            {
                flowerbed[flowerbedSize - 1] = 1;
                count++;
                //种上了计数器+1并修改对应位置的值
                continue;
                //种上了就直接返回
            }
            else
                continue;
            //没种上意味着不能种也返回
        }
        if (flowerbed[i - 1] == 0 && flowerbed[i + 1] == 0)
            //通常情况分析
        {
            flowerbed[i] = 1;
            count++;
            //种上了计数器+1并修改对应位置的值
            continue;
        }
    }
    if (n <= count)
    {
        return true;
    }
    else
        return false;
}

Bueno, la práctica de hoy terminó aquí, gracias amigos por visitarnos, les deseo a todos un futuro brillante O(∩_∩)O

Supongo que te gusta

Origin blog.csdn.net/fq157856469/article/details/132512875
Recomendado
Clasificación