• c 实现对文件操作:冒泡排序


    分别实现选择排序(在下下一篇文章)和冒泡排序对以下文件进行排序。
    支持如下形式调用:BubbleSort.exe input.txt output.txt 0
                                        BubbleSort.exe input.txt output.txt 1
                                         (0:从小到大,1:从大到小)。
    注意中文处理(若无法处理可以只对学号排序,需要在文档中说明)

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 
      5 #define N 200
      6 struct student{
      7     char num[200];
      8     char name[200];
      9     float ave;
     10 }st[N],temp1;
     11 
     12 struct Newstudent{
     13     char num[200];
     14     char name[200];
     15     char row[200];
     16     float ave;
     17 }st_New[N],temp2;
     18 
     19 //void SelectionSort();
     20 
     21 
     22 void main(int argc,char **argv){
     23    FILE *fp1,*fp2;
     24    int i,j,sum,min,k;
     25    char str[200];
     26    char *input,*output,flag;
     27    char tempOne[200],tempTwo[200],tempThree[200],tempFour[200];
     28    //char *str[N];
     29 
     30    if(argc<4){
     31       input="input.txt";
     32       output="output.txt";
     33       flag='0';
     34     }
     35    else{
     36       input=*(argv+1);
     37       output=*(argv+2);
     38       flag=**(argv+3);
     39    }
     40 
     41    /*读文件*/
     42    if((fp1=fopen("input.txt","r"))==NULL){
     43        printf("can not open.");
     44        exit(0);
     45    }
     46    sum=0;
     47    printf("the File '算法设计点名册' is :\n");
     48    
     49    for(i=0;(fgets(str,200,fp1))!= NULL;i++,sum++) {
     50        strcpy(st[i].num,strtok(str,","));
     51        strcpy(st[i].name,strtok(NULL,","));
     52        //printf("%s",st[i].num);
     53        //printf("%s",st[i].name);
     54    }
     55    printf("%d",flag);
     56    printf("如果希望从小到大排列请输入0,如果希望从大到小排列请输入1:\n");
     57    scanf("%d",&flag);
     58   /*选择排序*/
     59   // for(i=0;i<193;i++){
     60         //min=i;
     61         //for(j=i+1;j<194;j++)
     62         //    if(flag){
     63         //      if(strcmp(st[j].num,st[min].num)>0)
     64         //         min=j;
     65         //    }
     66         //    else{
     67         //      if(strcmp(st[j].num,st[min].num)<0)
     68         //         min=j;
     69         //    }
     70         //strcpy(tempOne,st[i].num);
     71         //strcpy(st[i].num,st[min].num);
     72         //strcpy(st[min].num,tempOne);//互换值
     73         //
     74         //strcpy(tempTwo,st[i].name);
     75         //strcpy(st[i].name,st[min].name);
     76         //strcpy(st[min].name,tempTwo);//互换值
     77   // }
     78    /*冒泡排序*/
     79    for(i=0;i<193;i++)
     80     {
     81         for(j=0;j<193-i;j++){
     82             if(flag){
     83               if(strcmp(st[j].num,st[j+1].num)<0){
     84                 strcpy(tempThree,st[j].name);
     85                 strcpy(st[j].name,st[j+1].name);
     86                 strcpy(st[j+1].name,tempThree);
     87 
     88                 strcpy(tempFour,st[j].num);
     89                 strcpy(st[j].num,st[j+1].num);
     90                 strcpy(st[j+1].num,tempFour);    
     91               }
     92             }
     93             else{
     94                 if(strcmp(st[j].num,st[j+1].num)>0){
     95                     strcpy(tempThree,st[j].name);
     96                     strcpy(st[j].name,st[j+1].name);
     97                     strcpy(st[j+1].name,tempThree);
     98 
     99                     strcpy(tempFour,st[j].num);
    100                     strcpy(st[j].num,st[j+1].num);
    101                     strcpy(st[j+1].num,tempFour);    
    102                }
    103             }
    104         }
    105     }
    106    /*写入新文件*/
    107    if((fp2=fopen("output.txt","wb"))==NULL){
    108        printf("can not open.");
    109        exit(0);
    110    }
    111    for(j=0;j<sum;j++){
    112        strcpy(st_New[j].num,strcat(st[j].num,","));//得到学号和逗号
    113        //printf("%s",st_New[j].num);
    114        strcpy(st_New[j].name,strcat(st_New[j].num,st[j].name));//合并num和学生姓名
    115        printf("%s",st_New[j].name);//输出排序后的点名册
    116        fputs(st_New[j].name,fp2);
    117    }
    118 
    119    /*关闭所有文件*/
    120    fclose(fp1);
    121    fclose(fp2);
    122    /*NOUSe*/
    123    scanf("%d",i);
    124 }
  • 相关阅读:
    【C语言入门教程】2.3 整型数据
    【C语言入门教程】2.1 数据类型(5种基本数据类型),聚合类型与修饰符
    【C语言入门教程】2.2 常量 与 变量
    【C语言入门教程】1.3 C语言“32个”关键字
    【C语言入门教程】1.2 函数库 和 链接
    【C语言入门教程】1.1 基本程序结构
    【C语言入门教程】目录/大纲
    【C语言】 Linux下编译提示pow未定义引用
    Linux C 收藏
    Ubuntu 14 常用“快捷键”,Ctrl + Alt + F1 进入终端,按 Ctrl + Alt + F7 回到界面
  • 原文地址:https://www.cnblogs.com/daomul/p/2726900.html
Copyright © 2020-2023  润新知