弯道超车必做好题锦集一(C语言选择题)

前言:

编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,每篇大约10题左右。此为第一篇选择题篇,该系列会不定期更新,后续还会开编程题的系列。敬请期待!


1.test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )

#defifine INT_PTR int*
typedef int* int_ptr ;
INT_PTR a , b ;
int_ptr c , d ;

A: a B: b C: c D: d

答案解析:
正确答案: ACD
因为 #defifine 是宏定义,仅仅是直接替换 ,INT_PTR a, b; 进行宏替换后代码是这样的: int *a, b; 这里的 int * a 的类型, b 的 类型是int ,故此次 b 只是 int 类型。而 typedef 是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
所以 a c d 才是指针类型

2.有如下定义语句,则正确的输入语句是【多选】( )

int b ;
char c [ 10 ];
A: scanf("%d%s",&b,&c);     B: scanf("%d%s",&b,c);  
C: scanf("%d%s",b,c);          D:  scanf("%d%s",b,&c);  
答案解析:
正确答案: AB
&c c 两个地址值是一样的,程序的效果相同,也没错,但同时也必须把变量 b 的地址给 scanf, CD 错误, AB 正确


3.以下程序段的输出结果是()

#include
int main ()
{
char s [] = "\\123456\123456\t" ;
printf ( "%d\n" , strlen ( s ));
return 0 ;
}

 A: 12 B: 13 C: 16 D: 以上都不对

答案解析:
正确答案: A
这里考查转义字符,注意: \\ 表示字符 '\' \123 表示字符 '{' \t 表示制表符,这些都是一个字符


4.若有以下程序,则运行后的输出结果是( )

#include
#defifine N 2
#defifine M N + 1
#defifine NUM (M + 1) * M / 2
int main ()
{
printf ( "%d\n" , NUM );
return 0 ;
}

A: 4 B: 8 C: 9 D: 6

答案解析:
正确答案: B
宏只是替换,替换后 NUM 的样子是 (2+1+1)*2+1/2 ,计算得 8

 5.判断是否正确

初始化方式 char a[14] = "Hello, world!"; char a[14]; a = "Hello, world!"; 的效果相同

A.正确   B.错误

答案解析:

a为数组首地址是常量不能改变 ,a = "Hello, world!"相当于把H的地址强给a


6.请问下列表达式哪些会被编译器禁止【多选】( )

int a = 248 , b = 4 ;
int const * c = 21 ;
const int * d = & a ;
int * const e = & b ;
int const * const f = & a ;

A: *c = 32; B: *d = 43 C: e=&a D: f=0x321f  

答案解析:

正确答案: ABCD
如果 const 位于 * 的左侧,则 const 就是用来修饰指针所指向的变量,即指针指向为常量; *c *d 不能变。
如果 const 位于 * 的右侧,则 const 就是修饰指针本身,即指针本身是常量; e f 不能变。

7.运行以下程序后,如果从键盘上输入 65 14<回车> ,则输出结果为( )

int main ()
{
int m , n ;
printf ( "Enter m,n;" );
scanf ( "%d%d" , & m , & n );
while ( m != n ) //1
{
while ( m > n ) m = m - n ; //2
while ( n > m ) n = n - m ; //3
}
printf ( "m=%d\n" , m );
return 0 ;
}
答案解析:
正确答案: C
此题技巧是耐心,考查 while 循环和循环嵌套的理解,初值 m=65,n=14 ;循环 1 判断 m!=n 为真,来到循环 2 判断 m>n 为真, 执行m=m-n; 直到 m=9,n=14 ;循环 2 结束来到循环 3 判断 n>m 为真,执行 n=n-m; 直到 m=9,n=5 ;循环 3 结束回到循环 1 ,如 此往复直到m==n 时,循环结束

 8.若运行以下程序时,从键盘输入 ADescriptor<回车> ,则下面程序的运行结果是( )

#include
int main ()
{
char c ;
int v0 = 0 , v1 = 0 , v2 = 0
do
{
switch ( c = getchar ())
{
case 'a' : case 'A' :
case 'e' : case 'E' :
case 'i' : case 'I' :
case 'o' : case 'O' :
case 'u' : case 'U' : v1 += 1 ;
default v0 += 1 ; v2 += 1 ;
}
} while ( c != '\n' );
printf ( "v0=%d,v1=%d,v2=%d\n" , v0 , v1 , v2 );
return 0 ;
}

 A: v0=7,v1=4,v2=7 B: v0=8,v1=4,V2=8 C: v0=11,v1=4,v2=11 D: v0=12,v1=4,v2=12

答案解析:
正确答案: D
代码 switch 语句中没有 break ,则每次找到入口进入后,顺序执行到代码块结束为止。例如当 c 'A' 时,从 case 'A' 进入,先 后执行v1+=1;v0+=1;v2+=1; ,而当 c 'p' 时,从 default 进入,先后执行 v0+=1;v2+=1; ,容易看出最终 v0 v2是相等的。< 回车 >也会被getchar()吸收。

9.对于代码段,下面描述正确的是( )

t = 0 ;
while ( printf ( "*" ))
{
t ++ ;
if ( t < 3 )
break ;
}
A: 其中循环控制表达式与 0 等价 B: 其中循环控制表达式与 '0' 等价
C: 其中循环控制表达式是不合法的 D: 以上说法都不对
答案解析:
正确答案: B
print(“*”) 函数调用的返回值是字符串中字符的个数,即为 1 。所以 while 后面的条件恒为真(非零),所以循环控制表达式与 '0' 是等 价的(字符'0' 不是 0 )。正确答案是 B

10.在c语言中,一个函数不写返回值类型,默认的返回类型是(  )

A: int B: char C: void D: 都不是
答案解析:
正确答案: A
一个函数不写返回值类型,默认的返回类型是 int ,但不提倡这么做

 

以上为我个人的小分享,如有问题,欢迎讨论!!! 

弯道超车必做好题锦集一(C语言选择题)_第1张图片

 

你可能感兴趣的:(c语言,经验分享,其他)