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++) 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+&&t 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 } } 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);