C语言博客作业03--函数
| 这个作业属于哪个班级 |
| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 |学习如何设计函数、C语言基本数据类型|
|姓名|王鑫|
0.展示PTA总分
1.本章学习总结
本章学习的函数,让我们更能了解C语言,像我们用的一些printf,scanf就是函数,是被定义过的在头文件里的。
用了函数可以使我们的代码更加简洁,提高可读性。
1.1函数定义、调用、申明
int function(int a)//函数申明
int main()
{
int a =function(1);//函数调用
//这里的实参可以传入数字,数组,算式。(但是这些必须是有值的,非变量)
}
int function(int a)//函数定义
\*在开始的“int”是这个函数的返回类型。
括号中间的是形参,当函数调用的时候要传入实参*\
{
语句//这里就是数据传入执行的语句
return a;
/*返回的类型要是函数定义的类型
如果函数类型是void;那么就可以不用返回*/
}
把一些重复使用的语句设置为一个函数,在需要的时候可以调用,可以减少空间。也能让代码可读性提高,逻辑清晰。是很方便的方法。
1.2 全局、局部变量、静态局部变量
- 把你想要运用到很多地方的变量写在函数外面,这个变量就可以在全局上使用。叫做全局变量。
- 而在函数内定义的变量就是这个只能在这个函数使用的局部变量。
- 而静态变量,它有在内存中占有一块地方,这个地方是不会再次改变。所以静态变量值初始化一次,下一次使用这个静态变量,它的值是上次静态变量的值。静态变量可以不用赋值,它自己是0的初值。
int globalVariable=0;//全局变量
static int GlobalStaticVariables;//全局静态变量,初值为0
int main()
{
int localVariable=0;//局部变量
static int LocalStaticVariables;//局部静态变量
globalVariable++;
GlobalStaticVariables++;
add();
printf("%d",LocalStaticVariables);
}
void add()
{
LocalStaticVariables++;
}
最后LocalStaticVariables=1;
1.3C数据类型及注意点
名称 | 类型名 | 数据长度 | 取值范围 |
---|---|---|---|
[有符号]整型 | int | 32位 | -2147483648~2147483647 |
有符号]短整型 | short[int] | 16位 | -32768~32767 |
[有符号]长整型 | long [int] | 32位 | -2147483648~2147483647 |
无符号整型 | unsigned[int] | 32位 | 0~4294967295 |
无符号短整型 | unsigned short[int] | 16位 | 0~65535 |
无符号长整型 | unsigned long [int] | 32位 | 0~4294967295 |
字符型 | char | 8位 | 0~255 |
单精度浮点型 | float | 32位 | 约±(10-38~1038) |
双精度浮点型 | doule | 64位 | 约±(10-308~10308) |
- 这个表格里是基本的数据类型,我们平时常用的是整型和字符型与浮点型。
- 数据有他自己的取值范围,取得值过大会导致数据溢出。
1.3.1整型
- 如果用来做除法,结果只取整数部分,要把计算结果用浮点数定义,且计算的公式带有小数。
1.3.2浮点数
因为对浮点数了解较少,我上网查询了相关资料。
- 由于计算机内部以二进制保存,所以十进制的有限位的小数,在计算机内部会是一个无限位的小数。
- 解决此类问题是时可以加上一个很小的小数,如0.000001。
- 当前面的计算都是整数时,但结果有小数时,记得要乘以1.0,这样结果才会是小数。
1.3.3字符型
- 注意当上一句的输出有换行符号时,输入字符时要在百分号前面加一个换行符号或者空格。
printf("是否继续,输入y/n\n");
scanf("\n%c");
1.4C运算符
目数 | 单目 | 单目 | 单目 | 单目 | 双目 | 双目 | 双目 | 双目 | 双目 |
---|---|---|---|---|---|---|---|---|---|
运算符 | ++ | -- | + | - | + | - | * | / | % |
名称 | 自增 | 自减 | 正值 | 负值 | 加 | 减 | 乘 | 除 | 模(求余) |
*n++和++n都是最后n的值加一但是它们的不同之处是n++这个式子还是原来的值,而++n的值是原来的值加1.
- 自增符和自减前面都必须是变量,不能3++。
1.4.2位运算符
|p|q|p & q|p 或 q|p ^ q|
| ---- | ---- | ---- | ---- | ---- | ---- |
|0|0|0|0|0|
|0|1|0|1|1|
|1| 1| 1| 1| 0|
|1| 0| 0| 1| 1|
2.综合作业 小学生口算表达式自动生成系统
2.1模块流程图
2.1.1总流程图
2.1.2一年级流程图
2.1.3二年级流程图
2.1.4三年级流程图
2.2函数功能介绍
- 我在口算大作业中设置了下面这些函数
void OperateMenu();//游戏操作界面
void GradeOneMenu();//一年级
void GradeTuoMenu();//二年级
void GradeThreeMenu();//三年级计算
int random();//随机个位数字
int randomTen();//生成两位数的
char oprate(int a);//生成运算符号
void rightAnswer();//正确答案时的肯定话语
void wrong();//做错时的鼓励
int judgeReasonable(int num1, int num2, char op);//判断符号与数据是否合理
void judgeAnswer(int num1, int num2, char op, int answer);//判断答案对错
void output(int num1, int num2, char op);//输出函数
2.2.1.全局变量
我设置了三个全局变量
static int rightNum;//正确数量
static int wrongNum;//错误数量
double accuracy;//正确率
这样保证不管是一年级还是二年级 三年级我都能计算对错的题数总和,来计算正确率。
然后正确率也可以算出来。
2.2.2.菜单相关函数
这个菜单的函数我直接使用老师给的模板
void OperateMenu();//游戏操作界面(是否进入三个不同年级计算的页面)
void GradeOneMenu();//一年级(做题或退出的一年级操作页面)
void GradeTuoMenu();//二年级(做题或退出的一年级操作页面)
void GradeTuoMenu();//三年级(做题或退出的一年级操作页面)
分别是开始进入三个年级操作界面的操作界面和
一、二、三年级是否做题的操作界面
void OperateMenu();//游戏操作界面(是否进入三个不同年级计算的页面)
void GradeOneMenu();//一年级(做题或退出的一年级操作页面)
void GradeTuoMenu();//二年级(做题或退出的一年级操作页面)
void GradeTuoMenu();//三年级(做题或退出的一年级操作页面)
2.2.3 出题相关函数
出题相关的函数我设置了下面这些函数
int random();//随机个位数字
int randomTen();//生成两位数的
char oprate(int a);//生成运算符号
void rightAnswer();//正确答案时的肯定话语
void wrong();//做错时的鼓励
int judgeReasonable(int num1, int num2, char op);//判断符号与数据是否合理
void judgeAnswer(int num1, int num2, char op, int answer);//判断答案对错
void output(int num1, int num2, char op);//输出函数
-
random();//随机个位数字:生成计算的数字,并且是个位的
-
randomTen();//生成两位数的:生成计算的数字,两位的
*char oprate(int a);//生成运算符号
*void rightAnswer();//正确答案时的肯定话语
*void wrong();//做错时的鼓励
*int judgeReasonable(int num1, int num2, char op);//判断符号与数据是否合理
*void judgeAnswer(int num1, int num2, char op, int answer);//判断答案对错
*void output(int num1, int num2, char op);//输出函数
2.3.运行结果截图,测试用例。
之后回到原来的页面
2.4.大作业中编程技巧总结
- 不同年级有不同运算符,我设置了传入的形参,来提醒函数做不同的返回。
- 当年级为三时,随机数可以有四种,二年级为一二时随机数只能有两种,以此来控制符号。
char oprate(int grade)//生成运算符号
{
char op;
int temp;
srand(time(0));
if (grade == 3)
{
temp = 1 + rand() % 4;
}
else
{
temp = 1 + rand() % 2;
}
switch (temp)
{
case 1:op = '+'; break;
case 2:op = '-'; break;
case 3:op = '*'; break;
case 4:op = '/'; break;
}
return op;
}
- 老师上课时教我们的清屏与睡眠
Sleep(500);//睡眠
system("cls");//清屏
使用清屏就可以让之前的留在窗口的东西清除,使得页面清晰、美观。
而有的时候我们需要留着界面返回的东西一会,然后还要清屏时,就可以在清屏前睡眠,这样这些界面可以停留相对应的毫秒。
- 可以在函数中间放入函数,来使界面返回到想要的界面。
像在一年级的界面中如果选择不想做题,就去到游戏开始界面。