前言:
编程想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个弯道超车必做好题锦集的系列,每篇大约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,但不提倡这么做
以上为我个人的小分享,如有问题,欢迎讨论!!!

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

被折叠的 条评论
为什么被折叠?



