":
');}
6、下面程序的运行结果是()
chars[80],*sp="HELLO!
";sp=strcpy(s,sp);s[0]='h';puts(s);
7、下面程序段的运行结果是()
char*s1="AbcdEf",*s2="aB";
s1++;t=(strcmp(s1,s2)>0);printf("%d\n",t);
8、下面程序段的运行结果是()
charstr[]="abc\0def\0ghi";char*p=str;printf("%s",p+5)
9、若有以下定义和语句:
inta[4]={0,1,2,3},*p;p=&a[1];则++(*p)的值是()。
10、若有定义:
inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是(),*(a[1]+2)的值()。
11、若有定义:
inta[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是(),*(a+5)的值是()。
12、若有以下定义和语句:
inta[4]={0,1,2,3},*p;p=&a[2];则*--p的值是()。
13、若有以下定义和语句:
ints[2][3]={0},(*p)[3];p=s;则(*(p+1)+2)的值是()。
14、若有定义:
inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是(),*(*(a+1)+0)的值是()。
15、若有定义:
inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[3],k;则下面程序段的输出是()。
for(k=0;k<3;k++)q[k]=&a[k*4];printf("%d\n",q[2][3]);
16、若有以下输入:
1,2(代表回车),则下面程序的运行结果是()。
main()
{inta[2][3]={2,4,6,8,10,12},(*p)[3],i,j;
p=a;scanf("%d,%d",&i,&j);printf("%d\n",*(*(p+i)+j);)
17、下面程序的运行结果是()。
main()
{char*a[]={"P","C","B","L"},(**p)[];intj;
p=a+3;
for(j=3;j>=0;j--)printf("%s",*(p--));}
18、以下程序的执行结果是()。
main()
{char*p1,*p2,str[20]="xyz";p1="abcd";p2="ABCD";
strcpy(str+1,strcat(p1+1,P2+1));printf("%s",str);}
19、若输入的值分别是135,下面程序的运行结果是()
main()
{inta=0,i,*p,sum;p=&a;
for(i=0;i<=2;i++){scanf("%d",p);sum=s(p);printf("sum=%d,",sum);}}
s(int*p)
{intsum=10;sum=sum+*p;return(sum);}
20、下面程序段的运行结果是()
chars[20]="abcd";char*sp=s;sp++;puts(strcat(sp,"ABCD"));
21、下面程序段的运行结果是()
chara[]="12345",*p;ints=0;
for(p=a;*p!
='\0';p++)s=10*s+*p-'0';printf("%d\n",s);
22、下面程序段的运行结果是()
chara[]="123456789",*p;inti=0;p=a;
while(*p){if(i%2==0)*p='*';p++;i++;}puts(a);
23、下面程序的运行结果是()。
main()
{char*str[]={"Pascal","Clanguage","Dbase","Cobol"};char**p;intk;
p=str;
for(k=0;k<4;k++)printf("%s,",*(p++));}
二、选择题
1、以下程序的运行结果是()
voidsub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf("%4d,%4d,%4d\n",a,b,c);}
A)5,2,3B)-5,-12,-7
C)-5,-12,-17D)5,-2,-7
2、执行以下程序后,b的值为()
main()
{intb,k=4,m=6,*p1=&k,*p2=&m;b=(-*p1)/(*p2)+7;printf("%d\n",b);}
A)5B)6C)7D)10
3、下面程序应能对两个整型变量的值进行交换。
以下正确的说法是()
main()
{inta=10,b=20;printf("%d,%d",a,b);swap(&a,&b);printf("%d,%d",a,b);}
swap(intp,intq)
{intt;t=p;p=q;q=t;}
A)该程序完全正确
B)该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可
C)该程序有错,只要将swap()函数中的形参p和q以及t均定义为指针(执行语句为变)即可
D)以上说法都不正确
4、设*p,i;以下正确的语句是()。
A)*p=&i;B)i=p;C)i=*p;D)p=2*p+1;
5、设chars[10];inti=1;以下正确的表达式是()。
A)[i+2]B)*(s+i)C)*(&s+i)D)*((s++)+i)
6、设有语句:
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;以下对a数组的元素值不正确的引用是()。
A)a[p-a]B)*(&a[i])C)p[i]D)*(a[0]+1)
7、设有说明int(*ptr)[M];其中ptr是()。
A)M个指向整型变量的指针B)指向M个整型变量的函数指针
C)一个指向具有M个整型元素的一维数组的指针
D)具有M个指针元素的一维指针数组,每一元素只能指向整型量
8、如下程序的执行结果是()。
main()
{inti;char*s="a\\\\\n";for(i=0;s[i]!
='\n';i++)printf("%c",*(s+i));}
A)aB)a\C)a\\D)a\\\\
9、有四组对指针变量进行操作的语句,以下判断正确的选项是()
(1)int*p,*q;q=p;
inta,*p,*q;*p=*q=&a;
(2)inta,*p,*q;q=&a;p=*q;
inta=20,*p;*p=a;
(3)inta=b=0,*p;p=&a;b=*p;
inta=20,*p,*q=&a;*p=*q;
(4)inta=20,*p,*q=&a;p=q;
intp,q;q=&p;
A)
(1)正确,其余错B)
(1),(4)正确,其余错
C)(3)正确,其余错D)以下结论都不正确
10、以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是()
main()
{int*p,*q,a,b;p=&a;scanf("%d",*p);........}
A)*p表示的是指针变量p的地址
B)*p表示的是变量a的值,而不是变量a的地址
C)*p表示的是指针变量p的值
D)*p只能用来说明p是一个指针变量
11、若有以下定义,则*(p+5)表示()。
inta[10],*p=a;
A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值
12、若有定义:
int*p[4];则标识符p()。
A)是一个指向整型变量的指针B)是一个指针数组
C)是一个指针,它指向一个含有四个整型元素的一维数组。
D)说明不合法
13、若有以下定义,且0<=i<6,则正确的赋值语句是()。
ints[4][6],t[6][4],(*p)[6];
A)p=t;B)p=s;C)p=s[i];D)p=t[i];
14、若有定义:
inta[4][6];则能正确表示a数组中任一元素a[i][j](此处0<=i<4,0<=j<6)地址的表达式是()
A)&a[0][0]+6*i+jB)&a[0][0]+4*j+IC)&a[0][0]+4*i+jD)&a[0][0]+6*j+i
15、以下选项中,对指针变量p的正确操作是()
A)inta[5],*p;p=&a;B)inta[5],*p;p=a;
C)inta[5];int*p=a=1000D)inta[5];int*p1,*p2=a;
*p1=*p2;
16、若有以下定义,且0<=i<5,则对数组a元素的非法引用是()
inta[5],*p=a;
A)a[i]B)*(a+i)C)*(p+i)D)*(&a+i)
17、设有以下定义:
char*cc[2]={"1234","5678"};则正确的叙述是()
A)cc数组的两个元素中各自存放了字符串"1234"和"5678"的首地址
B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C)cc是指针变量,它指向含有两个数组元素的字符型一维数组
D)cc数组元素的值分别是"1234"和"5678"
18、若有以下定义:
intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*p)[3]=x;
则能够正确表示数组元素x[1][2]的表达式是()
A)*((*p+1)[2])B)(*p+1)+2C)*(*(p+5))D)*(*(p+1)+2)
19、以下正确的叙述是()
A)C语言允许main函数带形参,且形参个数和形参名均可由用户指定。
B)C语言允许main函数带形参,形参名只能是argc和argv。
C)当main函数带有形参时,传给形参的值只能从命令行中得到。
D)若有说明,main(intargc,char*argv),则形参argc的值必须大于1。
20、main函数的正确说明形式是()
A)main(intargc,char**argv[])
B)main(intabc,char*abv)
C)main(intargc,charargv)
D)main(intc,char*v[])
21、以下程序能找出数组x中的最大值和该值所在的元素下标,数组元素值从键盘输入。
main()
{
intx[10],*p1,*p2,k;
for(k=0;k<10;k++)scanf("%d",x+k);
for(p1=x,p2=x;p1-x<10;p1++)if(*p1>*p2)p2=p1;
printf("MAX=%d,INDEX=%d\n",*p2,《 》);}
A)p1-xB)p1
C)p2-xD)x-p2
22、若有说明:
char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则表达式*language[1]>*language[3]比较的是()
A)字符F和字符PB)字符串BASIC和字符串JAVA
C)字符B和字符JD)字符串FORTRAN和字符串PASCAL
23、若有说明:
char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则language[2]的值是()
A)一个字符B)一个地址C)一个字符串D)一个不定值
24、语句int(*ptr)();的含义是()
A)ptr是指向一维数组的指针变量B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值的指向int型数据的指针
25、若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是()
A)(*p)max(a,b);B)*pmax(a,b);C)(*p)(a,b);D)*p(a,b);
26、已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是()
A)p=maxB)*p=max;C)p=max(a,b)D)*p=max(a,b)
27、已有定义int(*p)();指针p可以()。
A)代表函数的返回值B)指向函数的入口地址
C)表示函数的类型D)表示函数返回值的类型
28、若要对a进行++运算,则a应具有下面说明()
A)inta[3][2];B)char*a[]={"12","ab"};C)char(*a)[3];D)intb[10],*a=b;
29、下面正确的程序段是()
A)charstr[20];scanf("%s",&str);B)char*p;scanf("%s",p);
C)charstr[20];scanf("%s",&str[2]);D)charstr[20],*p=str;scanf("%s",p[2]);
30、下面程序段的运行结果是()charstr[]="ABC",*p=str;printf("%d\n",*(p+3));
A)67B)0C)字符'C'的地址D)字符'C'
31、下面程序段的运行结果是()
char*p="abcdefgh";p+=3;printf("%d\n",strlen(strcpy(p,"ABC")));
A)8B)12C)4D)7
32、下面说明不正确的是()
A)chara[10]="china";B)char[10],*p=a;p="china";
C)char*a;a="china";D)chara[10],*p;p=a="china";
33、若有说明语句
chara[]="Itismine";char*p="Itismine";
则以下不正确的叙述是()
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
34、若已定义chars[10];则在下面表达式中不表示s[1]的地址是()
A)s+1B)s++C)&s[0]+1D)&s[1]
35、下面程序段的运行结果是()
chars[6];strcpy(s,"abcd");printf("\"%s\"\n",s);
A)"abcd"B)"abcd"C)\"abcd\"D)编译出错
36、若有说明:
char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};则以下不正确的叙述是()
A)language[2]表示字符串"pascal"的首地址
B)*language[2]的值是字母P
C)language是一个字符型指针数组,它包含5个元素,每个元素都是一个指向字符串变量的指针
D)language是一个字符型指针数组,它包含5个元素,其初值分别是:
"FORTRAN","BASIC","PASCAL","JAVA","C"
37、设chars[10],*p=s;以下不正确的表达是()
A)p=s+5;B)s=p+s;C)s[2]=p[4];D)*p=s[0];
38、设char**s;以下正确的表达式是()。
A)s="computer"B)*s="computer"C)**s="computer"D)*s='c'
39、选择i的正确结果()。
inti;char*s="a\045+045\'b";for(i=0;*s++;i++);
A)7B)8C)11D)12
40、如下程序的执行结果是()。
main()
{inti;char*s="a\nn35\b";for(i=0;*s++;i++);printf("i=%d\n",i);}
A)i=5B)i=6C)i=7D)i=8
41、如下程序的执行结果是()。
main()
{inti;char*s="\"";for(i=0;s[i]!
='\0';i++);printf("%c",*(s+i));}
A)\"B)"C)"\""D)不正确
42、如下程序的执行结果是()。
main()
{inti;char*s="\\\""for(i=0;s[i]!
='\0';i++)printf("%c",*(s+i));}
A)\"B)a"C)"\"D)不正确
43、如下执行的程序结果是()。
main()
{staticinta[]={1,2,3,4,5,6};int*p;p=a;*(p+3)+=2;printf("%d,%d\n",*p,*(p+3));}
A)1,3B)1,6C)3,6D)1,4
44、以下正确的说明语句是()
A)int*b[]={1,3,5,7,9};B)inta[2];int*num[2]={&a[0],&a[1]};
C)inta[]={1,2};int*num[2]={a[0],a[1]};D)inta[3][4],(*num)[4];num[1]=&a[1][3];
45、若有以下定义,且0<=i<4,则不正确的赋值语句是()
intb[4][6],*p,*q[4];
A)q[i]=b[i];B)p=b;C)p=b[i];D)q[i]=&b[0][0];
46、若有定义:
inta[]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;则下面程序段的输出是()
for(k=0;k<4;k++)q[k]=&a[k*3];printf("%d\n",q[3][0]);
A)8B)16C)20D)结果不确定
47、若有以下定义,则数值不为3的表达式是()intx[10]={0,1,2,3,4,5,6,7,8,9},*p1;
A)x[3]B)p1=x+3,*p1++C)p1=x+2,*(p1++)D)p1=x+2,*++p1
48、下面程序的运行结果是()
main()
{intx[5]={2,4,6,8,10},*p,**pp;p=x;pp=&p;printf("%d",*(p++));printf("%3d\n",**pp);}
A)44B)24C)22D)46
49、若有以下说明和语句:
char*language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};
char**q;q=language+2;
则语句printf("%o\n",*q);
A)输出的是language[2]元素地址B)输出的是字符串PASCAL
C)输出的是language[2]元素的值,它是字符串PASCAL的首地址
D)格式说明不正确,无法得到确定的输出
50、下面程序段的运行结果是()
char*format="%s,a=%d,b=%d\n";inta=1,b=10;a+=b;printf(format,"a+=b",a,b);
A)for,"a+=b",abB)format,"a+=b"C)a+=b,a=11,b=10D)以下结果都不对
三、编程题
1、有3个学生,每人考5门课,求每个学生的平均分和每门课的平均分数
2、输入一个字符串,内有数字和非数字字符,如:
a123x4561760?
302ab567,将其中连续的数字作为一个整数依次存放到一数组a中,如123存放到a[0]中,456存放到a[1]中。
3、求定积分:
计算[0,1]之间函数1+x2、[0,2]之间函数1+x+x2+x3、[0,3.5]之间函数x/(1+x2)的定积分。
附录:
答案
一、填空题
1、22、f3、6543214、12
5、one:
two:
three6、HELLO!
7、18、of
9、210、121211、41212、1
13、014、8815、2416、12
17、LBCP18、xbcdBCD23、Pascal,Clanguage,Dbase,Cobol
二、选择题
1—5BCCCB6—10DBCCB11—15BCBCB
16—20DADCD21—25BCBDC26—30ABDCB
31—35ADDBA36—40CBBBB41—45DABBA
46—50CBBCC
三、编程题
1、
main()
{
floatstu_ave(float(*p)[5]);
floatcour_ave(float*pt);
floatscore[3][5]={{100,60,70,80,67},{62,71,98,45,57},{90,39,89,39,90}};
intI;
for(I=0;I<3;I++)
printf(“%f”,stu_ave(score+i));
for(I=0;I<5;I++)
printf(“%f”,cour_ave(score[0]+i));
}
floatstu_ave(float(*p)[5])
{
intj;floatsum;
floatsum=0,ave;
for(j=0;j<5;j++)
sum=sum+*(*p+j);
re