Tan Haoqiang (tercera edición) Respuestas después de clase en lenguaje C al Capítulo 13

Capítulo 13

13.4 Ingrese una cadena desde el teclado, convierta todas las letras minúsculas en letras mayúsculas y luego envíelo a un archivo de disco "de prueba" para su almacenamiento. La cadena de entrada termina con "!"

Solución: #include

main()

{

Archivo *fp><; p>Char str[100];

Int I=0

If((fp=fopen(“prueba”,”w”)==NULL)

{printf(“No se puede abrir el archivo\n”);

exit(0);

}

printf(“Ingrese una cadena :\n”);

obtiene(cadena);

mientras(cadena[i]!='!')

{si (cadena[i] ]>='a'&&str[i]<='z')

str[i]=str[I-32]

fputc(str[i],fp

I++;

}

fclose(fp);

fp=fopen("prueba","r")

fgets(str,strlen(str)+1,fp

printf(“%s\n”,

fclose(); fp);

}

13.5 Hay dos archivos de disco "A" y "B", cada uno de los cuales almacena una línea de letras, y es necesario fusionar la información de estos dos. archivos (según las letras dispuestas en orden), salida a un nuevo archivo "C".

Solución: #include

main()

{

ARCHIVO *fp><; p>Int I,j,n,i1;

Char c[100],t ,ch

If((fp=fopen("a1","r") )==NULL)

{printf(“no se puede abrir el archivo\n”);

exit(0);

printf(“\n archivo A:\n”);

for(I=0;(ch=fgetc(fp)!=EOF;I++)

{ c[i]=ch;

putchar(c[i]);

}

fclose(fp); =I;

if((fp=fopen(“b1”,”r”))==NULL)

{printf(“\n no se puede abrir el archivo”)

salir(0);

}

printf(“\n archivo B:\n”); I=i1;(ch=fgenc(fp))!=EOF;I++)

{c[i]=ch

putchar(c[i]); p>

p>

}

fclose(fp);

n=I

for(i=0;I

n=I; p>

for(j=I+1;j

if(c[i]>c[j ])

{t=c[ i]

c[i]=c[j]

c[j]=t

p>

printf(“\n archivo C:\ n");

fp=fopen("c1","w");

for(I=0 ;I

{putc(c[i],fp

putchar(c[i]); p>

fclose(fp);

}

Hay 5 estudiantes en 13.6, cada estudiante tiene puntajes en 3 cursos Ingrese los datos anteriores (incluido el número de estudiante y el nombre). y puntajes en tres cursos) desde el teclado para calcular el puntaje promedio. Almacene los datos originales y el puntaje promedio calculado en el archivo de disco.

Solución:

#include

estructura estudiante

{char num[10]

;

nombre de char[8];

int puntuación[3];

float ave

}stu[5]; p>main()

{int I,j,sum;

ARCHIVO *fp

For(I=0;I<5;I++)

{printf(“\n puntuación de entrada del estudiante%d:\n”,I+1

printf(“NO.:”); p> scanf(“%s”,stu[i].num);

printf(“nombre:”

scanf(“%s”,stu[i]); .nombre);

suma=0

for(j=0;j<3;j++)

{printf("puntuación %d:" j+1);

scanf(“%d”,&stu[i].puntuación[j]);

suma+=stu[i].puntuación[j]; /p>

}

stu[i].ave=sum/3.0

}

fp=fopen("stud","w"

for(I=0;I<5;I++)

if(fwrite(&stu[i],sizeof(struct Student),1,fp)!=1); )

printf(“Error de escritura de archivo\n”);

fclose(fp);

fp=fopen(“stud”,”r”)

for(I=0;I<5;I++)

{fread(&stu[i],sizeof(struct estudiante),1,fp>;

printf(“%s,%s,%d,%d,%d,%6.2f\n”,stu[i].num,stu[i].nombre,stu[i].puntuación[0 ], stu[i].score[1], stu[i].score[2] ,stu[i].ave

}

}

);

13.7 Ordene los datos de los estudiantes en el archivo de estudios de la pregunta anterior de acuerdo con el puntaje promedio y almacene los datos de los estudiantes ordenados en un nuevo archivo stu-sort.

Solución:

#include

#define N 10

estructura estudiante

{char num[10];

char nombre[8];

int puntuación[3];

float ave; }st[N],temp;

principal()

{

ARCHIVO *fp

Int I,j,n;

If((fp=fopen("stud","r"))==NULL)

{printf("no se puede abrir el archivo"); >

salir(0);

}

printf(“\n archivo 'stud':”); fread(&st[i],sizef(struct estudiante),1,fp)!=0;I++)

{printf(“\n%8s%8s”,st[i].num,, st[i].nombre);

for(j=0;j<3;j++)

printf(“%8d”,st[i].puntuación[j]

printf(“%10.f”,st[i].ave

fclose(fp); /p>

for(I=0;I

for(j=I+1;j

if(st[ i].ave

{temp=st[i]

st[i]=st[j]; > st[j]=temp;

}

printf(“\nnow:”);

fp=fopen(“stu-sort”,” w");

for(I=0;I

{fwrite(&st[i],sizeof(struct Student),1,fp);

printf(“\n%8s%8s”,st[i].num,st[i].nombre

for(j=0;j<3;j++); )

printf(“%8d”,st[i].score[j]);

printf(“%10.2f”,st[i].ave); /p>

fclose(fp);

}

13.8 Inserte los archivos de puntuación de los estudiantes ordenados en la pregunta anterior. Insertar las calificaciones de un estudiante en tres cursos. El programa primero calcula la calificación promedio del estudiante recién insertado, luego las inserta en orden de calificación promedio y crea un nuevo archivo después de la inserción.

Solución: #include

estructura estudiante

{char num[10]

char nombre[8; ];

int puntuación[3];

ave flotante

}st[10],s

main();

{ARCHIVO *fp, * fp1;

int I,j,t,n;

printf(“\n NO.:”); /p>

scanf(“%s”,s.num);

printf(“nombre:”

scanf(“%s”,s.nombre); );

printf(“puntuación1,puntuación2,puntuación3:”);

scanf(“%d,%d,%d”,&s. puntuación[0], &s. puntuación[1], &s. puntuación[2]);

s.ave=(s.puntuación[0]+s.puntuación[1]+s.puntuación[2])/3.0; /p>

if((fp=fopen(“stu_sort”,”r”))==NULL)

{printf(“no se puede abrir el archivo.”); p>salir(0);

}

printf(“datos originales:\n”);

for(I=0;fread(&st[ i],sizeof(struct Student),1,fp)!=0;I++)

{printf(“\n%8s%8s”,st[i].num,st[i]. nombre);

for(j=0;j<3;j++)

printf(“%8d”,st[i].score[j]); >

printf(“%10.2f”,st[i].ave

}

n=I

for(t=; 0;st[t].ave>s.ave&&t

printf(“\nnow:\n”);

fp1=fopen(“sort1. dat”,”w”);

for(I=p;j

{fwrite(&st[i],sizeof(estudiante estudiante),1, fp1);

print(“\n%8s%8s”,st[i],num,st[i].nombre

for(j=0;j); <3;j++)

ptintf(“%8d”,st[i].score[j]);

printf(“%10.2f”,st[i]. ave);

}

fwrite(&s,sizeof(struct estudiante),1,fp1

printf(“\n%8s%7s%); 7d%7d%7d%10.2f”,s.num,s.nombre,s.score[0],s.score[1],s.score[2],s.ave

for(I=t;I

{fwrite(&st[i],sizeof(struct estudiante),1,fp1

);

printf(“\n %8s%8s”,st[i].num,st[i].nombre

for(j=0;j<3;j++)

<); p>printf(“%8d”,st[i].score[j]);

printf(“10.2f”,st[i].ave

fclose); (fp);

fclose(fp1);

}

13.9 El resultado de la pregunta anterior todavía se almacena en el archivo stu_sort original sin crear uno nuevo. archivo.

Solución: #include

estructura estudiante

{char num[10]

char nombre[8; ];

int puntuación[3];

ave flotante

}st[10],s

main();

{ARCHIVO *fp, *fp1;

int I,j,t,n;

printf(“\nNO.:”); p>

p>

scanf(“%s',s.num);

printf(“nombre:”

scanf(“%s'); ,s.nombre)

printf(“puntuación1,puntuación2,puntuación3:”

scanf(“%d%d%d”,&s.puntuación[0]+ &s.puntuación[1 ]+&s.puntuación[1], &s.puntuación[2]);

s.ave=( s.puntuación[0]+ s.puntuación[1]+ s. puntuación[2]) /3.0;

if((fp=fopen("stu=sort","r"))==NULL)

{printf("no se puede abre el archivo." );

exit(0);

}

printf(“datos originales:\n”);

for(I =0;fread(&st[i],sizeof(struct Student),1,fp)!=0;I++)

{printf(“\n%8s%8s”, st[i]. num,st[i].nombre);

for(j=0;j<3;j++)

printf(“%8d”,st[ i].puntuación[ j]);

printf(“%10.2f”,st[i].ave

}

fclose(fp);

n=I

for(t=0;st[t].ave>s.ave+&&tptintf(“\ nnow:\n”);

fp=fopen(“stu_sort”,”w”);

for(I=0;I

{fwrite(&st[i],sizeof(struct Student),1,fp

printf(“\n%9s%8s%8d%8d%8d%); 10.2f”,s .num,s.nombre,s.score[0],s.score[1] s.score[2] s.ave

for(I=t;I);

{fwrit(&sr[i],sizeof(struct srudent),1,fp

printf(“\n %8s%8s”,st); [i].num ,st[i].nombre);

for(j=0;j<3;j++)

printf(“%8d”,st[i] ].puntuación[j ]);

printf(“%10.2f”,st[i].ave

}

fclose(fp) ;

}

13.10 Hay un archivo de disco de empleado, que almacena los datos de los empleados. Los datos de cada empleado incluyen: nombre del empleado, número de empleado, sexo, edad, dirección, salario, estado de salud y nivel educativo. Es necesario extraer el nombre del empleado y la información salarial por separado para crear un archivo salarial conciso.

Solución: #include

estructura empleado

{char num[6]

char nombre[10; ];

char sex[2];

int edad;

char addr[20]; p>

int edad; p>

char salud[8];

char clase[10];

}en[10]; p>struct emp

{char nombre[10];

int salario

}em-case[10]; main()

{FILE *fp1, *fp2;

int I,j

if ((fp1=fopen(“empleado”,”r; ”))==NULL)

{printf(“no se puede abrir el archivo.”);

exit(0

}

printf(“\ n NO. nombre sexo edad dirección salario clase de salud\n”);

for(I=0;fread(&em[i],sizeof(struct emploee),1 ,fp1)!=p;I++ )

{printf("\n%4s%8s%4s%6s%10s%6s%10s%8s",em[i].num,em[i ].nombre,em[i].sexo, em[i].edad, em[i].addr, em[i].salario, em[i].salud, em[i].clase

strcpy(em_case[ i].nombre, em[i].nombre);

em_case[i].salary=en[i].salario;

printf ("\n\n************************************ *****");

if((fp2=fopen("emp_salary","wb"))==NULL)

{printf("no se puede abrir el archivo.");

exit(0);}

for(j=0;j

{if(fwrite(&en_case [j],sizeof(struct emp ),1,fp2)!=1)

printf(“¡error!”);

printf(“\n %12s%10d”); ,em_case[j].nombre, em_case[j].salario

}

printf(“\n***************); ******** **********************");

fclose(fp1);

fclose(fp2);

fclose(fp1);

fclose(fp2);

p>

}

13.11 Elimine los datos de un empleado del "Archivo de salarios de los empleados" en la pregunta anterior y luego guárdelos en el archivo original.

Solución: #incude

#incude

estructura empleado

{nombre de char[ 10];

int salario;

}emp[20];

main()

{FILE *fp; p> p>

int I,j,n,flag;

nombre de char[10];

int salario; =fopen ("emp_salary","rb"))==NULL)

{printf("no se puede abrir el archivo.");

exit(0); >

}

printf(“\n datos originales:”);

for(I=0;fead(&emp[i],sizeof(struct emploee),1 ,fp )!=0;I++)

printf(“\n %8s %7d”,emp[i].nombre,emp[i].salario

fclose); (fp );

n=I;

printf(“\n nombre de entrada eliminado:”);

for(bandera=1,I=0;bandera&&I

{if(strcmp(nombre,emp[i].nombre)==0)

{for(j=I;j

{strcmp(nombre,emp[i].nombre)==0

{for (j=I;j

{strcpy(emp[j].nombre,emp[j+1].nombre

emp); [j ].salario=emp[j+1].salario;

}

bandera=0

}

}

p>

if(!flag)

n=n-1

else

printf(“\n Ahora, el contenido del archivo: \n");

fp=fopen("emp-dalary","wb");

for(I=p;I

fwrite(&emp[i],sizeof(struct emploee),1,fp

fclose(fp);

fp=fopen(“emp_salary); ”,”r ");

for(I=0;fread(&emp[i],sezeof(struct emploee),1,fp)!=0;I++)

printf("\ n%8s%7d”,emp[i].nombre,emp[i].salario);

fclose(fp);

}

13.12 Ingrese varias líneas de caracteres (la longitud de cada línea varía) desde el teclado y guárdelas en un archivo de disco después de ingresarlas.

Luego lea los datos del archivo, convierta las letras minúsculas en letras mayúsculas y muéstrelas en la pantalla.

Solución: #include

main()

{int I,flag

char str[80; ],c;

ARCHIVO *fp;

Fp=fopen(“texto”,”w”);

Mientras(bandera==1)

{printf(“\n Cadena de entrada:\n”

ges(str); fprintf(fp,"%s",str);

printf("\n¿Continuar?"

c=getchar();

if( (c=='N')||(c=='n'))

flag=0

getchar()

}

fcolse()fp;

fp=fopen(“texto”,”r”);

mientras(fscanf(fp”,%s”,str) )!=EOF)

{for(I=0;str[i]!='\0';I++)

if((str[i]>='a ')&& (str[i]<='z'))

str[i]-=32;

printf("\n%s\n",str) ;

}

fclose(fp);

body>