您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 电气安装工程 > C语言第七章习题带答案
-1-练习7-1答案选择题1.已知:int*p,a;,则语句“p=&a;”中的运算符“&”的含义是(D)。A.位与运算B.逻辑与运算C.取指针内容D.取变量地址2.已知:inta,x;,则正确的赋值语句是(C)。A.a=(a[1]+a[2])/2;B.a*=*a+1;C.a=(x=1,x++,x+2);D.a=good;3.已知:inta,*p=&a;,则下列函数调用中错误的是(D)。A.scanf(%d,&a);B.scanf(%d,p);C.printf(%d,a);D.scanf(%d,*p);4.已知:char*p,*q;,选择正确的语句(C)。A.p*=3;B.p/=q;C.p+=3;D.p+=q;5.已知:intx;,则下面的说明指针变量pb的语句(C)是正确的。A.intpb=&x;B.int*pb=x;C.int*pb=&x;D.*pb=*x;-2-练习7-2答案一、选择题1.设有说明int(*ptr)[M];,其中的标识符ptr是(C)。A.M个指向整型变量的指针B.指向M个整型变量的函数指针C.一个指向具有M列的二维数组的一行的指针D.具有M个指针元素的一维数组的指针2.已知:double*p[6];,它的含义是(C)。A.p是指向double型变量的指针B.p是double型数组C.p是指针数组D.p是数组指针3.已知:chars[10],*p=s,则在下列语句中,错误的语句是(B)。A.p=s+5;B.s=p+s;C.s[2]=p[4];D.*p=s[0];4.已知:chars[100];inti;,则在下列引用数组元素的语句中,错误的表示形式是(D)。A.s[i+10]B.*(s+i)C.*(i+s)D.*((s++)+i)5.已知:charb[5],*p=b;,则正确的赋值语句是(C)。A.b=abcd;B.*b=abcd;C.p=abcd;D.*p=abcd;6.下列对字符串的定义中,错误的是(A)。A.charstr[7]=FORTRAN;B.charstr[]=FORTRAN;C.char*str=FORTRAN;D.charstr[]={'F','O','R','T','R','A','N',0};7.已知:chars[20]=programming,*ps=s;,则不能引用字母o的表达式是(A)。A.ps+2B.s[2]C.ps[2]D.ps+=2,*ps8.已知:char**s;,正确的语句是(B)。A.s=computer;B.*s=computer;C.**s=computer;D.*s='A';9.已知:charc[8]=beijing,*s=c;inti;,则下面的输出语句中,错误的是(B)。A.printf(%s\n,s);B.printf(%s\n,*s);C.for(i=0;i7;i++)D.for(i=0;i7;i++)printf(%c,c[i]);printf(%c,s[i]);10.已知:char*aa[2]={abcd,ABCD};,则以下说法正确的是(D)。A.aa数组元素的值分别是abcd序列和ABCD序列B.aa是指针变量,它指向含有两个数组元素的字符型一维数组C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址D.aa数组的两个元素中各自存放了字符'a'和'A'的地址11.已知:inta[3][4],*p=&a[0][0];p+=6;,那么*p和(D)的值相同。A.*(a+6)B.*(&a[0]+6)C.*a[1]+2D.a[1][2]12.已知:inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;,则值为3的表达式是(A)。A.p+=2,*(p++)B.p+=2,*++pC.p+=3,*p++D.*(&a[0][0]+6)13.已知:int**p;,则变量p是(B)。A.指向int的指针B.指向指针的指针C.int型变量D.以上三种说法均是错误的14.已知:inta[]={1,2,3,4},y,*p=&a[1];,则执行语句y=(*--p)++;之后,变量y的值为(A)。-3-A.1B.2C.3D.415.已知:intb[]={1,2,3,4},y,*p=b;,则执行语句y=*p++;之后,变量y的值为(A)。A.1B.2C.3D.416.已知:intx[]={1,3,5,7,9,11},*ptr=x;,则能够正确引用数组元素的表达式是(B)。A.xB.*(ptr--)C.x[6]D.*(--ptr)17.已知:intx[]={1,3,5,7,9,11},*ptr=x;,则不能够正确引用数组元素的表达式是(B)。A.*(ptr--)B.*(--ptr)C.*(ptr++)D.*(++ptr)18.若有以下语句且0=k6,则正确表示数组元素地址的表达式是(C)。staticintx[]={1,3,5,7,9,11},*ptr=x,k;A.x++B.&ptrC.&ptr[k]D.&(x+1)19.已知:inti,x[3][4];,则不能将x[1][1]的值赋给变量i的语句是(C)。A.i=*(*(x+1)+1);B.i=x[1][1];C.i=*(*(x+1));D.i=*(x[1]+1);20.已知:inta[2][3]={2,4,6,8,10,12};,正确表示数组元素的地址是(A)。A.*(a+1)B.*(a[1]+2)C.a[1]+3D.a[0][0]21.已知:int*p;,使用如下语句动态申请一个int型的存储单元,应当使用(D)。p=()malloc(sizeof(int));A.intB.int*C.(*int)D.(int*)二、填空题22.阅读程序,下面程序的输出结果是(15)。#includestdio.hmain(){staticinta[2][3]={{1,2,3},{4,5,6}};intm,*ptr;ptr=&a[0][0];m=(*ptr)*(*(ptr+2))*(*(ptr+4));printf(%d\n,m);}23.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串.则①是('\0'或0)、②是(++)。main(){charstr[81],*sptr;inti;for(i=0;i80;i++){str[i]=getchar();if(str[i]=='\n')break;}str[i]=①;sptr=str;while(*sptr)putchar(*sptr②);}-4-24.在下面的程序中若第一个printf语句的输出为ffe2,则其余语句的输出结果分别为:①是(fff4)、②是(a)、③是(0)、④是(b)。main(){staticinta[]={1,2,3,4,5,6,7,8,9,0},*p=a;printf(%x\n,p);/*输出结果为ffe2*/printf(%x\n,p+9);/*输出①*/printf(%x\n,*p+9);/*输出②*/printf(%x\n,*(p+9));/*输出③*/printf(%x\n,*++p+9);/*输出④*/}25.下面程序的输出结果,①是(m)、②是(a)、③是(w)、④是(z)、⑤是(mnopqr)。#includestdio.hchar*pp[2][3]={abc,defgh,ijkl,mnopqr,stuvw,xyz};main(){printf(%c\n,***(pp+1));/*输出①*/printf(%c\n,**pp[0]);/*输出②*/printf(%c\n,(*(*(pp+1)+1))[4]);/*输出③*/printf(%c\n,*(pp[1][2]+2));/*输出④*/printf(%s\n,**(pp+1));/*输出⑤*/}三、读程序,写结果26.下面程序的运行结果是:(□□□1□□□3□□□5□□□7□□□9□□11□□13□□15□□17□□19□□21□□23)。(注:□表示空格。)#includestdio.hmain(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};int*p,i;for(p=a,i=0;p&a[0][0]+12;p++,i++){if(i%4==0)printf(\n);printf(%4d,*p);}}27.下面程序的运行结果是(3,3,3)。#includestdio.hmain(){inta=2,*p,**pp;pp=&p;p=&a;a++;printf(%d,%d,%d\n,a,*p,**pp);}-5-练习7-3答案一、选择题1.main(argc,argv)中形式参数argv的正确说明形式应当为(A).A.char*argv[]B.charargv[][]C.charargv[]D.char*argv2.说明语句int(*p)();的含义是(C)。A.p是一个指向一维数组的指针变量B.p是指针变量,指向一个整型数据C.p是一个指向函数的指针,该函数的返回值是一个整型D.以上都不对3.说明语句int*(*p)();的含义是(D)。A.p是一个指向int型数据的指针B.p是指针变量,它构成了指针数组C.p是一个指向函数的指针,该函数的返回值是一个整型D.p是一个指向函数的指针,该函数的返回值是一个指向整型的指针4.已知函数说明语句void*f();,则它的含义是(A)。A.函数f的返回值是一个通用型指针B.函数f的返回值可以是任意的数据类型C.函数f无返回值D.指针f指向一个函数,该函数无返回值5.函数的功能是交换变量x和y中的值,并且通过正确调用返回交换的结果。能正确执行此功能的函数是(D)。A.funa(int*x,int*y)B.funb(intx,inty){int*p;{intt;*p=x;*x=*y;*y=*p;t=x;x=y;y=t;}}C.func(int*x,int*y)D.fund(int*x,int*y){*x=*y;*y=*x;{*x=*x+*y;*y=*x-*y;*x=*x-*y;}}6.阅读程序,下面程序的输出结果是(B)。假设可执行文件的文件名为:PROG.EXE运行时键入的命令行为:PROG-386NET3回车#includestdio.hmain(intargc,char*argv[]){inti;for(i=0;iargc;i++)printf(%s\n,argv[i]);}A.-386B.PROG.EXEC.PROG.EXED.PROGNET3-386--386NET3386NET3NET37.下面程序的运行结果是(A)。-6-#includestdio.hf(intx,inty){return(y-x);}main(){inta=5,b=6,c=2;intf();int(*g)()=f;c=(*g)(a,b);printf(%d\n,c);}A.1B.2C.3D.前面三个答案均是错误的8.若用数组名作为函数调用的实参,传递给形参的是(A)。A.数组的首地址B.数组第一个元素的值C.数组中全部元素的值D.数组元素的个数二、填空题9.下面的函数fun的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制的最低位放在下标为0的元素中,其他依次类推,则①是(2)、②是(2)。fun(intx,intb[]){intk=0,r;do{r=x%①;b[k++]=r;x/=②;}while(x);}10.函数expand(chars[],chart[])在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符,即用\n表示换行符,用\t表示制表符。则①是(j++)、②是('\\')、③是(j++)、④是('\\')、⑤是(j++)、⑥是('\0')。expand(chars[],chart[]){inti,j;for(i=j=0;s[i]!='\0';i++
本文标题:C语言第七章习题带答案
链接地址:https://www.777doc.com/doc-2908374 .html