C 语言题库
啊啊啊啊,即使写了两年的C++代码也免不了刷题的痛苦,而且还是语言题,但是这样也能学到不少知识呢。
一阶段
一个C语言源程序是由(函数组成)
C语言规定,在一个源程序中,main函数的位置(可以任意)
在C语言中,一个函数的函数体一般包括 (参数)和 (返回值)
上机运行C源程序过程:
编辑:输入源程序并存盘(.C)
编译:将源程序翻译为目标文件(.OBJ)
链接:将目标文件生成可执行文件( .EXE)
运行:执行.EXE文件,得到运行结果。
一个函数是由两部分组成的,它们分别是(函数头) 和(函数体)。
\
是个转义字符,比如\x
表示的是十六进制的数字,而\0
表示的是一个八进制数字。十六位PC机中:char<int<long int<=float<double
实型 数据就是 浮点型
不同类型数据经过表达式计算之后,最后的结果是 表达范围最大 的类型。
C语言中
.1
表示的是0.1
,1.
表示的是1.0
像
printf
和main
这些 非关键字 可以作为变量名使用!逗号表达式整体的值为 最后 一个表达式的值。
只要句子里面包含
,
那么这个语句就是逗号表达式,不属于 各种其他语句如 循环语句、赋值语句等等。复合运算语句 如 :
A+=B+C
和A*=C-D
这些,先计算等号后面的 语句B+C
和C-D
然后再进行 复合运算。
二阶段
if(10<=x<=20)
是一个合法的语句,表示的意思是if((10<=x)<=20)
先计算10<+x
的值的真假,比较 true 或者 false 是否<=20
最后返回比较的真假。switch-case
语句:
1 | switch(Value/Expression) |
- 注意这里Value只能是整形和字符型 ,Value1/2 里面只能填写一个值,可以使用表达式(除了逗号表达式),default 可以不写。
两个case里面的字符常量不可以相等。
逻辑运算符优先级
&&
高于||
,所以||
都是最后再运算的。关系运算符
<
>
<=
>=
的优先级比==
和!=
要高!
三阶段
- do{xxx;}while(xxx); 记得 while 后面有分号
四阶段
a[2][4]={0}
会把数组里面的所有空间都初始化为 0使用字符数组来输入字符串的时候:scanf(“%s%s”, a, b); a 和 b 就已经是地址了,不需要 & 运算。
字符串大小判断是 ASCII 一位一位去比较。That < The
五阶段
凡是函数中未指定存储类别的局部变量都为 auto 自动。
在函数内的复合语句中定义的变量在本函数范围内有效 是错误的,只在复合语句中有效。比如这个变量是在while语句中定义的,那么只能在while语句括号里面调用,出了while就失效了。
func((exp1, exp2), (exp3, exp4, exp5));
里面只有两个实参,就是exp2,和exp5 ,这是执行了两个逗号表达式。main() 里面可以说明一个函数,但是不可以定义一个函数。
函数的定义不可以嵌套,但函数的调用可以嵌套。 (因为不能在一个函数里面定义另外一个函数啊,只能说明。)
当用二维数组作为形参时,第一维的大小可以省略,但第二维的大小不能。因为传进来的实参是一个数组的第一位地址,然后实参的所有元素依次填充到形参定义的数组里面,如果第二维省略,就无法填充(毕竟列可以无限嘛),但是如果列确定,就可以根据除法确定行数。
数组传参的同时,会退化成为指针,所以在操作的时候要小心越界。
六阶段
C语言中mian函数正确的声明应该是: main(int abc, char **abv),参数后者等价与 *abv[] ,这个东西在使用命令行执行的时候会用到,详细解释博客 主要是来传入命令行输入的参数,abc为参数数量,abv是一个字符串指针数组,存储命令。
两个不同类型的指针相互赋值地址会警告。
如果要对指针进行自加自减运算,那么必须是一个数组指针,并且进行了自加自减运算之后不会越界。
函数名保存的也是一个地址,可以声明一个函数指针,然后把函数地址给它,它就可以当作函数来使用。
int(*Pointer)(int,int);
其中第一个 int 表示的是函数返回值类型,后面的是参数的类型。调用的时候可以Pointer(x,y);
或者(*Pointer)(x,y);
一个数组名,函数名,可以看作是一个常量指针,里面保存的是地址。
int *p[3]
p是一个指针数组,int (*p)[3]
中 p 是一个指向数组的指针。++
运算符表示一旦按照运算符优先级和从左往计算顺序轮到++
运算符之后,前缀加就会立刻计算,而后缀加则会 等待整个计算单位结束之后,再执行 ++ 运算。计算单位分为三种:普通表达式分号结束之后,逗号表达式逗号结束之后,循环表达式单次循环结束之后。p[x]
等价于*(p+x)
,指针在进行运算的时候,一定要考虑所属于的指针级数。字符转义有三种情况,
\
+ 字母,\
+ 三位八进制数字,\x
+ 两位十六进制数字,它们都被标为一个转义出来的 ASCII 字符。对于\0jd
和\013
,前者表示字符串结束符 ASCII 0 和 jd 字符串,后者表示一个符号 ASCII 11.