错题集

判断
1.数组名就是一个指针常量,指向数组的首元素(或者说代表了数组的首地址)。
T F结果:F
注释:数组名是一个指针常量这种观点来源于数组名在表达式计算中与指针的结果等效性,它存放的是一维数组第一个元素的地址,与指针无关。

2.一维数组定义的一般形式如下,其中的类型名指定数组变量的类型。类型名 数组名[数组长度];
T F结果:F
注释:类型名指定数组中每个元素的类型,数组变量是一种特殊的、十分有用的变量。实际上,规模为n的数组变量是由n个普通的变量组成的。

3.c语言源程序是文本文件,目标文件和可执行文件是二进制文件。
T F结果:T
注释:C源程序文件是一种文本文件,它首先需要编译器去编译成目标文件,在通过链接器链接库代码才能形成可执行的二进制exe文件。

4.int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。
T F结果:F
注释:它表示一个数组指针,p指向一个数组长度为4的数组。

5.关于C语言指针的运算:指针只有加减操作,没有乘除操作。指针可以加常数、减常数;相同类型的指针可以相减,不可以相加。
T F结果:T
注释:指针与指针不能相加,无意义。

6.结构体变量作参数时是地址传递。
T F结果:T
注释:结构体变量作参数时是值传递。

7.可以把结构体数组元素作为一个整体输出。
T F结果:F
注释:结构体数组元素只能单个输出不能作为整体输出。

8.结构体数组不可以在定义时进行初始化。
T F结果:T
注释:结构体数组只能在定义后再初始化。

9.数组名作为函数的参数时,实参数组和形参数组共用相同的内存单元.
T F结果:T
注释:数组名传递的函数时,实际传递的是该数组第一个元素的地址。所以使用数组名作为函数参数时,实参数组和形参数组公用内存单元。

单选
10.以下哪个定义中的p不是指针,请选择恰当的选项:
A.char **p;
B.char (*p)[10];
C.char *p[6];
D.给出的三项中,p都是指针
选A,结果:C
注释:A是二级指针,B是数组指针,p指向一个数组,是指针,c是指针数组,p是数组名。

11.按存储介质划分,文件可以分为:
A.记录文件和流式文件
B.普通文件和设备文件
C.文本文件和二进制文件
D.程序文件和数据文件
选C,结果:A
注释:流式文件的基本单位是字符或字节,记录的组织形式 又可以分为:顺序文件、索引文件、索引顺序文件、散列文件(直接文件),注意:按数据的组织形式划分,文件可以分为:文本文件和二进制文件。

12.若读文件还未读到文件末尾, feof()函数的返回值是( )。
A.-1
B.0
C.1
D.非0
选D,结果:B
注释: feof()函数读文件还未读到文件末尾返回假为0,feof()函数读文件读到文件末尾返回真为1.

13.以下能对一维数组a进行正确初始化的语句是( )。
A.int a[10]=(0,0,0,0,0)
B.int a[2]={0,1,2}
C.int a[]={0}
D.int a[]={{}}
选B,答案:A
注释:B中只放两个数,不能初始化三个。

14.对于以下结构定义,++p->str中的++加在____。
struct {
int len;
char *str;
} *p;
A.指针str上
B.指针p上
C.str指的内容上
D.以上均不是
选C,答案::A
注释:先->再++,所以++在后,str为指针,则加在指针str上。

15.假设scanf语句执行时输入ABCDE<回车>,能使puts(s)语句正确输出ABCDE字符串的程序段是__。 A.char s[5]={“ABCDE”}; puts(s);
B.char s[5]={‘A’, ‘B’, ‘C’, ‘D’, ‘E’}; puts(s);
C.char *s; scanf("%s", s); puts(s);
D.char *s; s=“ABCDE”; puts(s);
选C,答案:D。
注释:A、B已定义长度,系统无法给’\0’,C与A、B意义相同,无‘\0’,只有D有。

16.已有函数max(a,b),为了使函数指针变量p指向函数max,则下面选项中赋值方法正确的是( )。
A: p=max
B: *p=max
C: p=max(a, b)
D: *p=max(a, b )
选C,答案:A
注释:函数名max实际上是此函数的入口地址,p=max 就是说把这个入口地址赋给了p,从而§()就代表了max(),

17.设有如下函数:
ggg(float x)
{printf("\n%d", xx);}
则函数的类型为( )。
A: 与参数x的类型相同
B: void
C: int            
D: 无法确定
选B,答案:C
注释:输出的为%d,将float强转为int,所以函数的类型为 int。

18.以下不正确的if语句形式是( )。
A: if(x>y&&x!=y);
B: if(x==y) x+=y;
C: if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y)
D: if(x
选D,答案:C
注释:因为两个scanf语句后面没有;所以连为一句,错误。

19.若t为double类型,表达式t=1, t+5, t++的值是( )。
A: 1
B: 6.0
C: 2.0
D: 1.0
选C, 答案 :D
注释: t+5只用t没改变t,t++先取t,后加1,所以为原值所以答案是D。

20.若有说明语句
char a[]=“It is mine”; char *p=" It is mine";
则以下不正确的叙述是___________。

A: a+1表示的是字符t的地址
B: p指向另外的字符串时,字符串的长度不受限制
C: p变量中存放的地址值可以改变
D: a中只能存放10个字符
选C, 答案 :D
注释:A答案a的首地址+1则是t的地址,对,B答案p指向的是字符串的首地址,所以对,C答案地址值可以改变,所以对。D答案因定义用a[ ],所以字符串的长度不受限制。

多选题
21.如果变量定义如下,则正确的语句是( )。 int k, a[10];
A.a[-1] = -1;
B.a[0] = 23;
C.k = 3; a[k - 2] = a[9] + 1;
D…for(k = 1; k <= 10; k++){
printf(“%d ”, a[k]);
}
E.for(k = 0; k < 10; k++){
scanf(“%d ”, &a[k]);
}
选BC,答案 BCE
注释:A中的[]里面不能是负数,D是因为a[ ]中的数不能大于等于10。

22.在以下描述中,( )是正确的。
A.int a[3] [3]= {1};
定义了数组a,并对数组a赋初值。此时,a[0][0]的值为1,而其余元素的值都是不确定的。
B.static int b[4] [3]= {{ }, { }, { },{9}};
定义了静态数组b,并对数组赋初值。此时,b[3][0]的值为9,而其余元素的值都为0。
C.int a[3] [3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
和int a[3] [3]= {{1,2,3},{4,5,6},{7,8,9}};
等价。
D.static int b[4][3] = {{1, 2, 3}, { }, {4, 5}};
和static int b[4][3] = {1, 2, 3, 0, 0, 0, 4, 5};
等价。
E.int a[3][3] = {{},{4},{}};
定义了数组a,并对数组a赋初值。此时,a[1][1]的值为4,而其余元素的值都是不确定的。
选BCD,答案 ABCD
注释:E中,a[1][0]的值为4,a[1][1]没赋值,所以为0.

23.选项( )与以下字符数组定义等价。 static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’};
A.static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’};
B.static char s[6] =“Happy”;
C.static char s[6] ={“Happy”};
D.static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, 0};
选BCD,答案 ABCD
注释:如果字符串后无\0系统会自动在后面补\0,字符0==‘\0’,所以ABCD与static char s[6] = {‘H’, ‘a’, ‘p’, ‘p’, ‘y’, ‘\0’};等价。

填空
24.字符串复制。以下程序段的功能是:将字符串str1的内容复制到字符串str2。int i;
char str1[81], str2[81];
i = 0;
while (1) {
2;
i++;
}
3;

答案1:str1[i]!=’\0’
2:str2[i] = str1[i]
3:str2[i] = ‘\0’
注释:先判断单个字符不为’\0’,赋给str2直到运’\0’为止,然后记得给str2补’\0’。

25.在C语言,标识符分为三类:1、2和3。

答案1:关键字
2:用户自定义标识符
3:预定义标识符

编程题
26.有穷状态自动机识别手机号码本题目要求读入1个手机号码,然后判断手机号码是否合法。合法的手机号码判断有如下要求:要求一:手机号码必须是11位。要求二:手机号码开头三个字符必须是151|153|180|173|198开头,其他的开头判断不符合要求。(注:对于刚学C语言的大一学生可以无视该要求)要求三:【不满足该要求视为0分】读入手机号码时一次只能读入1位数字,并且只能1位1位地判断,不允许同时使用手机号码中的多位数字进行联合逻辑运算(即不允许使用类似“a[0]‘1’&&a[1]‘5’"或者"a==‘1’&&b==‘5’”的表达式)。(注:对于刚学C语言的大一学生可以无视该要求)要求四:【不满足该要求视为0分】在判断手机号码状态时,只允许遍历1次手机号码即可获取四种状态值,不允许回溯。**输入格式:直接输入11位十进制。输出格式:测试输入的字符串 is ok/short/long/illegalok状态:表示完全符合手机号码正确,输出okshort状态:表示当输入字符串位数为1、位数为2以及位数为3时,满足【要求二】中规定的前三位字符要求且由09字符串构成,但是位数不满11位,输出shortlong状态:表示前三位满足了【要求二】中规定的前三位字符要求且所有位的字符都由09字符串构成,但位数超过11位,输出longillegal状态:未满足【要求二】中规定的前三位字符要求,或者字符串中含有除0~9之外的字符构成,输出illegal输入样例:19843239892
1984323989
198432398922
198a32398922
输出样例:19843239892 is ok
1984323989 is short
198432398922 is long
198a32398922 is illegal

代码
#include
#include
int main()
{
char a[100];\定义足够字符数组
int i;
gets(a);\键盘输入
for(i=0;i {
if(a[i]<‘0’||a[i]>‘9’)
{
printf("%s is illegal",a);\不是数字排除
return 0;
}
}
if(strlen(a)==1||strlen(a)==2||strlen(a)==3)\太短
printf("%s is short",a);
else if(a[0]= =‘1’&&((a[1]= =‘5’&&a[2]= =‘1’)||(a[1]= =‘5’&&a[2]= =‘3’)||(a[1]= =‘8’&&a[2]= =‘0’)||a[1]= =‘7’&&a[2]= =‘3’)||(a[1]= =‘9’&&a[2]==‘8’))\前三个符合
{
if(strlen(a)==11){
printf("%s is ok",a);
}
if(strlen(a)>11){
printf("%s is long",a);
}
if(strlen(a)<11){
printf("%s is short",a);
}
}
else
printf("%s is illegal",a);\都不符合
return 0;
}

27.报数
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(

本题要求编写函数,给出每个人的退出顺序编号。

函数接口定义:

void CountOff( int n, int m, int out[] );
其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个位置上的人是第out[i-1]个退出的。

裁判测试程序样例:

#include
#define MAXN 20

void CountOff( int n, int m, int out[] );

int main()
{
int out[MAXN], n, m;
int i;

scanf("%d %d", &n, &m);
CountOff( n, m, out );   
for ( i = 0; i < n; i++ )
    printf("%d ", out[i]);
printf("\n");

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:

11 3
输出样例:

4 10 1 7 5 2 11 9 3 6 8

代码
void CountOff(int n, int m, int out[])
{
int i,j=0,p=0,sum=0,a[MAXN];
for(i=0;i {
a[i]=i+1;\先给10个人编号
}
i=0;
while(sum {
if(a[i]!=0)
p++;\编号不是0,则报数+1,
if(p= =m)\p等于3
{
j++;
out[i]=j;\第几个出去的人
a[i]=0;\将编号改为0
p=0;\报数为0
sum++;\出去的总人+1
}
i++;\下一个人
if(i==n)\到最后一个人
i=0;
}
}

————————————————
版权声明:本文为CSDN博主「yanqingPZ」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yanqingPZ/article/details/103764571

你可能感兴趣的:(错题集)