南师大复试编程训练十二

111.从键盘输入一个字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件"file.txt"中保存,输入的字符串以“!”结束。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char ch;
    FILE *fp;
    if((fp=fopen("file.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    while((ch=getchar())!='!')
    {
        if(ch>='a'&&ch<='z')   //小写字母转换成大写字母
            ch=ch-32;
        fputc(ch,fp);     //存入文件中
        putchar(ch);      //输出到屏幕上
    }
    putchar('\n');
    fclose(fp);
    return 0;
}

运行结果:

112.有两个磁盘文件“A”和“B”,各放一行字母,今要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“C”中去

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a[100],ch,temp;
    int i,j,k;
    FILE *fp1,*fp2,*fp3;
    if((fp1=fopen("file1.txt","r"))==NULL)   //将文件file1中的字母存放到数组a中
    {
        printf("can't open file!\n");
        exit(0);
    }
    i=0;
    while((ch=fgetc(fp1))!=EOF)   //若用!feof(fp1),后面会多复制空格,所以不能用
    {
        a[i++]=ch;
        putchar(ch);
    }
    fclose(fp1);

    if((fp2=fopen("file2.txt","r"))==NULL)  //将文件file2中的字母存放到数组a中
    {
        printf("can't open file!\n");
        exit(0);
    }
    while((ch=fgetc(fp2))!=EOF)
    {
        a[i++]=ch;
        putchar(ch);
    }
    fclose(fp2);

    a[i]='\0';
    for(j=0; j<i-1; j++)          //进行冒泡排序
        for(k=0; k<i-1-j; k++)
        {
            if(a[k]>a[k+1])
            {
                temp=a[k];
                a[k]=a[k+1];
                a[k+1]=temp;
            }
        }
    printf("\n%s",a);

    if((fp3=fopen("file3.txt","w"))==NULL)    //将数组a中的字母存到文件file3中
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(j=0; j<i; j++)
        fputc(a[j],fp3);
    fclose(fp3);

    putchar('\n');
    return 0;
}

运行结果:

113.有5个学生,每个学生有3门课程的成绩,从键盘输入学生数据(包括学号、姓名,3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。

#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student    //学生结构体
{
    long num;
    char name[15];
    float score[3];
    float avg;
} stud[N];
int main()
{
    int i,j;
    float sum;
    FILE *fp;
    for(i=0; i<N; i++)    //从键盘输入数据
    {
        sum=0;
        scanf("%ld %s ",&stud[i].num,stud[i].name);
        for(j=0; j<3; j++)
        {
            scanf("%f",&stud[i].score[j]);
            sum+=stud[i].score[j];
        }
        stud[i].avg=sum/3.0;
    }

    if((fp=fopen("stud.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N; i++)      //写入文件stud.txt中
    {
        if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);

    if((fp=fopen("stud.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("打印文件数据:\n");
    for(i=0; i<N; i++)      //从文件stud.txt中读出数据
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("%ld %s ",stud[i].num,stud[i].name);
        for(j=0; j<3; j++)
            printf("%.2f ",stud[i].score[j]);
        printf("%.2f\n",stud[i].avg);
    }
    fclose(fp);
    return 0;
}

运行结果:

114.将上例“stud”文件中的学生数据,按平均成绩进行排序处理,将已排好序的学生存入一个新文件“stud_sort”中。

#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student    //学生结构体
{
    long num;
    char name[15];
    float score[3];
    float avg;
} stud[N];
int main()
{
    int i,j;
    FILE *fp;
    struct Student temp;
    if((fp=fopen("stud.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("stud.txt文件中已有数据:\n");
    for(i=0; i<N; i++)      //从文件stud.txt中读出数据
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("%ld %s ",stud[i].num,stud[i].name);
        for(j=0; j<3; j++)
            printf("%.2f ",stud[i].score[j]);
        printf("%.2f\n",stud[i].avg);
    }
    fclose(fp);

    for(i=0; i<N-1; i++) //进行冒泡排序
        for(j=0; j<N-i-1; j++)
            if(stud[j].avg>stud[j+1].avg)
            {
                temp=stud[j];
                stud[j]=stud[j+1];
                stud[j+1]=temp;
            }

    if((fp=fopen("stud_sort.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N; i++)     //写入stud_sort.txt文件中
    {
        if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);

    if((fp=fopen("stud_sort.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("stud_sort.txt文件中的数据:\n");
    for(i=0; i<N; i++)      //从文件stud_sort.txt中读出数据
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("%ld %s ",stud[i].num,stud[i].name);
        for(j=0; j<3; j++)
            printf("%.2f ",stud[i].score[j]);
        printf("%.2f\n",stud[i].avg);
    }
    fclose(fp);
    return 0;
}

运行结果:

115.将上例已排序的学生成绩进行插入处理。插入一个学生的3门课程成绩,程序先计算新插入学生的平均成绩,然后将它按成绩高低插入,插入后建立一个新文件。

#include <stdio.h>
#include <stdlib.h>
#define N 3
struct Student    //学生结构体
{
    long num;
    char name[15];
    float score[3];
    float avg;
} stud[N+1];
int main()
{
    int i,j;
    FILE *fp;
    struct Student temp;
    float sum=0;
    scanf("%ld %s ",&stud[3].num,stud[3].name);//输入一个学生的数据
    scanf("%f %f %f",&stud[3].score[0],&stud[3].score[1],&stud[3].score[2]);
    sum=stud[3].score[0]+stud[3].score[1]+stud[3].score[2];
    stud[3].avg=sum/3.0;

    if((fp=fopen("stud_sort.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }

    for(i=0; i<N; i++)      //从文件stud_sort.txt中读出数据
        fread(&stud[i],sizeof(struct Student),1,fp);
    fclose(fp);

    for(i=0; i<N; i++)  //进行冒泡排序
        for(j=0; j<N-i; j++)
            if(stud[j].avg>stud[j+1].avg)
            {
                temp=stud[j];
                stud[j]=stud[j+1];
                stud[j+1]=temp;
            }

    if((fp=fopen("stud_sort1.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N+1; i++)     //写入stud_sort1.txt文件中
    {
        if(fwrite(&stud[i],sizeof(struct Student),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);

    if((fp=fopen("stud_sort1.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("读出stud_sort1.txt文件中的数据:\n");
    for(i=0; i<N+1; i++)     //读出stud_sort1.txt文件中的数据
    {
        fread(&stud[i],sizeof(struct Student),1,fp);
        printf("%ld %s ",stud[i].num,stud[i].name);
        for(j=0; j<3; j++)
            printf("%.2f ",stud[i].score[j]);
        printf("%.2f\n",stud[i].avg);
    }
    fclose(fp);

    return 0;
}

运行结果:

116.有一磁盘文件“Employee”,内放职工的数据。每个职工的数据包括职工姓名、职工号、性别、年龄、住址、工资、健康状况、文化程度。今要求将职工名、工资的信息单独抽出来另建一个简明的职工工资文件。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3
struct Employee    //职工结构体
{
    long num;
    char name[15];
    char sex;
    int age;
    char addr[20];
    int salary;
    char health[8];
    char clas[10];
} employee[N];

struct Emp   //简洁职工结构体
{
    char name[15];
    int salary;
} emp[N];

int main()
{
    FILE *fp;
    int i;
    printf("输入职工详细信息:\n");
    for(i=0; i<N; i++) //键盘输入职工详细信息
        scanf("%ld %s %c %d %s %d %s %s",&employee[i].num,employee[i].name,&employee[i].sex,&employee[i].age,employee[i].addr,&employee[i].salary,employee[i].health,employee[i].clas);

    if((fp=fopen("employee.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N; i++)     //写入employee.txt文件中
    {
        if(fwrite(&employee[i],sizeof(struct Employee),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);

    if((fp=fopen("employee.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N; i++)     //读出employee.txt文件中的数据,并传数据
    {
        fread(&employee[i],sizeof(struct Employee),1,fp);
        strcpy(emp[i].name,employee[i].name);
        emp[i].salary=employee[i].salary;
    }
    fclose(fp);

    if((fp=fopen("emp.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N; i++)     //将数据写入emp.txt文件中
    {
        if(fwrite(&emp[i],sizeof(struct Emp),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);

    if((fp=fopen("emp.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("打印简略职工信息:\n");
    for(i=0; i<N; i++)     //读出emp.txt文件中的数据
    {
        fread(&emp[i],sizeof(struct Emp),1,fp);
        printf("%s %d\n",emp[i].name,emp[i].salary);
    }
    fclose(fp);

    return 0;
}

运行结果:

117.从上题“职工工资文件”中删去一个职工的数据,再存回原文件。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 3

struct Emp   //简洁职工结构体
{
    char name[15];
    int salary;
} emp[N];

int main()
{
    FILE *fp;
    int i,j;
    char n[15];   //要删除的职工的名字

    printf("输入职工工资文件数据:\n");
    for(i=0; i<N; i++)   //键盘输入职工工资文件数据
        scanf("%s %d",emp[i].name,&emp[i].salary);
    if((fp=fopen("emp.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N; i++)
    {
        if(fwrite(&emp[i],sizeof(struct Emp),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);


    if((fp=fopen("emp.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("读出职工工资文件数据:\n");
    for(i=0; i<N; i++)           //读出emp.txt文件中的数据
    {
        fread(&emp[i],sizeof(struct Emp),1,fp);
        printf("%s %d\n",emp[i].name,emp[i].salary);
    }
    fclose(fp);

    printf("输入要删除的职工的名字:\n");    //进行删除
    scanf("%s",n);
    for(i=0; i<N; i++)
        if(strcmp(emp[i].name,n)==0)
            break;
    for(j=i+1; j<N; j++)
    {
        strcpy(emp[j-1].name,emp[j].name);
        emp[j-1].salary=emp[j].salary;
    }

    if((fp=fopen("emp.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    for(i=0; i<N-1; i++)     //将前N-1个数据写入emp.txt文件中
    {
        if(fwrite(&emp[i],sizeof(struct Emp),1,fp)!=1)
            printf("File write error!\n");
    }
    fclose(fp);

    if((fp=fopen("emp.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("读出删除后的职工工资文件数据:\n");
    for(i=0; i<N-1; i++)     //读出emp.txt文件中的数据
    {
        fread(&emp[i],sizeof(struct Emp),1,fp);
        printf("%s %d\n",emp[i].name,emp[i].salary);
    }
    fclose(fp);

    return 0;
}

运行结果:

118.从键盘输入若干行字符(每行长度不等),输入后把它们存储到一磁盘文件中。再从该文件中读入这些数据,将其中小写字母转换成大写字母后,在屏幕上输出。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int flag=1,i;
    char c,str[80];
    FILE *fp;
    if((fp=fopen("text.txt","w"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    while(flag==1)        //逐次输入字符串
    {
        printf("Input string:");
        gets(str);
        fprintf(fp,"%s",str);
        fprintf(fp,"\n");
        printf("Continue?");
        c=getchar();
        if(c=='N'||c=='n')
            flag=0;
        getchar();
    }
    fclose(fp);

    if((fp=fopen("text.txt","r"))==NULL)
    {
        printf("can't open file!\n");
        exit(0);
    }
    printf("读取文件中的字符串,将小写字母转换成大写字母\n");
    while(fscanf(fp,"%s",str)!=EOF)    //读取字符串
    {
        for(i=0; str[i]!='\0'; i++)
            if(str[i]>='a'&&str[i]<='z')
                str[i]-=32;
        printf("%s\n",str);
    }
    fclose(fp);

    return 0;
}

运行结果:

 

发布了462 篇原创文章 · 获赞 55 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/LY_624/article/details/105120977