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

本文介绍了C语言中的指针类型、宏定义以及相关编程题的解析,包括宏定义INT_PTR和typedef的区别,scanf函数的使用,字符串长度计算,宏展开的示例,以及涉及循环和字符处理的编程题目。

前言:

编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,每篇大约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是把该类型定义一个别名,别名是一个独立的类型了,使用这个类型创建的变量都是这个类型的。
所以 acd才是指针类型

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
&cc两个地址值是一样的,程序的效果相同,也没错,但同时也必须把变量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 / 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 就是修饰指针本身,即指针本身是常量;ef不能变。

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 <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;
defaultv0+= 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;,容易看出最终v0v2是相等的。<回车>也会被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,但不提倡这么做

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值