附件(四)
本文档仅限于学习交流,禁止抄袭。程序结果截图非本人信息,请自行修改。
深 圳 大 学 实 验 报 告
课程名称:            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软件画流程图,这个软件简单快捷易操作。
(注:“指导教师批阅意见”栏请单独放置一页)
指导教师批阅意见:
实验报告内容完整性
(20分)
实验数据准确性(程序与程序运行结果)(30分)
实验结果与数据分析
(20分)
实验报告(格式规范、按时完成)
(20分)
实验态度(实验课考勤、实验表现)(10分)
完整
20
较完整
15
不完整
10
准确
30
较准确
20
不够准确
10
正确
20
较正确
10
不正确
0
20
较规范
15
不够规范
10
10
较好
5
2
说明:
说明:
说明:
说明:
说明:
成绩评定:
                                      指导教师签字:
                                                    年      月      日
备注:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。