当前位置 博文首页 > 小丞同学:【期末复习】考试月来临!??C语言复习,这一篇带你逃
考试月来临,划水划了大半学期,想起来我已经几个月没有打过C的代码了,C语言是刚开学的时候自学的,学院下学期才开设C语言课程,上课的时候都在干自己的事情,现在快考试了,来整理顺便复习一下C语言的相关内容吧~🍰
#include <stdio.h> //预处理指令
int main() { //定义主函数
printf("这是一篇复习博客"); //输出语句
return 0; //函数执行完毕
}
int max(int a, int b)
)和函数体(花括号中的部分)main
函数开始执行,无论main
函数在什么位置scanf
和printf
提供的对于长期打
js
代码的来说,分号真的是它容易忘记了!!
注意: 手写代码的时候一定要注意分号,以及注意双引号
编辑-编译-连接-执行
答案在习题后面噢~
一个C程序的组成部分可以是( )。
A) 一个主函数和一至若干个其他函数 B) 一至若干个主函数
C) 一个主程序和一至若干个其他函数 D) 一个主程序和一至若干个子程序
一个C程序的执行是从( )。
(A) 本程序的main函数开始,到main函数结束
(B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
? 本程序的main函数开始,到本程序文件的最后一个函数结束
(D) 本程序文件的第一个函数开始,到本程序main函数结束
第一题: A,第二题:A
标识符的命名规则是:
C语言中标识符有以下3类
int
、for
、switch
等。define
、include
等。常量是指在程序运行过程中,其值不能改变的量称为常量,常见的常量有以下几类:
1000,12345,0,-345
123.456和12.34e3
)x
)、一个转义序列(例 \t
),或一个通用的字符(如 \u02C0
)"boy"
,"123"
等,用双撇号把若干字符括起来,字符串常量是双撇号里的全部字符define
指令,指定用一个符号名称代表一个常量,如#define PI 3.14
结尾没有分号转义序列 | 含义 |
---|---|
\ | \ 字符 |
’ | ’ 字符 |
" | " 字符 |
? | ? 字符 |
\a | 警告 |
\b | 退格键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\o或\oo或\ooo其中o表示一个八进制数字 | 一到三位的八进制数 |
\xh[h…] | 一个或多个数字的十六进制数 |
\ooo 是对用三位八进制数转义表示任意字符的形象化描述。
例如
char ch = '\111';
等价于char ch = 0111;
(以0开头的表示八进制)
int a = 3;
注意:变量必须先定义后使用,在变量取值时,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据
下列定义变量的语句中错误的是______。
A、int int B、double int
C、char For D、float US$
答案:D
以下不合法的用户标识符是______。
A、j2_KEY B、Double
C、4d D、
_8_
答案:C
注意:
int
short int
long int
是根据编译环境的不同,所取范围不同
int
的取值范围在于他占用的字节数 ,不同的编译器,规定是不一样。
浮点数据根据精度的不同分为3种
注意:C语言中不存在字符串变量,字符串只能存在字符数组中
自动转换发生在不同数据类型运算时,在编译的时候自动完成。
注意:
只有字节小的可以向字节大的自动转换,不可逆
#include <stdio.h>
int main()
{
char c1, c2;
c1 = 'A';
c2 = c1 + 32;
printf("%c\n", c2); // a
printf("%d\n", c2); // 97
}
如上,自动的将c1
转化为ASCII码再进行加法运算
强制类型转换是通过定义类型转换运算来实现的。其一般形式为:
//(转化类型)值
(double) a // 将a转化成double类型
(int) (x + y) //将x+y转化成int类型
如%
运算符要求其两侧均为整型量,若x
为float
型,则x % 3
不合法,则这时候就需要强制类型转化了,(int)x % 3
,因为强制类型转换运算符优先于%
运算,所以会先进行(int)x
运算再进行取余运算
转换类型和表达式都必须加括号, 如把(int)(x / 3 + y)
写成(int)x / 3 + y
则成了把x
转换成int
型之后再除3
再与y
相加了。
强制转换不存在四舍五入
强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化
假定A = 10, B = 20
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
– | 自减运算符,整数值减少 1 | A-- 将得到 9 |
自加运算符
++
与自减运算符--
是单目运算符,运算的对象是变量。自增自减运算有两种一种前缀,一种后缀,两种表达式的值是有区别的,前缀是:先运算再取值,后缀是:先取值后运算
如:
#include<stdio.h>
int main() {
int i = 3;
printf("%d",++i); // 4
}
又如:可以很清楚的理解!
#include<stdio.h>
int main() {
int i = 3;
printf("%d",i++); // 3
}
假设变量 A 的值为 1,变量 B 的值为 0
运算符 | 描述 | 实例 |
---|---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(A && B) 为真。 |
也就是说a并b有假则假,a或b有真则真
简单赋值运算符为=
int a = 3;// 给a赋值为3
复合赋值运算符就是在简单赋值符之前加上其它运算符构成
例如+=
、-=
、*=
、/=
a += 3;等价于 a = a + 3
注意:复合运算符中运算符和等号之间不存在空格。
假设变量 A 的值为 10,变量 B 的值为 20
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (A > B) 为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (A >= B) 为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (A <= B) 为真。 |
三目运算符的格式为:
表达式1 ? 表达式2 : 表达式3;
如果表达式1为真则值为表达式2,否则为表达式3
如:
#include <stdio.h>
int main()
{
int a = 10;
int b;
b = (a == 4) ? 1 : 2;
printf("b 的值是 %d\n", b); // b 的值是 2
}
初等运算符的优先级别最高,然后是单目运算符、算术运算符、关系运算符、逻辑运算符(除逻辑非!)、条件运算符、赋值运算符、逗号运算符。大多数都是自左向右结合,而单目运算符、条件运算符和赋值运算符自右向左结合
运算符优先级及结合性汇总自上向下优先级降低
类别 | 运算符 | 结合性 |
---|---|---|
后缀 | () [] -> . ++ - - | 从左到右 |
一元 | + - ! ~ ++ - - (type)* & sizeof | 从右到左 |
乘除 | * / % | 从左到右 |
加减 | + - | 从左到右 |
移位 | << >> | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
位与 AND | & | 从左到右 |
位异或 XOR | ^ | 从左到右 |
位或 OR | | | 从左到右 |
逻辑与 AND | && | 从左到右 |
逻辑或 OR | || | 从左到右 |
条件 | ?: | 从右到左 |
赋值 | = += -= *= /= %=>>= <<= &= ^= |= | 从右到左 |
逗号 | , | 从左到右 |
菜鸟教程中的运算符优先级
复习了这么多关于运算符的知识,来练几道题吧
#include <stdio.h>
int main()
{
int a = 1, b = 2, c = 4, d = 8;
int e;
e = (a + b) * c / d;
printf("e的值是 %d\n", e);
}
//输出 :e的值是 1
这题要好好思考噢
int main()
{
int x = 12, n = 5;
x %= (n % 2);
printf("%d", x);
}
// 输出: 0
n % 2
余数是1,12对1取余为0
在C语言中,字符型数据在内存中的存储形式是
A)原码 B)补码 C)反码 D)ASCII码
答案: D
若执下面程序时从键盘上输入5,
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x++ > 5) {
printf("%d", x);
}else {
printf("%d", x--);
}
}
则输出是______。
A、7 B、6 C、5 D、4
答案:B
做对这题才算真真掌握噢~
设有语句int a = 3;则执行语句a += a -= a * a后,变量a的值是( )。
(A) 3 (B) 0 ? 9 (D) -12
答案:D
上面的语句可以转换成:
int a = 3;
a -= (a * a);//*优先级高,先计算a*a为9,此时a -= 9;即 a = a - 9; a = -6
a += a // a = a + a; a = -6 + (-6),a = -12
if(表达式) { 执行内容 }
如果表达式为真,则执行{}
里的内容,否则将跳过不执行该code
if(表达式) {
代码块1;
}else {
代码块2;
}
如果表达式的值为真,则执行代码块1,否则执行代码块2
注意
if
和else
后面都没有分号噢~
switch (表达式)
{
case 情况1:
执行体1;
break;
case 情况2:
执行体2;
break;
default:
执行体3;
}
简单解释一下就是判断表达式的几种情况执行不一样的代码
注意:
case
后的情况不能相同case
都需要有一个break
语句switch
表达式只能是整型或者字符类型重点:switch
语句最大的好处是它能够简化if
语句
while(