第四次作业
这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业03--函数 |
这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
姓名 | 林进源 |
0.展示PTA总分
1.本章学习总结
1.1 函数定义、调用、声明
1. 函数定义
一般形式:
函数类型 函数名(形式参数表) /*函数首部*/
{
函数实现过程 /*函数体*/
}
- 函数定义的函数首部括号后面不能加分号
- 函数类型一般与函数结果return返回的类型一致
- 括号内的形参定义要分开写,不可写出int x,y这种类型
- 函数体中可能需要定义一些变量,这些变量与形参是有区别的,形参为从主函数调用的已知数据
- 若函数类型为void,则函数体最后可不需要return
2. 函数调用
一般形式:
函数名(实际参数表)
- c语言运行程序先从主函数开始,当遇到某个函数被调用时,主函数暂停,执行相应的函数,执行完后返回主函数。
- 实际参数表可以是常量 变量和表达式。而形参只能是变量。
- 函数调用的两种情况:
(1)赋值语句:例:volume=cylinder(radius,height)
(2)输出函数的实参:例:printf("%f",cylinder(radius,height)) - 参数传递时,形参和实参必须一 一对应,数量相同,类型尽量一致
- 函数return有两个作用:
(1)结束函数的运行。
(2)带着运算结果返回主调函数
3. 函数声明
函数类型 函数名(参数表);
- 括号后面需要加分号
- 若自定义函数被放在主函数后面,主函数前要添加函数说明
1.2 全局、局部变量、静态局部变量
1. 全局变量
- 定义在函数外而不属于任何函数的变量称为全局变量
- 其作用范围为所有函数
- 局部变量和全局变量允许同名,当同名时,局部变量起作用,全局变量不起作用
2. 局部变量
- 定义在函数内部的变量成为局部变量
- 其作用在函数内部,形参是局部变量
- 局部变量一般定义在函数或者复合语句的开始处
3. 静态局部变量
格式:
static 类型名 变量表
- 局部变量调用完后其分配的单元会被收回
- 静态局部变量调用时的存储单元会被保留,其生命周期保留到程序结束
- 全局变量的存储单元也会被保留,其生命周期保留到程序结束
1.3 C数据类型及注意点
(1)
整型:
int可在其前面加上short long unsigned等限定词
- int 输入输出%d long int输入输出%ld
- %u以十进制输入输出一个无符号整数,%o以八进制输入输出一个整数,%x以十六进制输入输出一个整数
- 整型是指不存在小数部分的数据类型
- 无符号的整型数据指不带符号的整数,即零和正整数,不包括负数
整型常量:
- 十进制:由正负号和阿拉伯数字0~9组成,但首位数字不能为0
- 八进制:由正负号和阿拉伯数字0~7组成,首位数字必须为0
- 十六进制:由正负号和阿拉伯数字09组成,英文字符af或A~F组成,首位数字必须为0x或者0X
- 判断整数的类型,首先根据整数后面的字母后缀,若没有则根据整型常量的值判断其在哪个数值范围
(2)
字符型
*输入getchar()输出putcahr单个字符,%c用于另一形式输入输出
字符型常量:
- 字符型常量指单个字符,用一对单引号将要表达的单个字符括起来,如'a''x'
转义字符:
字符 | 含义 |
---|---|
\n | 换行 |
\t | 横向跳格 |
\ \ | 反斜杠 |
\ " | 双引号 |
\ ' | 单引号 |
\ddd | 1~3位八进制整数代表的字符 |
\xhh | 1~2位十六位进制整数所代表的字符 |
例:“\ \ \ "abc \ " \ \ "有7位字符 |
(3)
实型
- 单精度输入输出%f,双精度输入输出%lf
- 实型又称浮点数型,指存在小数部分的数
- 浮点型数据分为单精度和双精度,但是当实数的有效位数超过了精度的有效范围,会降低精度
例:IT 协会举办程序设计竞赛,准备购买 U 盘作奖品。请编写程序,根据活动经费和 U 盘单价预估可购买 U 盘的最大数量。
当经费为660.8 单价为47.2,若数量用float来定义,输出结果为13,答案确是14
需要在后面加上0.000001来消除误差
实型常量
(1)浮点表示法
实数由正号 负号 阿拉伯数字0~9 小数点组成,必须要有小数点,且小数点前后至少有一边要有数字
(2)科学计数法
实数由正号 负号 数字 字母e或E组成,e是指数的标志。e之前要有数据,e后面的指数只能是整数
例:0.2e2.3非法 e-5非法
1.4 C运算符
- 运算符种类
运算符种类 | 运算符 | 结合方向 |
---|---|---|
逻辑运算符 | ! | 右到左 |
算术运算符 | ++ -- + - (单目) | 右结合 |
算术运算符 | * / % (双目) | 左结合 |
算术运算符 | + -(双目) | 左结合 |
关系运算符 | < <= > >= | 左结合 |
关系运算符 | == != | 左结合 |
逻辑运算符 | && | 左结合 |
赋值运算符 | = += -= *= /= %= | 右结合 |
逗号运算符 | , | 左结合 |
- 位运算
运算符 | 名称 |
---|---|
& | 与 |
^ | 亦或 |
~ | 取反 |
<< | 左移 |
>> | 右移 |
A | B | A^B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
例:对二进制的后三位取反加密 ,则另其与7取反
- 位移运算
- a>>b相当于二进制右移b位,得到的数相当于原数除2的b次方 a<<b相当于二进制左移b位,得到的数相当于原数乘2的b次方
2.综合作业:小学生口算表达式自动生成系统
2.1.模块流程图
- 外界面选择进入年级界面流程图
- 进入年级后的答题系统界面流程图
- 一年级生成题目的流程图
- 二三年级生成题目的流程图
2.2.函数功能及全局变量介绍
2.2.1.全局变量
本次大作业并没有用到全局变量,可能对其在本次大作业哪里的用处比局部变量更好不太了解
2.2.2 菜单相关函数
主界面
先在界面形成一个总界面,再要求输入年级来参加,通过switch来辨别年级后再进入相应年级的答题界面
年级界面
进入年级界面,提示是否答题,判断输入是否后,若否返回主界面,若是则进入答题系统,用循环来控制要答题的数量,同时每轮询问是否继续,判断是否后重新进行。二三年级的模板类似于此。
2.2.2 出题相关函数
随机数函数
因为不同年级需要的不同数要求是不一样的,故将随机数分为三类,一类为110一类为1100另一类为1~1000,不同年级会用到其中不同的随机数
随机运算符函数
一年级只用到+和-,而二三年级需要+ - * /,故用switch来辨别年级,并产生相应的运算符
2.3.运行结果截图,测试用例
一年级答题测试
二年级答题测试
三年级答题测试
界面进入退出测试
2.4.大作业中编程技巧总结
- 在进行随机数生成时,将srand生成随机种子放在生成随机数函数里面,调试的时候生成的2个随机数是一样的,在百度查找资料后,将srand放在大函数里面,调试后生成的两个随机数是不一样的
- 界面设定可用到的代码:system("cls");//清屏 Sleep(数字);//保持界面的时间
- 在写大作业这种类型的代码量大的任务时,一定要多写函数来分担主函数,分成几个块任务逐个完成,减少自己的工作量,同时也便于调试找出错误
- 写之前先构思模块,通过画流程图的方法,将流程图每个区域对应代码构思打出,区域代码可能也需要用流程图,大体代码构思后需要考虑一些特殊情况,怎样满足这些特殊情况又不影响到基本情况,甚至需要多种结构方法掺杂,不是一件轻松的事,多测试几组数据来检验。区域代码打完后再按照流程图的形式逐个以某些语句来拼接