前言:
编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,每篇大约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<stdio.h>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 <stdio.h>#defifine N 2#defifine M N + 1#defifine NUM (M + 1) * M / 2int 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 ; //2while ( 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 <stdio.h>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 ,但不提倡这么做
以上为我个人的小分享,如有问题,欢迎讨论!!!