国家二级C语言机试(指针)模拟试卷1(共139题)_第1页
国家二级C语言机试(指针)模拟试卷1(共139题)_第2页
国家二级C语言机试(指针)模拟试卷1(共139题)_第3页
国家二级C语言机试(指针)模拟试卷1(共139题)_第4页
国家二级C语言机试(指针)模拟试卷1(共139题)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言机试(指针)模拟试卷1(共4套)(共139题)国家二级C语言机试(指针)模拟试卷第1套一、选择题(本题共34题,每题1.0分,共34分。)1、有以下程序#includeintfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序运行后的输出结果是()。A、7B、6C、1D、0标准答案:A知识点解析:函数fun()中的while循环的逻辑是如果指针p没有到达字符串末端,则指针p一直向后移动。循环结束的时候,*p==’\0’,数组名s为一指针常量,始终指向字符数组的首地址,所以p-s则返回的是字符数组s中有的字符个数,所以输出结果为7,答案选A。2、若有以下程序段charstr[4][12]={"aa","bbb","ccccc","d"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正确引用字符串的选项是()。A、strpB、str[0]C、strp[3]D、*strp标准答案:A知识点解析:指针strp为一个指针数组,str为一个二维数组名。语句"strp[i]=str[i];"将str数组中第i+1个字符串的首地址赋值给strp[i],所以str[i]与strp[i]、*(strp+i)、*(str+i)等价,选项B)、C)、D)正确,而strp为指针数组所占内存的首地址,不能引用字符串,所以答案选A)。3、有以下程序#include#includevoidfun(char*s){chara[10];strcpy(a,"STRING");s=a;}main(){char*p="PROGRAM";fun(p);printf("%s\n",p);}程序运行后的输出结果是(此处□代表空格)()。A、PROGRAMB、STRING□□□□C、STRING□□□D、STRING标准答案:A知识点解析:函数的参数传递过程中,形参只是实参的一个副本,如果形参和实参为两个地址,则形参指针指向的变化不能影响到实参指针的指向。所以该函数fun()调用中,并不能改变实参p的指向,输出结果为"PROGRAM",答案选A。4、有以下程序#includemain(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序运行后的输出结果是()。A、6385B、9824C、6982D、9284标准答案:A知识点解析:第一个for循环将数组中每个字符串的首地址赋值给了指针数组p的元素,所以p[i][j]与c[i][j]等价。第二个嵌套for循环中外层循环i从0到1,内层循环j为偶数且从0递增,语句"s=10*s+p[i][j]-?0?;"用一个整数s记录数组c中列下标为偶数的所有数字,并按照其先后顺序放置于整数s的不同位上,所以计算得到的结果为6385,答案选A。5、下面选项中的程序段,没有编译错误的是()。A、char*sp,s[10];sp="Hello";B、char*sp,s[10];s="Hello";C、charstr1[10]="computer",str2[10];str2=str1;D、charmark[];mark="PROGRAM";标准答案:A知识点解析:字符数组名为一个指针常量,在非定义状态下,不能进行任何赋值性操作,所以不能通过赋值操作将一个字符串的地址指给它,也不能一个字符数组的地址指给另一个字符数组名,选项B)、C)、D)错误;但是可以通过赋值的方式把一个字符串地址指给一个字符指针,选项A)正确;答案选A)。6、以下叙述中正确的是()。A、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组B、charca[3][5]={"A","BB","CCC"};是不合语法的C、charca[][5]={"A","BB","CCC"};是不合语法的D、char*ca[3]={"A","BB","CCC"};是不合语法的标准答案:A知识点解析:多个字符串可以使用二维字符数组存放,但是每个字符串的长度不能超过二维数组的第二维的维数。在定义二维数组时,第一维的数字可以省略,所以选项B)、C)、D)中定义字符串数组的语句都是合法的,答案选A)。7、以下叙述中正确的是()。A、函数名代表该函数的入口地址B、所有函数均不能接受函数名作为实参传入C、函数体中的语句不能出现对自己的调用D、如果函数带有参数,就不能调用自己标准答案:A知识点解析:函数名也是一个地址,为该函数的入口,选项A)正确;函数名可以作为实参,实际传递的是该函数的返回值,选项B)错误;在函数体中可以调用自身,这种函数称为递归函数,选项C)错误;递归函数也有带参数和不带参数的,选项D)错误;答案选A)。8、在32位编译器上,设有定义char*str1="Hello",str2[]="Hello";,则以下语句printf("%d%d",sizeof(str1),sizeof(str2));的输出结果是()。A、46B、55C、66D、56标准答案:A知识点解析:sizeof(str1)求的是一个指针占用字节数,在32位的计算机上规定一个指针变量占用的内存为32位,即4个字节,所以第一个输出结果为4;sizeof(str2)求的是字符数组str2占用内存,包含字符串结束标识符?\0?,所以第二个输出结果为6。答案选A。9、以下叙述中正确的是()。A、函数既可以直接调用自己,也可以间接调用自己B、任何情况下都不能用函数名作为实参C、函数的递归调用不需要额外开销,所以效率很高D、简单递归不需要明确的结束递归的条件标准答案:A知识点解析:函数之间可以嵌套调用,选项A)描述正确;函数名可以作为实参,实际传递的是该函数的返回值,选项B)错误;递归调用也是函数调用,每次调用的时候也需要记录每一层的返回点,也要增加许多额外的开销的,选项C)错误;递归调用和循环很相似,为了防止递归调用无休止地进行,必须在函数内添加明确的结束条件,选项D)错误;答案选A)。10、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是()。A、aa[0]存放了字符串"abcd"的首地址B、aa数组的两个元素只能存放含有4个字符的一维数组的首地址C、aa数组的值分别是字符串"abcd"和"ABCD"D、aa是指针变量,它指向含有两个元素的字符型数组标准答案:A知识点解析:*aa[2]为一个指针数组,存放多个字符串时aa[i]记录的是第i+1个字符串的首地址,选项A)正确;并且该指针数组和aa[][2]等价,第一维数字没有写明的话可以存放任意长度的字符串,选项B)错误;aa数组中存放的是两个基类型为char型的指针,而不是字符串,选项C)错误;aa是指针常量,选项D)错误;所以答案选A)。11、有以下程序#includeintfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的输出结果是()。A、8B、6C、0D、7标准答案:A知识点解析:函数fun()中的while循环的逻辑是如果指针p没有到达字符串末端,则指针p一直向后移动。循环结束的时候,*p==?\0?,数组名s为一指针常量,始终指向字符数组的首地址,所以p-s则返回的是字符数组s中有的字符个数(不包含结束标识符),所以输出结果为8,答案选A。12、有以下程序#includemain(){charc[2][5]={"6934","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>´0´&&p[i][j]<=’9’;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序的输出结果是()。A、6385B、69825C、63825D、693825标准答案:A知识点解析:第一个for循环将数组中每个字符串的首地址赋值给了指针数组p的元素,所以p[i][j]与c[i][j]等价。第二个嵌套for循环中外层循环i从0到1,内层循环j为偶数且从0递增,语句"s=10*s+p[i][j]-?0?;"用一个整数s记录数组c中列下标为偶数的所有数字,并按照其先后顺序放置于整数s的不同位上,所以计算得到的结果为6385,答案选A。13、有以下程序#includemain(){char*s="12134";intk=0,a=0;while(s[k+1]){k++;if(k%2==0){a=a+(s[k]-’0’+1);continue;}a=a+(s[k]-’0’);}printf("k=%da=%d\n",k,a);}程序运行后的输出结果是()。A、k=4a=12B、k=5a=15C、k=6a=11D、k=3a=14标准答案:A知识点解析:while循环的条件为s[k+1]不为?\0?,循环开始即让k自加1,相当于s[++k]不为?\0?。所以遍历s指向的字符串除首位元素的之后的字符串,a累加s指向字符串中每个元素对应的数字,若元素下标为偶数则多加1。字符串后4位元素"2134"中下标为偶数的元素个数为2,所以a=2+1+3+4+2=12,k记录的是统计的元素个数,为4,所以答案选A。14、有以下程序(其中库函数strstr()首部格式为:char*strstr(char*p1,char*p2)其功能是确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)#include#includechar*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a);printf("%s\n",p);}程序的运行结果是()。A、youtoBeijing!B、toBeijing!C、WelcomeyoutoBeijing!D、Beijing!标准答案:A知识点解析:语句"p=strstr(b,a);"将指针p指向了字符串"you"在b指向字符串中第一次出现的字符串首地址,即是&b[8],所以输出结果为"youtoBeijing!",答案选A。15、有以下程序(其中的strstr()函数头部格式为:char*strstr(char*p1,char*p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)#include#includechar*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a)+strlen(a)+1;printf("%s\n",p);}程序的运行结果是()。A、toBeijing!B、youtoBeijing!C、WelcomeyoutoBeijing!D、Beijing!标准答案:A知识点解析:表达式"strstr(b,a);"返回的是字符串"you"在b指向的字符串中第一次出现的字符串首地址,即是&b[8],strlen(a)求得为字符串a的实际长度为3,所以语句"p=strstr(b,a)+strlen(a)+1;"计算得的p与&b[12]等价,所以答案选A。16、有以下说明语句char*s="\"Name\\Address\n";指针s所指字符串的长度是()。A、14B、15C、17D、说明语句不合法标准答案:A知识点解析:该字符串中有三个转义字符?\"?、?\\?、?\n?,分别代表一个字符,并且字符串长度不包含结束标识符,所以该字符串的长度为14,答案选A。17、有以下程序#includemain(){char*s[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"},**p;inti;p=s;for(i=0;i<4;i++)printf("%s",p[i]);printf("\n");}程序运行后的输出结果是()。A、ABCDEFGHIJKLMNOPB、ABCDEFGHIJKLC、ABCDD、AEIM标准答案:A知识点解析:语句"p=s",将p指向指针数组s的首地址,则p[i]与s[i]等价,均是指向第i+1个字符串的首地址,输出语句"printf("%s",p[i]);"会将该字符串整体输出。所以main()函数输出的为字符串数组s的前4个字符串,答案选A。18、若有以下程序段charstr[4][12]={"aaa","bbbb","ccccc","dddddd"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];则以下错误引用字符串的选项是(其中0≤k<4)()。A、strpB、str[k]C、strp[k]D、*strp标准答案:A知识点解析:指针strp为一个指针数组,str为一个二维数组名。语句"strp[i]=str[i];"将str数组中第i+1个字符串的首地址赋值给strp[i],所以str[i]与strp[i]、*(strp+i)、*(str+i)等价,选项B)、C)、D)正确,而strp为指针数组所占内存的首地址,不能引用字符串,所以答案选A)。19、若有说明和语句:charstr[]="Hello",*p;p=str;,则此时*(p+5)中的值为()。A、’\0’B、’o’C、’o’的地址D、不确定的值标准答案:A知识点解析:语句"p=str;"将指针p指向了数组str的首地址,所以str[i]与p[i]、*(p+i)、*(str+i)等价。*(p+5)即等价于str[5],为′\0′,答案选A)。20、以下涉及字符串数组、字符指针的程序段,不会产生编译错误的是()。A、char*str,name[10];str="HelloWorld";B、char*str,name[10];name="HelloWorld";C、charstr1[10]="prog.c",str2[10];str2=str1;D、charhead_line[];head_line="=============";标准答案:A知识点解析:数组名表示该数组的首地址,是一个地址常量,不能对它重新赋值,选项B)、C)、D)错误,答案选A)。21、有如下程序#include#includemain(){chara[]="THIS",*b="OK";printf("%d,%d,%d,%d\n",strlen(a),sizeof(a),strlen(b),sizeof(b));}程序运行后的输出结果是()。A、4,5,2,4B、4,4,2,1C、5,5,3,3D、4,5,2,3标准答案:A知识点解析:strlen()计算的是字符串的实际长度(不包含结束标识符),所以strlen(a)的结果为4,strlen(b)的结果为2。sizeof(a)求的是字符数组a占用内存,包含字符串结束标识符?\0?,计算结果为5,sizeof(b)求的是一个指针占用字节数,在32位的计算机上规定一个指针变量占用的内存为32位,即4个字节,所以计算结果为4。答案选A。22、有如下程序#include#includemain(){charname[10]="c-book";char*str=name;printf("%d,%d,%d,%d\n",sizeof(name),strlen(name),sizeof(str),strlen(str));}程序运行后的输出结果是()。A、10,6,4,6B、11,6,11,6C、11,6,1,6D、10,7,1,7标准答案:A知识点解析:strlen()计算的是字符串的实际长度(不包含结束标识符),所以strlen(name)和strlen(str)的结果为均为6。sizeof(name)求的是字符数组a占用内存,数组a在定义时标明了维数为10,所以计算的结果为10;sizeof(str)求的是指针str占用字节数,在32位的计算机上规定一个指针变量占用的内存为32位,即4个字节,所以计算的结果为4。答案选A。23、有如下程序#includeintdisp(char*str){while(*str)putchar(*str++);return*str;}main(){printf("%d\n",disp("NAME"));}程序运行后的输出结果是()。A、NAME0B、NAMEEC、NAMED、NAME\0标准答案:A知识点解析:函数disp()的功能是不断输出str指向的字符串中的字符,直到指针str指向该字符串的尾部′\0′,并返回当前字符的ASCII码值。main()函数中会输出该ASCII码值,字符′\0′的ASCII码值为0,所以输出结果为选项A)。24、有如下程序#includemain(){char*p,old_str[10]="wind";intpassword;scanf("%d",&password);p=old_str;while(*p){printf("%c",*p+password);p++;}printf("\n");}程序运行时,从键盘输入2<回车>,输出结果是()。A、ykpfB、windC、xjoeD、2222标准答案:A知识点解析:这段代码的作用是给一个字符串加密,加密的方式是将原先字符串的每个字符的ASCII码加上password,即相当于在ASCII码表上取距离当前字符为password的字符作为加密后的字符,所以答案选A。25、有如下程序#includeintsum(int*array,intlen){if(len==0)returnarray[0];elsereturnarray[0]+sum(array+1,len-1);}main(){intarray[5]={1,2,3,4,5};intres=sum(array,4);printf("%d\n",res);}程序运行后的输出结果是()。A、15B、10C、8D、1标准答案:A知识点解析:函数sum()的作用是计算数组array中元素下标为len到0的所有元素的和,所以答案选A。26、以下能正确进行字符串赋值的语句组是()。A、char*ch;ch="abc";B、charch[]={’a’,’b’,’c’};C、charch[3]="abc";D、charch[4];ch="abc";标准答案:A知识点解析:通过赋初值的方式把一个字符串赋给字符数组必须要在字符串的末尾加上结束标识符′\0′,没有′\0′的不能判定该字符数组存放的是字符串,选项B)错误;用字符数组存放字符串的时候,字符数组的元素个数至少要比存放的字符串长度要多1,因为结束标识符也会被写入到字符数组中,选项C)错误;数组名为地址常量,不能对其进行赋值性操作,选项D)错误。答案选A)。27、有以下程序#includeintfun(char*s){char*p=s;while(*p++!=’\0’);return(p-s);}main(){char*p="01234";printf("%d\n",fun(p));}程序的运行结果是()。A、6B、5C、4D、3标准答案:A知识点解析:函数fun()中的while循环的逻辑是如果*p不为?\0?,则指针p一直向后移动。循环结束的时候,p指向的是字符?\0?的下一位,数组名s为一指针常量,始终指向字符数组的首地址,所以p-s则返回的是字符数组s中有的字符个数(包含结束标识符),所以输出结果为6,答案选A。28、有以下程序#includemain(){chars[10]="verygood",*ps=s;ps+=4;ps="nice";puts(s);}程序的运行结果是()。A、verygoodB、veryniceC、nicegoodD、nice标准答案:A知识点解析:数组名s为一个指针常量,始终指向该数组的首地址,语句"ps="nice";"将字符指针ps指向了另一个字符串的首地址,并不能对字符数组s中的数据造成影响,所以输出结果为"verygood",答案选A。29、有以下程序#includeintfun(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}main(){char*p="01234";printf("%d\n",fun(p));}程序的运行结果是()。A、5B、6C、4D、3标准答案:A知识点解析:函数fun()中的while循环的逻辑是如果*p不为?\0?,则指针p一直向后移动。循环结束的时候,p指向的是字符?\0?,数组名s为一指针常量,始终指向字符数组的首地址,所以p-s则返回的是字符数组s中有的字符个数(不包含结束标识符),所以输出结果为5,答案选A。30、有以下程序#include#includevoidfun(int*p1,int*s){int*t;t=(int*)malloc(2*sizeof(int));*t=*p1+*p1++;*(t+1)=*p1+*p1;s=t;}main(){inta[2]={1,2},b[2]={0};fun(a,b);printf("%d,%d\n",b[0],b[1]);}程序运行后的输出结果是()。A、0,0B、2,6C、2,4D、1,2标准答案:A知识点解析:函数调用时的参数传递过程中,形参只是实参的一个副本,如果形参和实参为两个地址,则形参指针指向的变化不能影响到实参指针的指向。函数fun()中先给t分配一个空间并用指针p1给t中元素赋值,之后将指针t指向的地址赋值给了指针s,只是改变了s的指向而没有改变s指向内存中元素的值,所以调用结束后b中元素没有变化,答案选A。31、有以下程序#include#includeintfun(intn){int*p;p=(int*)malloc(sizeof(int));*p=n;return*p;}main(){inta;a=fun(10);printf("%d\n",a+fun(10));}程序的运行结果是()。A、20B、10C、0D、出错标准答案:A知识点解析:函数fun()的功能是新分配一个存储空间并把n的值存入该存储空间内,同时返回该存储空间记录的值*p,也即是n,所以a=fun(10)=10,输出"a+fun(10)"的结果为20,答案选A。32、有以下程序#includemain(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序运行后的输出结果是()。A、6385B、9824C、4528D、6938标准答案:A知识点解析:第一个for循环将数组中每个字符串的首地址赋值给了指针数组p的元素,所以p[i][j]与c[i][j]等价。第二个嵌套for循环中外层循环i从0到1,内层循环j为偶数且从0递增,语句"s=10*s+p[i][j]-?0?;"用一个整数s记录数组c中列下标为偶数的所有数字,并按照其先后顺序放置于整数s的不同位上,所以计算得到的结果为6385,答案选A。33、有以下程序#include#includevoidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}程序的输出结果是()。A、1.10B、11.10C、12.10D、21.10标准答案:A知识点解析:函数fun()的功能是用calloc()函数重新分配了1个长度为sizeof(double)的连续空间并把返回的内存地址赋值给s,之后对往新分配的内存中写入数据。由于函数传递过程中形参指针指向的变化不能影响到实参指针的指向,所以函数fun()并不能改变s的指向,*s与a[0]等价,格式输出的结果为1.10,答案选A。34、有以下程序#include#includevoidfun(int*p1,int*p2,int*s){s=(int*)calloc(1,sizeof(int));*s=*p1+*p2;free(s);}main(){inta[2]={1,2},b[2]={40,50},*q=a;fun(a,b,q);printf("%d\n",*q);}程序运行后的输出结果是()。A、1B、41C、42D、0标准答案:A知识点解析:函数fun()的功能是改变了指针s的指向。由于函数传递过程中形参只是实参的一个副本,形参指针指向的变化不能影响到实参指针的指向,所以函数fun()并不能改变实参q的指向,*q仍与a[0]等价,输出的结果为1,答案选A。国家二级C语言机试(指针)模拟试卷第2套一、选择题(本题共35题,每题1.0分,共35分。)1、若有定义:intw[3][5];则以下不能正确表示该数组元素的表达式是()。A、*(w+1)[4]B、*(*w+3)C、*(*(w+1))D、*(&w[0][0]+1)标准答案:A知识点解析:若要访问第二行第五列的元素需要用(*(w+1))[4],选项A)少了一个圆括号,如果不加圆括号,根据结合性,(w+1)会先和[4]结合,这是没有意义的,所以答案选A)。2、若有定义语句:intyear=2009,*p=&year;以下不能使变量year中的值增至2010的语句是()。A、*p++;B、(*p)++;C、++(*p);D、*p+=1;标准答案:A知识点解析:考查指针的用法。指针变量存储的是其指向的变量的地址,*p表示的是p指向的变量的值,自加运算符(++)的优先级要高于取值运算符(*)的优先级,*p++表示的是先将指针p指向下一个地址然后再取该地址的值,所以得到的结果并不是把year的值增至2010选项A)错误,答案选A)。3、若在定义语句:inta,b,c,*p=&c;接着执行以下选项中的语句,则能正确执行的语句是()。A、scanf("%d",p);B、scanf("%d%d%d",a,b,c);C、scanf("%d",a,b,c);D、scanf("%d",&p);标准答案:A知识点解析:scanf函数的一般形式为scanf("格式控制字符串",输入项1,输入项2,…),其中,输入项由地址运算符"&"后跟变量名组成,取地址运算符"&"不可以省除非输入项为一指针,本身代表一个地址,所以答案选A。4、若有以下程序#includevoidsp(int*a){intb=2;a=&b;*a=*a*2;printf("%d,",*a);}main(){intk=3,*p=&k;sp(p);printf("%d,%d\n",k,*p);}则程序的输出结果是()。A、4,3,3B、4,3,4C、6,3,6D、6,6,6标准答案:A知识点解析:考查指针与函数。虽然该函数进行的是地址传参,但只是改变了指针的指向,对原指向的数据并没有改变,该函数仍然可以看做是值传递,即形参指针指向的变化不会影响到实参指针的指向。所以在函数sp()中的输出结果为4,而指针p的指向以及k的值仍然没有改变,答案选A。5、若有以下程序#includeintk=7;voidf(int**s){int*t=&k;*s=t;printf("%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}则程序的输出结果是()。A、7,7,7,3,7,7B、3,7,7,7,7,7C、7,7,7,3,3,3D、3,3,3,7,7,7标准答案:A知识点解析:本题考查指向指针的指针。i是int类型的变量,p为基本类型为int的指针变量,r为二级指针,指向的是指针p的地址,因此,*p就代表i;**r就代表*p,也等价于i。二级指针作为函数参数,形参和实参指向同一个地址空间,两者的改变保持同步。函数fun()的功能是将r指向的存有变量i的地址的指针变量改为指向存有变量k的地址的指针变量,*p的值发生了改变。函数f()中语句"int*t=&k;*s=t;"同样使得**s、*t、k等价,所以刚开始输出3个7,函数调用结束之后*p与**r的值均为7,i不变,答案选A。6、若有以下程序#includeint*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}则程序的输出结果是()。A、3,5,3,5,5B、3,5,5,3,5C、5,3,5,3,5D、5,3,3,5,5标准答案:A知识点解析:考查指针与函数。被调函数为指针型函数,返回的是s这一指针型数据。虽然该函数进行的是地址传参,但只是改变了指针的指向,对原指向的数据并没有改变。并且若以指针作为操作单元,不涉及其指向的数据时,该函数仍然可以看做是值传递,即形参指针指向的变化不会影响到实参指针的指向。if语句将s指向*s、*t较大的数据的地址并返回。所以函数调用结束之后,i、j值不变,p的指向不变,r的指向和q的指向一致,输出结果为:3,5,3,5,5,答案选A。7、若有以下程序#includevoidsp(int*a){intb=2;*a=*a*2;printf("%d,",*a);a=&b;*a=*a*2;printf("%d,",*a);}main(){intk=3;sp(&k);printf("%d\n",k);}则程序的输出结果是()。A、6,4,6B、6,4,3C、6,12,12D、9,4,9标准答案:A知识点解析:考查地址传参。地址传参过程中,实参和形参指向同一段地址空间,所以指向的变量的变化保持同步,但是指向的地址空间实参不会随着形参的变化而变化。函数sp()中,*a为3,所以第一次输出值为6;之后*a指向变量b的地址,所以输出结果为4,*a指向的变化不能改变k的地址,所以k值为6,答案选A。8、若有以下程序#includeintk=7,m=5;voidf(int**s){int*t=&k;s=&t;*s=&m;printf("%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}则程序的输出结果是()。A、7,5,5,3,3,3,B、7,5,7,3,3,3,C、7,5,7,3,5,7,D、7,7,5,3,3,3,标准答案:A知识点解析:本题考查指向指针的指针。函数f()中,语句"s=&t;"将s指向了指针t的地址,即*s与t等价,而语句"*s=&m;"相当于"t=&m",即将指针t指向了变量m的地址,所以在函数f()中输出结果为7,5,5。主函数中,i是int类型的变量,p为基本类型为int的指针变量,r为二级指针,语句"i=3,*p=&i,**r=&p;"使得*p、**r、i三者等价。函数f()以二级指针r作为实参,内部重新改变了形参s的指向后再进行操作,由于形参只是实参的一个副本,形参指针指向的变化不会影响到实参指针的指向,所以实参r的指向没有变化,输出结果为3,3,3,答案选A。9、若有以下程序#includeint*f(int*s,int*t){intk;if(*s<*t){k=*s;*s=*t;*t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}则程序的输出结果是()。A、5,3,5,3,5B、3,5,5,3,5C、3,5,3,5,5D、5,3,3,5,5标准答案:A知识点解析:考查指针与函数。该函数进行的是地址传参,形参和实参指向的变量的值保持一致。函数f()中,如果(*s<*t)则将指针s、t中指向的变量的数据进行交换,s指向的地址中存放的是值较大的数据。函数调用结束后,p、q指向的值发生了改变,r和p的指向保持一致,所以答案选A。10、有以下程序#includemain(){inty=1,x,a[]={2,4,6,8,10},*p;p=&a[1];for(x=0;x<3;x++)y=y+*(p+x);printf("%d\n",y);}程序运行后的输出结果是()。A、19B、17C、18D、20标准答案:A知识点解析:考查指针与一维数组。语句p=&a[1];意味着将指针p指向数组a的第二个元素,p+1则是指向数组a的第三个元素,同理,p+x则是指向数组a的第x+2个元素,x的取值为0、1、2,然后用y和对应数组的元素累加,y=1,即是1+2+4+6+8=19,结果选A)。11、以下程序调用fun函数求数组中最大值所在元素的下标。#includevoidfun(int*s,intn,int*k){inti;for(i=0,*k=i;is[*k])__________;}main(){inta[5]={1,6,2,8,0},k;fun(a,5,&k);printf("%d%d\n",k,a[k]);}在横线处应填入的内容是()。A、*k=iB、k=iC、*k=i-sD、k=i-s标准答案:A知识点解析:该代码段的逻辑是循环判定s中的值,如果大于s[*k]则用*k记录当前的元素下标,记录当前下标的语句应为"*k=i",表示把i的值赋给了k指向的变量的值,答案选A。12、有以下程序#includemain(){inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},(*p)[4]=a,i,j,k=0;for(i=0;i<3;i++)for(j=0;j<2;j++)k=k+*(*(p+i)+j);printf("%d\n",k);}程序运行后的输出结果是()。A、60B、68C、99D、108标准答案:A知识点解析:考查行指针。(*p)[4]表示一个能存放四个整型元素首地址的一维数组的首地址。所以"k=k+*(*(p+i)+j)"中k累加的是数组中第i行第j列的元素。两层循环中i从0到2,j从0到1,所以累加的值为1、3、9、11、17、19,答案选A。13、有以下程序#includemain(){intc[6]={10,20,30,40,50,60},*p,*s;p=c;s=&c[5];printf("%d\n",s-p);}程序运行后的输出结果是()。A、5B、50C、6D、60标准答案:A知识点解析:考查指针与一维数组。语句p=c;意味着将指针p指向数组c的第一个元素,语句s=&c[5];意味着将指针s指向数组c的第6个元素,指针s与指针p之间隔了5个元素,结果选A)。14、有以下程序#includemain(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf("%d",*(p++));printf("%d\n",**k);}程序运行后的输出结果是()。A、24B、44C、22D、46标准答案:A知识点解析:在该程序中,a是int类型的一维数组,p为基本类型为int的指针变量,指向数组a的第一个元素;k为二级指针,指向指针p。输出*(p++)时,自加运算符后置即先输出p指向的值后p再向后移动一位,所以第一次输出的结果为2。k指向指针p,**k与*p等价,第二次输出结果为4,答案选A。15、有以下程序#includemain(){intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}程序运行后的输出结果是()。A、23B、26C、43D、46标准答案:A知识点解析:定义二维数组的语句为"intaa[3][3]={{2},{4},{6}}"表明aa[0][0]=2,aa[1][0]=4,aa[2][0]=6,指针p指向二维数组aa的第一个元素。第一次循环,i值为0,则计算aa[0][1]的值为*p+1=aa[0][0]+1=3,输出*p的值为2;第二次循环,p指针移动,指向aa[0][1],输出结果为3。答案选A。16、以下fun函数返回数组中最大值的下标#includeintfun(int*s,intn){inti,k;for(i=0,k=i;is[k])__________;return(k);}在横线处应填入的内容是()。A、k=iB、i=kC、k++D、++k标准答案:A知识点解析:该代码段的逻辑是循环判定s中的值,如果大于s[k]则用k记录当前的元素下标,记录当前下标的语句应为"k=i",答案选A。17、有以下程序#includeint*f(int*s,int*t){if(*s<*t)*s=*t;returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}程序的运行结果是()。A、5,5,5,5,5B、3,5,5,5,5C、5,3,3,3,5D、3,5,3,5,5标准答案:A知识点解析:考查指针与函数。该函数进行的是地址传参,形参和实参指向的变量的值保持一致。函数f()中,(*s<*t)成立,则将*s=*t;,*s与*t的值均为5,返回值为5,即r=5。函数调用结束后,p、q指向的值也均为5,所以答案选A。18、若有说明语句:int*ptr[10];以下叙述正确的是()。A、ptr是一个具有10个指针元素的一维数组,每个元素都只能指向整型变量B、ptr是指向整型变量的指针C、ptr是一个指向具有10个整型元素的一维数组的指针D、ptr是一个指向10个整型变量的函数指针标准答案:A知识点解析:考查指针数组的定义。说明语句"int*ptr[10];"定义了一个具有10个元素的一维数组,每个元素都只能存放指针,这些指针的基类型必须为整型,选项A)描述正确,答案选A)。19、若有定义语句:inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;,以下选项中错误引用a数组元素的是(其中0≤i<10)()。A、*(*(a+i))B、a[p-a]C、p[i]D、*(&a[i])标准答案:A知识点解析:数组名表示该数组的首地址,*(a+i)表示的是数组a中第二个元素的值,取值运算符*只能对地址取值,不能作用于变量上,选项A)错误;a表示数组a的第一个元素的地址,*p=a则将p指向了数组a的第一个元素的地址,p-a=0,所以a[p-a]即为a[0],p[i]相当于a[i],选项B)、C)正确;取地址运算符&和取值运算符*互为逆运算,选项D)正确;答案选A)。20、有以下程序#includemain(){inta[10]={11,12,13,14,15,16,17,18,19,20},*p=a,i=9;printf("%d,%d,%d\n",a[p-a],p[i],*(&a[i]));}程序运行后的输出结果是()。A、11,20,20B、12,20,20C、11,19,19D、12,19,20标准答案:A知识点解析:a表示数组a的第一个元素的地址,*p=a则将p指向了数组a的第一个元素的地址,p-a=0,所以a[p-a]即为a[0],p[i]相当于a[i]即a[9],输出第一个结果为11、第二个结果为20。取地址运算符&和取值运算符*互为逆运算,所以*(&a[i]))的值仍为a[i]即a[9],输出第三个结果为20,答案选A。21、有以下程序#includevoidfun(int*s,intt,int*k){intp;for(p=0,*k=p;ps[*k])*k=p;}main(){inta[10]={11,12,13,14,15,16,20,18,19,10},k;fun(a,10,&k);printf("%d,%d\n",k,a[k]);}程序运行后的输出结果是()。A、6,20B、10,9C、7,20D、10,10标准答案:A知识点解析:该代码段的逻辑是循环判定s中的值,如果大于s[*k]则用*k记录当前的元素下标,所以k为数组a中值最大的元素的下标,答案选A。22、以下选项中,不能对主函数中变量i和j的值进行交换的程序是()。A、#includevoidswap(int*p,int*q){int*t;*t=*p;*p=*q;*q=*t;}main(){inti=10,j=20,*a=&i,*b=&j;swap(a,b);printf("i=%dj=%d\n",i,j);}B、#includevoidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inti=10,j=20,*a=&i,*b=&j;swap(a,b);printf("i=%dj=%d\n",i,j);}C、#include#includevoidswap(int*p,int*q){int*t;t=(int*)malloc(sizeof(int));*t=*p;*p=*q;*q=*t;free(t);}main(){inti=10,j=20;swap(&i,&j);printf("i=%dj=%d\n",i,j);}D、#includevoidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}main(){inti=10,j=20,*x=&i,*y=&j;swap(x,y);printf("i=%dj=%d\n",i,j);}标准答案:A知识点解析:选项A)中,虽然函数swap()进行的是地址传参,但只是改变了指针的指向,对原指向的数据并没有改变。并且若以指针作为操作单元,不涉及其指向的数据时,该函数仍然可以看做是值传递,即形参指针指向的变化不会影响到实参指针的指向,所以并不能将主函数中的变量i和j互换数值。答案选A)。23、有以下程序#includemain(){inta[10]={1,3,5,7,11,13,17},*p=a;printf("%d,",*(p++));printf("%d\n",*(++p));}程序运行后的输出结果是()。A、1,5B、3,5C、3,7D、1,3标准答案:A知识点解析:在该程序中,a是int类型的一维数组,p为基本类型为int的指针变量,指向数组a的第一个元素。输出*(p++)时,自加运算符后置即先输出p指向的值后p再向后移动一位,所以第一次输出的结果为1,p指向数组a中的第二个元素。输出*(++p)时,自加运算符前置即先将p向后移动一位后再输出p指向的值,所以第二次输出的结果为5,答案选A。24、有以下程序#includemain(){int*p,x=100;p=&x;x=*p+10;printf("%d\n",x);}程序运行后的输出结果是()A、110B、120C、100D、90标准答案:A知识点解析:语句"p=&x;"表示将p指向变量x的地址,用取值运算符*对指针p取值能够得到p指向的变量x的值,所以输出的结果为100+10=110,答案选A。25、有以下程序#includevoidfun(intx,inty,int*z){*z=y-x;}main(){inta,b,c;fun(10,5,&a);fun(7,a,&b);fun(a,b,&c);printf("%d,%d,%d\n",a,b,c);}程序运行后的输出结果是()。A、-5,-12,-7B、5,2,3C、-5,-12,-17D、5,-2,-7标准答案:A知识点解析:函数fun()返回的是y-x的值并存放在指针变量z指向的变量中。所以函数fun(10,5,&a);调用结束后,a=-5;函数fun(7,a,&b);调用结束后,b=-5-7=-12;函数fun(a,b,&c);调用结束后,c=-12-(-5)=-7,答案选A。26、有以下程序#includevoidfun(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(iA、5678901234B、0987654321C、4321098765D、0987651234标准答案:A知识点解析:函数fun()的功能是将数组s中下标为n1和n2之间的数据逆序,所以调用语句fun(p,0,3);fun(p,4,9);fun(p,0,9);结束后,是先将数组p中下标为0至3之间的元素逆序,然后将下标为4至9之间的元素逆序,再将整个数组逆序,答案选A。27、有如下程序#includeintchange(int*data){return(*data)++;}main(){intdata=123;change(&data);printf("%d,",data);data=change(&data);printf("%d,",data);printf("\n");}程序运行后的输出结果是()。A、124,124,B、123,124,C、124,123,D、123,123,标准答案:A知识点解析:函数change()为中先获取指针data指向的变量的数值并返回之后该数值再自增。函数为地址传参,形参与实参的变化保持同步,所以调用语句"change(&data);"执行完毕后,data的值为123+1=124,调用语句"data=change(&data);",函数change()将返回值赋值给data,返回的是变化之前的数据,所以输出结果仍然是124,答案选A。28、有如下程序#includevoidchange(int*array,intlen){for(;len>=0;len--)array[len]+=2;}main(){inti,array[5]={1,2};change(array,4);for(i=0;i<4;i++)printf("%d,",array[i]);printf("\n");}程序运行后的输出结果是()。A、3,4,2,2,B、3,4,5,6,C、2,3,4,5,D、1,2,0,0,标准答案:A知识点解析:函数change()的功能是把数组array中前len个元素均加2,数组定义语句"array[5]={1,2};"定义数组的前两个元素分别为1、2,其余元素为0,调用change()函数结束后,array={3,4,2,2,2},所以输出答案为A)。29、以下选项中叙述正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式C、数组下标的下限可以是负值D、若有数组定义floatarray[4];则语句printf("%f",array[3.12]);是合法的标准答案:A知识点解析:数组说明符的方括号中可以用整型常量或者整型表达式,选项B)错误;数组的下限只能为0,不能为负值,选项C)错误;引用数组元素的时候只能用整型数据而不能用浮点数据,选项D)错误;选项A)描述正确,答案选A)。30、若有函数声明voidfun(floatarray[],int*ptr);以下叙述正确的是()。A、函数参数array,ptr都是指针变量B、函数参数array不是指针变量,ptr是指针变量C、调用函数时,实参数组的值将一一复制给array数组D、调用函数时,array是按值传送,ptr是按地址传送标准答案:A知识点解析:数组名表示该数组的首地址,是一个地址常量,作为函数参数时传递的是数组的首地址,属于地址传参,所以答案选A。31、有如下程序#includemain(){char*p1=0;int*p2=0;double*p3=0;printf("%d,%d,%d\n",sizeof(p1),sizeof(p2),sizeof(p3));}程序运行后的输出结果是()。A、4,4,4B、1,4,8C、0,0,0D、1,2,4标准答案:A知识点解析:指针变量存放的只是对应变量的地址,所以其占用的字节数都是一样的,在32位的计算机上规定一个指针变量占用的内存为32位,即4个字节,所以答案选A。32、有如下程序#includemain(){inti,*ptr;intarray[3]={8,2,4};for(ptr=array,i=0;i<2;i++)printf("%d,",*ptr++);printf("\n");}程序运行后的输出结果是()。A、8,2,B、8,8,C、2,4,D、4,8,标准答案:A知识点解析:考查指针与一维数组。语句"ptr=array"将指针ptr指向了数组array的首地址,所以*ptr与a[0]等价。输出语句中"*ptr++"自加运算符后置,所以先输出ptr指向的变量的值,再让ptr自加1,即指向数组array中下一个元素的地址,该程序输出数组前两个元素的值,答案选A。33、设有定义:inta,b[10],*c=NULL,*p;,则以下语句错误的是()。A、p=a;B、p=b;C、p=c;D、p=&b[0];标准答案:A知识点解析:p为一个指针,只能把一个地址赋值给它,选项A)错误,答案选A)。34、有以下程序#includevoidfun(int*x,ints,inte){inti,j,t;for(i=s,j=e;iA、4567890123B、3210987654C、9876543210D、0987651234标准答案:A知识点解析:函数fun()的功能是将数组x中下标为s和e之间的元素逆序,所以调用函数fun(m,0,3)后,m={3,2,1,0,4,5,6,7,8,9};调用函数fun(m+4,0,5)后,m={3,2,1,0,9,8,7,6,5,4};调用函数fun(m,0,9)后,m={4,5,6,7,8,9,0,1,2,3}。答案选A。35、有以下程序#includemain(){ints[3][2]={1,2,3,4,5,6},*ps[3],k;for(k=0;k<3;k++){ps[k]=s[k];printf("%d",*(ps[k]+1));}}程序的运行结果是()。A、246B、135C、123D、456标准答案:A知识点解析:考查行指针。(*ps)[3]表示一个能存放三个整型元素首地址的一维数组的首地址。"ps[k]=s[k];"表示将ps指向s的第k行数据,所以"printf("%d",*(ps[k]+1));"输出的是二维数组s中的第二列数据,答案选A。国家二级C语言机试(指针)模拟试卷第3套一、选择题(本题共35题,每题1.0分,共35分。)1、以下程序的功能是:通过调用calc函数,把所求得的两数之和值放入变量add中,并在主函数中输出。#includevoidcalc(floatx,floaty,float*sum){________=x+y;}main(){floatx,y,add;scanf("%f%f",&x,&y);calc(x,y,&add);printf("x+y=%f\n",add);}calc函数中下划线处应填入的是()。A、*sumB、sumC、&sumD、add标准答案:A知识点解析:sum为一个指针变量,所以要将x、y的和赋值给sum指向的变量,需要使用取值运算符*,答案选A。2、有以下程序#includevoidfun(int*x,ints,intn){inti;for(i=s;i>=n;i--)*(x+i+3)=*(x+i);}main(){intm[]={0,1,2,3,4,5,6,7,8,9},k;fun(m,10-4,3);for(k=0;k<10;k++)printf("%d",m[k]);}程序的运行结果是()。A、0123453456B、0123456345C、0123456666D、0123454569标准答案:A知识点解析:函数fun()的功能是将数组x下标为n+3至s+3的元素被下标为n到s的元素覆盖,所以调用函数fun(m,10-4,3);结束后数组m中第7到10个元素被数组m的第4到7个元素覆盖,数组中的元素为{0,1,2,3,4,5,3,4,5,6},答案选A。3、设有以下说明和语句:intx[3][4],(*p)[4];p=a;,则与表达式*(*p+2)等价的选项是()。A、a[0][2]B、*(a+2)[0]C、(*a+2)[0]D、a[2][0]标准答案:A知识点解析:考查行指针。(*p)[4]表示一个能存放四个整型元素首地址的一维数组的首地址。"p=a;"表示将p指向数组a的第一行第一个数据的地址,*(*p+2)与*(*(a+0)+2)等价,表示数组a第一行第二个元素的值。答案选A。4、以下语句中存在语法错误的是()。A、charss[6][20];ss[1]="right?";B、charss[][20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss[]={"right?"};标准答案:A知识点解析:字符数组存放字符串的时候只有在定义数组的时候可以直接把字符串常量赋值给字符数组,其他情况则不可以,但是在非定义情况下把一个字符串常量赋值给一个指针是可以的,所以答案选A。5、以下不能将s所指字符串正确复制到t所指存储空间的是()。A、do{*t++=*s++;}while(*s);B、for(i=0;t[i]=s[i];i++);C、while(*t=*s){t++;s++;}D、for(i=0,j=0;t[i++]=s[j++];);标准答案:A知识点解析:选项A不能,因为当*s=?\0?时,while(*s)跳出循环,这样字符串结束标志?\0?没有复制给*t,造成*t不完整。而其他几个选项都可以将?\0?复制过去,答案选A。6、有以下程序#includevoidswap(char*x,char*y){chart;t=*x;*x=*y;*y=t;}main(){char*s1="abc",*s2="123";swap(s1,s2);printf("%s,%s\n",s1,s2);}程序执行后的输出结果是()。A、1bc,a23B、abc,123C、123,abcD、321,cba标准答案:A知识点解析:语句"char*s1="abc",*s2="123";"表示将字符串"abc"的首地址赋值给字符指针s1,把字符串"123"赋值给字符指针s2,函数swap()交换的只是两个指针指向的变量的值,即交换的是对应字符串的第一个字符,所以答案选A)。7、有以下函数intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=’\0’){x++;y++;n++;}returnn;}函数的功能是()。A、统计x和y所指字符串中最前面连续相同的字符个数B、查找x和y所指字符串中是否有’\0’C、将y所指字符串赋给x所指存储空间D、统计x和y所指字符串中相同的字符个数标准答案:A知识点解析:循环判定条件"(*x==*y)&&*x!=?\0?"是如果字符指针x与y指向的字符相等并且字符指针x没有到达字符串尾部,则让指针x、y后移一位并让n自加1,所以n统计的是x和y所指字符串中最前面连续相同的字符个数,答案选A。8、下列语句组中,正确的是()。A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={"Olympic"};D、chars[7];s={"Olympic"};标准答案:A知识点解析:字符串"Olympic"长度为8,字符数组s放不下,选项B)、D)错误;将字符串赋值给指针变量时不需要写大括号,选项C)错误,答案选A)。9、有以下函数intfun(char*s){char*t=s;while(*t++);return(t-s);}该函数的功能是()。A、计算s所指字符串占用内存字节的个数B、比较两个字符串的大小C、计算s所指字符串的长度D、将s所指字符串复制到字符串t中标准答案:A知识点解析:函数循环"while(*t++);"的结束条件为t到达了当前字符串的尾部,即*t==?\0?成立,之后t++,所以t-s计算的是该字符串首尾(连带着字符串结束符)之间间隔了几个元素,由于每个字符占用1个字节,所以也相当于计算了s所指字符串占用内存字节的个数,答案选A。10、有以下程序(注:字符a的ASCII码值为97)#includemain(){char*s={"abc"};do{printf("%d",*s%10);++s;}while(*s);}程序运行后的输出结果是()。A、789B、abcC、7890D、979899标准答案:A知识点解析:字符常量与其ASCII码值一一对应,在计算的时候,可以用字符数据对应的ASCII码代表该字符参与运算,所以输出语句"printf("%d",*s%10);"输出的结果分别为97%10、98%10、99%10,即答案选A。11、设有定义:char*c;以下选项中能够使c正确指向一个字符串的是()。A、charstr[]="string";c=str;B、scanf("%s",c);C、c=getchar();D、*c="string";标准答案:A知识点解析:字符指针必须指向一个地址,只有选项A)将c指向了一个存放字符串的字符数组的首地址,选项B)、C)则没有给指针变量c赋予确定的指向,选项D)不应该使用取值运算符"*",所以答案选A)。12、有以下程序(说明:字母A的ASCII码值是65)#includevoidfun(char*s){while(*s){if(*s%2)printf("%c",*s);s++;}}main(){chara[]="BYTE";fun(a);printf("\n");}程序运行后的输出结果是()。A、YEB、BTC、YTD、BY标准答案:A知识点解析:函数fun()的功能是输出字符数组中ASCII码不能被2整除的字符,答案选A。13、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序运行后的输出结果是()。A、21B、11C、6D、120标准答案:A知识点解析:静态变量在编译时就被分配存储空间,所占用存储单元直到程序结束时才释放,其初始化只进行一次。所以五次调用fun()函数,计算的结果为s=1+2+3+4+5+6=21,答案选A。14、以下选项中正确的语句组是()。A、char*s;s="BOOK!";B、char*s;s={"BOOK!"};C、chars[10];s="BOOK!";D、chars[];s="BOOK!";标准答案:A知识点解析:将字符串赋值给指针变量时不需要写大括号,选项B)错误;字符数组存放字符串的时候只有在定义数组的时候可以直接把字符串常量赋值给字符数组,其他情况则不可以,选项C)、D)错误;答案选A)。15、有以下程序#include

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论