函数
C语言博客作业03--函数](https://www.cnblogs.com/linli069/p/9837435.html)
这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业03--函数 |
这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
姓名 | 陈垚嘉 |
0.展示PTA总分(0----2)
1.本章学习总结(4分)
1.1 函数定义、调用、声明
int function( int x, int y );//函数声明
int main()
{m=function(j);}//函数调用
int function( int x, int y )//函数定义,其中函数中的变量与主函数无关,需从新定义
{
...
return a;//返回a的值给function,若函数头为void则不用写return
}
1.2 全局、局部变量、静态局部变量
全局变量 定义在函数外面的变量,就叫全局变量。
普通的局部变量定义的时候直接定义或者在前面加上auto
void func1()
{
int i = 1;
i++;
printf("i = %d.\n", i);
}
静态局部变量(static) 静态局部变量定义时前面加static关键字。
1、静态局部变量和普通局部变量不同。静态局部变量也是定义在函数内部的,静态局部变量定义时前面要加static关键字来标识,静态局部变量所在的函数在多调用多次时,只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。本次接着来使用。
2、静态局部变量在第一次函数被调用时创造并初始化,但在函数退出时它不死亡,而是保持其值等待函数下一次被调用。下次调用时不再重新创造和初始化该变量,而是直接用上一次留下的值为基础来进行操作。
3、静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同
1.3 C数据类型及注意点
运用浮点型字符进行相除时,由于可能会出现误差,所以可以+0.0000001保证数据准确性
1.4 C运算符
1. 赋值运算符
= ,+= ,-= ,*= ,/= ,%=
2. 算术运算符
/ ,- ,+ ,* ,% ,++ ,--
3. 关系运算符
== ,< ,> ,<= ,>= ,!=
其中==,不要少写一个=!!!
4. 逻辑运算符
&&——同时 ,||——或 ,!——非
5. 三元运算符
int max=a>b?a:b;//如果a>b成立就让max=a,否则max=b;
学习体会
多写就多会,少写空流泪
2.综合作业(6分):小学生口算表达式自动生成系统
2.2.函数功能及全局变量介绍
2.2.1.全局变量
无
2.2.2 菜单相关函数
初始菜单
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'));
}
一年级菜单
system("cls");
printf("*********************一年级小朋友好!********************************\n");
printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
printf("**如果您不想做,输入n退回主菜单。\n");
printf("***************************************************************\n");
/*1.生成操作数函数*/
/*2.生成随机运算符函数*/
/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
/*4.生成表达式函数,并输出展示*/
printf("是否继续答题y/n:");
char ch;
int a, b, c, d, g, i = 0, t = 0, s;
scanf("\n%c", &ch);
if (ch == 'n')
{
Sleep(500);
OperateMenu();
return;
}
二年级菜单
system("cls");
printf("*********************二年级小朋友好!********************************\n");
printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
printf("**如果您不想做,输入n退回主菜单。\n");
printf("***************************************************************\n");
/*1.生成操作数函数*/
/*2.生成随机运算符函数*/
/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
/*4.生成表达式函数,并输出展示*/
printf("是否继续答题y/n:");
char ch;
int a, b, c, d, g, t = 0, s, i;//自左到又分别是数字1,数字2,运算符,加法减法乘法的结果,题目数量,答对的题数,是否继续的判断,当前的题数,除法的答案
float f;
scanf("\n%c", &ch);
if (ch == 'n')
{
Sleep(500);
OperateMenu();
return;
}
三年级菜单
system("cls");
printf("*********************三年级小朋友好!********************************\n");
printf("系统将随机生成一个口算式,如果您会做,则输入y,输入结果。\n");
printf("**如果您不想做,输入n退回主菜单。\n");
printf("***************************************************************\n");
/*1.生成操作数函数*/
/*2.生成随机运算符函数*/
/*3.根据年级判断生成的表达式是否合理的函数(选做)*/
/*4.生成表达式函数,并输出展示*/
printf("是否继续答题y/n:");
char ch;
int a, b, c, d, g, t = 0, s, i;
float f;
scanf("\n%c", &ch);
if (ch == 'n')
{
Sleep(500);
OperateMenu();
return;
}
2.2.2 出题相关函数
数字的随机————先选择要答的题数,然后在相关范围随机数字一(a)的值,然后将数字二的值随机为数字一加一(a+1)来避免b会大于a以此避免a-b<0的情况,令b为0时b重新随机避免b为0的情况
运算符的随机————随机一个数(c)为0到3的数(其中一年级为0到1)将四个数分别代表符号+-*/
准确率的计算————在程序运行当中,计算其中答案为正确的个数以便在程序结束时可以计算准确率
中途退出————设置一个标记函数(s)在第一题回答完时出现,输入这个标记函数的值来表示是否继续
//二年级
else//选择答题
{
/*答题模块*/
printf("请输入你要做的题目数量:");
scanf("%d", &g);
for (i = 1; i <= g; i++)
{
system("cls");
printf("第%d到题:\n", i);
srand((unsigned int)time(NULL)); //以时间设置为随机生成
c = rand() % 4; //随机生成0-3的数
if (c == 0) //加法
{
a = rand() % 100; //随机生成100内的数
b = rand() % 100; //随机生成100内的数
printf("需要中途退出则请答完这题按提示操作。\n");
printf("%d+%d=", a, b);
scanf("%d", &d);
if (d == a + b)
{
printf("恭喜答对了。\n"); t++;
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
else
{
printf("对不起你答错了,正确答案为:%d。\n", a + b);
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
}
else
if (c == 1) //减法
{
a = rand() % 100;//随机生成100内的数
b = rand() % (a + 1);//随机生成a内的数
printf("需要中途退出则请答完这天按提示操作。\n");
printf("%d-%d=", a, b);
scanf("%d", &d);
if (d == a - b)
{
printf("恭喜答对了。\n"); t++;
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
else
{
printf("对不起你答错了,正确答案为:%d。\n", a - b);
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
}
else if (c == 2) //除法
{
printf("若答案为小数请输入三位小数");
a = rand() % 10;//随机生成10内的数
b = rand() % 10;//随机生成a内的数
while (b == 0) //除数不为零
{
b = rand() % 10;//随机生成a内的数
}
printf("需要中途退出则请答完这题按提示操作。\n");
printf("%d/%d=", a, b);
scanf("%f", &f);
if (((f - a / (b * 1.0) <= 0.001) && (f >= a / (b * 1.0))) || ((a / (b * 1.0) - f <= 0.001) && (f <= a / (b * 1.0)))) //因为float存在误差,得用误差算
{
printf("恭喜答对了。\n"); t++;
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
else
{
printf("对不起你答错了,正确答案为:%.03f。\n", a / (b * 1.0));
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
}
else
if (c == 3) //乘法
{
a = rand() % 10;//随机生成10内的数
b = rand() % 10;//随机生成a内的数
printf("需要中途退出则请答完这天按提示操作。\n");
printf("%d*%d=", a, b);
scanf("%d", &d);
if (d == a * b)
{
printf("恭喜答对了。\n"); t++;
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
else
{
printf("对不起你答错了,正确答案为:%d。\n", a * b);
printf("退出按0,继续按1。\n");
scanf("%d", &s);
if (s == 0)
{
printf("你做的题正确率是:%.02f%%\n", t / (i * 1.0) * 100);
break;
}
}
}
}
if (s != 0)
printf("你做的题正确率是:%.02f%%\n", t / ((i - 1) * 1.0) * 100);
system("pause");
}
}
}
2.3.运行结果截图,测试用例
两个初始菜单
输入答案
题数上限
中途退出
2.4.大作业中编程技巧总结
第一个是通过数字的随机表示运算符的随机
第二个是通过system("pause");让程序定住