您好,欢迎访问三七文档
1C++指针函数习题一、选择题1.以下程序的运行结果是()。sub(intx,inty,int*z){*z=y-x;}voidmain(){inta,b;sub(10,5,&a);sub(7,a,&b);couta”,”b;}A)5,2B)-5,-2C)-5,-12D)5,-22.函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则()。A)称为函数的直接递归调用B)称为函数的间接递归调用C)称为函数的循环调用D)C语言中不允许这样的递归调用3.变量的指针,其含义是指该变量的()。A)地址B)值C)名D)一个标志4.已有定义intk=2;int*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。A)k=*ptr1+*ptr2;B)ptr2=k;C)ptr1=ptr2;D)k=*ptr1*(*ptr2);5.(去掉)若有说明语句:double*p,a;则能通过scanf语句正确给输入项读入数据的程序段是A)*p=&a;scanf(“%lf”,p);B)*p=&a;scanf(“%f”,p);C)p=&a;scanf(“%lf”,*p);D)p=&a;scanf(“%lf”,p);6.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是()。A)a,point,*&aB)&*a,&a,*pointC)*&point,*point,&aD)&a,&*point,point7.设char*s=\ta\103bc;则指针变量s指向的字符串所占的字节数是()。A)9B)5C)6D)78.下面程序段的运行结果是()。char*s=abcde;s+=2;couts;A)cdeB)字符'c'C)字符'c'的地址D)无确定的输出结果9.设有下面的程序段:则下列叙述正确的是()。chars[]=china;char*p;p=s;A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)*p与s[0]相等D)s数组长度和p所指向的字符串长度相等10.若有定义inta[5],*p=a;则对a数组元素的正确引用是()。A)*&a[5]B)a+2C)*(p+5)D)*(a+2)11.若已定义chars[10];则在下面表达式中不表示s[1]的地址的是()。A)s+1B)s++C)&s[0]+1D)&s[1]12.下面程序的运行结果是()。#includeiostream.h2#includestring.hintmain(){char*s1=AbDeG;char*s2=Abdeg;s1+=2;s2+=2;coutstrcmp(s1,s2);}A)负数B)正数C)零D)不确定的值13.若有定义:int*p[4];则标识符p()。A)是一个指向整型变量的指针B)是一个指针数组名C)是一个指针,它指向一个含有四个整型元素的一维数组D)说明不合法14.若有inta[10],*p=a;则p+5表示()。A)元素a[5]的地址B)元素a[5]的值C)元素a[6]的地址D)元素a[6]的值15.设有以下定义:则正确的叙述是()。char*cc[2]={1234,5678};A)cc数组的两个元素中各自存放了字符串1234和5678的首地址B)cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址C)cc是指针变量,它指向含有两个数组元素的字符型一维数组D)cc数组元素的值分别是1234和567816.若有以下定义,则能够正确表示数组元素x[1][2]的表达式是()。intx[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int*p=&x[0][0];A)p[1][2]B)(*p+1)+2C)p+5D)p[5]17.语句int(*ptr)();的含义是()。A)ptr是指向一维数组的指针变量B)ptr是指向int型数据的指针变量C)ptr是指向函数的指针,该函数返回一个int型数据D)ptr是一个函数名,该函数的返回值是指向int型数据的指针18.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是()。A)p=max;B)*p=max;C)p=max(a,b);D)*p=max(a,b);19.下面程序段的运行结果是()。chara[]=language,*p;p=a;while(*p!='u'){cout(*p-32);p++;}A)LANGUAGEB)languageC)LANGD)language20.关于语句int*ptr();以下说法正确的是()。A)ptr是一个指针变量B)*ptr是一个函数名C)这个语句是定义函数的语句D)ptr是一个函数名,该函数的返回值是指向int型数据的指针21.以下叙述中正确的是()。3A)局部变量说明为static存储类,其生存期将得到延长B)全局变量说明为static存储类,其作用域将被扩大C)任何存储类的变量在未赋初值时,其值都是不确定的D)形参可以使用的存储类说明符与局部变量完全相同22.有以下程序,程序运行后的输出结果是()。)64,28B)4,4C)4,3D)64,64#includeiostream.h#definef(x)(x*x)intmain()inti1,i2;i1=f(8)/f(4);i2=f(4+4)/f(2+2);couti1”,”}23.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是()。地址传递B)单向值传递由实参传给形参,再由形参传回实参D)传递方式由用户指定24.有以下程序,#includeiostream.hintfun(intn){if(n==1)return1;elsereturn(n+fun(n-1));}intmain(){intx;cinx;x=fun(x);coutx;}程序执行时,给变量x输入10,程序的输出结果是()A)55B)54C)65D)4525.已有定义:chara[]=xyz,b[]={'x','y','z'};,以下叙述中正确的是()。A)数组a和b的长度相同B)a数组长度小于b数组长度C)a数组长度大于b数组长度D)上述说法都不对26.以下程序的输出结果是()。#includeiostream.h#includestring.hmain(){charst[20]=“hello\0\t\\”;coutstrlen(st)”,”sizeof(st);}A)99B)520C)1320D)202027.当说明一个结构体变量时系统分配给它的内存是()。4A)各成员所需内存量的总和B)结构中第一个成员所需内存量C)成员中占内存量最大者所需内存D)结构中最后一个成员所需内存量28.C语言结构体类型变量在程序执行期间()。A)所有成员一直驻留在内存中B)只有一个成员驻留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中29.以下程序的结果是()。#includeiostream.hstruct{intX;intY;};voidmain(){struct[3]={{7,8},{9,10},{12,13}};inta;a=A[1].X+A[2].Y;couta;}A)17B)22C)16D)2130.以下程序的输出结果是()。strucSTU{charname[10];intnum;};voidf1(structSTUc){structSTUb={“LiSiGuo”,2042};c=b;}voidf2(structSTU*c){structSTUb={“SunDan”,2044};*c=b;}main(){structSTUa={“YangSan”,2041},b={“WangYin”,2043};f1(a);f2(&b);couta.num”,”b.num;}执行后的输出结果是A)20412044B)20412043C)20422044D)20422043二、填空题1.若想输出b数组的十个元素,下面存在错误的程序行是。(每个程序行前面的数字代表行号)1intmain()2{intb[10]={1,3,5,7,9,2,4,6,8,10},k;3for(k=0;k10;k++,b++)4cout*b;5}2.若有定义语句intx[10],*p=x;在程序中引用数据元素x[i]的四种形是:,,和x[i](假设i已正确说明并赋值)。3.C++语言中,数组名是一个不可改变的,不能对它进行赋值运算;数组在内存中占用一段连续的存储空间,它的首地址由表示。4.在C++语言中,形参的缺省存储类是。5三、读程序写结果。1.#includeiostream.hinti=1;test(){inti;couti;i=2;return(i);}intmain(){couti;i=test();couti/3;}2.下面程序的运行结果是。#includeiostream.hintmain(){intx[]={0,1,2,3,4,5,6,7,8,9};ints,i,*p;s=0;p=&x[0];for(i=1;i10;i+=2)s+=*(p+i);cout“sum=”s;return0;}3.下面程序的运行结果是。#includeiostream.hintmain(){intx[4]={1,3,5,7};int*p;p=x;Cout(++*p);return0;}四、程序填空。1.以下程序对数组a中的数据进行降序排序,请填空。#defineN10intmain(){inta[N],i,j,k=N;6cout“Enter“k”datathatwillbesorted\n”;for(i=0;iN;i++)cin*(a+i);for(k=0;;k++)for(i=0;iN-k;i++)if(*(a+i)*(a+i+1)){j=*(a+i);*(a+i)=*();*()=j;}for(i=0;iN;i++)cout*(a+i);return0;}2.下面程序的功能是将两个字符串s1和s2连接起来,请填空。#includeiostream.hintmain(){chars1[80],s2[80];gets(s1);gets(s2);conj(s1,s2);puts(s1);return0;}voidconj(char*p1,char*p2)//此函数实现把字符串p2连接在p1的后面。{while((*p1)!=‘\0’);while((*p2)!=‘\0’){*p1=;p1++;p2++;}}3.下面程序的功能是比较2个字符串的大小,请填空。#includeiostream.hintmain(){chars1[80],s2[80];gets(s1);gets(s2);Cout“Resultis:”comp(s1,s2);return0;}//以下函数实现比较2个字符串的大小,若p1比p2大,返回数值1,否则返回数值-1,intcomp(char*p1,char*p2){while((*p1!='\0')&&(*p2!='\0')){7if(*p1!=*p2);p1++;;}if()return1;elsereturn-1;}五、编程题。1.编写程序,把一个从键盘输入字符串间隔的输出,请用指针完成。例如:输入字符串:hello,输出:hlo2.编写程序,把一个字符串中的第m个字符开始的全部字符复制生成另一个字符串。要求从键盘输入字符串及m的值并输出生成的字符串。3.请编写一个函数,它的功能是:对一个数组进行从小到大的排序。函数首部为voidsort(inta[],intn),其中a为数组名,n为数组元素的个数。主函数如下,请把子函数补充完整。#includeiostream.h#defineN10intmain(
本文标题:C++指针函数习题
链接地址:https://www.777doc.com/doc-4285616 .html