程序设计基础课程设计.docx
- 文档编号:11390183
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:19
- 大小:18.99KB
程序设计基础课程设计.docx
《程序设计基础课程设计.docx》由会员分享,可在线阅读,更多相关《程序设计基础课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
程序设计基础课程设计
《程序设计基础课程设计》实验报告
班级:
1403013
姓名:
熊清锋
学号:
14030130063
所选题目:
1_1,1_3,2_2,3_1,3_2,3_3,3_4,5_1,5_2,
第1_1题:
比较两个文本文件并打印出它们第一个不相同的行(文件每行字符数不多于80)。
算法描述:
定义两个不同的指针,建立两个不同的文本文件并存入字符;打开文本文件并一行一行的比较,定义一个计数器,若发现了不同行,立即跳出循环,分别打印两个不同文件中计数器所指的行;
源程序:
no1_1.c
#include
#include
#include
#defineN5//文件中字符的行数
intmain()
{
FILE*fp1,*fp2;//文件指针
charstr1[N][80],str2[N][80];
charA[N][80],B[N][80];
inti,k,flag=0;
printf("PleaseenterthefirsttextA:
\n");
if(fp1=fopen("num1.text","w")==NULL)//建立文本文件
{
printf("cannotopenthefile!
");
exit(0);
}
for(i=0;i { gets(str1[i]); fputs(str1[i],fp1); fputs("\n",fp1); } printf("\n"); printf("PleaseenterthesecondtextB: \n"); if(fp2=fopen("num2.text","w")==0)// { printf("cannotopenthefile! \n"); exit(0); } for(i=0;i { gets(str2[i]); fputs(str2[i],fp2); fputs("\n",fp2); } fclose(fp1); fclose(fp2); fp1=fopen("num1.text","r");//打开文件 fp2=fopen("num2.text","r"); for(i=0;i { fgets(str1[i],80,fp1); fgets(str2[i],80,fp2); if(strcmp(str1[i],str2[i])! =0) { k=i; flag=1; break; } } if(flag)//如果存在不同行 { printf("\nThefirstdifferentrowbetweenAandB: \n");//分别输出不同行 printf("A: %s\n",str1[k]); printf("B: %s\n",str2[k]); } else printf("Thetwotexthavethesamecontents! ! \n"); fclose(fp1);//关闭文件 fclose(fp2); return0; } 测试数据: 第1_3题: 现有两个文本文件db1.txt和db2.txt。 db1.txt中第一列为姓名,第二列为英语成绩;db2.txt中第一列为姓名,第二列为数学成绩。 通过姓名字段将db1.txt文件关联到db2.txt文件生成db3.txt文件。 db3.txt文件第一列为姓名,第二列为英语成绩,第三列为数学成绩,第四列为平均成绩 算法描述: 定义三个文件指针,输入数据分别存在两个文件文本,输入时用结构存储数字和字符的混合输入;打开文件,对文件中的结构体存储的字符比较遇到两个文件中相同的name,将两个文件对应该name的内容整合,写到第三个文件中,并在屏幕输出文件内容。 源程序: no1_3.c #include #include #include #defineN1 structStudent//定义前两个文件内容的结构体,结构体元素是姓名和分数 { charname[10]; doublescore; }; structStudent1//定义第三个文件内容的结构体,元素是姓名和分数数组(含三个元素) { charname[10]; doublescore[3]; }; intmain() { FILE*fp1,*fp2,*fp3; structStudentstu[2][N];//定义二维结构体数组 structStudent1stu1[N]; inti,j,k=0; intflag=0; //输入 printf("Pleaseinputdb1.txt: \n"); fp1=fopen("db1.txt","w"); for(i=0;i { scanf("%s%lf",stu[0][i].name,&stu[0][i].score); fwrite(&stu[0][i],sizeof(structStudent),1,fp1);//读取结构体中的一元素存入文件 } printf("\nPleaseinputdb2.txt: \n"); fp2=fopen("db2","w"); for(i=0;i { scanf("%s%lf",stu[1][i].name,&stu[1][i].score); fwrite(&stu[1][i],sizeof(structStudent),1,fp2); } fp1=fopen("db1.txt","r");//打开文件,只写 fp2=fopen("db2,txt","r"); for(i=0;i { fread(&stu[0][i],sizeof(structStudent),1,fp1); for(j=0;j { fread(&stu[1][j],sizeof(structStudent),1,fp2); if(strcmp(stu[0][i].name,stu[1][j].name)==0) { flag=1; strcpy(stu1[k].name,stu[1][i].name); stu1[k].score[0]=stu[0][i].score; stu1[k].score[1]=stu[1][j].score; stu1[k].score[2]=(stu1[k].score[0]+stu1[k].score[1])/2; k++; } } } printf("\n"); //输出 if(flag) { fp3=fopen("db3.txt","w"); printf("NamesMathsEnglishAverage\n"); for(i=0;i { fwrite(&stu1[i],sizeof(structStudent1),1,fp3); printf("%s",stu1[i].name); for(j=0;j<3;j++) printf("%10.2f",stu1[i].score[j]); printf("\n"); } fclose(fp3); } else printf("Maybethelistsaretakenbymistake! ! \n"); fclose(fp1); fclose(fp2); return0; } 测试数据: 第2_2题: 统计一个英文文本文件中26个英文字母出现次数并按英文字母序输出统计结果,查找并替换此英文文本文件中某字符串。 算法描述: 建立文本文件并输入数据(二维字符数组的形式),存储于文件,打开文件读出字符! ! 用 个英文字符与从文件读出的文件比较,建立累加器对每个字母出现的次数赋值! 源程序: no2_2.c #include #include #include #defineN2 intmain() { FILE*fp1,*fp2; inti,j,k,cout; charstr[N][80],ch,c; printf("Pleaseinputfile_num1: \n"); fp1=fopen("num1","w");//建立文件并写入数据 for(i=0;i { gets(str[i]); fputs(str[i],fp1); fputs("\n",fp1); } printf("\n"); //打开文件并读出数据 fp2=fopen("num1","r"); for(i=0;i fgets(str[i],80,fp2); printf("Theshowingtimesofletters: \n"); for(ch='a',k=1;ch<='z';ch++) { cout=0; for(i=0;i { for(j=0;j { if(isalpha(str[i][j])) { c=tolower(str[i][j]);//大写转化小写 if(ch==c) cout++; } } } if(cout) { printf("%c: %2d",ch,cout); k++; if(k%4==0) printf("\n"); } } //查找并替换字符串my->my printf("\nTheadvertedarticle: \n"); for(i=0;i { for(j=0;j { if(str[i][j]=='m'&&str[i][j+1]=='y') str[i][j+1]='e'; } printf("%s\n",str[i]); } return0; } 测试数据: 第3_1题: 将输入的2进制字符串转换为10进制数输出。 算法描述: 输入二进制的字符串,每个字符减去0字符就是他们的十进制数值,在乘以2的n-1次方,再加和! 源程序: no3_1.c #include #include #include intmain() { charstr[10]; inti,sum=0; printf("Pleaseinputbinarynumber: \n"); gets(str); for(i=0;i { sum+=(str[i]-'0')*pow(2,i);//计算每个位上的字符再加和 } printf("Thedecimalnumberis: \n"); printf("%d\n",sum);//输出所对应的十进制数 return0; } 测试数据: 第3_2题: 设计一个复数类型,输入实部和虚部生成一个复数,可进行两个复数求和、两个复数求差、两个复数求积运算。 算法描述: 复数分为实部和虚部,因此一个复数的输入是要分两部分的,输出也是,输出时在虚部后加i. 源程序: no3_2.c #include intmain() { inta,b,c,d; charch; printf("Pleaseentertwocomplexnumbers: \n"); scanf("%d%d%d%d",&a,&b,&c,&d); printf("\n1)calculatethesum\n2)calculatethediff\n3)calculatetheproduct\n"); printf("Pleasechoose1,2or3: (qtoquit): \n");//选择模式 getchar(); while((ch=getchar())! ='q')//循环 { while(getchar()! ='\n'); switch(ch) { case'1': printf("%d+%di\n",a+c,b+d); break; case'2': if(b-d>=0) printf("%d+%di\n",a-c,b-d); else printf("%d%di\n",a-c,b-d); break; case'3': printf("%d+%di\n",a*c-b*d,a*d+b*c); break; default: break; } } return0; } 测试数据: 第3_3题: 用一个整型数组表示10进制大整数,数组的每个元素存储大整数的一位数字,将这个大整数转换为2进制数输出。 算法描述: 存入大整数时,将数值的各个位上的数分离存到数组中。 因为整数数值大,一定注意了溢出,,在计算时,再用数组下标与数值各个位上的关系,整合再输出所对应的二进制数! 源程序: No3_3.c #include #include #defineN20 intmain() { voidto_base_n(longlongn,unsignedintbase); inta[N],i=0,j,k,m; charch; longlongn=0; printf("请输入数字(#结束): \n"); printf("\n"); while(scanf("%d",&a[i])==1) { i++; } j=i-1; for(i=0;i<=j;i++) { for(k=j;k>=0;k--) { n+=a[i]*pow(10,k); } } printf("\n转换过后的等值二进制数: \n"); printf("\n"); to_base_n(n,2); printf("\n"); return0; } voidto_base_n(longlongn,unsignedintbase)//进制转换超级函数 { intr; r=n%base; if(n>=base) to_base_n(n/base,base); putchar('0'+r); return; } 测试数据: 第3_4题: 根据输入的数字N,计算N以内(包括N)数据链并统计数据链末尾数字是1的数据个数。 例如N=44,则数字链为: 44->32->13->10->1,其规则为: 4*4+4*4=32,3*3+2*2=13,1*1+3*3=10,1*1+0*0=1。 算法描述: 对输入数字进行各个位拆分并计算各个位上数字的平方和,每计算一次的和与1进行比较, 知道等于1时程序结束。 源程序: no3_4.c #include intmain() { intn,sum,a[10]; inti,cout=0; printf("请输入数字N: "); scanf("%d",&n); printf("\n数据链: \n"); while(n! =1) { printf("%d->",n); sum=0; i=0; while(n>0)//对每次的各位数字平方和再拆 { a[i]=n%10; if(a[0]==1) cout++;//统计末尾数字为1的计数器 sum+=a[i]*a[i]; n=n/10; i++; } n=sum; } printf("%d\n",1); printf("\n数据链末尾数字为1的数字个数: \n"); printf("%d\n",cout); return0; } 测试数据: 第5_1题: 程序自动生成一个位于99内的随机数,要求用户猜这个数。 用户输入一个数后,程序有三种应答: toobig,toosmall,youwin。 算法描述: 播下产生随机数的种子,随时间不同每次生成的随机数不同,用户根据提示进行猜数游戏。 源程序: no5_1.c #include #include #include intmain() { intn,m; printf("Ready? Let'sgo! ! ! \nInputthecorrectnumberyouthought: \n"); scanf("%d",&n); srand(time(NULL));//种子 m=rand()%100; while(n! =m)//猜数进行时的提示 { if(n>m) printf("Toobig! Comeon,do'tgiveup! \n"); else printf("Toosmall! Whyareyousosilly! ! \n"); printf("Tryagain: \n"); scanf("%d",&n); } printf("%c%cYouwin! Youaresosmart! ! \n",1,1); return0; } 测试数据: 第5_2题: 产生一组随机数,要求每个数字不能重复。 例如: 1,20,3,17,80,4,35,88符合要求,3,20,1,17,80,3,35,88不符合要求 算法描述: Rand函数一次只能产生一个随机数,于是使用循环结构让其多产生几个随机数,为了对随机数是否重复进行判断,将产生的随机数存放在数组中。 源程序: no5_2.c #include #include #include #defineN10 intmain() { inta[N],n,i,j,k; intflag=1; n=N; srand(time(NULL)); while(flag) { for(i=0;i a[i]=rand()%100; for(i=0;i { for(j=0;j { if(a[i]==a[j]&&i! =j)//判断的数组中是否有重复数字,若有,就重新产生 { flag=0; break; } } } if(! flag) flag=1; else { flag=0; printf("产生的不重复的随机数: \n"); printf("\n"); for(i=0,k=1;i { printf("%-4d",a[i]); if(k%10==0) printf("\n"); } } } return0; } 测试数据:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 课程设计