C语言程序错题

1.当定义一个结构体变量时系统分配给它的内存是:
A:各成员内存的总和

B: 成员中占内存量最大者所需的容量的倍数

C: 结构中第一个成员所需内存量

D: 结构中最后一个成员所需内存量 标准答案:B
你的答案:A

系统分配给它的内存应该是成员中占内存量最大者所需的容量乘上所有成员的个数

2.结构体和共用体成员的应用都可能引用最低一级的成员。
正确答案:Y
你的答案:N

3.结构体变量作参数时是地址传递。
标准答案:N
您的答案:Y

c语言结构体元素作为函数参数传的是值,不是地址

4.构体数组不可以在定义时进行初始化。 标准答案:N
你的答案:Y

构体数组可以在定义时进行初始化

5.C语言中,关键字enum可用于结构类型的定义。
标准答案:N
你的答案:Y

结构体的关键字是struct

6.下说明和语句:

struct Student

{

 int num;

 int age;

}stu,*p;

p=&stu;

则可以用*p.age引用stu中成员age

标准答案:N
您的答案:Y

指针用->而不是.

8.以下程序输出结果是( )

main( )

{

 int x=1,y=0,a=0,b=0;

 switch(x)

 {

    case 1:switch(y)

     {

       case 0 :a++;break;

    case 1 :b++;break;

     }

    case 2:a++;b++;break;

    case 3:a++;b++;

 }

 printf("a=%d,b=%d",a,b);

}

A: a=1,b=0

B: a=2,b=1

C: a=1,b=1

D: a=2,b=2
标准答案:B
你的答案:A

9.若有说明:int*p1,*p2,m=5,n;以下程序段正确的是( )
A: p1=&m;p2=&p1

B: p1=&n;scanf("%d",*p1)

C: scanf("%d",n); *p1=n

D: p1=&n; *p1=m
标准答案:D
你的答案:B

p2=&p1,p2不是双指针
p2=&n,n还没有赋值
*p2=*p1;原来p2还没初始化,即没有分配内存

10.有如下定义和输入语句,若要求c1,c2的值分别A和B,正确的输入方式是()
char c1,c2;
scanf("%c%c",&c1,&c2);

A: AB

B: A B

C: A,B

D: A;B
正确答案:A
我的答案:B
输入方式是两个连续的字符,没有增加空格所以中间不需要空格隔开

11.数组名和指针变量均表示地址,以下不正确的说法是( )。

A: 数组名代表的地址不变,指针变量存放的地址可变。

B: 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。

C: A和B的说法均正确。

D: 没有差别。

正确答案:D
我的答案:C

系统为每一个内存单元分配一个地址值,C/C++把这个地址值称为“指针”。如有int i=5;,存放变量i的内存单元的编号(地址)&i被称为指针。
“指针变量”则是存放前述“地址值”的变量,也可以表述为,“指针变量”是存放变量所占内存空间“首地址”的变量(因为一个变量通常要占用连续的多个字节空间)。比如在int i=5;后有一句int *p=&i;,就把i的指针&i赋给了int *型指针变量p,也就是说p中存入着&i。所以说指针变量是存放指针的变量。
有一个事实值得注意,那就是有不少资料和教科书并没有如上区分,而是认为“指针是指针变量的简称”,如对int *p=&i;的解释是:声明一个int *型指针p,并用变量i的地址初始化;而严格说应该是声明一个int *型指针变量p才对

12.有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空( )。

#include <stdio.h>

main()

{int i;

 for(i=100;i<200;i++)

    if((i-2)%4==0)

       if(!((i-3)%7))

          if( ______ )

             printf("%d",i);

}

A: i%9=5

B: i%9!=5

C: (i-5)%9!=0

D: i%9==5
正确答案:D
我的答案:C
13.在C语言中,5种基本数据类型的存储空间长度的排列顺序为( )。

A: char<int<long int<=float<double B: char<int<=long int<float<double
C: char<int<=long int<=float<double D: char=int<long int<=float
正确答案:A
我的答案:D

char<int<long int<=float<double。

14.对下述程序,正确的判断是( )

main()

{

 int x,y;

 scanf("%d,%d",&x,&y);

 if(x>y)

  x=y;y=x;

 else

  x++;y++;

 printf("%d,%d",x,y);

}

A: 有语法错误,不能通过编译

B: 若输入3和4,则输出4和5

C: 若输入4和3,则输出3和4

D: 若输入4和3,则输出4和5
正确答案:A
我的答案:C
15.语句while(!E);中的表达式!E等价于( )。

A: E==0

B: E!=1

C: E!=0

D: E==1
正确答案:A
我的答案:B

16.有以下定义:

char x[ ]=“abcdefg”;

char y[ ]={‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’};

则正确的叙述为( )。

A: 数组x和数组y等价

B: 数组x和数组y的长度相同

C: 数组x的长度大于数组y的长度

D: 数组x的长度小余数组y的长度
正确答案:C
我的答案:D
空间中多了一个\0
17.下列程序执行后的输出结果是( )。

void func1(int i);

void func2(int i);

char st[ ]="hello,friend!";

void func1(int i)

{printf("%c", st[i]);

 if(i<3){i+=2;func2(i);}

}

void func2(int i)

{printf("%c", st[i]);

 if(i<3){i+=2;func1(i);}

}

main()

{int i=0; func1(i); printf("\n");}

A: hello

B: hel

C: hlo

D: hlm
正确答案:C
我的答案:B
输出前三个字母
18.定义 枚举类型 enum one {a,b,c,d=4,e,f}; 其中a=1,b=2,c=3 ( )
标准答案:N
您的答案:Y
枚举类型定义和结构体一样,首先是关键字emun,然后是名字,然后是{和枚举举例,最后再加}.
定义里面不能包含=这种关键字.
19.rewind函数的作用是位置指针返回移动前的位置。()
标准答案:N
您的答案:Y
函数rewind的功能是将文件指针重新指向一个流的开头
20.给数组赋初值,初值的个数可以超过数组的长度,多余的被忽略。
标准答案:N
您的答案:Y
会报错
21.仅仅对存放字符串的数组才可以一次引用整个数组,其余均不能一次引用整个数组。
标准答案:Y
你的答案:N
22.枚举类型是一种基本的数据类型。
标准答案:N
你的答案:Y
是一中算术类型,不是数据类型
22.fseek函数中的第二个参数代表的位移量是相对于文件的开始来说的。
标准答案:N
你的答案:Y
文件是一个流,文件中的123顺序,你在读写的时候是先读1,再读2和3,也就是说有一种逻辑上的顺序,如果把整个文件看做一条马路,你会先遇到1,再遇到2和3,那么显然,2在3的后面(因为你遇到3的时候,2已经在你身后了)
23.下面不能正确进行字符串赋值操作的是( )。

A: char s[6]={“ABCDE”};

B: char s[5]={‘A’,'B’,'C’,'D’,'E’};

C: char *s;s=”ABCDE”;

D: char *s; scanf(“%s”,s);
标准答案:B
你的答案:D
char s[5]={“ABCDE”}; “ABCDE"占用空间是6字节,超出s的长度了
char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′}; 没有字符串结束的终结符,s不能当字符串使用
char *s;s=“ABCDE”; 正确
char *s;char a; scanf("%s",&s); s还是个野指针

24.设有程序段:char s[ ]=”china”; char *p ; p=s ;

则下面叙述正确的是(     )。

A: s和p完全相同

B: 数组s中的内容和指针变量p中的内容相等

C: s数组长度和p所指向的字符串长度相等

D: *p与s[0]相等
标准答案:D
你的答案:C
A:s是字符数组,p是指向字符串的指针
B:显然数组s中的内容和指针变量p中的内容不相等,应该换一种说法“数组s中的内容和指针变量p所指向的字符串的内容相等”
C:s数组的长度为6(包含结束符’\0’),p所指向的字符串长度为5
D:*p=‘c’,s[0]=‘c’
25.宏定义#define PI 3.1415926的作用是:指定用标识符PI来代替一个( )。

A: 单精度数

B: 字符串

C: 双精度数

D: 整数
标准答案:B
你的答案:C
26.下面能正确进行字符串赋值操作的是

A: char s[5]={“ABCDE”};

B: char s[5]={ ′A′, ′B′, ′C′, ′D′, ′E′};

C: char *s;s=“ABCDE”;

D: char *s;char a; scanf("%s",&s);
标准答案:C
你的答案:B
项A和B定义的数组空间太小,至少应该为6个字符的长度才可以。选项D中的指针 s未赋初值,所以指向―个不确定的地址,因而不能用 scanf输入数据到这一指针所指向的地址中。

27.若有以下说明:int a[5][9];则下列选项中对数组元素a[i][j]的引用是错误的有*(a+i)[j].(0<=i<4,0<=j<9)
标准答案:N
你的答案:Y
正确,可以认为该指针是一个二维数组

28.函数指针所指向的是程序代码区。
标准答案:Y
您的答案:N

29.设有如下定义:
char *s[2]={“abcd”,“ABCD”};
则s数组元素的值分别是“abcd”和“ABCD”两个字符串的首地址
标准答案:Y
您的答案:N

30.通过变量名或地址访问一个变量的方法称为“直接访问”方式。
标准答案:Y
您的答案:N

31.定义:char p[20]; 则,p, &p[0] 两者没有区别
标准答案:Y
您的答案:N

32.键盘输入一个整数,要求输出其本身、输出其八进制表示、十六进制表示,负数在输出数的最前面输出负号“-”。

第一行输出其本身,

第二行输出其八进制表示,不带前导“0”;

第三行输出其八进制表示,带前志“0”;

第四行输出十六进制表示,不带前导“0x”;(小字字母)

第五行输出其十六进制表示,带前导“0x”;(小字字母)
输入
输入有多行,每行输入一个整数
输出
针对每行的输入数,输出其本身、输出其八进制表示、十六进制表示
样例输入
124
-124
样例输出
124
174
0174
7c
0x7c
-124
-174
-0174
-7c
-0x7c
代码如下
#include<stdio.h>
int main()
{
int a;
while(~scanf("%d",&a))
if(a>=0)
printf("%d\n%o\n0%o\n%x\n0x%x\n",a,a,a,a,a);
else
{
a=-a;
printf("-%d\n-%o\n-0%o\n-%x\n-0x%x\n",a,a,a,a,a);
}
return 0;
}
33.键盘输入若干个整数,要求交换相邻两个整数的位置,即第1个和第2个交换,第3个和第4个交换,依次类推。如果没有构成一对,则不交换。
输入
输入只有一个用例,占两行,第一行是整数个数n,第二个是n个整数。
输出
用一行输出交换后的结果,每个整数之间用一个空格隔开。
样例输入
5
1 2 3 4 5
样例输出
2 1 4 3 5
代码如下
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,j;
int a[10000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i+1<n;i=i+2)
{
j=a[i];
a[i]=a[i+1];
a[i+1]=j;
}
for(i=0;i<n;i++)
{
printf("%d",a[i]);
if(i+1<n)
printf(" ");
}
return 0;
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值