大一上C语言复习1.判断题
作者:互联网
目录
初识C
(1)在C语言中,一个语句可以书写在不同行上。
(2)自定义标识符以字母或下划线打头
(3)执行以下程序段,输入10
,输出10.00
。错误
double x;
scanf("%d", &x);
printf("%.2f", x);
虽然整型可以赋给浮点型然后转换为浮点型,但读取格式应为浮点型,且无格式符限制
同理
double x;
scanf("%f", &x);
printf("%.2f", x); 双浮点型应该用%lf输入和输出
否则输出结果都为0.00
(4)执行以下程序段,输入30
,输出30.00
。错误
double x;
scanf("x=%lf", &x);
printf("%.2f", x);
格式化输入,得输入x=……
(5)测试调试样例:
奇数与偶数;
大于小于和等于(即使只有一条if语句,且一个判断条件)(一个临界值)(以此类推多个)
(如:小于0的数、0、大于0且小于15的数、15和大于15的数);
最小值最大值中间值
(6)降序:值逐渐减小;升序:值逐渐增大
(7)同一字母的小写大写字母相差32,且大写字母ascill码值小于小写字母
(8)设变量已正确定义,执行以下程序段,顺序输入三个字符'Q'
,则输出Q
。错误
ch = getchar();
putchar(ch);
输入的不是三个Q,而是’ Q 和 ’ ,所以应该输出 ‘
(9)关于switch语句中,case后只能是一个常量(包括数字和字符)或常量表达式
(10)若变量已正确定义,执行以下while语句将陷入死循环。
i = 1;
while (i <= 10) ;
i++;
注意分号,while语句后有分号,语句语句不执行结束i的值不会增加一直为1,所以一直循环
(11)如果for的循环体语句中没有使用continue语句,则以下for语句和while语句等价。
(12)do - while语句的一般形式如下,第一次进入循环时,首先执行循环体语句,然后再检查循环控制条件,即计算表达式,若值为“真”,继续循环,直到表达式的值为“假”,循环结束,执行do - while的下一条语句。其循环体至少执行一次。
(13)在嵌套循环(多层循环)中, 每一层循环中都不应该改变其他层使用的循环变量的值,以免互相干扰。
实参与形参
(14)函数的实参和形参都可以是变量、常量和表达式。错误
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
形参是变量,形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
(15)函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。
(16)实参与形参命名可以相同,事实上相同会提高代码的可读性
函数
(17)必须先声明后定义(习惯是把函数定义在梦函数后,所以需要在梦函数前声明才能调用)
(18)如果无需返回值可以省略return语句
变量
(19)全局变量可以定义在函数外任何位置,但习惯性定义在最前面
(20)全局变量与局部变量作用域不同,前者从程序开始到程序结束,后者从函数执行开始到结束
(21)全局变量与局部变量可以同名
比如:全局变量有个变量i,你的子程序中也用变量i当成循环变量,则在子程序中使用的i不是全局变量,是你定义的局部变量,全局变量i不受影响也不会被使用。
在编译器看来,虽然这两个变量名相同,但会被两个不同的标识符标识,不会混淆,局部变量i的变量名最终与全局变量i的名是不同的
(22)为了便于计算机存储管理,C语言把保存所有变量的数据区,分成动态存储区和静态存储区(√),静态局部变量被存放在动态存储区。错误
为了便于计算机存储管理,C语言把保存所有变量的数据区分成动态存储区和静态存储区。它们的管理方式不同,动态存储区是使用堆栈来管理的,适合函数动态分配与回收存储单元。而静态存储区相对固定,管理较简单,它用于存放全局变量和静态变量。
(23)是否会自动赋值为0,取决于变量的类型。
1>全局变量,包括静态全局变量,和非静态全局变量,在没有初始化值时,其值自动为0.
即定义在所有函数外,不归属于任何一个函数的,在没有初始化值时,自动为0。
2>静态局部变量。
当定义在函数内的局部变量,有static标记时,默认初始化为0值。
3>非静态局部变量,无默认初始值,C标准规定初始化值为随机值,但具体实现由编译器决定
(51)当变量的存储类型定义缺省时,系统默认为变量的存储类型为auto类型,分配在静态区。
错误
存储类型 有auto和static两种.
凡是不加static的 都是auto类型.
分配在静态区的是全局变量和静态变量
所以应该分配在动态区
递归
(24)递归的执行速度并不快,但代码比较紧凑,并且比相应的非递归代码更易于编写与理解。
(25)递归不节省存储器的开销,因为递归调用过程中必须在某个地方维护一个存储处理值的栈。
一维数组
(26)下标的合理取值范围是[0,数组长度-1],下标不能越界。
(27)在定义数组之后,根据数组中元素的类型及个数,在内存中分配一段连续存储单元用于存放数组中的各个元素。
(28)数组名表示该数组所分配连续内存空间中第一个单元的地址,即首地址。
(29)数组定义后,数组名的值是一个地址,这个地址是由系统分配的,是不可以修改的
(30)数组定义后,只能引用单个的数组元素,而不能一次引用整个数组。
二维数组
(31)二维数组定义的一般形式如下:
类型名 数组名[行长度][列长度];
二维数组元素引用的一般形式如下:
数组名[行下标][列下标]
在引用数组元素时,行下标的合理取值范围是[0,行长度-1],列下标的合理取值范围是[0,列长度-1]。行下标和列下标都不能越界。
(32)二维数组的元素在内存中按行/列方式存放,即先存放第0行的元素,再存放第1行的元素……其中每一行的元素再按照列的顺序存放。
(33)将二维数组的行下标和列下标分别作为循环变量,通过二重循环,就可以遍历二维数组,即访问二维数组的所有元素。由于二维数组的元素在内存中按行优先方式存放,将行下标作为外循环的循环变量,列下标作为内循环的循环变量,可以提高程序的执行效率。
字符串
(34)字符串常量就是用一对双引号括起来的字符序列,它有一个结束标志 '\0'
。
(41)字符串常量实质上是一个指向该字符串首字符的指针常量。
(42)调用printf函数,%s的格式输出字符串时,字符数组名、字符指针和字符串常量(双引号括起来)都可以作为输出参数。
(43)strcmp函数比较字符串大小,是逐个字符比较ascill码值,比较后返回ascill码差值
指针
(35)语句int *p, q, r;
定义了3个指针变量。错误
带 * 才为指针变量
(36)执行语句int *p;
后,指针变量p
只能指向int
类型的变量。即不同类型的指针变量是不可以直接相互赋值的。
(37)要通过函数调用来改变主调函数中某个变量的值,可以把指针作为函数的参数。
(38)数组的基地址是在内存中存储数组的起始位置,数组名本身就是一个地址即指针值。
(39)对于定义int a[10],*p=a;
语句p=a+1;
和a=a+1;
都是合法的。错误
数组名不能做自增自减
数组名不是变量 不能做左值。
指针你可以把它看做一个整型(但不是)数据类型,它是一个变量,存储的是一个地址。比如你可以把一个地址赋值给它,这时指针变量就存储这个地址,再把另一个地址赋值给它, 这时指针变量就存另一个地址,它是可以变的,所以可以作为左值。
数组,你声明一个数组,系统就分配了一个内存单元 ,这时数组名表示得是这个数组首元素得地址,这个地址是不能变得,可以把它看做(但不是)常量,所以不能作为左值 。
(40)同类型指针变量才可比较大小(指针是存放地址的长整型)
结构体
(44)结构是变量的集合,可以按照对同类型变量的操作方法单独使用其成员变量。
(45)在定义结构类型时,关键字struct
和它后面的结构名共同组成一个新的数据类型名。
(46)在定义嵌套的结构类型时,必须先定义成员的结构类型,再定义主结构类型。
(47)只有相同类型的结构体变量可以直接赋值。
(48)在对结构变量操作时,.
被称为成员或者分量运算符。
(49)结构数组是结构与数组的结合体,与普通数组的不同之处在于每个数组元素都是一个结构类型的数据,包括多个成员项。
(50)对于结构数组s
,既可以引用数组的元素s[i]
,也可以引用s[i]
中的结构成员。
(52)结构体类型本身不占用内存空间,结构体变量占用内存空间。
结构体指针
(54)结构指针就是指向结构类型变量的指针。
(55)假设结构指针p
已定义并正确赋值,其指向的结构变量有一个成员是int
型的num
,则语句 *p.num = 100;
是错误的
p->num或stu.num
文件
(53)当fopen函数打开文件失败时,返回给文件指针的值是NULL。
(56)从文件的逻辑结构上看,c语言把文件看作数据流,并将数据按顺序以一维方式组织存储。
(57)对于缓冲文件系统,在进行文件操作时,系统自动为每一个文件分配一块文件内存缓冲区(内存单元)。
标签:语句,变量,函数,定义,C语言,大一上,数组,判断题,指针 来源: https://blog.csdn.net/nonemeek/article/details/122151938