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("******************************************\n");
printf("1.一年级口算\n");
printf("2.二年级口算\n");
printf("3.三年级口算\n");
printf("4.退出系统\n");
printf("******************************************\n");
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("\n谢谢您的参与!\n");
Sleep(500);
exit(0);
default:
printf("您输入不对,只能输入1,2,3,4,请重输!\n");
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("*********************一年级小朋友好!********************************\n");
printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
printf("**如果您不想做,输入n退回主菜单。\n");
printf("***************************************************************\n");
/*1.生成操作数函数*/
/*2.生成随机运算符函数*/
/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
/*4.生成表达式函数,并输出展示*/
printf("是否继续答题/n:");
char ch;
scanf("\n%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,若想继续请打回车\n");
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!\n");
}
else
{
printf("Error!");
printf("正确答案:%d\n", rightkey);
}
Sleep(1000);
system("cls");
}
double accuracy=0;
if (i >= 2)
{
accuracy = right * 1.0 / count;
printf("正确率:%.2f\n", 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("*********************二年级小朋友好!********************************\n");
printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
printf("**如果您不想做,输入n退回主菜单。\n");
printf("***************************************************************\n");
/*1.生成操作数函数*/
/*2.生成随机运算符函数*/
/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
/*4.生成表达式函数,并输出展示*/
printf("是否继续答题y/n:");
char ch;
scanf("\n%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,若想继续请打回车\n");
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!\n");
}
else
{
printf("Error!");
printf("正确答案:%d\n", rightkey);
}
Sleep(1000);
system("cls");
}
double accuracy = 0;
if (i >= 2)
{
accuracy = right * 1.0 / count;
printf("正确率:%.2f\n", 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("*********************三年级小朋友好!********************************\n");
printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
printf("**如果您不想做,输入n退回主菜单。\n");
printf("***************************************************************\n");
/*1.生成操作数函数*/
/*2.生成随机运算符函数*/
/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
/*4.生成表达式函数,并输出展示*/
printf("是否继续答题y/n:");
char ch;
scanf("\n%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,若想继续请打回车\n");
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!\n");
}
else
{
printf("Error!");
printf("正确答案:%d\n", rightkey);
}
Sleep(1000);
system("cls");
}
double accuracy = 0;
if (i >= 2)
{
accuracy = right * 1.0 / count;
printf("正确率:%.2f\n", 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.编菜单互动