C语言寒假大作战04

格式

表格

|问题|答案
|:--|--😐:--:
| 这个作业属于那个课程 |https://edu.cnblogs.com/campus/zswxy/CST2019-2
|这个作业要求在哪里 |https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/10279
|我在这个课程的目标是 | 使用rand()函数,增加各年级题目操作函数和增加答案
|作业正文|https://i-beta.cnblogs.com/posts/edit
|参考文献|百度和同学代码

2.1.1内容

使用自定义函数、switch语句来完成菜单程序。

2.2.2 设计思路和遇到的问题

(1).设计思路
在原有基础上增加rand函数来增加一,二,三年级的题目数量;使之每个年级增加到十个数学计算和还需要再原本 ___ 的横线上加上答案。
(2).遇到的问题
就是除法会有除不尽的情况说以要有%g的情况,我搜了一下——%g用于打印浮点型数据时,会去掉多余的零,至多保留六位有效数字(不同于%e的默认保留小数点后6位)
当%g用于打印超过6位的浮点型数据时,因为精度问题,%f不得不输出一个不精确的超过六位的数字,%e也是同样,而%g此时会选择%e格式进行输出,并且按第一条要求,去掉多余的零,并且四舍五入到6位数字。这是《C Primer Plus》中所说的超过精度的时候的情况。 (可见,这个6位,是按float类型精度来计算的。)

2.2.3 程序结果截图



2.2.4 程序代码

1.1.1数据处理

#include<stdio.h>
#include<stdlib.h>
void operation1();
void operation2();
void operation3();
void menu();
void help();
void error();
int main()
{
int Grade=1;
printf("========口算生成器========\n欢迎使用口算生成器:)\n\n");
help();
menu(); 
while(Grade!=5){
    scanf("%d",&Grade);
    printf("<执行操作:)\n\n");
    switch(Grade){
        case 1:operation1();break;
        case 2:operation2();break;
        case 3:operation3();break;
        case 4:help();break;
        case 5:printf("程序结束,欢迎下次使用  任意键结束......\n");break;
        default:error();break;
    }if(Grade!=5) menu();
    }
    return 0;
 } 
void operation1(){
int a,b,i;
printf("现在是一年级题目:\n请输入生成个数>");
scanf("%d",&a);
for(i=0;i<a;i++){
    int yi=rand()%11;
    int er=rand()%11;
    char c[2]={'+','-'};
    b=rand()%2;
    if(c[b]=='+'){
        printf("%2d %c %2d= %d\n",yi,c[b],er,yi+er);    
    }
    else{
        printf("%2d %c %2d= %d\n",yi,c[b],er,yi-er);
     } 
    }
}
void operation2(){
int a,b,i;
printf("现在是二年级题目:\n请输入生成个数>");
scanf("%d",&a);
for(i=0;i<a;i++){
    double yi=rand()%101;
    double er=rand()%101;
    double san=rand()%100+1;
    char c[2]={'*','/'};
    b=rand()%2;
    if(c[b]=='/')printf("%2g / %2g= %g\n",yi,san,yi/san);
    else printf("%2g * %2g= %g\n",yi,er,yi*er);
}
}
void operation3(){
int a,b,i,b1;
printf("现在是三年级题目:\n请输入生成个数>");
scanf("%d",&a);
for(i=0;i<a;i++){
    double yi=rand()%101;
    double er=rand()%101;
    double san=rand()%101;
    double si=rand()%100+1;
    char c[4]={'+','-','*','/'};
    b=rand()%4;
    b1=rand()%4;
    if(c[b]=='*'){
        switch(c[b1]){
            case '-':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi*er-san);break; 
            case '+':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi*er+san);break;
            case '/':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],si,yi*er/si);break;
            case '*':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi*er*san);break;
        }
    } 
    if(c[b]=='+'){
        switch(c[b1]){
            case '-':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi+er-san);break;
            case '+':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi+er+san);break;
            case '/':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],si,yi+er/si);break;   
            case '*':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi+er*san);break;
        }
    } 
    if(c[b]=='-'){
        switch(c[b1]){
            case '-':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi-er-san);break;
            case '+':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi-er+san);break;
            case '/':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],si,yi-er/si);break;   
            case '*':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],er,c[b1],san,yi-er*san);break;
        }
    } 
    if(c[b]=='/'){
        switch(c[b1]){
            case '-':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],si,c[b1],san,yi/si-san);break; 
            case '+':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],si,c[b1],san,yi/si+san);break;
            case '/':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],si,c[b1],si,yi/si/si);break;   
            case '*':
                printf("%2g %c %2g %c %2g= %g\n",yi,c[b],si,c[b1],san,yi/si*san);break; 
         }
       } 
    }
}
void menu(){
printf("操作列表:\n1)一年级    2)二年级    3)三年级\n4)帮助     5)退出程序\n请输入操作>");
}
void help(){
printf("帮助信息:\n您需要输入命令代号来进行操作,且\n一年级题目为不超过十位的加减法;\n二年级题目为不超过百位的乘除法;\n三年级题目为不超过百位的加减乘除混合题目.\n\n");
}
void error(){
printf("Error!!!\n错误操作指令,请重新输入\n\n"); 
} 

2.2.5 Gitee上传截图与链接


posted @ 2020-02-16 10:51  天天搞博客  阅读(106)  评论(0编辑  收藏  举报