附件(四)
本文档仅限于学习交流,禁止抄袭。程序结果截图非本人信息,请自行修改。
深 圳 大 学 实 验 报 告
课程名称: C程序设计
实验名称: Lab Assignment 3
学 院:while语句的嵌套流程图 信息工程学院
专 业:
指导教师:
报 告 人:
报告人学号: 班级:
实 验 时 间:
报告提交时间:
教务处制
一、实验目的与要求 实验目的: (1) 学习和掌握C语言函数的定义与调用; (2) 进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法; (3) 进一步掌握C语言中的数组定义和引用方法; (4) 学习和掌握根据流程图进行模块化程序设计的思想。 实验要求: 1) 在VC++中建立一个工程; 2) 在程序开始的注释行中写上你自己的信息; 3) 定义一个函数randN1N2(int rN1, int rN2 )。该函数有两个整型的输入参数rN1和 rN2,其中,rN1 <= rN2。该函数的功能是生成rN1到 rN2之间均匀分布的随机整数,该函数的返回值类型是整型。每调用一次该函数,函数返回一个rN1 至 rN2之间的随机整数(随机数的生成方法可参考Lab Assessment 3 )。 4) 定义一个函数randOper4( )。该函数没有输入参数,函数的返回类型是整型。该函数内部调用上述randN1N2( ) 函数。每调用一次函数randOper4( ),返回一个1至4之间的随机整数。 5) 定义一个函数randLmt100( )。该函数没有输入参数,函数的返回类型是整型。该函数内部调用上述randN1N2( ) 函数。每调用一次函数randLmt100( ),返回一个0-99之间的随机整数。 6) 定义一个函数addLmt100(int num1, int num2)。该函数有两个整型的输入参数num1和 num2;函数返回值类型为整型。该函数的功能是:在屏幕上列出一个算式num1 + num2 =,然后接受一个键盘输入的计算答案answer。若结果正确,则屏幕输出一句赞扬的语句,然后返回函数值1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案,然后返回函数值0。 7) 定义一个函数subLmt100(int num1, int num2)。该函数有两个整型输入参数num1和 num2;函数返回值类型为整型。该函数的功能是:在屏幕上列出一个算式 numM1 - numM2 = ,其中:numM1是num1和 num2中较大的一个数,numM2是num1和 num2中较小的一个数;然后接受一个键盘输入的计算答案answer。若结果正确,则屏幕输出一句赞扬的语句,然后返回函数值1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案,然后返回函数值0。 8) 定义一个函数mulLmt100(int num1, int num2)。该函数有两个整型输入参数num1和 num2;函数返回值类型为整型。该函数的功能是:在屏幕上列出一个算式num1 × num2 =,然后接受一个键盘输入的计算答案answer。若结果正确,则屏幕输出一句赞扬的语句,然后返回函数值1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案,然后返回函数值0。 9) 定义一个函数divLmt100( )。该函数没有输入参数;函数返回值类型为整型。该函数的功能是:首先调用randLmt100( )函数生成两个随机整数num1和 num2,并判断num1是否可以被num2整除,若不能整除,则调用randLmt100( )函数重新生成两个新的num1和 num2,然后再进行整除性判断,直到生成的num1可以被num2整除;在num1可以被num2整除的情况下,在屏幕上列出一个算式num1 ÷ num2 =,然后接受一个键盘输入的计算答案answer。若结果正确,则屏幕输出一句赞扬的语句,然后返回函数值1;若结果错误,则屏幕输出一句鼓励的语句,并输出正确答案,然后返回函数值0。 10) 主函数的功能如下:在主函数中调用上面定义的五个函数,在屏幕上随机循环出一道100以内的四则运算题。其中,定义一个整型数组proNum[4] 和整型数组ansNum[4],这两个数组中分别存储在上述游戏循环过程中加、减、乘、除四种类型的题出现的次数,以及这四种类型的题被答对的次数。在用户不想继续游戏退出时,在屏幕上显示本次游戏中的加、减、乘、除四种类型题出现的数量,以及每一种题被答对的次数。 11) 在实验报告中要求说明:程序中那些地方使用了选择结构,那些地方使用了循环结构,那些地方使用了函数的嵌套调用。 12) 在实验报告中,画出实现函数subLmt100(int num1, int num2) 和divLmt100( )功能的流程图。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
二、实验步骤与过程: 1.试验流程图设计: 函数subLmt100(int num1, int num2)的流程图 函数divLmt100( )的流程图 流程图说明: (1)左边是减法子函数的流程图,先生成两个随机数,并比较大小,让较大值减去较小值,得出正确答记为num; (2)用户输入自己的正确答案answer,系统通过对num和answer的对比做出不同的回应; (3)右边是除法子函数的流程图,先生成两个随机数,并判断除数是否为0,若为0则重新生成随机数; (4)判断两个数是否能够整除,若不能整除,直接结束,若可以整除,计算正确答案记为num; (5)用户输入自己的正确答案answer,系统通过对num和answer的对比做出不同的回应。 2.本实验的代码: #include<stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> int flag; int randN1N2(int rN1, int rN2 ) { int num; num = rand( ) % (rN2 - rN1+ 1) + rN1; return num; } int randOper4( ) { int randN1N2(int rN1, int rN2 ); int oper; oper = randN1N2(1, 4 ); return oper; } int randLmt100( ) { int randN1N2(int rN1, int rN2 ); int lmt; lmt = randN1N2(0, 99 ); return lmt; } int addLmt100(int num1, int num2) { int randLmt100( ); int num,answer; num1 = randLmt100( );//函数的嵌套调用 num2 = randLmt100( );//函数的嵌套调用 num = num1 + num2; printf("%d + %d = ",num1,num2); scanf("%d",&answer); if(answer == num) { printf("你答对了,真棒!!!\n"); flag = 1; } else { printf("对不起,你打错了,别灰心!!!正确答案是:\n\n%d + %d = %d\n\n",num1,num2,num); flag = 0; } return flag; } int subLmt100(int num1, int num2) { int randLmt100( ); int num,answer; num1 = randLmt100( );//函数的嵌套调用 num2 = randLmt100( );//函数的嵌套调用 if(num1 > num2) { num = num1 - num2; printf("%d - %d = ",num1,num2); scanf("%d",&answer); } else if (num1 <= num2) { num = num2 - num1; printf("%d - %d = ",num2,num1); scanf("%d",&answer); } if(answer == num) { printf("你答对了,真棒!!!\n"); flag = 1; } else { printf("对不起,你打错了,别灰心!!!正确答案是:\n"); printf("\n%d - %d = %d\n\n",num1,num2,num); flag = 0; } return flag; } int mulLmt100(int num1, int num2) { int randLmt100( ); int num,answer; num1 = randLmt100( );//函数的嵌套调用 num2 = randLmt100( );//函数的嵌套调用 num = num1 * num2; printf("%d * %d = ",num1,num2); scanf("%d",&answer); if(answer == num) { printf("你答对了,真棒!!!\n"); flag = 1; } else { printf("对不起,你打错了,别灰心!!!正确答案是:\n\n%d * %d = %d\n\n",num1,num2,num); flag = 0; } return flag; } int divLmt100( ) { int num1,num2,num,answer,m = 1; while(m)//循环结构 { num1 = randLmt100( );//函数的嵌套调用 num2 = randLmt100( );//函数的嵌套调用 if (num2 == 0) num2 = randLmt100( ); num = num1 / num2; m = num1 % num2; if (m != 0) { printf("这是一道除法题,由于结果不是整数,所以跳过!\n\n"); return 0; break; } printf("%d / %d = ",num1,num2); scanf("%d",&answer); if(answer == num) { printf("你答对了,真棒!!!\n"); flag = 1; } else { printf("对不起,你打错了,别灰心!!!正确答案是:\n\n%d / %d = %d\n\n",num1,num2,num); flag = 0; } return flag; } if(m == 0) m = 0; else m = 1; } void main() { srand( (unsigned)time( NULL ) ); int proNum[4] = {0}; int ansNum[4] = {0}; char c='y'; { while(c =='y') { int randLmt100( ); int addLmt100(int num1, int num2); int p,flag; p = randOper4( ); int num1 = randLmt100( ); int num2 = randLmt100( ); switch(p) { case 1: { flag = addLmt100(num1,num2); proNum[0]++; if(flag == 1) ansNum[0]++; break; } case 2: { flag = subLmt100(num1,num2); proNum[1]++; if(flag == 1) ansNum[1]++; break; } case 3: { flag = mulLmt100(num1,num2); proNum[2]++; if(flag == 1) ansNum[2]++; break; } case 4: { flag = divLmt100( ); proNum[3]+= flag; if(flag == 1) ansNum[3]++; break; } } c = getchar(); printf("\n\n你还想继续做吗?\n\n如果想继续,请按Y;若不想做了,请打任意键O(∩_∩)O~\n\n"); c = getchar(); } } printf("你计算的加法次数是%d,其中算对的次数是%d\n\n",proNum[0],ansNum[0]); printf("你计算的减法次数是%d,其中算对的次数是%d\n\n",proNum[1],ansNum[1]); printf("你计算的乘法次数是%d,其中算对的次数是%d\n\n",proNum[2],ansNum[2]); printf("你计算的除法次数是%d,其中算对的次数是%d\n\n",proNum[3],ansNum[3]); getchar(); } 三、实验结果(只列举了其中的一个例子): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
四、实验结果与数据分析: 1.首先,这次实验把我最近学的知识穿插了起来,让我进一步掌握了随机数、选择结构、循环控制、交互式输入输出等程序设计方法。 2.我认识到了写代码的重要性,例如空格,空行,缩进等细节。因为做到了这些细节,程序一旦发生了错误,修改的时候很容易下手,一目了然,别人看着也舒服。 3.我学会了用visio软件画流程图,这个软件简单快捷易操作。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(注:“指导教师批阅意见”栏请单独放置一页) 指导教师批阅意见:
成绩评定: 指导教师签字: 年 月 日 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
备注: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论