zoukankan      html  css  js  c++  java
  • C语言寒假大作战04

    这个作业属于哪个课程 班级链接
    这个作业要求在哪里 C语言寒假大作战04
    这个作业的目标 使用上次作业的菜单框架,并在其基础上增加各年级题目的答案函数
    作业正文 如下所示
    参考文献 %g与%d还有很多比如百度百科之类的

    设计思路和遇到的问题

    思路

    在原本的操作上加入加和操作,然后先从一年级开始,再写二年级,最后写三年级的。

    问题

    最大的问题还是关于优先级的判断

    之前我是使用if-else语句,一层层的嵌套让我的思维很是混乱。但是在学长的帮助下,我理清楚了中间的关系,转而使用switch作为主体的优先级判断,这的确方便了很多

    后面又出现了一些问题,大多是switch中的使用,经常弄混符号两边的数字到底是什么,导致答案可能将同一个数字以不同的方式算了两边,而另一个数字却没有计算,而答案错误。

    程序结果截图




    程序代码

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <conio.h>
    #include<stdlib.h>
    #include<time.h>
    
    void help();
    int menu();
    void error();
    void grade_1();
    void grade_2();
    void grade_3();
    double answer(double a, double b, double c, char d, char e);
    
    int main()
    {
    	int grade = 1;c
    
    	printf("========== 口算生成器 ==========
    ");
    	printf("欢迎使用口算生成器 :)
    ");
    	printf("
    
    ");
    
    	help();
    	while (grade)
    	{
    		grade = menu();
    
    		switch (grade)
    		{
    		case 1: grade_1(); break;
    		case 2: grade_2(); break;
    		case 3: grade_3(); break;
    		case 4: help(); break;
    		case 5: grade = 0; break;
    		default: error(); grade = 1; break;
    		}
    	}
    	printf("程序结束, 欢迎下次使用
    ");
    	printf("任意键结束……");
    
    	_getch();
    	return 0;
    }
    
    void help()
    {
    	printf("帮助信息:
    ");
    	printf("您需要输入命令代号来进行操作, 且
    ");
    	printf("一年级题目为不超过十位的加减法;
    ");
    	printf("二年级题目为不超过百位的乘除法;
    ");
    	printf("三年级题目为不超过百位的加减乘除混合题目.
    ");
    	printf("
    
    ");
    }
    
    int menu()
    {
    	int a = 0;
    	printf("操作列表:
    ");
    	printf("1)一年级    2)二年级    3)三年级
    ");
    	printf("4)帮助      5)退出程序
    ");
    	printf("请输入操作> ");
    	scanf("%d", &a);
    	printf("< 执行操作 :)
    ");
    	printf("
    
    ");
    	return a;
    }
    
    void error()
    {
    	printf("Error!!!报错了哦乖乖别乱按哦
    ");
    	printf("错误操作指令, 请重新输入
    ");
    	printf("
    
    ");
    }
    
    void grade_1()
    {
    	printf("现在是一年级题目
    ");
    	int num = 0;
    	printf("请输入所需要的题目个数>");
    	scanf("%d", &num);
    	printf("< 执行操作 :)
    
    ");
    
    	int a, b, c;
    	srand((unsigned)time(NULL));
    
    	printf("/*----- 一年级 -----*/
    
    ");
    
    	for (int i = 0; i < num; i++)
    	{
    		a = rand() % 10;
    		b = rand() % 10;
    		c = rand() % 2;
    		if (c == 0)
    		{
    			printf("%d + %d = %d
    ", a, b, a + b);
    		}
    		else
    		{
    			printf("%d - %d = %d
    ", a, b, a - b);
    		}
    	}
    }
    
    void grade_2()
    {
    	printf("现在是二年级题目:
    ");
    	int num = 0;
    	printf("请输入所需要的题目个数");
    	scanf("%d", &num);
    	printf("< 执行操作 :)
    
    ");
    
    	double a, b, c;
    	srand((unsigned)time(NULL));
    
    	printf("/*----- 二年级 -----*/
    
    ");
    
    	for (int i = 0; i < num; i++)
    	{
    		a = rand() % 100;
    		b = rand() % 100;
    		c = rand() % 2;
    		if (c == 0)
    		{
    			printf("%2g * %2g = %g
    ", a, b, a * b);
    		}
    		else
    		{
    			printf("%2g / %2g = %g
    ", a, b + 1, a / (b + 1));
    		}
    	}
    }
    
    int num_dividend()
    {
    	for (int i = 0; true; i++)
    	{
    		if (i = rand() % 100)
    			return i;
    	}
    }
    
    char four_arithmetic(int num)
    {
    	switch (num)
    	{
    	case 1: return '+';
    	case 2: return '-';
    	case 3: return '*';
    	case 0: return '/';
    	}
    }
    void grade_3()
    {
    	printf("现在是三年级题目:
    ");
    	int num = 0;
    	printf("请输入所需要的题目个数");
    	scanf("%d", &num);
    	printf("< 执行操作 :)
    
    ");
    
    	printf("/*----- 三年级 -----*/
    
    ");
    
    	double a = 0, b = 0, c = 0;
    	char d, e;
    	for (int i = 0; i < num; i++)
    	{
    		printf("%2g %c %2g %c %2g = %g
    ", a = num_dividend(), d = four_arithmetic(rand() % 4),
    			b = num_dividend(), e = four_arithmetic(rand() % 4), c = num_dividend(), answer(a, b, c, d, e));
    	}
    }
    
    double answer(double a, double b, double c, char d, char e)
    {
    	double result = 0;
    	if (d == '*' || d == '/')
    	{
    		switch (d)
    		{
    		case '*': result = a * b; break;
    		case '/': result = a / b; break;
    		}
    
    		switch (e)
    		{
    		case '+': return result + c;
    		case '-': return result - c;
    		case '*': return result * c;
    		case '/': return result / c;
    		}
    	}
    	else if (e == '*' || e == '/')
    	{
    		switch (e)
    		{
    		case '*': result = b * c; break;
    		case '/': result = b / c; break;
    		}
    
    		switch (d)
    		{
    		case '+': return a + result;
    		case '-': return a - result;
    		case '*': return a * result;
    		case '/': return a / result;
    		}
    	}
    	else
    	{
    		switch (d)
    		{
    		case '+': result = a + b; break;
    		case '-': result = a - b; break;
    		}
    
    		switch (e)
    		{
    		case '+': return result + c;
    		case '-': return result - c;
    		}
    	}
    }
    

    Gitee上传截图与链接

    一只雯子


  • 相关阅读:
    initramfs扫描磁盘前改变磁盘上电顺序
    “井号键”用英语怎么说?
    syslog,rsyslog and syslog-ng
    glob (programming) and spool (/var/spool)
    CentOS 6.5语言包裁剪
    C​P​U​_​C​S​t​a​t​e​_​P​S​t​a​t​e and then ACPI on Wiki
    we are experimenting with a new init system and it is fun
    linux init->upstart->systemd
    微信浏览器内建的WeixinJSBridge 实现“返回”操作
    npm i node-sass 报错&npm 镜像切换
  • 原文地址:https://www.cnblogs.com/wenwener/p/12262322.html
Copyright © 2011-2022 走看看