C语言编程大作业.pdf
一、整数操作(含有 50 个正整数(=3 位)的文件:int_input,输入 1,2,3,4 分别选择不同的操作)1.排序(结果存到文件 int_output1)2.求中间两个数的最大公因数和最小公倍数3.统计素数的个数4.统计同构数的个数(同构数是指:它出现在它的平方数的右边),如 5 是其平方数25 的尾数,76 是其平方数 5776 的尾部二、字符串操作(含有 50 个字符串的文件:string_input,输入 1,2,3,4 分别选择不同的操作)1.排序(结果存到文件 string_output1)2.实现每个字符串的逆置,前25 个用递归,后25 个用非递归(结果存到文件string_output2)3.统计单词”hello”出现的次数。如某一行:ghhello32he,该行次数为 14.在最小串中出现,而未在最大串中出现的字符形成一个新的串放在 u 中,u 中字符按原字符串中字符顺序排列,不去掉重复字符。例如:当 min=,max=2467时,u 中的字符串为1135。源代码:#include#include#include#include#define N 50int ReadFile_Num(int*);void WriteFile_Num(char*FileName,int*,int);void sort_Num(int*,int);int CommonDivisor(int,int);int CommonMultiple(int,int);int PrimeNumber(int*,int);int TongGouShu(int*,int);int ReadFile_Str(char*,char*str);void WriteFile_Str(char*,char*str,int,char*mode);void sort_Str(char*str,int);void reverse(char*str,int);void reverse_recursion(char*str);int SearchHello(char*str,int);void FindMaxMin(char*str,int,char*r);void ProcessString(char*r);int main(int argc,char*argv)char choice;if(2=argc)if(strcmp(argv1,Handle int)=0)int Data_NumN;int len;printf(*整数操作*nn);len=ReadFile_Num(Data_Num);printf(请选择要进行的操作:);printf(n1、排序n);利用 main 函数的参数选择是对整数进行操作还是对字符串进行操作:Handle int -一、整数操作Handle string -二、字符串操作printf(2、求中间两个数的最大公约数和最小公倍数n);printf(3、统计素数n);printf(4、统计同构数n);fflush(NULL);scanf(%c,&choice);switch(choice)case 1:sort_Num(Data_Num,len);WriteFile_Num(int_output1.txt,Data_Num,len);printf(排序完成!n 排序结果已存至int_output1.txt 文件中.n);break;case 2:int m1,m2;m1=Data_Num(len+1)/2;m2=Data_Num(len+1)/2+1;printf(中间两数为:%d,%dn,m1,m2);printf(最大公约数为:%dn,CommonDivisor(m1,m2);printf(最小公倍数为:%dn,CommonMultiple(m1,m2);break;case 3:printf(数据中共有%d 个素数n,PrimeNumber(Data_Num,len);break;case 4:printf(数据文件中共有%d个同构数n,TongGouShu(Data_Num,len);break;default:printf(输入错误n);else if(strcmp(argv1,Handle string)=0)char*Data_StringN;int i;int n;char choice;for(i=0;iN;i+)Data_Stringi=(char*)malloc(sizeof(char)*256);printf(*字符串操作*nn);printf(1、排序n);printf(2、字符串逆置n);printf(3、统计 hello 出现的次数n);printf(4、去除最小串中在最大串里出现过的字符n);n=ReadFile_Str(string_input.txt,Data_String);scanf(%c,&choice);switch(choice)case 1:sort_Str(Data_String,n);WriteFile_Str(string_output1.txt,Data_String,n,w);break;case 2:char*p;int i;reverse(Data_String,n/2);for(i=0;in/2;i+)p=Data_Stringn/2+i;reverse_recursion(p);break;case 3:printf(hello出现%d 次n,SearchHello(Data_String,n);break;case 4:char*r2;FindMaxMin(Data_String,n,r);printf(最小串:%sn,r0);printf(最大串:%s,r1);ProcessString(r);puts(r0);elseprintf(指令格式错误n);exit(0);elseprintf(指令格式错误n);exit(0);return 0;int ReadFile_Num(int*Data_Num)int i=0;FILE*fp=NULL;if(fp=fopen(int_input.txt,r)=NULL)printf(数据文件不存在n,N);exit(0);while(!feof(fp)fscanf(fp,%d,&Data_Numi+);fclose(fp);printf(数据文件读取完成n);return i-1;void WriteFile_Num(char*FileName,int*Data_Num,int n)FILE*fp;int i;fp=fopen(FileName,w);for(i=0;in;i+)fprintf(fp,%dn,Data_Numi);fclose(fp);void sort_Num(int*Data_Num,int len)int i,j;int t;for(i=1;it)Data_Numj=Data_Numj-1;j-;Data_Numj=t;int CommonDivisor(int a,int b)int t;while(b!=0)t=a;a=b;b=t%b;return a;int CommonMultiple(int a,int b)int t;if(ab)t=a;a=b;b=t;t=a;while(a%b!=0)a+=t;return a;int PrimeNumber(int*Data_Num,int len)int i,j;int flag=0;int count=0;int PrimeNumN;for(i=0;ilen;i+)flag=1;for(j=2;jData_Numi;j+)if(Data_Numi%j=0)flag=0;break;if(flag)PrimeNumcount+=Data_Numi;return count;int TongGouShu(int*Data_Num,int len)int i;int t;int end;int wei;int s;int count=0;int rN;for(i=0;ilen;i+)end=0;wei=0;s=1;t=Data_Numi;while(t!=0)t/=10;wei+;t=Data_Numi*Data_Numi;while(wei-!=0)end+=(t%10)*s;t/=10;s*=10;if(end=Data_Numi)rcount+=Data_Numi;return count;int ReadFile_Str(char*name,char*str)FILE*fp;int i=0;if(fp=fopen(name,r)!=NULL)while(!feof(fp)fgets(stri+,100,fp);elseprintf(文件%s 不存在,name);fclose(fp);return i-1;void sort_Str(char*str,int len)int i,j;char*t;for(i=1;i0)strj=strj-1;j-;strj=t;void WriteFile_Str(char*name,char*str,int n,char*mode)FILE*fp;int i;fp=fopen(name,mode);for(i=0;in;i+)fprintf(fp,%s,stri);fclose(fp);void reverse(char*str,int n)char*buf=(char*)malloc(sizeof(char)*256);char*end;int i;int j;int len;WriteFile_Str(string_output2.txt,&buf,0,w);for(i=0;in;i+)len=strlen(stri);end=stri+len-1;for(j=0;jlen;j+)bufj=*end-;bufj=0;WriteFile_Str(string_output2.txt,&buf,1,a);free(buf);printf(操作完成!n 逆置后的数据已保存至string_output2.txt文件中n);void reverse_recursion(char*str)FILE*fp=fopen(string_putput2.txt,a);if(*str!=0)reverse_recursion(str+1);fputc(*str,fp);fclose(fp);int SearchHello(char*str,int n)int i,j,k;char buf6;char*p;int len;int count=0;for(i=0;i=5)for(j=0;j=len-5;j+)p=stri+j;for(k=0;k5;k+)bufk=*p+;bufk=0;if(strcmp(buf,hello)=0)count+;return count;void FindMaxMin(char*str,int n,char*r)int i;char*max=str0;char*min=str0;for(i=1;in;i+)if(strcmp(max,stri)0)min=stri;r0=(char*)malloc(sizeof(min);r1=(char*)malloc(sizeof(max);strcpy(r0,min);strcpy(r1,max);void ProcessString(char*r)char*p=r0;char*q=r1;char*t;int flag=1;while(*q!=0)flag=1;p=r0;while(*p!=0)if(*p=*q)flag=0;t=p;while(*(t+1)!=0)*t=*(t+1);t+;*t=0;elsep+;if(flag=1)q+;