函数
| 这个作业属于哪个班级 |
| ---- | ---- | ---- |
| 这个作业的地址 |
| 这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
|姓名| 喻文康|
0. 展示PTA总分
1. 本章学习总结
1.1 函数定义,声明,调用
关于函数的这三点,一般注意以下几点:
- 如果函数没有声明, 应该在调用前定义:
- 可以在函数头声明:
- 但一般应在文件头声明:
- 函数可互调用, 但不能嵌套:
- 关于无参数、无返回值的函数:
如果函数没有参数, 最好是 fun(void), 不过 fun() 也行;
如果函数没有返回值, 要注明返回类型是 void;
在 C 语言中调用无参函数也要带括号.
- 声明函数时可以省略形参(只有在声明的时候可以):
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函数更为简洁