zoukankan      html  css  js  c++  java
  • 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!
    ");
    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!
    ");
    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
    ",index);
    25     while(i<index-1){  //打印数组所有元素
    26         printf("%d	",array[i]);
    27         i+=1;
    28     }
    29     printf("
    ");
    30     sort(array,index-1); //数组排序
    31     i = 0;
    32     while(i<index-1){   //再次打印数组所有元素
    33         printf("%d	",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
    ",name1+i,math_grade[i]);
    35     //     i += 1;
    36     // }
    37     // i = 0;
    38     // while(i<index2-1){
    39     //     printf("%s English grade:%d
    ",name2+i,egls_grade[i]);
    40     //     i += 1;
    41     // }
    42     while( i < index1 - 1) //大循环来找重复的学生
    43     {
    44         j = 0;
    45         //printf("Outer name1='%s'
    ",name1+i);
    46         while( j < index2 -1)
    47         {
    48             //printf("----->Inner name2='%s' 	",name2+j);
    49             if(strcmp(name1+i,name2+j)==0) //学生名字重复出现
    50             {
    51                 //printf("Match !
    ");
    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("
    ");
    62         }
    63         i++;
    64     }
    65     i = 0;
    66     while(i<k){  //循环写入文件三的信息
    67         fprintf(fp3, "%s %d %d %d
    ",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
    "); 
        }else
        {
            printf("Match Error
    ");
        } 
        return 0;
    }

    运行结果4:

  • 相关阅读:
    如何用微软StreamInsight 处理和分析实时数据
    网站压力测试软件WebBench以及压测Jexus
    Xamarin 开源应用汇集
    微软开源 C++ REST SDK
    Visual Studio 2010/2012 Pro Power Tools
    深入浅出事件流处理NEsper(一)
    将Windows日志转换为Syslog
    事件流处理框架NEsper for .NET
    WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
    WCF技术剖析之二十一:WCF基本异常处理模式[下篇]
  • 原文地址:https://www.cnblogs.com/Higgerw/p/11423186.html
Copyright © 2011-2022 走看看