这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业03--函数 |
这个作业的目标 | 学习如何设计函数、C语言基本数据类型 |
姓名 | 朱芳芳 |
0.展示PTA总分(0----2)
截图展示本次题目集排名分数截图。PTA题目集至少完成2/3,否则倒扣-2分
1.本章学习总结(4分)
整理这两周学习主要知识点,并能对每个知识点介绍简单案例或语法。不要截图ppt,自己文字书写。知识点包含:
1.1 函数定义、调用、声明
函数声明
函数有两种类型
一种是有返回值的,前面用int /float/ double/ char等返回值类型 来定义,如int f(int n);
如果函数不需要返回值,那么就用void来写在前面,如void f(int n);注意声明是一条语句,后面要加分号;
函数调用
没有返回值的函数一般直接调用如: f(n);
有返回值的一般语言定义一个变量如c=f(n);
函数定义
有返回值的函数一般就是
int f(int)
{
函数内容
return 返回的结果
}
注意f()没有分号。
没有返回值的函数结构为
void f(int)
{
函数内容
}
后面也没有分号。
1.2 全局、局部变量、静态局部变量
全局变量
全局变量是可以被本程序所有对象或函数引用。(全局变量是块砖,哪里需要哪里搬。。)
局部变量
指在一个函数内部或复合语句内部定义的变量,作用域是定义该变量的函数或定义该变量的复合语句,生存期是从函数被调用的时刻算起到函数返回调用处的时刻结束(地主家的傻儿子,只听地主的话)
静态局部变量
当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,(干完事记忆就清零)这样就产生了一个问题:如何让局部变量不被重置?(想让傻儿子记得他做过的事去过的地方), 最容易想到的方法是定义为全局的变量(找块砖),但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)(砖头是多情的),static 关键字则可以很好的解决这个问题
static 存储类
指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁,即,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。
(就是让傻儿子找个记事本记着,这样每次轮到他做事情,他就记得上次这件事情做到哪了)
C中 变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。
从作用域看:略;
从分配内存空间看:
全局变量、静态局部变量、静态全局变量都在静态存储区分配空间,而局部变量在栈分配空间
把局部变量改变为静态变量后是改变了他的存储方式,即改变了他的生存期。把全局变量改变为静态变量后是改变了他的作用域,限制了他的使用范围,因此static这个说明符在不同的地方起的作用是不同的
tips:
1、若全局变量仅在单个文件中访问,则可以将这个变量修改为静态全局变量。
2、若全局变量仅在单个函数中使用,则可以将这个变量修改为该函数的静态局部变量。
3、全局变量、静态局部变量、静态全局变量都存放在静态数据存储区。
1.3 C数据类型及注意点
数据类型
现在所学的类型分为字符型和数值型
**1、自动转换: **
高 double ←← float
↑ ↑
↑ long
↑ ↑
↑ unsigned
↑ ↑
低 int ←← char,short
自动转换顺序表
2、强制转换:
当较低类型的数据转换为较高类型时,一般只是形式上有所改变, 而不影响数据的实质内容,而较高类型的数据转换为较低类型时则可能有些数据丢失。
3、注意事项:
赋值中的类型转换当赋值运算符两边的运算对象类型不同时,将要发生类型转换,转换的规则是:把赋值运算符右侧表达式的类型转换为左侧变量的类型。具体的转换如下:
(1) 浮点型与整型 将浮点数(单双精度)转换为整数时,将舍弃浮点数的小数部分, 只保留整数部分。
将整型值赋给浮点型变量,数值不变,只将形式改为浮点形式,即小数点后带若干个0.注意:赋值时的类型转换实际上是强制的。
(2)单、双精度浮点型 由于C语言中的浮点值总是用双精度表示的,所以float 型数据只是在尾部加0延长为doub1e型数据参加运算,然后直接赋值。doub1e型数据转换为float型时,通过截尾数来实现,截断前要进行四舍五入操作。
(3) char型与int型 int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。
浮点误差应注意的问题:
简单通俗点来说,C语言中数据都是以二进制存储的,在
1.避免相近的两数相减
2.避免小分母
3.避免大数吃小数
4.简化计算步骤
5:避免浮点数比较判断相等
如何实现浮点数的比较判断?
使用两数差的绝对值与所要达到的精度作比较,从而判断,或使用数据类型的转换(强制转换或者自动转换)
如何实现字符型数据的输入?
字符型数据包括空格符,换行符等,在输入过程中常常无法省略输入单字符避免回车。
故有以下三种方法:
1.在scanf()中使用'
'屏蔽回车符号。
scanf("%d
", &n);
scanf("%c", &c);
2.在scanf()格式串最前面添加空格,屏蔽回车字符。
scanf("%d", &n);
scanf(" %c", &c);//%c 前面加空格,过滤回车
3.在接收字符前,使用getchar()来读取一次回车符号
scanf("%d", &n);
getchar();// 专门用来读取上次输入的回车字符
scanf("%c", &c);
1.4 C运算符
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
学习体会
2.综合作业(6分):
小学生口算表达式自动生成系统
2.1.模块流程图
请梳理各模块流程图,在编程前先画流程图再写代码。代码中有修改,流程图也跟着修改。二级模块,可以再画流程图展示。
第一阶段流程图
2.2.函数功能及全局变量介绍
思路:调用相关文件的函数来实现菜单的交互性
介绍你用到核心函数接口及全局变量。
生成随机数,生成随机运算符(利用随机数0 1分别控制生成运算符)
2.3.运行结果截图,测试用例。
截图时候务必在图片中有文字说明该测试数据是什么,不能只有图片。测试数据有错也务必在图片上说明原因。
第一次错误尝试
2.4.大作业中编程技巧总结
通过用除数加上余数的方法,使结果一定为整数
实现代码如图:
清屏函数
system("cls");
延时函数
Sleep (500) ;
exit(0)与exit(1)
exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;