C语言编程题目(3)文件类型操作

题目:

0x01 比较两个文本文件并打印出它们第一个不相同的行(文件每行字符数不多于80)。

0x02 文本文件num1.txt和num2.txt中各有一组用空格分隔的整数,将num1.txt和num2.txt联合排序,并将结果保存在num3.txt中,例如图1所示。  

    

0x03 现有两个文本文件db1.txt和db2.txt。db1.txt中第一列为姓名,第二列为英语成绩;db2.txt中第一列为姓名,第二列为数学成绩。通过姓名字段将db1.txt文件关联到db2.txt文件生成db3.txt文件。db3.txt文件第一列为姓名,第二列为英语成绩,第三列为数学成绩,第四列为平均成绩,例如图2所示。

0x04 检查C源程序的圆括号和大括号是否匹配。正确的例子如:({((…)(…))}()),不正确的例子如:{(})。

代码1:

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main()
 4 {
 5     FILE *fp1,*fp2;
 6     char buf1[1024];
 7     char buf2[1024];
 8     fp1=fopen("1.txt","r+");
 9     fp2=fopen("2.txt","r+");
10     if (fp1 == NULL||fp2 ==NULL) {
11         perror("Open file error!\n");
12         exit(1);
13     }
14     while(1)
15     {
16         fgets(buf1,80,fp1); //文件1.txt 读出一行
17         fgets(buf2,80,fp2);//文件2.txt 读出一行
18         if(strcmp(buf1,buf2) != 0) //内容不一样
19         {
20             printf("1.txt:%s2.txt:%s",buf1,buf2);
21             break;
22         }
23         if(strlen(buf1) == 0 && strlen(buf2) == 0){ //文件内容完全一样,无不一样的行
24             printf("The two files is the same complete. Read  Done!\n");
25             break;
26         }
27         memset(buf1,0,sizeof(buf1));
28         memset(buf2,0,sizeof(buf2));
29     }
30     fclose(fp1);
31     fclose(fp2);
32     return 0;
33 }

运行结果1:

代码2:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void sort(int a[],int N);
 4 int main(void)
 5 {
 6     FILE *fp1 = fopen("num1.txt", "r");
 7     FILE *fp2 = fopen("num2.txt", "r");
 8     FILE *fp3 = fopen("num3.txt", "w");
 9     int index = 0,i=0;
10     int array[1024]={0};
11     if (fp1 == NULL || fp2==NULL ||fp3 == NULL) 
12     {
13         perror("Open file recfile");
14         exit(1);
15     }
16     while(!feof(fp1)){
17          fscanf(fp1,"%d",&array[index]); //每次读出一个数据,填入数组
18         index += 1;
19     }
20     while(!feof(fp2)){
21         fscanf(fp2,"%d",&array[index]); //每次读出一个数据,紧接着上次开始,填入数组
22         index += 1;
23     }
24     printf("index = %d\n",index);
25     while(i<index-1){  //打印数组所有元素
26         printf("%d\t",array[i]);
27         i+=1;
28     }
29     printf("\n");
30     sort(array,index-1); //数组排序
31     i = 0;
32     while(i<index-1){   //再次打印数组所有元素
33         printf("%d\t",array[i]);
34         i+=1;
35     }
36     i = 0;
37     while(i<index-1){  //把数组数据格式化地写入文件
38         fprintf(fp3,"%d ",array[i]);
39         i += 1;
40     }
41     fclose(fp1);
42     fclose(fp2);
43     fclose(fp3);
44     return 0;
45 }
46 
47 void sort(int a[],int N) //冒泡排序
48 {
49     int i,t,j;
50     for(i=0;i<N;i++)
51     {
52         for(j=0;j<N;j++)
53         {
54              if(a[j]>a[i]) 
55              {
56                 t=a[i];
57                 a[i]=a[j];
58                 a[j]=t;
59              }
60         }
61     }
62 }

运行结果2:

代码3:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 int main()
 5 {
 6     FILE *fp1 = fopen("db1.txt", "r");
 7     FILE *fp2 = fopen("db2.txt", "r");
 8     FILE *fp3 = fopen("db3.txt", "w");
 9     int index1=0,index2=0,i=0,j=0,k=0;
10     //name1 name2 指针数组将要分别存储文件1、2的姓名
11     //targetname 指针数组将要存储最后写入文件3的姓名
12     char *name1[10][10]={0},*name2[10][10]={0},*targetname[10][10]={0};
13     //math_grade 存储文件1的数学成绩 egls_grade 存储文件2的英语成绩
14     //target_math(egls)_grade 第二次保存选择学生的数学成绩\英语成绩
15     //avg_grade 保存选择学生的平均成绩
16     int math_grade[10]={0},egls_grade[10]={0},target_math_grade[10]={0},target_egls_grade[10]={0},avg_grade[10]={0};
17     if (fp1 == NULL || fp2==NULL ||fp3 == NULL) 
18     {
19         perror("Open file recfile");
20         exit(1);
21     }
22     while(!feof(fp1)){ //读文件1学生姓名、数学成绩
23          fscanf(fp1,"%s",name1+index1);
24          fscanf(fp1,"%d",&math_grade[index1]);
25         index1 += 1;
26     }
27     while(!feof(fp2)){ //读文件2学生姓名、英语成绩
28          fscanf(fp2,"%s",name2+index2);
29          fscanf(fp2,"%d",&egls_grade[index2]);
30         index2 += 1;
31     }
32     // //打印已保存信息
33     // while(i<index1-1){  
34     //     printf("%s math grade:%d\n",name1+i,math_grade[i]);
35     //     i += 1;
36     // }
37     // i = 0;
38     // while(i<index2-1){
39     //     printf("%s English grade:%d\n",name2+i,egls_grade[i]);
40     //     i += 1;
41     // }
42     while( i < index1 - 1) //大循环来找重复的学生
43     {
44         j = 0;
45         //printf("Outer name1='%s'\n",name1+i);
46         while( j < index2 -1)
47         {
48             //printf("----->Inner name2='%s' \t",name2+j);
49             if(strcmp(name1+i,name2+j)==0) //学生名字重复出现
50             {
51                 //printf("Match !\n");
52                 //依次填写名字、数学成绩、英语成绩、平均成绩信息到相应数组
53                 strcpy(targetname+k,name1+i); 
54                 target_math_grade[k] = math_grade[i];
55                 target_egls_grade[k] = egls_grade[j];
56                 avg_grade[k] = 0.5*(math_grade[i]+egls_grade[j]);
57                 k++;
58                 break;  //匹配成功马上结束内层循环
59             }
60             j++;
61             //printf("\n");
62         }
63         i++;
64     }
65     i = 0;
66     while(i<k){  //循环写入文件三的信息
67         fprintf(fp3, "%s %d %d %d\n",targetname+i,target_math_grade[i],target_egls_grade[i],avg_grade[i]);
68         i += 1;
69     }
70     fclose(fp1);
71     fclose(fp2);
72     fclose(fp3);
73     return 0;
74 }

运行结果3:

代码4:

#include<stdio.h>
#define True 1
#define False 0
char stack[1024]; //类似于栈 
int top=-1; //栈顶指针,初始化为-1,表示空
 
int main()
{
    char inputC;
    int success = True;
    while((inputC = getchar()) != '#') //输入字符以#结尾
    {
        if(inputC == '(' || inputC == '{')
            stack[++top] = inputC;
        else if(inputC == ')')
        {
            if(top >= 0 && stack[top] == '(') 
                top--;   //弹栈
            else{ //最内层不匹配马上结束循环,标志置位False
                success = False;
                break;
            }
        }
        else if(inputC == '}')
        {
            if(top >= 0 && stack[top] == '{')
                top--;   //弹栈
            else{  //最内层不匹配马上结束循环,标志置位False
                success = False;
                break;
            }      
        }
    }
    if(success && top == -1)
    { 
        printf("Match Success\n"); 
    }else
    {
        printf("Match Error\n");
    } 
    return 0;
}

运行结果4:

posted @ 2019-08-28 11:51  爱吃砂糖橘的白龙  阅读(1090)  评论(0编辑  收藏  举报