c语言实验报告-实验一 结构化设计方法1(函数与简单程序设计)_第1页
c语言实验报告-实验一 结构化设计方法1(函数与简单程序设计)_第2页
c语言实验报告-实验一 结构化设计方法1(函数与简单程序设计)_第3页
c语言实验报告-实验一 结构化设计方法1(函数与简单程序设计)_第4页
c语言实验报告-实验一 结构化设计方法1(函数与简单程序设计)_第5页
已阅读5页,还剩75页未读, 继续免费阅读

下载本文档

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

文档简介

1、学号:20130566147 姓名:黄雨晨 班级:13计转本 成绩: 实验一 结构化设计方法1(函数与简单程序设计)一、实验目的1熟悉C语言编译环境、能够新建、保存C源程序到指定位置。2. 在算法流程图的指引下能够编写简单的C程序。3.掌握程序代码编写格式要求,能够编写符合规范的C程序。4.初步掌握程序的调试方法和过程。5能够定义函数完成特定任务6. 能够明确函数调用和函数参数传递。二、实验内容及要求建立并保存C语言源程序到指定位置。(1)进入Visual C +6.0集成环境(2)新建一个源程序,把源程序文件存放在D:/c program 子目录下(3)程序的编译(4)程序的连接(5)程序的

2、执行2利用分支结构设计判断键盘某年份是否为闰年C函数。画出判断某年份为闰年的算法流程图和NS流程图。编写实现利用分支结构设计判断某年份是否为闰年的C语言程序。思考并编写利用if嵌套语句实现判断某年份是否为闰年的C语言程序。思考并练习使用逻辑表达式实现判断某年份是否为闰年的C语言函数。3. 利用上述函数定义输出指定区间闰年函数。4定义主函数调用相关函数实现从键盘输入一个年度区间,输出这期间的所有闰年。思考:如果输入的一个年度区间范围比较大,比如从100到2016,如何设置输出,才能在输出窗口显示所有符合闰年条件的年份?5编译程序,改正语法错误,做好出现的错误的整理和改正记录。6运行、调试程序,得

3、到正确结果。三:程序代码:#include using namespace std;void leap(int year)if(year%4=0&year%100!=0)|(year%400=0) /判断是否为闰年coutyeart;/如果是则输出int main() int x,y,z; coutz; leap(z);/调用函数 coutxy; for(x;x=y;x+) leap(x); return 0;四:运行结果以及分析:算法分析:根据题意,先定义一个leap函数,通过写条件语句来判断是否为闰年,判断年份是否能被4和100整除,如果可以就不是闰年或者判断年份是否能被400整除,如果可

4、以该年份也不是闰年。最后在主函数中通过调用定义的函数,可以输出该年份是否为闰年,在程序中输入年份区间,可以输出在输入区间中的所有闰年;算法流程图如下:NS流程图五:问答实验二结构化设计方法2(函数的递归)一、实验目的1掌握递归算法的设计思想。2. 用递归思想设计递归函数。3. 递归函数的分析。二、实验内容及要求1 定义一个求Fibonacii前20项的递归函数。(1) 了解什么是Fibonacii数列和Fibonacii数列的特点。(2) 了解递归函数的特点。(3) 理解函数调用的过程和函数的返回值。(4) 编写一个C语言程序使用递归函数输出Fibonacii数列的前20项。(5) 思考:如何

5、编程实现输出Fibonacii数列的任意20项?2在输出Fibonacii数列的前20项的同时输出前一项与后一项的比,比值选取保留小数点后6位。3观察结果,看看两项比的特征,这个两项比接近于什么?4. 根据各项的输出理解并分析递归函数的执行过程,思考能否不用递归实现该功能?5. 使用while语句、do.while语句和for语句三种循环控制方法实现该程序。6编译程序,改正语法错误,做好出现的错误的整理和改正记录。7运行、调试程序,得到正确结果。三:程序代码如下:/ Note:Your choice is C+ IDE#include using namespace std;int FIbon

6、acci(int x) /定义一个有返回值的函数if(x=1|x=2)return 1;elsereturn (FIbonacci(x-2)+FIbonacci(x-1);/递归方法实现fibonacciint main()int i;int num = 20;float pix;for(i=1;i=num;i+)pix=(float(FIbonacci(i)/float(FIbonacci(i+1);/调用函数coutFIbonacci(i)t;coutpixn;/while语句/*i=1;while(i=num)pix=(float(FIbonacci(i)/float(FIbonacci

7、(i+1);coutFIbonacci(i)t;coutpixn;i+;*/do-while 语句/*i=1;dopix=(float(FIbonacci(i)/float(FIbonacci(i+1);coutFIbonacci(i)t;coutpixn;i+;while(i=num);*/return 0;四:运行结果以及分析:算法分析:先定义一个Finonacci函数,当输入第一项或者第二项的时候输出返回的值1;否则的话就将第一项的值加上第二项的值,定义一个主函数,题目要求输出前20项的同时输出前一项与后一项的比,通过for循环将从第一项到第二十项调用上面的Finonacci函数并且将前

8、一项和后一项的比存到pix中,最后输出前20项的前一项与后一项的比,该程序还使用了while循环或者do-while循环来实现。五:问答1、 递归调用结束的条件?当if(x=1|x=2)的时候2、 while和do.while的区别?while是直接执行,do.while是先执行do然后执行while3、 while后面括号可不可以去掉?为什么?不可以去掉,如果去掉while后面的括号,就执行while后面的第一条语句。实验三 自定义数据类型应用一、实验目的1.掌握自定义数据类型的定义;2.掌握自定义数据类型变量的定义与使用;二、实验内容及要求1、定义一个等级枚举类型,其中元素包括A、B、C、

9、D、E五个等级,该等级是按照学生成绩的高低划分的。2、定义一个成绩共用体类型,在其中定义数值成绩、等级成绩两个成员变量。3、定义一个学生结构体类型,包含学号、姓名、班级和英语、数学、语文成绩,其中英语成绩为等级,其他成绩为数值。4、编程实现6个学生成绩信息的输入,并计算每个学生三门课的平均成绩(等级成绩按照A:90,B:80,C:70,D:60,E:0处理),并计算每门课的平均成绩。5、除了实现计算每个学生三门课的平均成绩和每门课的平均成绩,学生还需要根据自己对学生成绩管理系统的理解尽可能增加新的功能。(提示:“增加某个学生成绩”、“删除某个学生成绩”、“修改某个学生成绩”、“查找某个学生成绩

10、”等功能)要求:(1)利用结构体数组来存放6个学生的学号、姓名、班级和其三门课的成绩。(注意:英语等级成绩的输入可以是枚举元素对应的整数值,但不能将其直接赋予枚举变量)(2)每个功能由相应的函数实现,由主函数调用。(3)系统采用字符界面,在出现的主界面中按提示输入相应字符以选择相应功能而执行相应操作。(注意:当用户选择相应字符执行完毕相应功能后,系统重新展示主界面,直到用户选择结束字符程序才终止运行)三:程序代码如下:#include #include #include #define N 100using namespace std;enum grade/定义枚举类型A,B,C,D,E;un

11、ion score/定义共用体类型int numscore;enum grade gradescroe;struct student/定义结构体int stuid;char stuname20;char stuclass20;union score english,maths,chinese,average;float avg(char english,float maths,float chinese) /求平均分switch(english)case A:return (90+maths+chinese)/3;break;case B:return (80+maths+chinese)/3

12、;break;case C:return (70+maths+chinese)/3;break;case D:return (60+maths+chinese)/3;break;case E:return (maths+chinese)/3;break;default:return (maths+chinese)/3;break;void creatStu(struct student *stu,int number) /创建学生信息int i;float aveg;/输入学号、姓名、班级、英语、数学、语文、平均值cout请输入学号,姓名,班级,英语,数学,语文n;for(i=0;istui.

13、stuid;cinstui.stuname;cinstui.stuclass;/cinstui.english.gradescroe;cinch;if (ch = A)stui.english.gradescroe = A;if (ch = B)stui.english.gradescroe = B;if (ch = C)stui.english.gradescroe = C;if (ch = D)stui.english.gradescroe = D;if (ch = E)stui.english.gradescroe = E;cinstui.maths.numscore;cinstui.c

14、hinese.numscore;aveg=avg(stui.english.gradescroe,stui.maths.numscore,stui.chinese.numscore);/调用函数求平均值stui.average.numscore=aveg;void travellerStudent(struct student *stu,int number)/输出学生信息 int i; /输出学号、姓名、班级、英语、数学、语文、平均值 cout学号t姓名t班级t英语t数学t语文t平均值n; for(i=0;inumber;i+)char ch;coutstui.stuidtstui.stun

15、ametstui.stuclasst;if(stui.english.gradescroe=A)ch= A;if(stui.english.gradescroe=B)ch= B;if(stui.english.gradescroe=C)ch= C;if(stui.english.gradescroe=D)ch= D;if(stui.english.gradescroe=E)ch= E;coutchtstui.maths.numscoretstui.chinese.numscoretstui.average.numscoren; /输出每门课的平均成绩void each_course(struc

16、t student *stu,int number)int i;float ch;float eng=0,math=0,chine=0;for(i=0;inumber;i+)if(stui.english.gradescroe=A)ch= 90;if(stui.english.gradescroe=B)ch= 80;if(stui.english.gradescroe=C)ch= 70;if(stui.english.gradescroe=D)ch= 60;if(stui.english.gradescroe=E)ch= 0;eng+=ch;math+=stui.maths.numscore;

17、chine+=stui.chinese.numscore;cout英语成绩的平均成绩为: eng/numbern;cout数学成绩的平均成绩为: math/numbern;cout语文成绩的平均成绩为: chine/numbern;/增加学生void inserset_Stu(struct student *stu,int num,int &number)int i;int j;j=number;cout请输入学号,姓名,班级,英语,数学,语文n;for(i=j;istui.stuid;cinstui.stuname;cinstui.stuclass;cinch;if (ch = A)stui

18、.english.gradescroe = A;if (ch = B)stui.english.gradescroe = B;if (ch = C)stui.english.gradescroe = C;if (ch = D)stui.english.gradescroe = D;if (ch = E)stui.english.gradescroe = E;cinstui.maths.numscore;cinstui.chinese.numscore;aveg=avg(stui.english.gradescroe,stui.maths.numscore,stui.chinese.numsco

19、re);/调用函数求平均值stui.average.numscore=aveg;number+=num;cout添加成功!n;/删除学生信息void delete_Stu(struct student *stu,int stuid,int &number)int i;int j;for(i=0;inumber;i+)if(stui.stuid=stuid)for(j=i;jnumber-1;j+)stui=stui+1;-number;cout删除成功!n;/修改学生信息void updata_Stu(struct student *stu,int stuid,int number)int i

20、;float aveg;for(i=0;inumber;i+)if(stuid=stui.stuid)cout该学生原信息是:n学号t姓名t班级t英语t数学t语文endl;char ch,ch1;coutstui.stuidtstui.stunametstui.stuclasst;if(stui.english.gradescroe=A)ch= A;if(stui.english.gradescroe=B)ch= B;if(stui.english.gradescroe=C)ch= C;if(stui.english.gradescroe=D)ch= D;if(stui.english.gra

21、descroe=E)ch= E;coutchtstui.maths.numscoretstui.chinese.numscoren;coutch1;if (ch1 = A)stui.english.gradescroe = A;if (ch1 = B)stui.english.gradescroe = B;if (ch1 = C)stui.english.gradescroe = C;if (ch1 = D)stui.english.gradescroe = D;if (ch1 = E)stui.english.gradescroe = E;cinstui.maths.numscore;cin

22、stui.chinese.numscore;aveg=avg(stui.english.gradescroe,stui.maths.numscore,stui.chinese.numscore);/调用函数求平均值stui.average.numscore=aveg;cout修改成功!n;/查询某个学生的成绩void searchStudent(struct student *stu,int userid,int number)int i;char ch;cout学号t姓名t班级t英语t数学t语文t平均值n;for(i=0;inumber;i+)if(stui.stuid=userid)cou

23、tstui.stuidtstui.stunametstui.stuclasst;if(stui.english.gradescroe=A)ch= A;if(stui.english.gradescroe=B)ch= B;if(stui.english.gradescroe=C)ch= C;if(stui.english.gradescroe=D)ch= D;if(stui.english.gradescroe=E)ch= E;coutchtstui.maths.numscoretstui.chinese.numscoretstui.average.numscoren;int main()str

24、uct student stuN;int number,i,print=1,id,num;while(print!=0)cout*endl;cout输入相应的数字来执行操作endl;cout 1:创建学生信息endl;cout 2:输出学生信息以及成绩endl;cout 3:输出每门课的平均成绩endl;cout 4:增加学生信息endl;cout 5:删除学生信息endl;cout 6:修改某个学生的信息endl;cout 7:查询某个学生的信息endl;cout 0;表示该程序执行结束endl;cout i;switch(i)case 0:print=0;break;case 1:cout

25、number;creatStu(stu,number);break;case 2:travellerStudent(stu,number);break;case 3:each_course(stu,number);break;case 4:coutnum;inserset_Stu(stu,num,number);break;case 5:coutid;delete_Stu(stu,id,number);break;case 6:coutid;updata_Stu(stu,id,number);break;case 7:coutid;searchStudent(stu,id,number);br

26、eak;default:break; return 0;四:运行结果以及分析:该程序采用字符界面,在出现的主界面中按提示输入相应的字符以选择相应功能而执行相应操作,如下图所示:创建学生信息输出刚刚已经创建的学生信息,并且相应的计算出平均值,显示在界面上,输出每门课的平均成绩由于英语成绩是等级类型,所以要先将等级类型转化成相应的分数之后将分数相加并且除以学生的人数从而求出每门课的平均成绩。增加学生的信息(可以多个添加):输入需要增加学生的人数,并且根据要求输入学生的信息,对人数进行累加,最后将所有的学生信息显示到界面上。删除某个学生的信息:通过对学生的学号进行检索,将需要删除和输入的学生的学号一

27、样的信息,并且在删除完成后将所有的学生人数减一。修改某个学生的信息:通过学生的学号来检索对应的学生信息,然后进行删除操作,并且显示在屏幕上。查询某个学生的信息:通过学生的学号来检索对应的学生信息,并且将输入的学号对应的学生信息显示在屏幕上。五:问答1、结构体和共用体的区别?共用体是共同用一个结构空间,结构体需要分配空间。2、英语成绩如何转化成分数?通过switch语句来进行转化3、如何删除一个学生?先通过学生的id来找到这个学生,然后将后面的学生覆盖前面的那个学生信息实验四 指针类型变量的使用一、实验目的1.掌握指针类型变量的定义与使用;2.掌握使用指针访问结构体;3.掌握内存分配与回收函数的

28、使用。二、实验内容及要求1、编程实现一个整数的输入,并利用指针变量返回该数的绝对值。2、复用实验三的学生结构体类型定义,编程实现6个学生成绩信息的输入,并利用指针实现对这6个学生成绩信息的访问,计算每个学生三门课的平均成绩(等级成绩按照A:90,B:80,C:70,D:60,E:0处理),并计算每门课的平均成绩。3、除了实现计算每个学生三门课的平均成绩和每门课的平均成绩,学生还需要根据自己对学生成绩管理系统的理解尽可能增加新的功能。(提示:“增加某个学生成绩”、“删除某个学生成绩”、“修改某个学生成绩”、“查找某个学生成绩”等功能)要求:(1)主函数定义结构体指针变量,并采用malloc函数分

29、配内存,通过指针访问结构体各成员,输入学生信息。(2)每个功能由相应的函数实现(函数的参数为结构体指针),由主函数调用。(3)系统采用字符界面,在出现的主界面中按提示输入相应字符以选择相应功能而执行相应操作。(注意:当用户选择相应字符执行完毕相应功能后,系统重新展示主界面,直到用户选择结束字符程序才终止运行)三:程序代码如下:#include #include #include #define N 100using namespace std;enum grade /定义枚举类型A,B,C,D,E;union score/定义共用体类型int numscore;enum grade grade

30、scroe;struct student /定义结构体类型int stuid;char stuname20;char stuclass20;union score english,maths,chinese,average;float avg(char english,float maths,float chinese)/求某个学生三门课的平均值switch(english)case A:return (90+maths+chinese)/3;break;case B:return (80+maths+chinese)/3;break;case C:return (70+maths+chine

31、se)/3;break;case D:return (60+maths+chinese)/3;break;case E:return (maths+chinese)/3;break;default:return (maths+chinese)/3;break;/整数的输入,返回绝对值int num_print(int num,int *p)if(num=0)*p=num;if(num0)*p=-num;return *p;/创建学生信息void creatStu(struct student *stu,int number)int i;float aveg;/输入学号、姓名、班级、英语、数学、

32、语文、平均值cout请输入学号,姓名,班级,英语,数学,语文n;for(i=0;istui.stuid;cinstui.stuname;cinstui.stuclass;/cinstui.english.gradescroe;cinch;if (ch = A)stui.english.gradescroe = A;if (ch = B)stui.english.gradescroe = B;if (ch = C)stui.english.gradescroe = C;if (ch = D)stui.english.gradescroe = D;if (ch = E)stui.english.g

33、radescroe = E;cinstui.maths.numscore;cinstui.chinese.numscore;aveg=avg(stui.english.gradescroe,stui.maths.numscore,stui.chinese.numscore);/调用函数求平均值stui.average.numscore=aveg;/将学生的信息显示出来void travellerStudent(struct student *stu,int number) int i; /输出学号、姓名、班级、英语、数学、语文、平均值 cout学号t姓名t班级t英语t数学t语文t平均值n; f

34、or(i=0;inumber;i+)char ch;coutstui.stuidtstui.stunametstui.stuclasst;if(stui.english.gradescroe=A)ch= A;if(stui.english.gradescroe=B)ch= B;if(stui.english.gradescroe=C)ch= C;if(stui.english.gradescroe=D)ch= D;if(stui.english.gradescroe=E)ch= E;coutchtstui.maths.numscoretstui.chinese.numscoretstui.av

35、erage.numscoren; /输出每门课的平均成绩void each_course(struct student *stu,int number)int i;float ch;float eng=0,math=0,chine=0;for(i=0;inumber;i+)if(stui.english.gradescroe=A)ch= 90;if(stui.english.gradescroe=B)ch= 80;if(stui.english.gradescroe=C)ch= 70;if(stui.english.gradescroe=D)ch= 60;if(stui.english.gra

36、descroe=E)ch= 0;eng+=ch;math+=stui.maths.numscore;chine+=stui.chinese.numscore;cout英语成绩的平均成绩为: eng/numbern;cout数学成绩的平均成绩为: math/numbern;cout语文成绩的平均成绩为: chine/numbern;/增加学生void inserset_Stu(struct student *stu,int num,int &number)int i;int j;j=number;cout请输入学号,姓名,班级,英语,数学,语文n;for(i=j;istui.stuid;cins

37、tui.stuname;cinstui.stuclass;cinch;if (ch = A)stui.english.gradescroe = A;if (ch = B)stui.english.gradescroe = B;if (ch = C)stui.english.gradescroe = C;if (ch = D)stui.english.gradescroe = D;if (ch = E)stui.english.gradescroe = E;cinstui.maths.numscore;cinstui.chinese.numscore;aveg=avg(stui.english.

38、gradescroe,stui.maths.numscore,stui.chinese.numscore);/调用函数求平均值stui.average.numscore=aveg;number+=num;cout添加成功!n;/删除学生信息void delete_Stu(struct student *stu,int stuid,int &number)int i;int j;for(i=0;inumber;i+)if(stui.stuid=stuid)for(j=i;jnumber-1;j+)stui=stui+1;-number;cout删除成功!n;/修改学生信息void updata_

39、Stu(struct student *stu,int stuid,int number)int i;float aveg;for(i=0;inumber;i+)if(stuid=stui.stuid)cout该学生原信息是:n学号t姓名t班级t英语t数学t语文endl;char ch,ch1;coutstui.stuidtstui.stunametstui.stuclasst;if(stui.english.gradescroe=A)ch= A;if(stui.english.gradescroe=B)ch= B;if(stui.english.gradescroe=C)ch= C;if(s

40、tui.english.gradescroe=D)ch= D;if(stui.english.gradescroe=E)ch= E;coutchtstui.maths.numscoretstui.chinese.numscoren;coutch1;if (ch1 = A)stui.english.gradescroe = A;if (ch1 = B)stui.english.gradescroe = B;if (ch1 = C)stui.english.gradescroe = C;if (ch1 = D)stui.english.gradescroe = D;if (ch1 = E)stui

41、.english.gradescroe = E;cinstui.maths.numscore;cinstui.chinese.numscore;aveg=avg(stui.english.gradescroe,stui.maths.numscore,stui.chinese.numscore);/调用函数求平均值stui.average.numscore=aveg;cout修改成功!n;/查询某个学生的成绩void searchStudent(struct student *stu,int userid,int number)int i;char ch;cout学号t姓名t班级t英语t数学t语

42、文t平均值n;for(i=0;inumber;i+)if(stui.stuid=userid)coutstui.stuidtstui.stunametstui.stuclasst;if(stui.english.gradescroe=A)ch= A;if(stui.english.gradescroe=B)ch= B;if(stui.english.gradescroe=C)ch= C;if(stui.english.gradescroe=D)ch= D;if(stui.english.gradescroe=E)ch= E;coutchtstui.maths.numscoretstui.chinese.numscoretstui.average.numscoren;int main()struct student *stu;/给stu分配内存空间stu=(student *)malloc(N*sizeof(student);int number,i,print=1,id,num;while(print!=0)cout*endl;cout输入相应的数字来执行操作endl;cout 1:创建学生信息endl;cout 2:输出学生信息以及成绩endl;cout 3:输出每门课的平均成绩endl;cout 4:增加学生信息endl

温馨提示

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

最新文档

评论

0/150

提交评论