1.C语言是结构化语言,他有哪几种结构?控制语句是什么?
①C语言有三种结构,分别是顺序结构、选择结构、循环结构
②控制语句⽤于控制程序的执⾏流程,以实现程序的各种结构⽅式(C语⾔⽀持三种结构:顺序结构、选 择结构、循环结构),它们由特定的语句定义符组成,C语⾔有九种控制语句。 可分成以下三类:
条件判断语句(分支语句):if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、go to语句、continue语句、return语句。
2.为什么要写注释? 编译器是如何看待注释掉的代码的呢?
①C 语⾔的注释有两种表⽰⽅法:/* */和 //。好的注释可以帮我们更好的理解代码,但是也不要过度注释,不要写没必要的注释。
②编译时,注释会被替换成⼀个空格。
3.C语言也有布尔类型?
在 C99 中引入了布尔类型 ,专门表示真假;布尔类型变量的取值是:true 或者 false。
C语言中的布尔类型用 _Bool或bool表示,在使用布尔类型时还要加上它的头文件<stdbool.h>
4.sizeof不是函数? sizeof还有返回值?? sizeof是在编译器工作的哪个时期运算的?
①sizeof是一个关键字,也是操作符
②sizeof的返回值是size_t类型的值。
③sizeof的运算结果是在编译器处理源代码时确定的,而不是在程序运行时计算得出的。
5.下面这段代码为什么不输出3 ?为什么?
#include<stdio.h>
int main()
{
int a=2;
sizeof(++a);
printf("%d\n",a);
return 0;
}
因为sizeof中表达式不计算。(sizeof在代码进行编译的时候,就根据表达式的类型确定了,类型的常⽤,而表达式的执行却要在 程序运行期间才能执行,在编译期间已经将sizeof处理掉了,所以在运行期间就不会执行表达式了)
6.头文件 limits.h 和 float.h 有什么好玩的?
limits.h ⽂件中说明了整型类型的取值范围。
float.h 这个头⽂件中说明浮点型类型的取值范围。
7.C语言的数据类型有哪四种? 不同的数据类型有不同取值范围? char类型是有符号还是无符号?
①字符型、整型、浮点型和布尔类型,它们是C语言数据类型中的内置数据类型。
②每⼀种数据类型有自己的取值范围,也就是存储的数值的最大值和最小值的区间,有了丰富的类 型,我们就可以在适当的场景下去选择适合的类型。
③char类型默认是否带有正负号,由当前系统决定。(char 不等同于signed char,它有可能是 signed char,也有可能是 unsigned char)
8.变量创建的局部有限性原则究竟是什么?
局部变量的作用范围和生命周期有限。局部变量可以和全局变量重名,但当它们在同一作用域内出现时,局部变量会优先使用。
9.局部变量和全局变量分别存在内存中的哪个位置?堆内如何存储变量?
局部变量在内存中的栈区,全局变量在内存中的静态区。堆区是⽤来动态内存管理的。
10.除号(/)的玄机——浮点数除法和整型除法的注意事项?
当运算符/的两端都是整数时,执行的是整数除法,其结果也是整数。如果希望得到浮点数的结果,至少有一个操作数必须是浮点数,这时C语言会进行浮点数除法,结果为浮点数。
11.前置后置自增自减究竟怎么算?
以自增为例:前置++,先++后使用(即原来的数先+1后再把值赋给其他变量);后置++,先使用后++(即将值赋给其他变量后原来的数再+1)。不论是前置++,还是后置++,原来的数值最终都会+1。自减同理。
例题如下:解析如下:
12.强制类型转化是什么?
#include<stdio.h>
int main()
{
//int a=3.1415926;//a的是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
int a=(int)3.1415926;//意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
printf("%d\n",a);
return 0;
}