计算机二级c语言学习
NCRE简介
全国计算机等级考试(National Computer Rank Examination,简称NCRE),是经原国家教育委员会(现教育部)批准,由教育部考试中心主办,面向社会,用于考察应试人员计算机应用知识与技能的全国性计算机水平考试体系。
ncre.neea.edu.cn(全国计算机等级考试官网)
———————————————————————————————————————————
计算机二级c语言程序设计
环境搭建
链接:https://pan.baidu.com/s/19lArkuk05VZjsxTIakjWRA?pwd=1111 提取码:1111
c语言程序的结构
1.1 程序的构成,main函数和其他函数
1.1.1 main函数
-
一个完整的c语言程序,是由一个、且只能由一个main()函数(又称主函数,必须有)和若干个其他函数结合而成(可选)。
-
main函数是c语言程序的入口,程序是从main函数开始执行。
1.1.2 其它函数
-
从函数定义的角度看,函数可分为系统函数和用户定义函数。
-
系统函数,即库函数:这是由编译系统提供的,用户不必自己定义这些函数,可以直接使用他们,如我们常用的打印函数printf().
-
用户定义函数:用以解决用户专门需要的自定义函数。
1.2编写第一个c语言程序
这里我用的是Dev-c++
//为注释符
图中有代码分析
c语言的源代码文件是一个普通的文本文件,但后缀名 必须是.c
1.3 头文件,数据说明,函数的开始和结束标志以及程序中的注释
1.3.1 include 头文件包含
-
#include的意思是头文件包含,#include<stdio.h>代表包含了stdio.h这个头文件。
-
使用c语言函数需要提前包含库函数对应的头文件,如这里使用了printf()函数,需要包含stdio.h头文件。
#include<>与#include“”的区别:
-
<>表示系统直接按系统指定的目录检索。
-
“”表示系统现在“”指定的路径(没写路径代表当前路径)查找头文件,如果找不到·1,再按系统指定的目录检索。
1.3.2 main函数
-
一个完整的c语言程序,是由一个、且只能由一个main()函数(又称主函数,必须有)和若干个其他函数结合而成(可选)。
-
main函数是c语言程序的入口,程序是从main函数开始执行。
1.3.3 {}括号,程序体和代码块
-
{}j叫代码块,一个代码块内部可以有一条或多条语句。
-
c语言每句可执行代码都是“;”分号结尾。
-
所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的。
-
所有的可执行语句必须是在代码块里面。
1.3.4 注释
-
//叫做注释,注释的内容编译器是忽略的,注释的主要作用是在代码中加一些说明和解释,这样有利于代码的阅读。
-
/**/叫块注释。(多行注释)
-
块注释是c语言标准的注释方法。
1.3.5printf函数
-
printf是c语言库函数,功能是想标准输出设备输出一个字符串。
-
printf(“hello world \n”):\n的意思是回车换行。
1.3.6 return 语句
-
return代表函数执行完毕,返回return代表函数的终止。
-
如果main定义的时候前面是int,那么return后面就需要写一个整数;如果main定义的时候前面是void,那么return后面什么都不需要写。
-
在main函数中return 0 代表程序执行成功, return -1 代表程序运行失败。
-
int main()和void main()在c语言中是一样的,但c++只接受int main 这种定义方式。
1.4 c语言的风格
1.4.1 缩进
-
Tabs(制表符)是8个字符的大小,因此缩进也应该是8个字符的大小。
-
缩进背后的思想是:清楚地定义一个控制块从哪里开始,到哪里结束。
1.4.2 放置花括号
-
c程序中另一个要注意的就是花括号的放置。与缩进尺寸不同的是,关于如何防止花括号没有技术上的理由。
-
另外一种情况,就是函数:函数应当把左右括号都放在行首。
-
注意这种花括号的放置减少了空行的数目,并没损害可读性。因此,当屏幕上不可以有很多空行是,你就有更多的空行来安插注释,
1.4.3 标识符命名规则(定义一个变量给变量起的名字就是标识符)
-
标识符不能是关键字。
-
标识符只能由字母、数字、下划线组成。
-
第一个字符必须为字母或下划线。
-
标识符中字符区分大小写。
实例:菜市场买菜,算总价
1.4.4 注释(//,/**/)
注释是有用的,但过量的注释则是有害的。不要试图在注释中注释你的代码是如何工作的:把代码是如何工作的视为一件显然的事情会更好些,而且,给糟糕的代码注释就是在浪费时间。
三、数据类型及其运算
2.1 c的数据类型
2.1.1 c语言关键字
2.1.2 数据类型
数据类型的作用:编译器预算对象(变量)分配的内存空间大小。
1)整型:int
一、整型变量的定义和输出
二、整型变量的输入
三、short、int、long、longlong
注意:
-
需要注意的是,整型数据在内存中占的字节数与所选操作系统有关。虽然c语言标准中没有明确规定整型数据的长度,但long类型整数的长度不能短语int类型,short类型整数的长度不能长于int类型。
-
当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位
2) 字符串:char
一、 字符变量的定义和输出
字符型变量用于存储一个单一字符,在c语言中用char表示,其中每个字符变量都会占用1个字节。宰割字符型变量赋值时,需要用一对英文半角格式的单引号(’’)把字符括起来。
字符变量实际上并不是把该字符本身放到变量的内存单元中区,而是将该字符对应的ASCLL编码放到变量的存储单元中。char的本质就是1字节大小的整型。
3) 实数(浮点数):float、double
实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在c语言中,浮点型变量分为两种:单精度浮点数(float)、双精度浮点数(douhble),但是double型变量所表示的浮点数比float型变量更精确。
由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。
不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。
2.1.3 常量
常量:
-
在程序运行过程中,其值不能被改变的量。
-
常量一般出现在表达式或赋值句中。
常量定义之后不能改变
定义常量两种方式 :
#define PI 3.14
const float pi = 3.14
2.1.4 变量
变量:
-
在程序运行过程中,其值可以改变。
2.2 c运算符的种类、运算优先级和结合性
2.2.1 常用运算符分类
2.2.2 算术运算符
2.2.3赋值运算符
2.2.4比较运算符
c语言的比较运算中,“真”用数字“1”来表示,
“假”用数字0来表示。
2.2.5逻辑运算符
2.2.6运算符优先级
2.3 不同类型数据之间的转换与运算
数据有不同类型,不同类型数据之间进行混合运算必然涉及到类型的转换问题。
转换的方式有两种:
-
自动转换(隐式转换):遵循一定的规则,由编译系统自动完成。
-
强制类型转换:把表达式的运算结果强制转换成所需的数据类型。
类型转换的原则:占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。
浮点型转换成整数型,小数部分全部省略,不会四舍五入。
3、基本语句
3.1 表达式语句,空语句,复合语句
3.1.1 表达式语句
c程序设计语言的表达式语句由表达式加上分号“;”组成。分别由一下几种类:算术表达式、赋值表达式、逗号表达式、关系表达式、逻辑表达式等...
3.1.2 空语句
-
空语句是什么也不执行的雨具,一般由分号“;”或大括号“{}”组成。
-
在程序中空语句可用来做空循环体。
-
一般推荐使用大括号“{}”来表示空语句,这样更直观。
3.1.3 复合语句
把多个语句用括号{}括起来组成的一个语句称复合语句。在陈序中应把复合语句看成事单挑语句,而不是多条语句。
复合语句内的各条语句都必须以分号“:”结尾;此外,在括号“}”外不能加分号。
3.2 输入输出函数的调用
3.2.1 printf函数
printf是输出一个字符串。
printf格式字符
3.2.2 scanf函数
scanf通过%转义的方式可以得到用户通过标准输入设备输入的数据
4 选择结构程序设计
4.1 if语句
4.1.1 if语句
适合配合比较运算符使用
4.2 switch语句
4.2.1 switch语句
扩展知识:三目运算符
5、循环结构程序设计
5.1 for循环结构
5.2 while循环
5.21 while语句
补充知识点水仙花数:
5.2.2 do-while语句
5.3continue语句和break语句
5.3.1break语句
在switch条件语句和循环语句中都可以使用break语句
- 当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。
- 当它出现在循环语句中,作用是跳出当前内循环语句,执行后面的代码。
- 当它出现在嵌套循环语句中,跳出最近的内循环语句,执行后面的代码。
5.3.2 continue语句
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。
5.4循环的嵌套
循环语句之间可以相互嵌套
简单嵌套例子:
模仿时钟的三层嵌套循环:
重点考题九九乘法表
6、数组的定义和使用
在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。
数组就是在内存由连续的相同类型的变量空间。同一个数组所有的成员都是相同的数据类型,同时所有的成员在内存中的地址是连续的。
数组属于构造类型数据:
- 一个数组可以分解为多个数组元素:这些数组元素可以是基本数据类型或构造类型。
- 按数组元素类型的不同,数组可分为:数值数组、字符数组、指针数组、结构数组等类别。
6.1一维数组和二维数组
6.1.1一维数组的定义和使用
- 数组名字符合标识符的书写规定(数字、英文字母、下划线)
- 数组名不能于其他变量名相同,同一作用域内是唯一的
- 方括号[]中常量表达式表示数组元素的个数int a[3]表示数组a中有3个元素
- 定义数组是[]内最好是常量,使用数组时[]内既可是常量也可以是变量
补充知识点:数组常见错误
- c语言不支持动态数组 数组必须在编译时定义常数
- 不能为数组名赋值
数组例题:
1、
2、
6.1.2二维数组
6.2字符串和字符数组
6.2.1字符数组与字符串的区别
- c语言中没有字符串这种数据类型,可以通过char的数组来替代
- 字符串一定是一个char的数组,但char的数组未必是字符串
- 数字0(和字符‘\0’等价)结尾i的char的数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char数组
7、函数
c程序是由函数组成的,我们写的代码都是由主函数main()开始执行的。函数是c程序的基本模块,是用于完成特定任务的程序代码单元。
从函数定义的角度看,函数可分为系统函数和用户定义函数两种:
- 系统函数,即库函数:这是由编译系统提供的,用户不必自己定义这些函数,可以直接使用它们,如我们常用的打印函printf()。
- 用户定义函数:用以解决用户的专门需要。
7.1 库函数的正确调用
导入头文件
使用库函数,例如printf scanf
7.1.1 函数的调用:产生随机数
当调用函数时,需要关心5要素:
- 头文件:包含指定的头文件
- 函数名字:函数名字必须和头文件声明的名字一样
- 功能:需要制度此函数能干嘛后才调用
- 参数:参数类型要匹配
- 返回值:根据需要接收返回值
![](https://i-blog.csdnimg.cn/blog_migrate/bf8f146a14b6c944064849834af9c93e.png)
7.2 函数的定义方法
7.2.1 函数定义格式
函数定义的一般形式:
返回类型 函数名(形式参数列表)
{
数据定义部分;
执行语句部分;
}
7.2.2 函数名字、形参、函数体
1)函数名
理论上是可以随意起名字,但最好起的名字见面知意,应该让用户看到这个函数名字就知道这个函数的功能。注意,函数名的后面有个圆括号(),代表这个为函数,不是普通变量名。
2)形象参数
在定义函数时指定的形参,在未出现函数调用时,它们并不占内存中的存储单元,因此称它们是形式参数或虚拟参数,简称形参,表示它们并不是实际存在的数据,所以,形参里的变量不能赋值。
3)函数体
花括号{}里的内容即为函数体的内容,这里为函数功能实现的过程,这和以前的写代码没太大区别,以前我们把代码写在main()函数里,现在只是把这些写道别的函数里。
7.3函数的类型和返回值
7.3.1 无参函数调用
如果是调用无参函数,则不能加上“实参”,但括号不能省略
7.3.2有参函数调用
如果实参列表包含多个实参,则个参数间用逗号隔开。
7.3.3 返回值
函数的返回值是通过函数中的return语句获得的,return后面的值也可以是一个表达式。
a.尽量保障return语句中表达式的值和函数返回类型是同一类型。
b.如果函数返回的类型和return语句中表达式的值不一致,则以函数返回类型为准,即函数返回类型决定返回值的类型。对数据值类型,可以自动进行类型转换。
注意:如果函数返回的类型和return语句中表达式的值不一致,而它又无法自动进行类型转换,程序则会报错。
7.4形式参数与实在参数,参数值的传递
7.4.1 函数的形参和实参
- 形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。
- 实参出现在主调函数中,进入被调函数后,实参也不能使用。
- 实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。
- 在调用函数时,编译系统临时给形参分配存储单元。调用结束后,形参单元被释放。
- 实参单元与形参单元是不同的单元。调用结束后,形参单元被释放,函数调用结束返回主调函数后则不能再使用该形参变量。实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中实参的值。
函数调用后变量的值改变了
但是这样就没变
值传递 形参不能改变实参的值
地址传递 形参可以改变实参的值
7.5函数的正确调用,嵌套调用,递归调用
7.5.1函数的正确调用
7.5.2函数嵌套、递归调用
嵌套调用
递归调用
7.6 局部变量和全局变量
7.6.1 局部变量
局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点:
- 在一个函数内定义,只在函数范围内有效
- 在复合语句中定义,只在复合语句中有效
- 随着函数调用的结束或复合语句的结束局部变量的声明声明周期也结束
- 如果没有赋初值,内容为随机
7.6.2 全局变量
(未完待续)