5.有以下程序段
#include
intmain()
{intx[]={10,20,30};
int*px=x;
printf("%d,",++*px);printf("%d,",*px);
px=x;
printf("%d,",(*px)++);printf("%d,",*px);
px=x;
printf("%d,",*px++);printf("%d,",*px);
px=x;
printf("%d,",*++px);printf("%d\n",*px);
return0;
}
程序运行后的输出结果是()
A)11,11,11,12,12,20,20,20B)20,10,11,10,11,10,11,10
C)11,11,11,12,12,13,20,20D)20,10,11,20,11,12,20,20
6.设有如下定义:
intarr[]={6,7,8,9,10};
int*ptr;
ptr=arr;
*(ptr+2)+=2;
printf("%d,%d\n",*ptr,*(ptr+2));
则程序段的输出结果为
A)8,10B)6,8C)7,9D)6,10
7.若有定义:
inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是_4__.*(a+5)的值是12_________.
8.若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是__D____.
A) p+1 B) *(p+3) C) *(p+1)+3 D) *(p[0]+2))
9.若有定义:
inta[2][3],则对a数组的第i行j列元素地址的正确引用为______.
a)*(a[i]+j)b)(a+i)c)*(a+j)d)a[i]+j
10.若有以下定义:
inta[2][3]={2,4,6,8,10,12};则a[1]
[0]的值是__8___.*(*(a+1)+0)的值是_8_.
11.有以下定义
chara[10],*b=a;
不能给数组a输入字符串的语句是()
A)gets(a)B)gets(a[0])C)gets(&a[0]);D)gets(b);
12.下面程序段的运行结果是________.
char*s="abcde";
s+=2;printf("%d",s);
a)cdeb)字符'c'c)字符'c'的地址d)无确定的输出结果
13.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()
A)chars[10]="abcdefg";B)chart[]="abcdefg",*s=t;
C)chars[10];s="abcdefg";D)chars[10];strcpy(s,"abcdefg");
14.设已有定义:
char*st="howareyou";下列程序段中正确的是()
A)chara[11],*p;strcpy(p=a+1,&st[4]);B)chara[11];strcpy(++a,st);
C)chara[11];strcpy(a,st);D)chara[],*p;strcpy(p=&a[1],st+2);
选A
strcpy(p=a+1,&st[4]);
从st[4]开始复制给p,最终p="areyou"
B,a是字符数组名,是个常量,不能执行++a操作
C.因为*st="howareyou";有11个字符,包括\0就有12个字符.
所以a[11]没有把\0复制过去.会有乱码.
D.a[]没有声明多大的数组.
补充:
C不是有乱码的问题,是因为数组a[11]不够存放str.
15.有以下程序
main()
{
chara[]="programming",b[]="language";
char*p1,*p2;
inti;
p1=a;p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))
printf("%c",*(p1+i));
}
输出结果是()
A)gmB)rgC)orD)ga
16.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是________.
a)c=*p1+*p2;b)p2=cc)p1=p2d)c=*p1*(*p2);
17.以下正确的程序段是_________.
a)charstr[20];b)char*p=a,a[10];
scanf("%s",&str);scanf("%s",p);
c)charstr[20];d)charstr[20],*p=str;
scanf("%s",&str[2]);scanf("%s",&p[2]);
18.若有说明语句
chara[]="Itismine";
char*p="Itismine";
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变d)a中只能存放10个字符
19.下面程序的运行结果是_______.
#include
#include
main()
{char*s1="AbDeG";
char*s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(s1,s2));
}
a)正数b)负数c)零d)不确定的值
20.有以下程序
voidf(int*x,int*y)
{intt;
t=*x;*x=*y;*y=t;
}
main()
{
inta[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(*p!
=*q){f(p,q);p++;q--;}
for(i=0;i<8;i++)printf("%d,",a[i]);
}
程序运行后的输出结果是______。
A)8,2,3,4,5,6,7,1,B)5,6,7,8,1,2,3,4,C)1,2,3,4,5,6,7,8,D)都不对
21.已定义以下函数
fun(int *p)
{ return *p;}
该函数的返回值是
A)不确定的值 B)形参p中存放的值 C)形参p所指存储单元中的值 D)形参p的地址值
函数的返回值应该为return后面的表达式的值,在本题中的表达式为*p,*p指的是形参p所指存储单元中的值。
22. 有以下程序
intf(intb[][4])
{inti,j,s=0;
for(j=0;j<4;j++)
{i=j;
if(i>2)i=3-j;
s+=b[i][j];
}
returns;
}
main()
{inta[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}};
printf("%d\n",f(a));
}
执行后的输出结果是
A) 12 B) 11 C) 18 D) 16
23.若有以下函数首部
intfun(doublex[10],int*n)
则下面针对此函数的函数声明语句中正确的是
A)intfun(doublex,int*n);B)intfun(double,int);
C)intfun(double*x,intn);D)intfun(double*,int*);
函数的2个形参1个是指针1个是数组;实际运用的时候都是把首地址传给函数都可以通用。
函数申明的时候形参名可以省略;
24.有以下程序
voidsum(int*a)
{a[0]=a[1];}
main()
{intaa[10]={1,2,3,4,5,6,7,8,9,10},i;
for(i=2;i>=0;i--)sum(&aa[i]);
printf("%d\n",aa[0]);
}
执行后的输出结果是()
A)4B)3C)2D)1
25.下段代码的运行结果是:
intmain()
{
chara;
char*str=&a;
strcpy(str,"hello");
printf(str);
return0;
}
A)helloB)nullC)hD)发生异常
没有为str分配内存空间,将会发生异常
问题出在将一个字符串复制进一个字符变量指针所指地址。
虽然可以正确输出结果,但因为越界进行内在读写而导致程序崩溃
26.下段程序的运行结果是:
voidmain()
{
char*p,*q;
charstr[]="Hello,World\n";
q=p=str;
p++;
print(q);
print(p);
}
voidprint(char*s)
{
printf(“%s”,s);
}
A)HeB)Hello,Worldello,World
C)Hello,WorldHello,WorldD)ello,Worldell,World
27.有以下程序
voidfun(char*c,intd)
{
*c=*c+1;
d=d+1;
printf("%c,%c,",*c,d);
}
voidmain()
{
chara='A',b='a';
fun(&b,a);
printf("%c,%c\n",a,b);
}
程序运行后的输出结果是______。
A)B,a,B,a B)a,B,a,B C)A,b,A,b D)b,B,A,b
用地址作为参数与值作为参数传递之间的不同。
在C语言中,数据传递是单向传递的。
“值传递”就是实参把对应的值传给相应的形参变量,然后形参和实参不再有任何联系,在被调用函数中,对形参的修改并不影响对应的实参。
“地址传递”就是实参把相应的地址传给相应的形参变量,在被调用函数中对形参的修改将修改对应的实参地址对应的值。
程序中定义了两个字符型变量'a'和'b',并分别赋初值为'A'和'a',然后调用函数fun(),将b的地址和:
值作为实参。
在函数fun()中第一个参数是传递地址,故在调用函数fun()中对参数做的修改(即将b值加1)将影响字符型变量的值(变为b),函数fun()第二个参数是传值的,故在调用函数fun()对第二个参数做的修改不影响字符型变量a(即'a'的值仍为'A'),所以在fun()函数中输出的是d为b,B,接着在主函数中,输出a,b,然后退出fun()函数,接着执行后面的语句,输出A,b。
所以最后输出为b,B,A,b。
28、下面选项属于函数指针的是:
A、(int*)p(int,int)B、int(*p)(int,int)C、两者都是D、两者都不是
29、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是_______.
A)(*p)max(a,b);B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);
30、下面几个选项中的代码能通过编译的是:
A)int*fun()
{ints[3]={1,3,4};
returns;}
intmain()
{int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;
}
B)int&fun()
{ints[3]={1,3,4};;
returns;}
intmain()
{int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;}
C)int*fun()
{ints[3]={1,3,4};;
return&s;}
intmain()
{int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;}
D)int&fun()
{ints[3]={1,3,4};;
return&s;}
intmain()
{int*result;
result=fun();
for(inti=0;i<3;i++)
printf("%d\n",result[i]);
return0;}
31、设有如下说明
typedefstructST
{longa;intb;charc[2];}NEW;
则下面叙述中正确的是_____。
A)以上的说明形式非法
B)ST是一个结构体类型
C)NEW是一个结构体类型
D)NEW是一个结构体变量
32、以下对结构体类型变量td的定义中,错误的是______。
A)typedefstructaaB)structaa
{intn;{intn;
floatm;floatm;
}AA;};
AAtd;structaatd;//正如下面解析的第一种情况。
C)structaaD)struct
{intn;{intn;
floatm;floatm;
};}td;//对
structaatd;
33、根据下面的定义,能打印出字母M的语句是_____。
structperson{charname[9];intage;};
structpersonclass[10]={"John",17,"Paul",19,"Mary",18,"Adam",16};
A)printf("%c\n",class[3].name);B)printf("%c\n",class[3].name[1]);
C)printf("%c\n",class[2].name[1]);D)printf("%c\n",class[2].name[0]);
34、设有以下语句:
structst{intn;structst*next;};
staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则表达式 D 的值是6。
A)p++->n(值是5)B)p->n++(值是5)C)(*p).n++(值是5)D)++(p->n)
//先做“指向”运算,后作“++”。
35、下面程序的输出是
main()
{enumteam{my,your=4,his,her=his+10};
printf("%d%d%d%d\n",my,your,his,her);}
A)0123B)04010C)04515D)14515
36、下面程序的输出是
main()
{structcmplx{intx;inty;}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}相当于“3/1*2,由于“/”和“*”同一优先级,其结合方向为自左向右于是,最终结果为6.”
A)0B)1C)3D)6
37、设有如下定义:
structsk
{inta;floatb;}data,*p;
若有p=&data;,则对data中的a域的正确引用是__________。
A)(*p).data.aB)(*p).aC)p->data.aD)p.data.a
38、有以下程序:
*
#include
unionpw
{inti;charch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf("%d\n",a.i);}
程序的输出结果是 。
(注意:
ch[0]在低字节,ch[1]在高字节。
)
A)13B)14C)208D)209
39、已知字符0的ASCII码为十六进制的30,下面程序的输出是___________。
main()
{union{unsignedcharc;
unsignedinti[4];
}z;
z.i[0]=0x39;
z.i[1]=0x36;
printf("%c\n",z.c);}
A)6B)9C)0D)3
40、字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是_____________。
#include
main()
{union{inti[2];longk;charc[4];}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]);}
A)39B)9C)38D)8
41.当已存在一个abc.txt文件时,执行函数fopen(“abc.txt”,“r++”)的功能是。
A.打开abc.txt文件,清除原有的内容
B.打开abc.txt文件,只能写入新的内容
C.
打开abc.txt文件,只能读取原有内容
D.
打开abc.txt文件,可以读取和写入新的内容
42.若用fopen()函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开模式是。
A)“ab+”B)“wb+”C)“rb+”D)“ab”
43.使用fseek函数可以实现的操作是。
A.
改变文件的位置指针的当前位置B.文件的顺序读写C.
文件的随机读写D.
以上都不对
44.fread(buf,64,2,fp)的功能是。
A.
从fp文件流中读出整数64,并存放在buf中;
B.从fp文件流中读出整数64和2,并存放在buf中;
C.
从fp文件流中读出64个字节的字符,并存放在buf中;
D.
从fp文件流中读出2个64个字节的字符,并存放在buf中;
45.以下程序的功能是。
main()
{FILE*fp;charstr[]=”HELLO”;fp=fopen(“PRN”,”w”);fpus(str,fp);fclose(fp);}
在屏幕上显示“HELLO”
把“HELLO”存入PRN文件中
在打印机上打印出“HELLO”
以上都不对
46.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是。
A)EOFB)0C)非零值D)NULL
47.以下叙述中不正确的是。
A)C语言中的文本文件以ASCII码形式存储数据
B)C语言中对二进制位的访问速度比文本文件快
C)C语言中,随机读写方式不使用于文本文件
D)C语言中,顺序读写方式不使用于二进制文件
48.以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。
#include
main()
{FILE*fout;charch;
fout=fopen(“abc.txt”,“w”);
ch=fgetc(stdin);
while(ch!
='#')
{fputc(ch,fout);
ch=fgetc(stdin);
}
fclose(fout);
}
出错的原因是。
A)函数fopen调用形式有误B)输入文件没有关闭
C)函数fgetc调用形式有误D)文件指针stdin没有定义
49、若fp为文件指针,且文件已正确打开,i为long型变量,以下程序段的输出结果是。
fseek(fp,0,SEEK_END);
i=ftell(fp);
printf("i=%ld\n",i);
A)–1B)fp所指文件的长度,以字节为单位
C)0D)2
50.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为____。
A)–1B)1
C)0D)NULL
51.以下程序的运行结果是()
#defineMUL(x,y)(x)*y
main()
{inta=3,b=4,c;
c=MUL(a++,b++);prinft(“%d\n”,c);}
A,12B.15C.20D.16
52.对以下程序段:
#defineA3
#defineB(a)((A+1)*a)
x=3*(A+B(7));正确的判断是()
A.程序错误,不许嵌套宏定义B.x=93
C.X=21D.程序错误,宏定义不许有参数
53.以下程序中,第一个输出值是(),第二个输出值是()
#define M3
#define N(M+1)
#define NN N*N/2
main()
{prinft(“%d\n”,NN);printf(“%d”,5*NN);}
A.3B.4C.6D.8
A.