1、若有以下说明和语句:
struct Student
{
int num;
int age;
}stu,p;
p=&stu;
则可以用p.age引用stu中成员age
标准答案:N您的答案:Y
解析:p.age就是(p.age),解引用操作符*的优先级比.点操作符的低
2、定义结构体typedef struct one { int a;}s; s a;则a为结构体变量()
标准答案:Y您的答案:N
解析:用typedef声明新类型名s
3、结构体和共用体成员的应用都可能引用最低一级的成员。
标准答案:Y您的答案:N
解析:(1)对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。
(2)既可引用结构变量成员的地址,也可引用结构变量的地址。
4、有以下定义和语句,则sizeof(a)的值是 ,而sizeof(a.share)的值是 。(VC环境中)
struct date
{int day;
int month;
int year;
union
{int share1;
float share2;
}share;
}a;
标准答案:
16
4
您的答案:
10
4
5、设有以下结构体类型说明和变量定义,则变量a在内存中所占的字节数是 。(VC环境中)
struct stud
{char num[6];
int s[4];
double ave;
}a;
标准答案:
32
您的答案:
24
解析:排列时要以最大字节数的类型为基准,来排列
不够的就补位。
此题最大字节数是8所以以8为基准第一排6+2
第二排8
第三排8
第四排8
所以一共占字节4*8=32.所以答案是32字节。
6、以下选项中不属于C语言的类型是()
A: signed short int
B: unsigned long int
C: unsigned int
D: long short
标准答案:D您的答案:A
解析:在选项中很明显选项A为无符号短整型,选项B为无符号长整型,选项C为无符号整型,而选项D的类型在C语言中不存在。
7、在C语言中,合法的字符常量是( )。
A: ‘\084’
B: ‘\x43’
C: ‘ab’
D: “\0”
标准答案:B您的答案:D
解析:“\0”应改为‘\0’
8、
若要向一个已存在的文件追加新的信息,只能用“a ”方式打开文件。但此时该文件必须是存在的,否则将会出错。
标准答案:Y您的答案:N
错误原因:做提前未认真阅读书本
9、
若有以下定义,且0≤i<4,则不正确的赋值语句是_______.
int b[4][6], *p, *q[4];
A: q[i] = b[i];
B: p = b;
C: p = b[i]
D: q[i] = &b[0][0];
标准答案:B 您的答案:D
解析:
B:由题目中的定义可知p是针对一维数组的,而b则是二维数组,所以不可以直接这样赋值。
D:而q[4]是二位指针数组,b也是二维数组,所以D的赋值是可以的。
注意:一个*是针对一维数组,两个**则是针对二维数组的。
10、“n是大于整数m的奇数”的C语言表达式是___________。
标准答案:
(n>m)&&(n%2==1)
您的答案:
n>m&&n%2!=0;
解析:首先n对2求与等于0可以判断n是偶数,然后再与上一个n
本回答由提问者推荐
11、若a是int型变量,则表达式(a=45, a2), a+6的值为 。
标准答案:
26
您的答案:
46
解析:(a=45,a2),a+6,括号优先级最高先算括号里,括号里a=45=20即是(20,202),20+6所以结果26
12、以下程序的输出结果是( )。
main()
{int i,j,m=0,n=0;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if(j>=i) m=1;n++;
printf("%d\n", n);
}
A: 4
B: 2
C: 1
D: 0
标准答案:C您的答案:A
解析:main() {int I,j.m=0.n=0; for(I=0;I<2;I++) for(j=0;j<2;j++) if(j>=i)m=1;n++;/本行语句虽然包含"n++",但不包括在任何循环体内/ printf("%d\n",n): }
13、
已定义以下函数:
int fun(int *p){return *p;}
fun函数返回值是 ( )
A: 一个整数
B: 形参p的地址值
C: 形参p中存放的值
D: 不确定的值
标准答案:C 您的答案:A
解析:
在函数中传入的形参是一个指针变量,之后return 返回的值是这个指针变量中所存放的值。而A答案一个整数太笼统,地址也可以是一个整数,所以选C答案更加全面具体。
14、
若a、b、c1、c2、x、y均是整型变量,正确的switch语句是( )。
A) swich(a+b); B) switch(aa+bb)
{case 1:y=a+b; break; {case 3:
case 0:y=a-b; break; case 1:y=a+b;break;
} case 3:y=b-a;break;
}
C) switch a D) switch(a-b)
{case c1 :y=a-b; break; {default:y=ab;break;
case c2: x=ad; break; case 3:case 4:x=a+b;break;
default:x=a+b; case 10:case 11:y=a-b;break;
} }
A: 在题目中
B: 在题目中
C: 在题目中
D: 在题目中
标准答案:D 您的答案:C
解析:
A:swich表达式后面多了个分号。
B:里面的执行语句中不能重复出现相同的常量,否则会矛盾。
C:case后面的不能是变量,必须是常量。
故只有D答案正确。
15、若运行时给变量x输入12,则以下程序的运行结果是( )。
main()
{int x,y;
scanf(“%d”,&x);
y=x>12?x+10:x-12;
printf(“%d\n”,y);
}
A: 0
B: 22
C: 12
D: 10
标准答案:A您的答案:B
解析:本题考查三目运算符“:”。表达式“x>12x+10:x-12”即,如果x>12成立,则x+10的值即为此表达式的值,否则x-12即为此表达式的值。因为x=12,所以x>12不成立,所以执行y=x-12=0。
16、下面能正确进行字符串赋值操作的是
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您的答案:A
解析:如果一个字符数组用来存储字符串,那么在定义该字符数组时,数组的大小应该比它将要实际存放的字符串长度大1,所以选项A)和B)错。选项D)e本身就是一个字符指针,不需再取地址。
17、
以下程序的输出结果是( )。
main()
{int n[5]={0,0,0}, i, k=2;
for(i=0; i
printf("%d\n", n[k]);
}
A: 不确定的值
B: 2
C: 1
D: 0
标准答案:D您的答案:C
18、以下程序的输出结果是( )。
#include
int a[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}, *p;
main()
{p=(int *)malloc(sizeof(int));
f(p, a);
printf(“%d\n”,*p);
}
f(int *s, int p[][3])
{*s=p[1][1];}
A: 1
B: 4
C: 7
D: 5
标准答案:D您的答案:B
解析:本题考查了二维数组元素引用的方法。题中用动态存储分配函数malloc分配了一个int型数据长度大小的内存,然后指针p指向了这段内存,函数f()中对p所指向的数据进行了赋值,p[1][1]为二维数组第二行第二列的元素,对应于实参a的元素5,所以输出结果为5。
19、以下for语句构成的循环执行了( )次。
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{int i, n=0;
for(i=1; i<=NUM; i++)
{n++;
printf("%d", n);
}
printf("\n");
}
A: 4
B: 6
C: 8
D: 9
标准答案:C您的答案:B
解析:如题可知,N=2,M=3,NUM=6 循环判断条件为i
20、已有定义int k=2,*ptrl,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )
A: k=*ptr1+*ptr2
B: ptr2=k
C: ptr1=ptr2
D: k=ptr1(*ptr2)
标准答案:B您的答案:A
解析:k为int 型变量 ptr2为指针类型,不能直接复制,除非强制转换
ptr2=(int *)k;
21、若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A: p[i]
B: ((a+i))
C: a[p-a]
D: (&a[i])
标准答案:B您的答案:A
解析:(a+i)指向a[i]存的那个值,假设i=1,则等于a[1]=1,再求1所指向的地址的值,不能求
22、请读程序:
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;
}
printf(“a=%d, b=%d\n”, a, b);
}
上面程序的输出结果是( )。
A: a=2,b=1
B: a=1,b=1
C: a=1,b=0
D: a=2,b=2
标准答案:A您的答案:C
23.下面程序段中,for循环的执行次数是( )。
char *s=”\ta\018bc”;
for( ;s!=’\0’; s++) printf(“”);
A: 9
B: 5
C: 6
D: 7
标准答案:C您的答案:A
解析:数据成员内存的占用
若有语句:intp,a=4;和p=&a;下面均代表地址的一组选项是( )
A: a,p,&a
B: &*a,&a,*p
C: *&p,*p,&a
D: &a,p,&*p
标准答案:D您的答案:B
解析:p是指针, a是变量。 所以 &a, 或者p,或者&p, 都是地址。
A里面 a不是地址。 *&a等效于a 也不是地址 。
B里面 *a本身就是非法的。 &*a属于非法表达式。 *p是值,不是地址。
C里面 *p不是地址,而是值。 注意 *&p 等效于p, 这个是地址。
D里面 &a &*p和p都是地址。 这里 &*p等效于p。
p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( )
A: c=*p1+*p2
B: p2=c
C: p1=p2
D: c=p1(*p2)
标准答案:B您的答案:D
解析:指针是不能相加的 ,没有意义的。只有大小比较和相减运算。因为地址在内存中是从小到大按直线排列的 所以是可以比较大小的
指针相减是相差多少位,它除以所占字节就是指针间元素的个数。
26.若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( )不是对a数组元素的正确引用(其中0≤i<10)。
A: p[i]
B: ((a+i))
C: a[p-a]
D: (&a[i])
标准答案:B您的答案:C
解析:(a+i)指向a[i]存的那个值,假设i=1,则等于a[1]=1,再求1所指向的地址的值,不能求
27.下面不能正确进行字符串赋值操作的是( )。
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您的答案:C
解析:选项A)和B)定义的数组空间太小,至少应该为6个字符的长度才可以。选项D)中的指针s未赋初值,所以指向一个不确定的地址,因而不能用scanf输入数据到这一指针所指向的地址中。
28.若有以下定义,则说法错误的是( )。
int a=100,p=&a ;
A: 声明变量p,其中表示p是一个指针变量
B: 变量p经初始化,获得变量a的地址
C: 变量p只可以指向一个整形变量
D: 变量p的值为100
标准答案:D您的答案:B
解析:p是一个指针,用来存储a变量的地址,而100是存储在该地址的一个值用p表示的为-p。
29.有如下语句int a=10,b=20,*p1,*p2;p1=&a;p2=&b;如图1所示,若要实现图2所示的存储
结构,可选用的赋值语句是( )。
A: *p1=*p2;
B: p1=p2;
C: p1=*p2;
D: *p1=p2;
标准答案:B您的答案:A
解析:
因为p1和p2都是指针变量,所以可以直接不用带星号的赋值,将p2的地址赋给p1。所以B答案是对的。
30、
若要用fopen函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是( )
A: “ab+”
B: “wb+”
C: “rb+”
D: “ab”
标准答案:B 您的答案:C
解析:
C:是为了读和写打开一个已存在的二进制文件。
B:为了读和写建立一个新的二进制文件。
题目要求是打开一个新的二进制文件即为新建,所以选B是正确的。