函数

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


| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
|姓名| 喻文康|

0. 展示PTA总分

1. 本章学习总结

1.1 函数定义,声明,调用

关于函数的这三点,一般注意以下几点:

  1. 如果函数没有声明, 应该在调用前定义:


  1. 可以在函数头声明:


  1. 但一般应在文件头声明:


  1. 函数可互调用, 但不能嵌套:


  1. 关于无参数、无返回值的函数:
    如果函数没有参数, 最好是 fun(void), 不过 fun() 也行;
    如果函数没有返回值, 要注明返回类型是 void;
    在 C 语言中调用无参函数也要带括号.

  1. 声明函数时可以省略形参(只有在声明的时候可以):
    int sum(int, int, int); /* 省略形式参数 */

1.2 全局、局部变量、静态局部变量

全局变量:
定义在main函数的外部
局部变量:
定义在main函数内,在C语言中,局部变量分配在栈中,另外在进入每个小的分支时,如进入for循环,
如果在for循环内部定义了与循环外同名的变量,那么循环内变量优先,且不会改变循环外同名变量的值。
静态变量:
又分为静态全局变量和静态局部变量,静态局部变量定义时前面加static关键字。


总结:

1、静态局部变量和普通局部变量不同。静态局部变量也是定义在函数内部的,静态局部变量定义时前面要加static关键字来标识,静态局部变量所在的函数在多调用多次时,
只有第一次才经历变量定义和初始化,以后多次在调用时不再定义和初始化,而是维持之前上一次调用时执行后这个变量的值。本次接着来使用。
2、静态局部变量在第一次函数被调用时创造并初始化,但在函数退出时它不死亡,而是保持其值等待函数下一次被调用。下次调用时不再重新创造和初始化该变量,
而是直接用上一次留下的值为基础来进行操作。
3、静态局部变量的这种特性,和全局变量非常类似。它们的相同点是都创造和初始化一次,以后调用时值保持上次的不变。不同点在于作用域不同

拓展:

在自学变量时有额外了解到一些知识,也把它记录了下来
局部变量和全局变量的对比:
1、定义同时没有初始化,则局部变量的值是随机的,而全局变量的值是默认为0.
2、使用范围上:全局变量具有文件作用域,而局部变量只有代码块作用域。
3、生命周期上:全局变量是在程序开始运行之前的初始化阶段就诞生,到整个程序结束退出的时候才死亡;而局部变量在进入局部变量所在的代码块时诞生,在该代码块退出的时候死亡。
4、变量分配位置:全局变量分配在数据段上,而局部变量分配在栈上。

1.3 C语言数据类型及注意点

数据类型 说明 字节 应用 示例
char 字符型 1 用于存储单个字符 char sex ='M’;
int 整型 2 用于存储整数 int height = 18;
float 单精度浮点型 4 用于存储小数 float price = 11.1
double 双精度浮点型 8 用于存储位数更多的小数 double pi = 3.1415926

格式化输出

格式符 说明 举例
%d 带符号十进制整数 int a=10; printf("%d", a);输出结果为10
%c 单个字符 char x='a' ; printf("%c",x);输出结果为a
%s 字符串 printf("%s"∵"慕课网");输出结果为慕课网
%f 6位小数 float a=1.23;printf("%f",a);输出结果为1.230000
备注:
浮点型数据在存储时都会造成数据精度的丢失,如给某个浮点型变量赋初值3.0,则在存储该变量时,可能会变成2.999995,即小数部分数据丢失
字符型数据在输入时是在缓冲区内读取的,且只能读取单个字符,字符还包括‘\n’换行符

1.4 C运算符

名称 运算符号 举例
加法运算符 + 2+10=12
减法运算符 - 10-3=7
乘法运算符 * 2*10=20
除法运算符 / 30/10=3
求余运算符〈模运算符) % 23%7=2
自增运算符 ++ int a = 1; a++
自减运算符 -- int a = 1; a--
**另外注意:取余运算中,该运算只适合用两个整数进行取余运算,如:10%3 = 1;而10.0%3则是错误的;
运算后的符号取决于被模数的符号,如(-10)%3 = -1;而10%(-3) = 1。**
运算表达式 说明 运算规则
--- --- ---
++a a自增1后,再取值 先运算,再取值
--a a自减1后,再取值 先运算,再取值
a++ a取值后,a的值再自增1 先取值,再运算
a-- a取值后,a的值再自减1 先取值,再运算
比较运算符
符号 意义 举例
--- --- ---
> 大于 10>5
>= 大于等于 10>=10
< 小于 10<5
<= 小于等于 10<=10
== 等于 10==5
!= 不等于 10!=5
逻辑运算符
符号 意义 举例
--- --- ---
&& 逻辑与 0&&1
! 逻辑非 !o
测试错题领悟:
在执行完或语句的前部分后,若结果为真,则程序将不再运行后面的逻辑语句
对于C语言中运算符的优先级,大致如下图

1.5 学习体会

在最近的C语言学习中,渐渐发现C语言与数学之间的紧密连接,变成能力不仅取决于语言的运用是否熟练,还取决于数学的运用和自身的数学思维
另外,在最近的pta刷题过程中,渐渐感觉到一个程序不仅仅需要能够完成所需的功能,程序运行的效率也是一个不可忽视的点。

2. 综合作业:小学生口算表达式自动生成系统

2.1 模块流程图

一年级模块流程图

二年级模块流程图

三年级模块流程图
大致同二年级,但有相应的细节变化,如出题难度的变化,会有三个操作数的题目,会有连乘或者连除

2.2 函数功能及全局变量介绍

函数及其功能

2.2.1 全局变量

2.2.2 菜单相关函数




2.2.3 出题相关函数





2.3 测试结果截图,测试用例

两题,一题对一题错

2.4 大作业中编程技巧总结

在生成随机数时,使用时间作rand函数的种子,会使每次生成不同的随机数,但如果连续两次调用rand函数的话,生成的随机数还是会一样
个人解决办法是定义一个变量,让rand函数的参每次加上这个变量,加完一次后改变这个变量的值,让下次加的数不一样,就实现了能够连续调用的问题了
学会建文件和分装函数,能够使main函数更为简洁

posted @ 2020-11-29 17:55  Y-smile  阅读(146)  评论(1编辑  收藏  举报