C语言--每日五道练习题--Day18

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: C语言--每日五道练习题--Day18

第一题

1.设a为整型变量,不能正确表达数学关系:10

A:10

B:a==11|| a==12 || a==13 || a==14

C:a>10 && a<15

D:!(a<=10) && !(a>=15)

答案及解析 A

A:C语言中这种的表达式,10 < a < 15 的结合性是从左往右,所以会先算出10 < a 为真假性,但是无论是真1还是假0都是都是小于15的,所以这个表达式最后的恒为真,无法比较我们想要的结果;


B:因为在数学表达式10 < a < 15 ,其中的整数是11,12,13,14.只要满足一个就是,所以是逻辑或;


C:这才是用C语言正确表示10 < a < 15;


D:因为!是逻辑取反,所以!(a <= 10 )相当于a > 10 ,!(a >= 15) 相当于  a < 15 ;


      最后表达式就相当于10 < a < 15;

第二题

2. 假设i=2,执行下列语句后i的值为()

switch( i )
{
    case 1 : 
        i ++;
    case 2 : 
        i --;
    case 3 : 
        ++ i; 
        break;
    case 4 : 
        -- i;
    default : 
        i ++;
}

A:1

B:2

C:3

D:4

答案及解析  B

一旦符合case的条件就会进入,但是case后面只要没有break,就会进入下一个case,所以我们i = 2;进入case 2:这个语句,执行i--,但是case 2没有break,继续进入case 3:


之后++i,这个时候有break,就跳出switch语句,i值为2;


第三题

3. 对于以下变量定义,正确的赋值是()

int *p[3], a[3];

A:p=a

B:*p=a [0]

C:p=&a [0]

D:p[0]=&a[0]

答案及解析 D

本题考查的是类型匹配的问题,我们先看int *p[3],[]的优先级比*高,所以先形成数组,之后数组的元素类型是int*,这是一个指针数组,存放的是一级指针,这很重要;


后面就是正常定义int a[3]的整型数组;


A C:p是指针数组的数组名,数组地址不可修改,是指针常量,不可以做赋值操作符的左值,因为赋值操作符左边必须为变量;


B:*p,是堆二级指针解引用,是一级指针,等价于p[0];a[0]是整型,类型不匹配;


D:p[0]是一级指针,&a[0]是一级指针,类型匹配,可以赋值

第四题

4. 已知int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, *p = a;,不能表示数组a中元素的式子是()


A:*a

B:*p

C:a

D:a[ p-a ]

答案及解析 C

A:a是数组名,代表首元素地址 ,*a代表首元素,a[0]


B:*p = a ,也就是我们定义了一个指针变量指向的是首元素的地址,解引用就是首元素a[0]


C:a是首元素地址,不是数组元素


D:a[p-a],由于p和a都代表的是首元素地址,地址相减为0,a[p-a] 等价于 a[0]

第五题(难点)

5. 下列关于const和#define定义常量的区别,说法不正确的有()


A:define宏是在预处理阶段展开。const常量是编译运行阶段使用


B:宏没有类型,不做任何类型检查,仅仅是展开。const常量有具体的类型,在编译阶段会执行类型检查


C:define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。const常量会在内存中分配(可以是堆中也可以是栈中)


D:const定义和#define定义的常量在程序运行过程中只有一份拷贝

答案及解析 D


A:正确,在预处理阶段会进行处理预处理指令的处理,#define定义的宏是在预处理阶段进行替换的,注意是仅替换,并不会检查合法性。const常量是在编译、运行阶段进行使用的。


B:正确:所有的宏替换只是替换,就替换完就OK,所以并不会检查其合法性,而const定义的常量是内置类型(int,double,float等)所以会对其进行类型检查。


C:正确:宏定义在程序中使用了几次在预处理阶段就会被展开几次,并不会增加内存占用,但是宏定义每展开一次,代码的长度就要发生变化,而const常量也会为其分配内存,如果const修饰的是由malloc,realloc等开辟的空间,就是在堆上分配的。


D:错误:const定义的常量只有一次拷贝,而define定义的变量在内存中并没有拷贝,因为所有的预处理指令都在预处理时进行了替换,并不分配内存。


相关文章
|
7月前
|
C语言
C语言练习题
C语言练习题
34 0
|
7月前
|
C语言
C语言练习题 温度自动转换‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪
C语言练习题 温度自动转换‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪
|
7月前
|
C语言 数据安全/隐私保护
C语言练习题
C语言练习题
45 1
|
7月前
|
C语言
c语言编程练习题:7-60 Welcome to You!
c语言编程练习题:7-60 Welcome to You!
77 0
|
6月前
|
人工智能 算法 Java
|
7月前
|
存储 C语言
C语言从入门到实战——数组和指针的强化练习题
C语言中指针和数组有着密切的关系,因为数组名在C语言中可以看作是一个指针常量。 指针是一个变量,存储的是另一个变量的地址。可以通过指针来访问另一个变量的值。指针变量可以存储任何类型的地址,包括数组的地址。 数组是一组相同类型的数据元素的集合。在C语言中,可以用数组名来表示整个数组,在这个意义上,数组名看起来像一个指针变量。实际上,数组名在C语言中可以看作是一个指向数组首元素的指针常量。
66 0
|
7月前
|
C语言
c语言编程练习题:7-59 打印菱形图案
c语言编程练习题:7-59 打印菱形图案
75 0
|
7月前
|
C语言
c语言编程练习题:7-58 求幂级数展开的部分和
c语言编程练习题:7-58 求幂级数展开的部分和
77 0
|
7月前
|
C语言
c语言编程练习题:7-57 求e的近似值
c语言编程练习题:7-57 求e的近似值
79 0
|
7月前
|
C语言
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
89 0