2022综合实验 3: 函数及数组的综合应用

一、实验目的与要求

  1. 学习和掌握 C 语言函数的定义与调用
  2. 进一步掌握随机数、选择结构、循环控制、交互式输入输出等程序设计方法
  3. 进一步掌握 C 语言中数组定义和引用方法
  4. 学习和掌握根据流程图进行模块化程序设计的思想
  5. 编译并运行你的程序。调试正确后,①将源程序*.c 文件上载;②将可执行程序*.exe 压缩后上载
  6. 提交正式的实验报告。实验报告的文件名为“学号姓名 综 3”,如“202x280168 王 敬华 综 3.doc
  7. 在实验报告中,要求画出实现函数 subLmt100(int num1, int num2) 和 divLmt100( )功能的流程图。

二、实验步骤与过程:

(给出编程思路并表示出算法,如画出流程图或伪代码表示。提供带注释的核心程序代码。要求:设计思路合理,程序运行正确、输出界面符合实验要求。)

函数subLmt100(int num1, int num2)的流程图如下:

函数divLmt100( )的流程图如下

程序的主代码如下

/**

* @author: 2021090225 Sheng-yang Chen

* @description: Four arithmetic games for children

* version: v0.01

* @date 2022-11-26 14:56

**/

#include<stdio.h>

#include<string.h>

#include<time.h>

int randN1N2(int N1,int N2)

{

        int randnum;

        randnum=rand()%(N2-N1+1)+N1;

        return(randnum);

}

//返回一个 N1 N2 之间的随机整数

char randOperator()

{

        int randN1N2(int N1,int N2);

        int a;

        a=randN1N2(0,99);

        if (a<25) return '+';

        else if (a<50 && a>24) return '-';

        else if (a<75 && a>49) return '*';

        else return '/';

}

int randLmt100()

{

        int a;

        a=randN1N2(0,99);

        return a;

}

//返回一个 0-99 之间的随机整数

int addLmt100(int num1, int num2)

{

        printf("%d + %d = ",num1,num2);

        int ans;

        scanf("%d",&ans);

        int real=num1+num2;

        if (ans==real)

        {

                 printf("恭喜你答对了");

                 return 1;

        }

        else

        {

                 printf("很遗憾,你答错了,正确答案是%d,请继续加油!",real);

                 return 0;

        }

}

//加法运算

 int subLmt100(int num1, int num2)

{

        int ans;

        int numMax,numMin;

        if (num1 > num2)

        {

                 numMax=num1;

                 numMin=num2;

        }

        else

        {

                 numMax=num2;

                 numMin=num1;

        }

        int real=numMax-numMin;

        printf("%d - %d = ",numMax,numMin);

        scanf("%d",&ans);

        if (ans==real)

        {

                 printf("恭喜你答对了");

                return 1;

        }

        else

        {

                 printf("很遗憾,你答错了,正确答案是%d,请继续加油!",real);

                 return 0;

        }

}

//最大数选取和减法运算

int mulLmt100(int num1, int num2)

{

        printf("%d * %d = ",num1,num2);

        int ans;

        scanf("%d",&ans);

        int real=num1*num2;

        if (ans==real)

        {

                 printf("恭喜你答对了");

                 return 1;

        }

        else

        {

                 printf("很遗憾,你答错了,正确答案是%d,请继续加油!",real);

                 return 0;

        }

}

//乘法运算

int divLmt100()

{

        int randLmt100();

        int num1,num2,ans;

        do{

                  num1=randLmt100();

             num2=randLmt100();

          }while ((num1%num2!=0));

//仅当num1可以被num2整除时才显示题目

        if (num1%num2==0)

        {

                 printf("%d / %d = ",num1,num2);

        scanf("%d",&ans);

        int real=num1/num2;

        if (ans==real)

        {

                 printf("恭喜你答对了");

                 return 1;

        }

        else

        {

                 printf("很遗憾,你答错了,正确答案是%d,请继续加油!",real);

                 return 0;

        }

        }

       

}

//除法运算

int main()

{

        int proNum[4]={0},ansNum[4]={0},sFlag=1,i;

        loop:       //循环起点

        srand((unsigned)time(NULL));

        int n1=randLmt100();

        int n2=randLmt100();

        char oper=randOperator();

        if (oper=='+')

        {

                 proNum[0]++;

                 ansNum[0]+=addLmt100(n1,n2);

        }

       

        else if (oper=='-')

        {

                 proNum[1]++;

                 ansNum[1]+=subLmt100(n1,n2);

        }

        else if (oper=='*')

        {

                 proNum[2]++;

                 ansNum[2]+=mulLmt100(n1,n2);

        }

        else if (oper=='/')

        {

                 proNum[3]++;

                 ansNum[3]+=divLmt100();

        }

        printf("\n若继续玩,直接打回车;\n若不想继续,键盘输入字母'N'或'n'后打回车;");

        getchar(); //清键盘缓冲区

        char c = getchar();

        printf("\n\n");

        if ( c =='N'||c =='n') sFlag=0;

        else {}

        if (sFlag==1)

        {

                 goto loop;

        }

       

        else

        {

                 printf("统计结果:\n");

        printf("运算类型   加   减   乘   除  \n");

        printf("题目数量");

       

        for(i=0;i<4;i++)

        {

                 printf("%4d ",proNum[i]);

        }

        printf("\n答对次数");

        for(i=0;i<4;i++)

        {

                 printf("%4d ",ansNum[i]);

        }     

    }

        return 0;

}

三、实验结果与分析:

(其中:提交程序运行情况及运行结果的截图,对实验结果与实验数据进行分析、评价,说明实验结果是否达到实验要求?同时回答“思考与上机验证问题”。)

上图为结果的一部分,经检验实验结果正确,实验结果达到实验要求,本次实验成功完成。

思考题:

1) 谈一下,为了更加吸引小朋友使用,应该如何设计该游戏的用户交互界面?

2) 对这个游戏,你还有什么改进的想法?请说明一下。

答:

1)可以在界面上增加图形的描绘,例如正确时跳出笑脸,失败时出现沮丧的表情,可以使程序更加生动。

2)上面是交互界面上的改进,程序上还可以增加一个图形判断的游戏,更加直观且更有趣。比如随机生成一个图形,判断图形中星号的个数。程序结果上还可以输出总的运算次数和答对次数,这会让游戏更具成就感。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值