C语言-随机产生10以内四则运算

  • Post author:
  • Post category:其他


随机产生的四则运算涉及随机数,在<stdlib.h>库有rand()函数可以随机产生0~32767值。rand()函数每次调用都会查询是否调用过srand(seed),是否给seed一个值,有则自动调用srand(seed)一次来初始化它的初始值,若没有调用srand那么系统会自动给seed赋初值1,即srand(1)。

用rand(),srand(seed)产生的随机数不会变,也失去了随机性,这个大家可以在自己电脑上试一试。原因在于seed这个种子(srand()函数需要一个种子)在赋初值就固定了,产生的数字自然也就固定了。鉴于上面可用时间作为种子,即srand(time(NULL)),因为运行程序时间不一样,随机数自然也不一样,时间需要在开头声明#include <time.h>。

至于生成10以内数字,需要用到%,如a=rand()%10+1。同样如果需要(a,b)内的值,可用rand%(b-a+1)+a。现在随机数有了,还差随机运算符,数字系统可以给我们解决,运算符该怎么解决呢?

依据我查的资料,可以用switch分支语句来控制,分为4种情况,分别表示加减乘除。此时需要我们再加入一个随机数,其值用上面办法得到1~4,最后在每一个分支里面计算。

下面是我在写的一道题,需要写10道并正确率要>75,希望对大家有帮助。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void Encourage(int a);

void Cheer(int a);

int main()

{


int a,b,d,t,count;     //a,b为产生的随机数,d控制运算符号,count控制10题数量

int c;               //c为输入+,-,*的数字

float f;             //f为除法结果

int sum;

srand(time(NULL));

do{                //do循环结束条件为sum>75

sum=0;           //每次循环sum从0记

for(count=1;count<=10;count++)  //count 统计共10题

{


t=rand()%4+1;

a=rand()%10+1;

d=rand()%4+1;

b=rand()%10+1;

switch(d)            //在每一分支有四则运算

{


case 1:

printf(“%d+%d=”,a,b);

scanf(“%d”,&c);

if(c==a+b){


Cheer(t);

sum=sum+10;

}

else{


Encourage(t);

}

break;

case 2:

printf(“%d-%d=”,a,b);

scanf(“%d”,&c);

if(c==a-b){


Cheer(t);

sum=sum+10;

}

else{


Encourage(t);

}

break;

case 3:

printf(“%d*%d=”,a,b);

scanf(“%d”,&c);

if(c==a*b){


Cheer(t);

sum=sum+10;

}

else{


Encourage(t);

}

break;

case 4:

printf(“%d/%d=”,a,b);

scanf(“%f”,&f);

if(f-(float)a/b<1e-5){


Cheer(t);

sum=sum+10;

}

else{


Encourage(t);

}

break;

}

}

printf(“%d%%\n”,sum);       //打印sum值

if(sum<75)

printf(“Try it again.\n”);

}while(sum<75);

return 0;

}

void Cheer(int a)

{


switch(a)

{


case 1:

printf(“Very good.\n”);

break;

case 2:

printf(“Excellent.\n”);

break;

case 3:

printf(“Nice work.\n”);

break;

case 4:

printf(“Keep up the good work.\n”);

break;

}

}

void Encourage(int a)

{


switch(a)

{


case 1:

printf(“Please try again.\n”);

break;

case 2:

printf(“Wrong.Try once more.\n”);

break;

case 3:

printf(“Do not give up!\n”);

break;

case 4:

printf(“No correct.Keep trying.\n”);

break;

}

}



版权声明:本文为m0_60773712原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。