zoukankan      html  css  js  c++  java
  • C语言博客作业03--函数

    这个作业属于哪个班级 C语言--网络2011/2012
    这个作业的地址 C博客作业03--函数
    这个作业的目标 学习如何设计函数、C语言基本数据类型
    姓名 邓宏

    0.展示PTA总分(0----2)

    1.本章学习总结(4分)

    函数作用:简化代码书写,增加代码可读性
    语法:

    void gcd( int x, int y );//函数声明
    int main()
    {...}
    void gcd( int x, int y )//函数定义,注意函数中的变量与主函数无关,需从新定义
    {
    //该函数无返回值,不用return
    }
    int gcd( int x, int y );//函数声明
    int main()
    {...}
    void gcd( int x, int y )//函数定义,注意函数中的变量与主函数无关,需从新定义
    {
    return ?;
    }
    

    1.1 函数定义、调用、声明

    void gcd( int x, int y );
    int gcd( int x, int y );//注意函数中的变量与主函数无关,需重新定义
    

    1.2 全局变量、静态局部变量

    全局变量:加在各函数外,各函数该变量默认值被定义
    静态局部变量:在函数中被定义,只用于函数

    1.3 C数据类型及注意点

    每个数据类型特点及其相关知识的扩展。如浮点误差、字符型数据输入问题等等
    返回值为整形用int
    返回值为双精度用double
    无返回值用void

    1.4 C运算符

    函数调用:你定义的函数()
    学习体会:
    很实用,可以简便代码,使代码条例更清楚

    2.综合作业(6分):小学生口算表达式自动生成系统

    2.1.模块流程图

    请梳理各模块流程图,在编程前先画流程图再写代码。代码中有修改,流程图也跟着修改。二级模块,可以再画流程图展示。

    一年级模块流程图

    二年级模块流程图

    三年级 模块流程图

    2.2.函数功能及全局变量介绍

    介绍你用到核心函数接口及全局变量。

    void OperateMenu();//游戏操作界面
    void GradeOneMenu();//一年级
    void GradeTwoMenu();//二年级
    void GradeThreeMenu();//三年级
    int Getvalue(int grade);//生成随机数
    int Getsymbol(int grade);//生成随机符号
    

    全局变量:无

    2.2.1.全局变量

    没用到,作用:定义一个所有函数都可以用的默认变量

    2.2.2 菜单相关函数

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include"expression"
    void OperateMenu()//游戏操作界面
    {
    	char option;
    	int i;
    	int temp;
    	system("cls");//清屏
    
    	do
    	{
    		system("cls");
    		printf("******************************************
    ");
    		printf("1.一年级口算
    ");
    		printf("2.二年级口算
    ");
    		printf("3.三年级口算
    ");
    		printf("4.退出系统
    ");
    		printf("******************************************
    ");
    		printf("请输入您的选择:");
    		scanf(" %c", &option);
    		switch (option)
    		{
    		case '1':
    			system("cls");
    			GradeOneMenu();
    			//GradeOneMenu();
    			break;
    		case '2':
    			system("cls");
    			GradeTwoMenu();
    			break;
    		case '3':
    			system("cls");
    			GradeThreeMenu();
    			break;
    		case '4':
    			printf("
    谢谢您的参与!
    ");
    			Sleep(500);
    			exit(0);
    		default:
    			printf("您输入不对,只能输入1,2,3,4,请重输!
    ");
    			Sleep(500);
    		}
    	} while (!(option >= '1' && option <= '4'));
    }
    

    2.2.2 出题相关函数

    随机数函数:

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include"expression"
    int Getvalue(int grade)//生成随机数
    {
    	int value;
    	switch (grade)
    	{
    	case 1:value = 1 + rand() % 9;break;
    	case 2:value = 1 + rand() % 100;break;
    	case 3:value = 11 + rand() % 90;break;
    	}
    	return value;
    }
    

    随机符号函数:

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include"expression"
    int Getsymbol(int grade)//生成随机符号
    {
    	char symbol;
    	int value=0;
    	switch (grade)
    	{
    	case 1:value = rand() % 2;break;
    	case 2:value = rand() % 4;break;
    	}
    	switch (value)
    	{
    	case 0:symbol = '+';break;
    	case 1:symbol = '-';break;
    	case 2:symbol = '*';break;
    	case 3:symbol = '/';break;
    	}
    	return symbol;
    }
    

    注:
    1.随机数相减时为若结果负号,两数字互换
    2.相除时可用num2=num1*随机数,保证除数结果为整数
    3.用right/count算正确lv
    一年级:

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include"expression"
    void GradeOneMenu()//一年级
    {
    
    	while (1)
    	{
    		system("cls");
    		printf("*********************一年级小朋友好!********************************
    ");
    		printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
    		printf("**如果您不想做,输入n退回主菜单。
    ");
    		printf("***************************************************************
    ");
    
    		/*1.生成操作数函数*/
    		/*2.生成随机运算符函数*/
    		/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
    		/*4.生成表达式函数,并输出展示*/
    
    		printf("是否继续答题/n:");
    		char ch;
    		scanf("
    %c", &ch);
    		if (ch == 'n')
    		{
    			Sleep(500);
    			OperateMenu();
    			return;
    		}
    		if(ch=='y')//选择答题
    		{
    			/*答题模块*/
    			int i, count=0,right=0;
    			printf("请输入你要写的题数:");
    			scanf("%d", &count);
    			for (i = 1;i <= count;i++)
    			{
    				char choose;
    				printf("如果你想退出打出a,若想继续请打回车
    ");
    				scanf("%c", &choose);
    				choose=getchar();
    				if (choose == 'a')break;
    				int num1, num2, answer, rightkey = 0;
    				char symbol;
    				srand((unsigned)time(NULL));
    				num1 = Getvalue(1);
    				num2 = Getvalue(1);
    				symbol = Getsymbol(1);
    				if (num1 < num2)
    				{
    					int temp;
    					temp = num1;
    					num1 = num2;
    					num2 = temp;
    				}
    				printf("%d%c%d=", num1, symbol, num2);
    				scanf("%d", &answer);
    				switch (symbol)
    				{
    				case '+':rightkey = num1 + num2;break;
    				case '-':rightkey = num1 - num2;break;
    				}
    				if (answer == rightkey)
    				{
    					right++;
    					printf("Good job!
    ");
    				}
    				else
    				{
    					printf("Error!");
    					printf("正确答案:%d
    ", rightkey);
    				}
    				Sleep(1000);
    				system("cls");
    			}
    			double accuracy=0;
    			if (i >= 2)
    			{
    				accuracy = right * 1.0 / count;
    				printf("正确率:%.2f
    ", accuracy);
    				if (accuracy >= 0.9999)printf("现在各位观众给我全体起立!");
    				else if (accuracy >= 0.8)printf("很牛逼!");
    				else if (accuracy >= 0.6 && accuracy <= 0.8)printf("分不在高,及格就行。");
    				else if (accuracy <= 0.6 && accuracy >= 0.0001) printf("不行啊,多捞啊!");
    				else printf("年轻人耗子尾汁。");
    				Sleep(2000);
    			}
    		}
    	}
    
    }
    

    二年级:

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include"expression"
    void GradeTwoMenu()//二年级
    {
    
    	while (1)
    	{
    		system("cls");
    		printf("*********************二年级小朋友好!********************************
    ");
    		printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
    		printf("**如果您不想做,输入n退回主菜单。
    ");
    		printf("***************************************************************
    ");
    
    		/*1.生成操作数函数*/
    		/*2.生成随机运算符函数*/
    		/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
    		/*4.生成表达式函数,并输出展示*/
    
    		printf("是否继续答题y/n:");
    		char ch;
    		scanf("
    %c", &ch);
    		if (ch == 'n')
    		{
    			Sleep(500);
    			OperateMenu();
    			return;
    		}
    		if (ch == 'y')//选择答题
    		{
    			/*答题模块*/
    			int i, count = 0, right = 0;
    			printf("请输入你要写的题数:");
    			scanf("%d", &count);
    			for (i = 1;i <= count;i++)
    			{
    				char choose;
    				printf("如果你想退出打出a,若想继续请打回车
    ");
    				scanf("%c", &choose);
    				choose = getchar();
    				if (choose == 'a')break;
    				int num1, num2, answer, rightkey = 0;
    				char symbol;
    				srand((unsigned)time(NULL));
    				symbol = Getsymbol(2);
    				if (symbol == '*')
    				{
    					num1 = Getvalue(1);
    					num2= Getvalue(1);
    				}
    				else if (symbol == '/')
    				{
    					num2 = Getvalue(1);
    					num1 = Getvalue(1) * num2;
    				}
    				else
    				{
    					num1 = Getvalue(2);
    					num2 = Getvalue(2);
    				}
    				if (num1 < num2)
    				{
    					int temp;
    					temp = num1;
    					num1 = num2;
    					num2 = temp;
    				}
    				printf("%d%c%d=", num1, symbol, num2);
    				scanf("%d", &answer);
    				switch (symbol)
    				{
    				case '+':rightkey = num1 + num2;break;
    				case '-':rightkey = num1 - num2;break;
    				case'*':rightkey = num1 * num2;break;
    				case'/':rightkey = num1 / num2;break;
    				}
    				if (answer == rightkey)
    				{
    					right++;
    					printf("Good job!
    ");
    				}
    				else
    				{
    					printf("Error!");
    					printf("正确答案:%d
    ", rightkey);
    				}
    				Sleep(1000);
    				system("cls");
    			}
    			double accuracy = 0;
    			if (i >= 2)
    			{
    				accuracy = right * 1.0 / count;
    				printf("正确率:%.2f
    ", accuracy);
    				if (accuracy >= 0.9999)printf("现在各位观众给我全体起立!");
    				else if (accuracy >= 0.8)printf("很牛逼!");
    				else if (accuracy >= 0.6 && accuracy <= 0.8)printf("分不在高,及格就行。");
    				else if (accuracy <= 0.6 && accuracy >= 0.0001) printf("不行啊,多捞啊!");
    				else printf("年轻人耗子尾汁。");
    			}
    		}
    	}
    
    }
    

    三年级:

    #include<stdio.h>
    #include<windows.h>
    #include<stdlib.h>
    #include<time.h>
    #include"expression"
    void GradeThreeMenu()//二年级
    {
    
    	while (1)
    	{
    		system("cls");
    		printf("*********************三年级小朋友好!********************************
    ");
    		printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。
    ");
    		printf("**如果您不想做,输入n退回主菜单。
    ");
    		printf("***************************************************************
    ");
    
    		/*1.生成操作数函数*/
    		/*2.生成随机运算符函数*/
    		/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
    		/*4.生成表达式函数,并输出展示*/
    
    		printf("是否继续答题y/n:");
    		char ch;
    		scanf("
    %c", &ch);
    		if (ch == 'n')
    		{
    			Sleep(500);
    			OperateMenu();
    			return;
    		}
    		if (ch == 'y')//选择答题
    		{
    			/*答题模块*/
    			int i, count = 0, right = 0;
    			printf("请输入你要写的题数:");
    			scanf("%d", &count);
    			for (i = 1;i <= count;i++)
    			{
    				char choose;
    				printf("如果你想退出打出a,若想继续请打回车
    ");
    				scanf("%c", &choose);
    				choose = getchar();
    				if (choose == 'a')break;
    				int num1, num2, answer, rightkey = 0;
    				char symbol;
    				srand((unsigned)time(NULL));
    				symbol = Getsymbol(2);
    				if (symbol == '/')
    				{
    					num2 = Getvalue(3);
    					num1 = Getvalue(2) * num2;
    				}
    				else
    				{
    					num1 = Getvalue(2);
    					num2 = Getvalue(2);
    				}
    				if (num1 < num2)
    				{
    					int temp;
    					temp = num1;
    					num1 = num2;
    					num2 = temp;
    				}
    				printf("%d%c%d=", num1, symbol, num2);
    				scanf("%d", &answer);
    				switch (symbol)
    				{
    				case '+':rightkey = num1 + num2;break;
    				case '-':rightkey = num1 - num2;break;
    				case'*':rightkey = num1 * num2;break;
    				case'/':rightkey = num1 / num2;break;
    				}
    				if (answer == rightkey)
    				{
    					right++;
    					printf("Good job!
    ");
    				}
    				else
    				{
    					printf("Error!");
    					printf("正确答案:%d
    ", rightkey);
    				}
    				Sleep(1000);
    				system("cls");
    			}
    			double accuracy = 0;
    			if (i >= 2)
    			{
    				accuracy = right * 1.0 / count;
    				printf("正确率:%.2f
    ", accuracy);
    				if (accuracy >= 0.9999)printf("现在各位观众给我全体起立!");
    				else if (accuracy >= 0.8)printf("很牛逼!");
    				else if (accuracy >= 0.6 && accuracy <= 0.8)printf("分不在高,及格就行。");
    				else if (accuracy <= 0.6 && accuracy >= 0.0001) printf("不行啊,多捞啊!");
    				else printf("年轻人耗子尾汁。");
    				Sleep(2000);
    			}
    		}
    	}
    
    }
    

    2.3.运行结果截图,测试用例。

    登录界面:

    登录界面2:

    书写题数:

    判断是否继续后给出题目:

    答对:

    答错:

    答题结果1:

    答题结果2:

    2.4.大作业中编程技巧总结

    1.srand函数:可通过修改种子将rand生成随机数变为真随机数
    2.编菜单互动

  • 相关阅读:
    css样式的六种选择器
    css 颜色表示法
    css 文本设置
    “http”和“https”的区别是什么?优缺点是什么?
    Httpclient
    接口认证:Bearer Token(Token 令牌)
    哪个参数用来区分请求来自客户(手机)端还是服务器(PC)端?
    常用的HTTP响应头
    Http 请求头包含哪些信息?
    单例集合的体系
  • 原文地址:https://www.cnblogs.com/denghong88/p/14053313.html
Copyright © 2011-2022 走看看