首页 > 技术文章 > C语言博客作业03--函数

xiechi 2020-11-30 22:53 原文

| 这个作业属于哪个班级 |


| ---- | ---- | ---- |
| 这个作业的地址 |
目录

    | 这个作业的目标 |学习如何设计函数、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");//清屏
      

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

      • 可以在函数中间放入函数,来使界面返回到想要的界面。
        像在一年级的界面中如果选择不想做题,就去到游戏开始界面。

      推荐阅读