C语言课程设计保过版.doc_第1页
C语言课程设计保过版.doc_第2页
C语言课程设计保过版.doc_第3页
C语言课程设计保过版.doc_第4页
C语言课程设计保过版.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言课程设计班 级: 姓 名: 学 号: 指导教师: 设计时间: 评语:成绩 一、 设计题目1 基本要求题(1)有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一个人为止。问此人原来的位置是多少号。(2)有n个学生,每个学生的数据包括学号、姓名、年龄和两科成绩。请编程用结构类型的数据处理方式实现如下目标:(1)在main函数中输入原始数据;(2)在count函数中输出各学生的总分和平均分;(3)输出总分最高的学生;(4)编写sort函数将各学生的数据按总分降序输出。2 改错题- 1 -(1)#include#include#includeint fun(char *s,char *t)int n;char *p,*r;n=0;while(*s)p=s;r=t;while(*r)if(*r=*p)r+;p+elsebreak;if(r=0)n+;s+;return n;int main()char s100,t100;int m;clrscr();printf(nPlease enter string S:);scanf(%s,s);printf(nPlease enter substring t:);scanf(%s,t);m=fun(s,t);printf(nThe result is:m=%dn,m);return 0;(2)函数fun的功能是:从低位开始取出长整形变量s中偶数位上的数,依次构成一个新的数放在t中。例如,当s中的数为7654321时,t是得数为642.请改正程序中的错误,使程序能得出正确的结果。注意不要改动main函数,不得增行或删行,也不得更改程序的结构。程序如下:#include#includevoid fun(long s,long t) long s1=10;s/=10;*t=s%10;While(s0)第19行,修改为:printf(nPlease enter s:);第22行,修改为:printf(The result is:%ldn,t);2 综合设计题目:计算24点(1)小组成员及分工表1 组员分工细表序号姓名分工具体完成的工作1薛 冰程序结构设计流程图设计主函数main( )、表达式处理函数fun( )及代码整理2乔瑟夫子程序设计表达式输出函数print_ans( )及随机数生成函数init()3丹尼尔子程序设计运算符生成函数make_opt( )及表达式计算函数cal()(2)主程序流程图及设计思路图5 主程序算法流程图(3)子程序流程图及设计思路图6 fun()函数流程图设计思路:函数主体为永真循环,用break语句退出。循环体首先清屏,然后显示主菜单,读取键盘输入。采用枚举算法求解24点。枚举中,用make_opt()函数生成运算符。用fun()函数生成表达式并枚举运算组合,输出可行解。设计思路:3个运算符只能组成5种运算次序:( ( A B ) C ) D( A B ) ( C D )( A ( B C ) ) DA ( ( B C ) D )A ( B ( C D ) )枚举所有的组合,计算相应的result.当result=24时调用make_ans()输出表达式。表达式有解时函数返回值为1,否则为0。14(4)数据结构:main函数定义的变量:int opt3 用于保存3个运算符(03),其中,0 表示 + 1 表示 2 表示 * 3 表示 / int num4 用于保存4个数字(110)fun函数定义的变量:int type用来表示运算符的结合顺序(04),其中,type = 0 :( ( A B ) C ) Dtype = 1 :( A B ) ( C D ) type = 2 :( A ( B C ) ) D type = 3 :A ( ( B C ) D ) type = 4 :A ( B ( C D ) )(5)程序结构序号函数名返回值类型参数列表函数功能1mainint正常退出返回0void生成人机界面,输入num4,枚举n(063),生成运算符并求解表达式。输出。2make_opt()voidint opt3int n根据n(063)生成3个运算符(03表示)存于opt3中。3cal()double计算结果double n1int optdouble n2计算n1与n2进行opt运算的结果。4fun()int有解返回1无解返回0int opt3int num4根据opt3和num4枚举5种运算顺序(type),输出所有结果为24的表达式。5print_ans()voidint opt3int num4int type根据opt3和num4和type(04)输出表达式。(6)扩展功能实现设计函数生成4个随机数(110)用于求解24点问题。子程序结构:函数名返回值类型参数列表函数功能initvoidint sum4随机生成4个整数(110),存入sum4.三、 程序调试1 概述基本要求题输出结果错误。通过加入额外的输出语句,定位了出错代码的大致位置,最终找出进行了更正。综合设计题程序提前退出。通过使用多组有代表性的测试数据,分析运行结果,找到了出错特征,最终定位了出错代码,进行了更正。表1 程序调试记录表序号题目函数语句修改结果备注1基本要求题1main()k=1k=0报数值从0开始自增。2基本要求题2sort()if(flag)if(!flag)flag=0时执行求和语句。3综合设计题main()if(f1) break;if(f1)continue;执行下次循环。4综合设计题print_ans()函数结尾增加:printf(“n”);输出完毕后换行。2 课程设计小结通过加入额外的输出语句和使用特别设计的测试数据,可以帮助查找出错代码的错误特征与大概位置,缩短调试时间。另外,高级编译器提供的单步调试功能对大规模程序的调试工作帮助很大。综合设计题程序规模较大,首先应当进行程序结构设计和数据结构设计:建立主函数流程图,明确各子函数应实现的功能、函数返回值类型、所需函数参数及参数的储存与传递方式。其中结构化程序设计思想与优秀的数据结构设计可以帮助简化程序结构设计工作。四、 附录1 程序清单/*1.1循环报数*/#includeint main()const n=17; /n为参加报数的总人数int an;int i,m,k;k=0; /k为报数123m=n; /m为剩余总人数for(i=1;i1) /剩余人数多于1时if(ai!=0)k+; /报数if(k=3) /报至3时ai=0; /剔除此人k=0; /k值重置m-; /剩余人数-1i+;if(i=n+1)i=1; /报至队尾,i值归1for(i=1;i=n;i+)if(ai!=0)printf(The last one is No.%dn,ai);return 0;/*1.2学生成绩处理*/#include#include#include#includetypedef struct student/数据结构int num;char name10;int age;float score1,score2,sum;STU;void count(STU *stu,int n,int &flag) /输出总分和平均分int i;if(!flag)/仅当未计算过总分时才计算for(i=0;in;i+)stui.sum=stui.score1+stui.score2;flag=1;printf(姓名t学号t总分t平均分n);for(i=0;in;i+)printf(%st%dt%.2ft%.2fn,,stui.num,stui.sum, stui.sum/2);printf(n按任意键返回n);getch();void sort(STU *stu,int n,int &flag) /按总分降序输出STU *p,*temp;p=(STU *)calloc(n,sizeof(STU *);int i,j;for(i=0;in;i+)/pi用来储存stui的地址pi=&stui;if(!flag)/仅当未计算过总分时才计算for(i=0;in;i+)stui.sum=stui.score1+stui.score2;flag=1;for(i=0;isum对pi进行排序for(j=0;jsumsum)temp=pj;pj=pj+1;pj+1=temp;printf(姓名t学号t科目1t科目2t总分n);/按总分降序输出学生信息for(i=0;iname,pi-num,pi-score1,pi-score2,pi-sum);printf(n按任意键返回n);getch();free(p);int main()/主函数int n,i,flag=0;char ch;STU *stu;printf(输入学生总数:);scanf(%d,&n);stu=(STU *)calloc(n,sizeof(STU);for(i=0;in;i+)printf(学生%dn,i+1);printf(姓名:);scanf(%s,&);printf(学号:);scanf(%d,&stui.num);printf(年龄:);scanf(%d,&stui.age);printf(科目1成绩:);scanf(%f,&stui.score1);printf(科目2成绩:);scanf(%f,&stui.score2);printf(n);while(1)/程序主菜单system(cls);printf(=n);printf(1.输出总分和平均分n);printf(2.按总分降序输出n);printf(0.退出程序n);printf(=n);if(flag)printf(无效的输入,请重新输入!n);ch=getch();switch(ch)case 1:count(stu,n,flag);flag=0;break;case 2:sort(stu,n,flag);flag=0;break;case 0:free(stu);return 0;/程序出口default:flag=1;break;return 0;/*24点程序*/#include#include#includevoid make_opt(int opt3,int n);/用n(0-63)生成3个运算符存于optdouble cal(double n1,int opt,double n2);/求相应运算的运算结果int fun(int opt3,int num4);/枚举判断当前opt,num能否组成正确表达式,如果能,/则输出(也许有多种可能),返回1void print_ans(int opt3,int num4,int type);/输出表达式void init(int num4);/生成随机数int main()char ch;int opt3,num4,i,f1=0,f2;/输入无效时f1=1,表达式无解时f2=1srand(GetTickCount();/初始化随机种子while(1)/程序主菜单system(cls);printf(=n);printf(= =n);printf(= 计算24点是流行的扑克游戏。其方法是任意取出4张 =n);printf(= 牌,AJQK王牌算1,其它牌按点数计算,花色不计,目标 =n);printf(= 是通过加、减、乘、除和括号最终计算出24。本程序可 =n);printf(= 根据输入的4个数字(110),枚举出所有计算结果为24 =n);printf(= 的方案。 =n);printf(= =n);printf(=n);if(f1)printf(n无效的输入!);f1=0;printf(n请输入4个正整数(110,中间用空格分隔)或输入0由程序随机生成4个数:n);scanf(%d,&num0);if(num0=0) init(num);/生成随机数elsefor(i=1;i4;i+)scanf(%d,&numi);for(i=0;i=1&numi=10)f1=1;if(f1) continue;f2=1;for(i=0;i64;i+)/枚举make_opt(opt,i);/生成运算符if(fun(opt,num)/判断是否有解,输出结果f2=0;if(f2)printf(本组数据无解n);printf(按x退出,按任意键继续.n);ch=getch();if(ch=x|ch=X) break;/程序出口return 0;/* 3个运算符,每个运算符共4中可能,所以运算符的组合共有43=64种,将n(063)转化为 4进制,各位数字赋给opt即实现了枚举所有运算符组合。其中: 0 代表 + 1 代表 - 2 代表 * 3 代表 /*/void make_opt(int opt3,int n)/生成运算符int i;for(i=0;i3;i+)opti=n%4;n/=4;double cal(double n1,int opt,double n2)/完成相应运算double result;switch(opt)case 0:result=n1+n2;break;case 1:result=n1-n2;break;case 2:result=n1*n2;break;case 3:result=n1/n2;break;return result;/* 3个运算符只能组成5种运算次序,利用type表示不同的运算次序,进行枚举; type=0:( ( A B ) C ) D type=1:( A B ) ( C D ) type=2:( A ( B C ) ) D type=3:A ( ( B C ) D ) type=4:A ( B ( C D ) ) 枚举计算结果,用print_ans()函数输出所有可行解。表达式有解时本函数返回值为1,否则为0.*/int fun(int opt3,int num4)int flag=0,type;double result;for(type=0;type5;type+)switch(type)case 0:result=cal(cal(cal(double)num0,opt0,(double)num1),opt1,(double)num2),opt2,(double)num3);break;case 1:result=cal(cal(double)num0,opt0,(double)num1),opt1,cal(double)num2,opt2,(double)num3);break;case 2:result=cal(cal(double)num0,opt0,cal(double)num1,opt1,(double)num2),opt2,(double)num3);break;case 3:result=cal(double)num0,opt0,cal(cal(double)num1,opt1,(double)num2),opt2,(double)num3);break;case 4:result=cal(double)num0,opt0,cal(double)num1,opt1,cal(double)num2,opt2,(double)num3);break;if(result=24)flag=1;print_ans(opt,num,type);ret

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论