Buscando ejemplos de programación en C
1. Dibuje una curva coseno
Utilice "*" en la pantalla para mostrar la curva coseno de la función coseno de 0 a 360 grados
* Análisis de problemas y diseño de algoritmos
Si utilizas arrays en tu programa, este problema es muy sencillo. Pero si se estipula que no se pueden utilizar matrices, el problema no resulta fácil.
La clave es que la curva del coseno está en el rango de 0 a 360 grados y se deben mostrar dos puntos en una línea. Para una visualización general, solo se puede generar por línea, es decir: después de generar la primera línea de información, solo puede enviar a la siguiente línea y no puede volver a la línea anterior. Para obtener los gráficos requeridos en este artículo, se deben generar dos "*" en una línea a la vez.
Para obtener dos puntos en una recta de la gráfica de la función coseno cos(x) al mismo tiempo, considere usar la simetría izquierda y derecha de cos(x). Defina la dirección de la fila de la pantalla como La coordenada m del punto y a 180 grados, luego las coordenadas del punto y 180~360 grados simétricas a él en la misma línea deben ser 62 m. En el programa, la función coseno inverso acos se utiliza para calcular la relación correspondiente de coordenadas (x, y).
El programa compilado utilizando este método es breve y conciso, y refleja ciertas habilidades.
*Descripción del programa y comentarios
#includelt;stdio.hgt;
#includelt;math.hgt;
void main( )
{
doble y
int x, m;
for(y=1; ygt; =-1; y-=0.1) /*y es la dirección de la columna, el valor es de 1 a -1, el paso es 0.1*/
{
m=acos(y)* 10; / *Calcule el radian m correspondiente a y y multiplíquelo por 10 para determinar la ampliación de los gráficos*/
for(x=1; xlt; m; x) printf(" "); /p>
printf("*"); /*Controla el * número en el lado izquierdo de la impresión*/
for(;xlt;62-m;x)printf(" ") ;
printf ("*\\n"); /*Controla la impresión del número * derecho simétrico en la misma línea*/
}
}
2. Dibuje la curva coseno y la línea recta
Muestre los gráficos superpuestos de la curva coseno y la línea recta f(x)=45*(y-1) 31 desde 0. a 360 grados en la pantalla. Entre ellos, el gráfico cos (x) se representa con "*", f (x) se representa con " " y el símbolo del gráfico f (x) se utiliza en el punto donde los dos gráficos se cruzan.
*Análisis de Problemas y Diseño de Algoritmos
Esta pregunta se puede modificar en base a la pregunta anterior. La clave para la superposición de gráficos es determinar correctamente su relación posicional después de calcular las coordenadas del punto de dirección de la columna de dos gráficos en la misma fila. Para ello, primero puede determinar el punto de intersección de los gráficos y luego controlar la impresión de dos gráficos diferentes respectivamente.
*Comentarios e instrucciones del programa
#includelt; stdio.hgt;
#includelt; )
{
doble y
int x, m, n, yy
for(yy=0; yylt; =20; yy ) /*Calcula la primera coordenada y e imprime el gráfico en una línea*/
{
y=0.1*yy /*y: línea de pantalla Coordenadas de dirección */
m=acos(1-y)*10; /*m: Coordenadas de la columna de pantalla correspondientes al punto y en la curva cos(x)*/
n= 45*(y-1) 31; /*n: Coordenada de columna correspondiente al punto y en la recta*/
for(x=0; xlt; =62; x) /*x: Pantalla dirección de la columna Coordenadas*/
if(x==mamp;amp;x==n) printf(" " /*Imprimir " " cuando la línea recta se cruza con cos(x)*/ p>
else if(x==n) printf(" "); /*Imprime gráficos de líneas rectas cuando no se cruzan*/
else if(x==m||x= =62-m) printf("*"); /*Imprimir gráficos cos(x) cuando no se cruzan*/
else printf(" ");
printf("\\n");
}
}
----------- ------- ------------------------------------------- ------- ------------
-- Autor: huang01
-- Hora de publicación: 2004-10-21 16: 59:29
--
3. Dibuja un círculo
Usa "*" para dibujar un círculo hueco en la pantalla
*Análisis de problemas y diseño de algoritmos
p>La impresión de círculos puede aprovechar la simetría izquierda-derecha de los gráficos. Según la ecuación del círculo:
R*R=X*X Y*Y
Se puede calcular la relación correspondiente entre las filas y columnas de cada punto del círculo.
*Descripción del programa y comentarios
#includelt;stdio.hgt;
#includelt;math.hgt;
void main( )
{
doble y
int x, m;
for(y=10; ygt; =-10; y--)
{
m=2.5*sqrt(100-y*y); /*Calcule la coordenada de la columna m correspondiente a la fila y, 2.5 es la relación de aspecto de la pantalla. coeficiente de ajuste Debido a que el interlineado
de la pantalla es mayor que el interlineado entre columnas, lo que se muestra sin ajuste será una elipse*/
for(x=1; xlt; 30-m ; x) printf(" "); /*Control en blanco en el lado izquierdo del gráfico*/
printf("*"); p> for(; xlt; 30 m; x ) printf(" "); /*Controla la parte hueca del gráfico*/
printf("*\\n"); lado del círculo*/
}
}
4. Gran Premio Singing Star
En el Gran Premio Singing Star, hay Son 10 jueces que puntúan a los concursantes en una escala del 1 al 100. La puntuación final del jugador es: el promedio de las 8 puntuaciones restantes después de eliminar la puntuación más alta y la puntuación más baja. Por favor escriba un programa para lograr esto.
*Análisis del Problema e Implementación del Algoritmo
El algoritmo para este problema es muy simple, pero debes prestar atención a cómo se asignan las variables con los valores máximo y mínimo en el programa.
*Descripción del programa y comentarios
#includelt; stdio.hgt
void main()
{
int integer, i, max, min, sum;
max=-32768 /* Primero supongamos que el valor máximo actual max es el valor mínimo del número entero en lenguaje C */
min=32767; /*Supongamos que el valor mínimo actual min es el valor máximo del entero en lenguaje C*/
sum=0; a 0 */
for(i=1;ilt;=10;i)
{
printf("Número de entrada d=",i) ;
scanf("d", amp; integer); /*Ingrese la puntuación de los jueces*/
sum =integer /*Calcule la puntuación total*/
if(integergt; max)max=integer; /*Filtrar la puntuación más alta por comparación*/
if(integerlt;min)min=integer /*Filtrar la puntuación más baja por comparación*/ /
}
printf("Puntuación máxima cancelada: d\\nPuntuación mínima cancelada: d\\n", max, min
printf( "Puntuación promedio: d\\n", (sum-max-min)/8 /*Resultados de salida*/
}
*Ejecutar resultados); p>
Ingrese el número1=90
Ingrese el número2=91
Ingrese el número3=93
Ingrese el número4=94
Ingrese número5=90
Ingrese el número6=99
Ingrese el número7=97
Ingrese el número8=92
Ingrese el número9=91
Número de entrada10=95
Puntuación máxima cancelada: 99
Puntuación mínima cancelada: 90
Puntuación media: 92
*Preguntas para pensar
Las condiciones de la pregunta permanecen sin cambios, pero considere juzgar las puntuaciones de los jueces al mismo tiempo, es decir, encontrar la más justa (es decir, la puntuación más cercana a la puntuación promedio) y la menos justo (es decir, el puntaje más cercano al puntaje promedio) entre los 10 jueces ¿Cómo se debe implementar el procedimiento para los jueces con la brecha más grande?
------------------------------------------- -- -------------------------------------
-- Autor: huang01
-- Fecha de lanzamiento: 2004-10-
21 16:59:55
--
5. Encuentra el número máximo
¿Cuál es el número de tres dígitos más grande entre los divisores de 555555?
*Análisis de problemas y diseño de algoritmos
Según la definición de divisor, para un número entero N, excepto 1 y él mismo, cualquier número que pueda dividir N es divisor de N. Por lo tanto, la forma más sencilla es dividir N por todos los números entre 2 y N-1 para encontrar todos los divisores de N. Esta pregunta solo requiere el número de tres dígitos más grande entre los divisores y su rango de valores se puede limitar de 100 a 999.
*Descripción del programa y comentarios
#includelt; stdio.hgt
void main()
{
long i;
int j;
printf("Ingrese el número: ");
for(j=999;jgt;=100;j--)
if(ij==0)
{
printf("El factor máximo con 3 dígitos en ld es: d, \\n", i, j
break
}
); }
*Resultado de ejecución
Entrada: 555555
Salida: El factor máximo con 3 dígitos en 555555 es: 777
6. La mantisa de un número de mayor potencia
Encuentra los tres últimos dígitos de 13 elevados a la 13ª potencia
*Análisis de problemas y diseño de algoritmos
La forma más directa para resolver este problema Sí: multiplica 13 elevado a 13 e intercepta los últimos tres dígitos.
Sin embargo, debido al rango limitado de números enteros que las computadoras pueden representar, es imposible obtener resultados correctos con este algoritmo "correcto". De hecho, la pregunta sólo requiere el valor de los últimos tres dígitos y no es necesario pedir el resultado completo de 13 elevado a la 13ª potencia.
Después de estudiar las reglas de la multiplicación, encontramos que el valor de los últimos tres dígitos del producto sólo está relacionado con los últimos tres dígitos del multiplicador y el multiplicando, y no tiene nada que ver con el alto dígitos del multiplicador y del multiplicando. Con esta regla, el procedimiento se puede simplificar enormemente.
*Descripción del programa y comentarios
#includelt; stdio.hgt
void main()
{
int i, x, y, last=1; /*La variable last almacena los últimos tres dígitos del producto parcial en el proceso de encontrar X elevado a la potencia de Y*/
printf( "Ingrese X e Y( X**Y): ");
scanf("d**d",amp;x,amp;y);
for(i =1;ilt;= y; i) /*X se multiplica Y veces*/
last=last*x1000; /*Multiplica el último por >
printf("Los últimos 3 dígitos de d **d es: d\\n", x, y, last1000); /*Imprimir resultados*/
}
*Ejecutar resultado
Entrada X e Y(X**Y): 13**13
Los últimos 3 dígitos de 13**13 son: 253
Ingrese X e Y(X**Y) : 13**20
Los últimos 3 dígitos de 13**20 son: 801
------ ------------- ------------------------------- ------------- -------------
-- Autor: huang01
-- Hora de publicación: 2004- 10-21 17:00:24
--
8. ¿Cuánto sabes sobre el plan de préstamo de libros?
Xiao Ming tiene cinco libros nuevos que quiere prestar a A y B. C. Si cada uno de los tres niños sólo puede pedir prestado un libro a la vez, ¿de cuántas maneras diferentes pueden pedirlo prestado?
*Análisis de problemas y diseño de algoritmos
Este problema es en realidad un problema de permutación, es decir, encontrar el número total de formas de ordenar 3 de 5. Primero numere los cinco libros del 1 al 5 y luego utilice el método exhaustivo. Supongamos que tres personas toman prestado uno de estos cinco libros respectivamente. Cuando los números de los libros prestados por las tres personas son todos diferentes, es un método de préstamo que satisface el significado de la pregunta.
*Descripción del programa y comentarios
void main()
{
int a, b, c, count=0; /p>
printf("Existen diferentes métodos para que XM distribuya libros a 3 lectores:\\n"
for(a=1; alt; =5; a ) /* Enumere exhaustivamente todas las situaciones en las que la primera persona pidió prestado 1 de 5 libros*/
for(b=1;blt;=5;b) /*Enumere exhaustivamente la segunda persona que pidió prestados 5 libros Todas las situaciones de uno de los libros*/
for(c=1;a!=bamp;amp;clt;=5;c) /*Cuando las dos primeras personas toman prestados libros diferentes, enumera exhaustivamente los primeros Tres la gente tomó prestados 5 libros
Todas las circunstancias de uno de los libros*/
if(c!=aamp;amp;c!=b) /*Juzga la relación entre el tercero persona y ¿Son diferentes los libros prestados por las dos primeras personas*/
printf(count8?"2d:d,d,d":"2d:d,d,d\\n", count, a,b, c);
/*Imprimir posibles métodos de préstamo*/
}
*Ejecutar resultados
Hay diferentes métodos para que XM distribuya libros a 3 lectores:
1: 1, 2, 3 2: 1, 2, 4 3: 1, 2, 5 4: 1, 3, 2 5: 1, 3 , 4
6: 1, 3, 5 7: 1, 4, 2 8: 1, 4, 3 9: 1, 4, 5 10: 1, 5, 2
11: 1, 5, 3 12: 1, 5, 4 13: 2, 1, 3 14: 2, 1, 4 15: 2, 1, 5
16: 2, 3, 1 17: 2, 3, 4 18: 2, 3, 5 19: 2, 4, 1 20: 2, 4, 3
21: 2, 4, 5 22: 2, 5, 1 23 : 2, 5, 3 24: 2, 5, 4 25: 3, 1, 2
26: 3, 1, 4 27: 3, 1, 5 28: 3, 2, 1 29: 3, 2, 4 30: 3, 2, 5
31: 3, 4, 1 32: 3, 4, 2 33: 3, 4, 5 34: 3, 5, 1 35: 3 , 5, 2
36: 3, 5, 4 37: 4, 1, 2 38: 4, 1, 3 39: 4, 1, 5
40: 4, 2, 1
41: 4, 2, 3 42: 4, 2, 5 43: 4, 3, 1 44: 4, 3, 2 45: 4, 3, 5
46: 4, 5, 1 47: 4, 5, 2 48: 4, 5, 3 49: 5, 1, 2 50: 5, 1, 3
51: 5, 1, 4 52: 5, 2, 1 53: 5, 2, 3 54: 5, 2, 4 55: 5, 3, 1
56: 5, 3, 2 57: 5 , 3, 4 58: 5, 4, 1 59: 5, 4, 2 60: 5, 4, 3
9. pantalla
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
............................. .......
*Análisis de problemas y diseño de algoritmos
Los números en el triángulo de Yang Hui son exactamente los coeficientes de la enésima expansión de potencia de (x y). Esta pregunta es una pregunta representativa en programación. Hay muchas formas de resolverla. Aquí solo se proporciona una.
A partir de las características del triángulo de Yang Hui, podemos concluir:
1) La enésima fila tiene N 1 valores (asumiendo que el comportamiento inicial es la fila 0)
2) Para el valor J de la fila N: (Ngt;=2)
Cuando J=1 o J=N 1: su valor es 1
J ! =1 y J!=N 1: su valor es la suma del valor J-1 en la fila N-1 y el valor J-ésimo en la fila N-1
Destilar estas características en matemáticas La fórmula puede expresarse como:
1 x=1 o x=N 1
c(x, y)=
c(x-1, y- 1 ) c(x-1, y) Otros
Este programa debe compilarse basándose en la expresión matemática recursiva anterior.
*Descripción del programa y comentarios
#includelt; stdio.hgt
void main()
{
int i, j, n=13;
printf("N=");
while(ngt; 12)
scanf("d ", amp; n); /*Controle la entrada de valores correctos para garantizar que los gráficos mostrados en la pantalla sean correctos*/
para (i=0; ilt; =n; i) /*Controlar la salida de N líneas* /
{
for(j-0;jlt;24-2*i;j) printf(" "); el espacio antes de la línea de salida i*/
for(j=1;jlt;i 2;j) printf("4d",c(i,j)); la iésima línea*/
printf("\\n");
}
}
void int c(int x , int y) /*Pregunte a Yang Hui El valor de la fila x y la columna y en el triángulo*/
{
int z;
if(( y==1)||(y= =x 1)) return 1; /*Si es la primera o x1ª columna de la fila x, entonces genera 1*/
z=c(x- 1, y-1) c(x -1, y); /* En caso contrario, el valor es la suma de los valores de la columna y-1 y la columna y en la fila anterior*/
devolver z;
} p>
-------------------------------- ------------- ----------------------------------
-- Autor: huang01
-- Hora de publicación: 2004-10-21 17:00:59
--
10. conversión del sistema
Convertir cualquier Convertir números enteros a binario
*Análisis de problemas y diseño de algoritmos
Hay muchas formas de convertir números enteros decimales a binarios El método de implementación. Lo que se presenta aquí utiliza la capacidad del lenguaje C para operar en bits. Para el lenguaje C, un número entero se almacena en forma binaria en la computadora, por lo que no es necesario convertir un número entero a formato binario mediante una serie de operaciones, siempre que se genere la representación binaria del número entero en la memoria.
*Descripción del programa y comentarios
#includelt; stdio.hgt;
void printb(int, int
void main); ()
{
int x; printf("Número de entrada: "
scanf("d",amp; x);
printf("número en forma decimal: d\\n", x);
printf(" es forma binaria:
printb("); x, sizeof(int)*8); /*x: entero sizeof(int): el número de bytes ocupados por el tipo int en la memoria
sizeof(int)*8: los bits correspondientes del tipo int Número*/
putchar(\'\\n\');
}
void printb(int x, int n)
{
if(ngt;0)
{
putchar(\'0\' ((unsigned)(xamp;(1lt;lt; (n-1)))gt; (n-1))); /*Emitir el enésimo bit*/
printb(x, n-1); x Los últimos n-1 dígitos*/
}
}
*Resultado de ejecución
Entrada: 8
Salida:
número en forma decimal: 8
es forma binaria: 0000000000001000
Entrada: -8
Salida: número en forma decimal: -8
Es su forma binaria: 1111111111111000
Entrada: 32767
Salida: número en forma decimal: 32767< / p>
es forma binaria: 0111111111111111
Entrada: -32768
Salida: número de forma decimal: -32768
it\ 's forma binaria: 1000000000000000
Entrada: 128
Salida: número de forma decimal: 128
es forma binaria: 0000000010000000