c语言课程设计设计报告.docx
- 文档编号:9686896
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:23
- 大小:20.24KB
c语言课程设计设计报告.docx
《c语言课程设计设计报告.docx》由会员分享,可在线阅读,更多相关《c语言课程设计设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
c语言课程设计设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
C语言课程设计报告
姓名:
学号:
年月
目录:
●程序功能简介
●题目分析
●函数的调用关系图及主要算法
●源程序及注释
●测试流程
●心得感想
程序一:
简单数学问题
一、程序功能简介:
实现多个简单数学问题的求解。
二、题目分析
完成与菜单项对应的功能设计
1、voidFindNum();*用穷举法找到被咬掉的数字*
2、voidFindRoot();*求解方程ax2+bx+c=0的根*
3、voidDetective();*根据线索用穷举法找出牌照号码*
4、voidMonkey();*根据天数循环求出第一天所摘桃子数*
5、voidDiamond();*调用函数Print_Diamond()输出line行的钻石图案*
6、voidCalculator();*实现两个整数简单的加减乘除四则运算*
三、函数的调用关系图:
四、源程序及注释:
#include { for(;;) { switch(menu_select()) {case1: FindNum(); system("pause"); break; case2: FindRoot(); system("pause"); break; case3: Detective(); system("pause"); break; case4: Monkey(); system("pause"); break; case5: Diamond(); system("pause"); break; case6: Calculator(); system("pause"); break; case0: printf("Goodbye! \n"); system("pause"); exit(0); } } } intmenu_select()*主函数菜单* { charc; do{ system("cls"); printf("1.FindNum\n"); printf("2.FindRoot\n"); printf("3.Detective\n"); printf("4.Monkey\n"); printf("5.Diamond\n"); printf("6.Calculator\n"); printf("0.Goodbye! \n"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0'); } FindNum()*找数字* { inti; for(i=1;i<=9;i++)*穷举* if((30+i)*6237==(10*i+3)*3564) printf("%d\n",i); } FindRoot()*找方程的根* { floata[10],b[10],c[10],disc,x1,x2,real,image;*定义abc三个数组存放方程的系数* inti,k,j; for(i=0;i<10;i++)*循环输入方程的三个系数* { printf("pleaseinputthreerealnumbers: \n"); scanf("%f%f%f",&a[i],&b[i],&c[i]); printf("press'1'tocontinue\npress'2'tocalculate\n"); scanf("%d",&k); if(k==2)break;*判断是否继续输入* } for(j=0;j<=i;j++) { printf("Theequation%d",j+1); if(fabs(a[j])<=1e-7)*a=0的情况* printf("isnotquadratic,solutionis%.2f\n",-c[j]b[j]); else { disc=b[j]*b[j]-4*a[j]*c[j]; if(fabs(disc)<=1e-7)*有两个相等的实根的情况* printf("isnotquadratic,solutionis: %.2f\n",-b[j](2*a[j])); elseif(disc>1e-7)*有两个不等实根的情况* { x1=(-b[j]+sqrt(disc))(2*a[j]); x2=(-b[j]-sqrt(disc))(2*a[j]); printf("",x1,x2); } else*有两个虚根的情况* { real=-b[j](2*a[j]); image=sqrt(-disc)(2*a[j]); printf(""); printf("%.2f+%.2fi\n",real,image); printf("%.2f-%.2fi\n",real,image); } } } } Detective()*找牌照* { inti,a,b,c,d;longm; for(i=32;i<=99;i++)*穷举找出后四位号码* { m=i*i; a=m%10; b=m10%10; c=m100%10; d=m1000; if(a==b&&c==d) break; } printf("%ld\n",m+310000); } Monkey()*猴子吃桃问题* { intn,i; longx; scanf("%d",&n); x=1; for(i=n-1;i>=1;i--) x=(x+1)*2; printf("%ld\n",x); } voidprint_diamond(intline) { inti,j,k,m,n,p,q,a,b; for(i=1;i<=(49-line)2;i++)*输出(49-line)2行的空格* printf("\n"); for(j=1;j<=(line+1)2;j++) {for(m=1;m<=(80-line)2;m++)*先输出(80-line)2个空格* printf(""); for(a=1;a<=(line-(2*j-1))2;a++)*行数j从1到中间一行输出(line-(2*j-1))2个空格* printf(""); for(n=1;n<=2*j-1;n++)*中间行及上面每行输出2*j-1个"*"* printf("*"); printf("\n"); } for(k=1;k<=(line-1)2;k++)*同理输出中间行下面的钻石图案* {for(p=1;p<=(80-line)2;p++) printf(""); for(b=1;b<=k;b++) printf(""); for(q=1;q<=line-2*k;q++) printf("*"); printf("\n"); } } Diamond()*钻石* { intline; scanf("%d",&line); print_diamond(line);*调用print_diamond输出钻石图案* } Calculator()*简单计算器* { inta[4],b[4],c[4],i,j,k;*定义ab两个数组存放数* charch[4];*定义c存放运算符* FILE*fp1,*fp2; fp1=fopen("expres.txt","r");*打开expres文件* if(fp1==NULL)*判断打开成功* { printf("Cannotopenfileexpres\n"); exit (1); } for(i=0;i<=3;i++) fscanf(fp1,"%d%c%d",&a[i],&ch[i],&b[i]);*循环读入四道题* for(j=0;j<=3;j++) { switch(ch[j])*判断运算符* {case'+': c[j]=a[j]+b[j];break; case'-': c[j]=a[j]-b[j];break; case'*': c[j]=a[j]*b[j];break; case'': c[j]=a[j]b[j];break; } } fp2=fopen("result.txt","w");*打开文件result* if(fp2==NULL)*判断打开文件是否成功* { printf("Cannotopenfileexpres\n"); exit (2); } for(k=0;k<=3;k++)*循环向文件中输入结果* fprintf(fp2,"%d%c%d=%d\n",a[k],ch[k],b[k],c[k]); printf("succeed! \n"); } 五、测试流程: 运行程序 屏幕显示: 1.FindNum 2.FindRoot 3.Detective 4.Monkey 5.Dismond 6.Calculator 0.Goodbye! 输入: 1回车 显示: 9 Pressanykeytocontinue… 按任意键返回菜单 输入: 2回车 显示: pleaseinputthreerealnumber: 输入: 0回车1回车2回车 显示: press‘1’tocontinue press’2’tocalculate 输入: 1回车 显示: pleaseinputthreerealnumber: (按照以上方法再输入三组数据: 1,2,1;1,3,2;1,0,4后选择2,回车) 显示: Theequation1isnotquadratic,solutionis-2.00 Theequation2isnotquadratic,solutionis-1.00 Theequation34);*从键盘输入若干条纪录,依次存放到结构体数组stud中,n为数组原有纪录数,程序运行初始纪录数为0,函数返回纪录数.* 2、Display(structstudentstu[],intn);*显示所有记录,每10个暂停一下,n为数组元素个数* 3、Sort_by_Name(structstudentstu[],intn);*按姓名作升序排序,要求用选择排序法* 4、intInsert_a_record(structstudentstu[],intn);*输入待插入的姓名和成绩,按姓名作有序插入,输出插入成功信息,返回纪录个数* 5、intDelete_a_record(structstudentstu[],intn);*输入待删除的姓名,经确认后删除该姓名的纪录,输出删除成功与否的信息.返回数组中的纪录数* 6、intQuery_a_recored(structstudentstu[],intn);*输入待查找的姓名,查找该姓名的纪录,输出查找成功与否的信息和该学生的信息* 7、intAddfromText(structstudentstud[],intn);*从文件filename添加一批纪录到数组中,返回添加纪录后的新的纪录数* 8、WritetoText(structstudentstu[],intn);*将数组中的纪录全部写入文件records.txt* 三、函数调用关系图: 四、源程序及注释: #include scanf("%s",&stud.name); printf("pleaseinputthescore: \n"); scanf("%f",&stud.score); returnstud; } intInput(structstudentstu[],intn)*输入学生成绩记录* { for(n=0;n<=39;n++) { stu[n]=Input_one_record();*调用函数Input_ont_record输入学生成绩记录* printf("doyouwanttocontinue: ('Y'or'N')"); getchar(); if(toupper(getchar())=='N') break; } returnn+1; } voidDisplay(structstudentstu[],intn)*输出所有学生的成绩记录* { inti,j; for(i=0;i<3;i++)*每屏显示十个记录然后暂停* { system("cls"); for(j=10*i;j<=10*i+9;j++)*循环输出十个记录* { if(j>n-1)break; printf("%s%20f\n",stu[j].name,stu[j].score); } if(j>n-1)break; printf("pressanykeytodisplaythenexttenrecords: \n"); system("pause"); } } voidSort_by_Name(structstudentstu[],intn)*排序* { inti,j,p; structstudentt; for(i=0;i<=n-2;i++)*选择排序法* { p=i; for(j=i+1;j<=n-1;j++)*找到最小数据的下标* { if(strcmp(stu[j].name,stu[p].name)<0) p=j; } if(p! =i)*判断最小数据是否在第一个* { t=stu[p];stu[p]=stu[i];stu[i]=t; } } printf("succeed! \n"); } intInsert_a_record(structstudentstu[],intn)*插入一个学生成绩记录* { structstudentnew; structstudent*s; printf("pleaseinputaname: \n"); scanf("%s",&new.name); printf("pleaseinputthescore: \n"); scanf("%f",&new.score); s=&new; n=Insert(stu,n,s);*调用函数Insert作有序插入* returnn; } intInsert(structstudentstu[],intn,structstudent*s)*有序插入* { inti,j; for(i=0;i<=n-1;i++) if(strcmp(stu[i].name,s->name)>0)break; for(j=n-1;j>=i;j--) stu[j+1]=stu[j]; stu[i]=*s; returnn+1; } intDelete_a_record(structstudentstu[],intn)*删除一个学生的成绩记录* { intk; structstudentname_to_delete; structstudent*name; printf("pleaseinputthenameyouwanttodelete: \n"); scanf("%s",&name_to_delete.name); name=&name_to_delete; printf("Delete%s'srecord('Y'or'N'): \n",name_to_delete.name); getchar(); if(toupper(getchar())=='Y') k=Delete(stu,n,name);*调用函数Delete查找数据,若存在做删除* if(k==-1)*判断是否存在* printf("Therecorddoesnotexist! \n"); elsen=k; returnn; } intDelete(structstudentstu[],intn,structstudent*name) { inti,j; for(i=0;i<=n;i++) if(strcmp(stu[i].name,name->name)==0)break;*找到需要删除的数据下标i* if(i==n+1)*判断要删除的数据是否存在* return-1;*不存在,返回提示信息* else*存在,做删除* { for(j=i;j<=n;j++) stu[j]=stu[j+1]; printf("succeed! \n"); returnn-1; } } voidQuery_a_record(structstudentstu[],intn)*查找一个学生的成绩记录* { structstudent*name; structstudentname_to_query; printf("pleaseinputthenameyouwanttoquery: \n"); scanf("%s",&name_to_query.name); name=&name_to_query; if(Query(stu,n,name)==-1)*调用函数Query判断要查找的记录是否存在* printf("%sdoesnotexist! \n");*不存在输出提示信息* else*存在,输出记录* { name_to_query=stu[Query(stu,n,name)]; printf("succeed! \n%s\t%f\n",name_to_query.name,name_to_query.score); } } intQuery(structstudentstu[],intn,structstudent*name)*查找记录* { inti; for(i=0;i<=n-1;i++)*找到需要查找的记录的下标* { if(strcmp(stu[i].name,name->name)==0) break; } if(i<=n-1)*判断要查找的记录时候存在* returni;*存在,返回下标i* elsereturn-1;*不存在,返回提示信息* } intAddfromText(structstudentstu[],intn)*从文件中整批输入* { inti,num; FILE*fp;*定义文件指针* charfilename[20]; printf("Inputthefilename: \n"); scanf("%s",filename); if((fp=fopen(filename,"r"))==NULL) { printf("cann'topenthefile! \n"); system("pause"); returnn; } fscanf(fp,"%d",&num); for(i=0;i fscanf(fp,"%s%f",&stu[n+i].name,&stu[n+i].score); n+=num; fclose(fp); Sort_by_Name(stu,n);*调用函数Sort_by_Name排序* returnn; } voidWritetoText(structstudentstu[],intn)*将记录写到文件* { inti; FILE*fp; charfilename[20]; printf("WritetherecordstoaTextFile\n"); printf("Inputthefilename: "); scanf("%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("cann'topenthefile\n"); system("pause"); return; } fprintf(fp,"%d\n",n+1); for(i=0;i<=n-1;i++)*循环将记录写到文件中* fprintf(fp,"%s\t%f\n",stu[i].name,stu[i].score); fclose(fp); printf("succeed! \n"); } voidQuit() {} voidmain()*主函数* { structstudentstu[40]; intn=0; for(;;) { switch(menu_select()) { case1: n=Input(stu,n); system("pause"); break; case2: Display(stu,n); system("pause"); break; case3: Sort_by_Name(stu,n); system("pause"); break; case4: n=Insert_a_record(stu,n); system("pause"); break; case5: n=Delete_a_record(stu,n); system("pause"); break; case6: Query_a_record(stu,n); system("pause"); break; case7: n=AddfromText(stu,n); system("pause"); break; case8: WritetoText(stu,n); system("pause"); break; case0: Quit(); system("pause"); exit(0); } } } intmenu_select()*显示主菜单* { charc; do { sy
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 设计 报告