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");//清屏

使用清屏就可以让之前的留在窗口的东西清除,使得页面清晰、美观。
而有的时候我们需要留着界面返回的东西一会,然后还要清屏时,就可以在清屏前睡眠,这样这些界面可以停留相对应的毫秒。

  • 可以在函数中间放入函数,来使界面返回到想要的界面。
    像在一年级的界面中如果选择不想做题,就去到游戏开始界面。
posted @ 2020-11-30 22:53  兴亡  阅读(145)  评论(2编辑  收藏  举报