Completar un programa de práctica de matemáticas en la escuela primaria (programación en lenguaje C)
#include
#include
#include
# define MENU_NUM 7
#define N 3
typedef struct s1
{
char no[11] /*El número de estudiante es dado por Compuesto por 10 caracteres*/
char name[15] /*Nombre del estudiante*/
float score[N] /*Puntuación de cada curso*/; p>
suma flotante; /*puntuación total*/
promedio flotante; /*puntuación promedio*/
int orden; p> struct s1 *next; /*Puntero al nodo siguiente*/
}ESTUDIANTE; /*Definir tipo de estructura*/
ESTUDIANTE * head=NULL;
void InputData( ESTUDIANTE * ptr );
void PrintMenu( );
int Menu_Select( );
void Init( );
void create( );
void print( ) ;
void Delete( );
void append();
void computadora();
main()
{
tecla int;
while(1) {
tecla=Menu_Select();
cambiar(tecla)
{
caso 0: Init();
/ /Inicializar la lista enlazada.
Es decir, si la lista vinculada no está vacía, libere todos los datos de la lista vinculada y establezca el encabezado en vacío (NULL)
break;
caso 1: create() ;
//Crea una lista enlazada e ingresa datos
break;
caso 2: Eliminar();
//Eliminar los datos de registro de un número de estudiante específico
break;
caso 3: print();
//Imprime todos los datos en la lista vinculada p>
break;
caso 4: computadora();
// Calcula la puntuación total y la puntuación promedio de todos en la lista vinculada
break;
caso 5: append( );
//Agregar datos al final de la lista enlazada
break;
caso 6: Init();
// Liberar la lista enlazada
exit(0);
}
};
}
void PrintMenu( )
{
int i;
char * menú[]= {
"0. Lista de inicio",
"1. Ingresar a la lista",
"2. Eliminar un registro de la lista",
"3. Imprimir lista",
"4 . Calcular la puntuación",
"5. Insertar registro en la lista",
"6 Salir"
};
printf("\n\n");
for (i=0;i printf("%s\n",menu[i]) ; printf("\nIngrese su elección(0-6):"); } int Menu_Select( ) { tecla int; PrintMenu( ); scanf( "%d",&key); tecla de retorno; } void Init() //Inicializa una lista enlazada individualmente. Es decir, liberar todos los datos en la lista vinculada { ESTUDIANTE *p,*ptr;//Definir dos variables de puntero temporales p,ptr p= head;ptr=head;// Apunta dos variables temporales al puntero principal head; while(ptr!=NULL) { ptr=ptr ->next;//ptr apunta a los siguientes datos estructurales free(p);//Libera la memoria de los datos estructurales señalados por p p =ptr;//Reemplazar p Apunte a los datos señalados por ptr } head=NULL;//Apunte el encabezado a NULL } p> void create() //Crea una lista enlazada individualmente { ESTUDIANTE *pt, *pth=NULL //Define dos variables de puntero: pt apunta a; la nueva memoria de datos que se solicitará y pth apunta a los datos actuales while(1) { pt=(STUDENT *)malloc( sizeof(STUDENT));// Deje que pt apunte al espacio de memoria recién aplicado InputData(pt);// Los datos de entrada se almacenan en los datos de estructura señalados por pt. Tenga en cuenta que el siguiente de pt apunta a NULL if (strcmp(pt->no,"@")==0) { free(pt ) ;//Liberar el espacio de memoria señalado por pt break;//Salir del bucle } else if (head==NULL) { pth=pt; head=pt;//Apunte los punteros head y pth a pt } p> else { pth->next=pt; //Apunta el siguiente de pth a pt; pth=pt; Apunte pth a pt ; } }; } void print() //Imprime todos los datos de forma individual lista enlazada { int i=0; ESTUDIANTE *p;//El primer puntero p p=head;//Punto p al encabezado printf("\n"); printf("*************************** ****ESTUDIANTE* *******************************\n"); printf ("|rec|no | nombre | sc1| sc2| sc3| suma | ave |orden|\n"); printf("|---|--------- -|------ ----------|----|----|----|------|-----|--- --|\n"); //Imprimir encabezado while (p!=NULL) { printf( "|%3d|%10s |%-16s|%4.1f|%4.1f|%4.1f|%6.2f|%5.1f|%5d|\n", ++i, p->no,p- >nombre,p->puntuación[0],p->puntuación[1],p->puntuación[2], p->suma,p->promedio ,p->order); //Imprime todos los datos en la estructura señalada por p. Preste atención a las líneas divisorias entre los datos de impresión p=p->next;//Apunte p a los siguientes datos estructurales de p } printf (" *********************************FIN************** ***** ****************\n");//Imprimir el final de la tabla } void Eliminar ( ) //Eliminar un registro { ESTUDIANTE *p,*pth;//Definir dos punteros p,pth char no[11]; //Definir un número entero no( Se utiliza para almacenar el número de estudiante ingresado) printf("intput delete no\n"); scanf("%s",no); //Utilice la declaración de entrada para ingresar uno. Almacene el número de estudiante en no p=head;pth=head;//Apunte tanto p como pth al puntero principal if ( strcmp(p->no,no)= =0) //Es decir, si es necesario eliminar los datos señalados por el puntero principal { head=head- >next;//Apunta el puntero principal al siguiente dato de head; free(p);//Libera los datos señalados por p } else { p=p->next;//Apunta p al siguiente dato de p while ( p!=NULL) { if (strcmp( p->no,no)==0) //Se encontraron los datos a eliminar { pth->next=p->next; //Cambia el siguiente de pth next que apunta a p free(p);//Libera p break;/ /Salir del bucle } else { pth=pth->next;//Apunta pth al siguiente de pth o apuntar pth a p p=p->next;// Señalar p al siguiente de p } } } } void append() { ESTUDIANTE *p,*pth;//Defina dos variables de puntero p, pth pth=head;//Apunta pth a la cabeza p> while ( pth->next!=NULL) { pth=pth->next;//ptr apunta al siguiente de ptr } p=(STUDENT *)malloc(sizeof(STUDENT));//Apunta p a el espacio de memoria recién aplicado InputData(p);p->next= NULL;//Los datos se almacenan en el espacio de memoria señalado por p. Configure el siguiente de p en NULL pth->next=p;//Apunta el siguiente de ptr a p } void InputData( STUDENT *ptr )
p>{ int i;
printf("ingrese no:");
scanf("%s",ptr->no);
si (strcmp(ptr->no,"@")==0 ) return;
printf("ingrese nombre:");
scanf("%s",ptr- >nombre);
for(i=0;i<3;i++)
{
printf("shuru chengji\n"); p>
scanf("%f",&ptr->puntuación[i]);
}
ptr->sum=0;
ptr->promedio=0;
ptr->pedido=0;
ptr->siguiente=NULL;
}
void computer()
{
ESTUDIANTE *p;
p=cabeza;
for(;p;p=p- >siguiente)
{
p->sum=p->puntuación[0]+p->puntuación[1]+p->puntuación[2];
p->promedio=(p->puntuación[0]+p->puntuación[1]+p->puntuación[2])/3;
}
}