Tabla de contenido
opción multiple
(1)
1. Declare las siguientes variables, luego el tipo de resultado de la expresión: ch/i + (f*d – i) es ( )
char ch;
int i;
float f;
double d;
A: char B: int C: float D: double
答案:D
Analizar gramaticalmente:
Los rangos de tipos de datos básicos de menor a mayor son los siguientes: char int long float double se opera de menor a mayor, y el tipo de expresión se promoverá o convertirá automáticamente al tipo de nivel más alto que participa en la evaluación de la expresión
(2)
2. La afirmación correcta sobre el código es ( )
#include <stdio.h>
int main()
{
int x = -1;
unsigned int y = 2;
if (x > y)
{
printf("x is greater");
}
else
{
printf("y is greater");
}
return 0;
}
A: x es mayor B: y es mayor C: implementación dependiente D: aleatoria
Respuesta: A
Analizar gramaticalmente:
x es un número con signo -1, y todo es 1 en la memoria. Cuando una x con signo se compara con un número sin signo, x se convierte implícitamente y se trata como un número sin signo, que es un número grande. En este momento, elige una
(3)
3. Sabiendo que existen los siguientes tipos de variables, las siguientes expresiones que no se ajustan a la sintaxis del lenguaje C son ( )
int k, a, b;
unsigned int w = 5;
double x = 1.42;
A: x%3 B: w+=-20 C: k=(a=200,b=300) D: a+=a-=a=9
答案:A
Analizar gramaticalmente:
En la opción A, ambos lados de la operación de resto deben ser números enteros
(4)
4. La salida de la siguiente función es ( )
void func()
{
int k = 1^(1 << 31 >> 31);
printf("%d\n", k);
}
A: 0 B: -1 C: -2 D: 1
Respuesta: C
Analizar gramaticalmente:
(1 << 31 ); Desplace 31 bits a la izquierda y complete 0 a la derecha para obtener 0x80000000, es decir, el bit de signo es 1 y los demás son 0, es decir -2147483648
int k = 1^(1 << 31 >> 31); Tenga en cuenta que cuando se desplaza a la derecha, el bit de signo permanece en 1 y se llena con 1 después de desplazarse a la derecha. El resultado es 0xFFFFFFFF, que es -1, 0x00000001 ^0xFFFFFFFF, que es 0xFFFFFFFE (-2)
(5)
5. La salida del siguiente código es ( )
#include <stdio.h>
int main()
{
int i = 1;
sizeof(i++);
printf("%d\n", i);
return 0;
}
A: 1 B: 4 C: 2 D: 8
Respuesta: A
Analizar gramaticalmente:
La operación de expresiones generales se ejecuta en tiempo de ejecución, y sizeof es un operador que se ejecuta en la etapa de compilación. No se ejecuta ninguna operación, solo se adivina el tipo del resultado de la expresión para encontrar su tamaño, así que antes y después de i El valor de no cambia.
preguntas de programación
Pregunta uno
describir
Dada una matriz binaria nums
, calcule el mayor 1
número continuo en ella
ejemplo
pista
Analizar gramaticalmente:
La idea de esta pregunta es relativamente simple. Cuente el número de 1 consecutivos. Cuando se encuentra 0, significa interrupción continua. Si el conteo actual es mayor que el anterior más grande, reemplácelo y luego continúe contando desde el siguiente posición.
Código
int findMaxConsecutiveOnes(int* nums, int numsSize)
{
int max_count = 0, cur_size = 0;;
for (int i = 0; i < numsSize; i++)
{
if (nums[i] == 1)
{
cur_size++;
}
else
{
max_count = max_count > cur_size ? max_count : cur_size;
cur_size = 0;
}
}
max_count = max_count > cur_size ? max_count : cur_size;
return max_count;
}
pregunta dos
describir
Los números perfectos, también conocidos como números perfectos o números completos, son algunos números naturales especiales.
La suma (es decir, función factorial) de todos sus factores verdaderos (es decir, divisores distintos de sí mismo) es exactamente igual a sí mismo.
Por ejemplo: 28, tiene divisores 1, 2, 4, 7, 14, 28, excepto él mismo 28, los 5 números restantes se suman, 1+2+4+7+14=28.
Ingrese n, genere la cantidad de números perfectos dentro de n (incluido n).
Rango de datos: 1≤n≤5×105
Introduzca una descripción:
introduce un número m
Descripción de salida:
Muestra el número de números perfectos que no excedan n
ejemplo
Analizar gramaticalmente:
La clave de esta pregunta radica en el juicio de los números perfectos: un número perfecto se refiere a la suma de todos los divisores de un número igual a sí mismo. Solo necesitamos sumar los divisores de este número a partir de 1.
El divisor es divisible por un número, y una de las ideas simplificadas aquí es que el número puede ser divisible por un divisor, entonces el divisor y el resultado son ambos divisores, de esta manera, solo necesitas calcular desde 1 hasta el cuadrado. raíz.
Por ejemplo: el número 8 puede ser divisible por 2, y el resultado es 4, entonces el divisor 2 y el resultado 4 son ambos aproximaciones, y estos dos solo necesitan un cálculo y juicio.
Cabe señalar que 4, 9, 25... En este caso, el divisor y el resultado son el mismo, basta con sumar el divisor o el resultado una sola vez.
Código
#include <stdio.h>
#include <math.h>
int is_perfect_num(int num) {
int sum = 1;
for (int i = 2; i <= sqrt(num); i++)
{
if (num % i ==0)
{//判断是否能够整除i,能整除则i和结果都是约数
sum += i; //与除数相加
if (i != sqrt(num))//防止除数和结果相同的情况下重复相加
sum += num / i; //与相除结果相加
}
}
if(sum == num)
return 1;
return 0;
}
int main()
{
int n;
while (~scanf("%d", &n))
{
int count = 0;
for (int i = 2; i <= n;i++)
{ //对n以内的数字都进行判断是否是完全数,注意1不参与判断
if (is_perfect_num(i)) count++;
}
printf("%d\n", count);
}
return 0;
}
Resumir
Este es el final de la explicación de la práctica de hoy. Bienvenido a dejar un mensaje, intercambiar comentarios y hacer correcciones. Si el artículo es útil para usted o cree que la escritura del autor no es mala, puede hacer clic para seguir, dar me gusta y marcar apoyar.