版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言(函数和数组)机试模拟试卷2(共8套)(共228题)国家二级C语言(函数和数组)机试模拟试卷第1套一、选择题(本题共28题,每题1.0分,共28分。)1、以下叙述中正确的是A、用户自己定义的函数只能调用库函数B、不同函数的形式参数不能使用相同名称的标识符C、在C语言的函数内部,可以定义局部嵌套函数D、实用的C语言源程序总是由一个或多个函数组成标准答案:D知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系,不能嵌套定义函数。2、若有以下定义和语句chars1[10]="abcd!",*s2="\n123\\";printf("%d%d\n",strlen(s1),strlen(s2));则输出结果是A、105B、107C、55D、58标准答案:C知识点解析:本题要注意的是转义字符的问题,在字符串s2中,有两个转义字符,分别是回车换行符和反斜线。所以其字符串长度等于5。3、在C语言中,函数返回值的类型最终取决于A、函数定义时在函数首部所说明的函数类型B、retum语句中表达式值的类型C、调用函数时主调函数所传递的实参类型D、函数定义时形参的类型标准答案:A知识点解析:C语言中函数的返回值类型是由定义函数时在函数首部所声明的类型确定的。4、以下关于return语句的叙述中正确的是A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、定义成void类型的函数中可以有带返回值的retum语句D、没有return语句的自定义函数在执行结束时不能返回到调用处标准答案:B知识点解析:return语句主要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条return语句返回函数的值。5、程序中对fun函数有如下说明voidfun();此说明的含义是A、fun函数无返回值B、fun函数的返同值可以是任意的数据类型C、fun函数的返回值是无值型的指针类型D、指针fun指向一个函数,该函数无返回值标准答案:A知识点解析:本题主要考察函数的声明,voidfun()表示fun函数没有输入参数,函数返回void表示函数无返回值。6、若有以下函数首部intfun(doublex[10],int*n)则下面针对此函数的函数声明语句中正确的是A、intfun(double,int);B、intfun(double*x,intn):C、intfun(double*,int*);D、intfun(doublex,int*n);标准答案:C知识点解析:函数说明的一般形式为:类型名函数名(参数类型1.参数类型2,……)。因为函数intfun(doublex[10],int*n)的第1个形式参数是一个双精度型的一维数组,第2个参数是一个整型指针。并返回一个整型值。一维数组的名宁表示的足维数组的地址。7、有以下程序#include<stdio.h>doublef(doublex);main()doublef(doublex){doublea=0;inti;{returnx*x+1;}for(i=0;i<30;i+=10)a+=f((double)i);printf("%5.0f\n",a);}程序运行后的输出结果是A、401B、500C、503D、1404标准答案:C知识点解析:由于函数f的作用是对形参x求平方再加1,所以在主函数中,循环第一次执行后变量a的值等于1,第二次执行后,变量a的值等于102,第三次执行后,变量a的值等于503。8、以下与函数fseek(fp,OL,SEEK_SET)有相同作用的是A、feof(fp)B、ftell(fp)C、fgetc(fp)D、rewind(fp)标准答案:D知识点解析:本题主要考查文件系IO函数的使用,fseek函数用于设置文件指针的位置,feof函数用于判断是否已经到了文件结束,ftell函数返回文件指针的当前位置,fgetc从文件读取一个字符,rewind函数将文件指针重新指向文件开始。题目当中fseek(fp,OL,SEEK_SET)表示把文件指针移动到文件的开始位置0,和rcwind函数功能一致。9、有以下程序#include<stdio.h>intfun(intn){inta;main()if(n==1)return1;{a=n+fun(n-1);printf("%d\n",fun(5));return(a);}}程序的输出结果是A、14B、10C、15D、9标准答案:C知识点解析:函数fun为递归定义的函数,当调用fun(5)→5+fun(4)→5+4+fun(3)→5+4+3+fIun(2)→5+4+3+2+fun(1)。因此最后的结果为15。10、有以下程序(strcat函数用以连接两个字符串)#include<stdio.h>#include<string.h>main(){chara[20]="ABCD\OEFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序运行后的输出结果是A、ABCDE\0FG\0IJKB、ABCDIJKC、IJKD、EFGIJK标准答案:B知识点解析:在字符串中字符’\0’表示字符串的结束标志,所以字符串a和b相连接的结果为ABCDUK。11、以下叙述中正确的是A、只有全局变量才有自己的作用域,函数中的局部变量没有作用域B、只要是用户定义的标识符,都有一个有效的作用域C、只有在函数内部定义的变量才是局部变量D、局部变量不能被说明为static标准答案:B知识点解析:在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,也是全局变量。全局变量可以为源文件中其他函数所共用,其作用域为从定义变量的位置开始到源文件结束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为auto、register以及static。12、有以下程序voidfun2(chara,charb)main(){printf("%c%c",a,b);}{fun1();chara=’A’,’b=’B’;printf("%c%c",a,b);voidfun1()fun2(’E’,’F’);}{a=’C’;b=’D’;}程序的运行结果是A、ABEFB、CDEFC、ABCDD、CDAB标准答案:B知识点解析:在fun1()函数之前定义了全局字符变量a和b。这两个变量的作用域是从其定义处到整个程序结束。在fun1()函数之内定义了两个变量a和b,并且分别初始化为字符’C’和’D’。在C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行fun1()后,变量a、b的值分别等于’C’、’D’,打印输出CD,接着执行fun2(’E’,’F’)语句,变量a、b的值变为’E’、’F’并输出。13、有以下程序#include<stdio.h>main(){inti,s=1;intfun(){staticintx=1;for(i=1;i<=3;i++)x*=2;s*=fun();returnx;}printf("%d\n",s);}程序运行后的输出结果是A、0B、10C、30D、64标准答案:D知识点解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回2的乘方,主函数fun函数调用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即为2*4*8,值为64。14、有以下程序#include<stdio.h>main()intfun(){inti,s=1;{staticintx=1;for(i=1;i<=2;i++)s=fun();x*=2;returnx;}printf("%d\n",s);}程序运行后的输出结果是A、4B、1C、0D、8标准答案:A知识点解析:在子函数fun(中)定义局部静态变量x,其初值等于1,然后再把其值扩大1倍后返回。在主函数中执行for循环语句2次,调用函数fun()两次,所以变量s的值等于4。这里要强调的一点是当函数。fun()执行完毕后,局部静态变量x的值不会丢失,仍然有效。15、若有定义语句:doublex[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是A、*pB、x[5]C、*(p+1)D、*x标准答案:B知识点解析:本题考查数组和指向数组的指针。x是一个二维double类型的数组,长度为5,下标范围是0-4,指针p指向数组x。选项A)中*p是取数组首元素x[0]的值:选项B)下标超出范围:选项C),p+1表示x[1]的地址,因此*(p+1)是取x[1]元素值;选项D)中,数组名x本身代表数组的首地址,因此*x表示取元素x[0]的值。16、有以下程序#include<stdioh>voidmain(){Inta□={2,3,5,4),i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;]for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是A、2050B、3344C、3040D、0304标准答案:C知识点解析:在主函数的for循环语句中,当循环变量i的值等于0,2时,执行switch中的case0语句,分别对数组元素a[0]和a[2]加1和减1,所以a[0]的值等于3,a[2]等于4。当循环变量i的值等于1,3时,执行switch中的case1语句,把数组元素a[1]和a[3]的值赋为0。所以输出数组a的元素,其结果为3040。17、下列程序中函数f的功能是:当flag为1时,进行由小到大排序;当flag为0时,进行由大到小排序voidflintb[],intn,intflag)main(){inti,j,t;{inta[10]={5,4,3,2,1,6,7,8,9,10},i;for(i=0;i<n-1;i++)f(&a[2],5,0);for(j=i+1;j<n;j++)f(a,5,1);if(flag?b[i]>b[j];b[i]<b[j])for(i=0;i<10;i++){t=b[i];b[i];b[j];b[j]=t;}printf("%d,",a[i]);}}程序运行后的输出结果是A、1,2,3,4,5,6,7,8,9,10,B、3,4,5,6,7,2,1,8,9,10,C、5,4,3,2,1,6,7,8,9,10,D、10,9,8,7,6,5,4,3,2,1,标准答案:B知识点解析:主函数中进行了两次f函数的调用。第一次传递给形参数组b的地址为元素a[2]的地址,n接收数据位5,因此数组b中元素为3,2,1,6.7.此时flag的值为0,进行由大到小排序,而数组b和实参数组a共用一段存储空间,第一次调用结束以后,数组a的值为5,4,7,6,3,2.1,8,9,10。第二次调用f函数,形参数组接收实参数组a的首地址,取5个元素,由小到大排序,调用结束以后,数组a的值为3,4,5,6,7,2,1,8,9,10。18、以下叙述中正确的是A、语句inta[]={0};是不合法的,遗漏了数组的大小B、语句chara[2]t={"A","B"};是合法的,定义了一个包含两个字符的数组C、语句inta[8]={0};是合法的D、语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符标准答案:C知识点解析:当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式为:类型说明符数组名[常量表达式]={值,值,…,值},…;。需要注意的是当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一个初值必定赋给下标为0的元素,然后按这些数值的排列顺序赋初值,只能给元素逐个赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。19、若有以下程序#includechar*a="you",b[]="welcome#you#to#China!";main(){inti,j=0;char*p;for(i=0;b[i]!=’\0’;i++){if(*a==b[i]){p=&b[i];for(j=0;a[j]!=’\0’;j++){if(a[j]!=*p)break;p++;}if(a[j]==’\0’)break;}}printf("%s\n",p);}则程序的输出结果是A、#you#to#China!B、me#you#to#China!C、#China!D、#to#China!标准答案:D知识点解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,如果含有则退出,字符指针D指向该匹配子串后面的位置,利用printf函数输出则从该位置开始一直输出到字符串b的结尾。20、若有定义语句:inta[2][3],*p[3];,则以下语句中正确的是A、p=a;B、p[0]=a;C、p[0]=a[1][2];D、p[1]=a;标准答案:C知识点解析:本题考查多维数组和数组指针。a是一个二维数组,p是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量;选项B)数据类型不匹配,p[0]是指向一个整型对象,而a是一个二维数组首地址;选项C)正确,是把元素a[1][2]赋值给p[0];选项D)和选项B)一样属于数据类型不匹配,p[1]是指向一个整型对象。而a是一个二维数组首地址。21、以下定义数组的语句中错误的是A、int=num[][3]={{1,2},3,4,5,6};B、intnum[]={1,2,3,4,5,6};C、intnum[][4]={1,2,3,4,5,6};D、intnum[2][4]={{1,2},{3,4},{5,6}};标准答案:D知识点解析:在选项D)的数组定义中,赋值号左边定义了一个2行4列的二维数组,而在右边定义了一个3行2列的二维数组。22、有下列程序:main(){inta[4][4]={{1,4,3,2),{8,6,5,7),{3,7,2,5),{4,8,6,1)},i,k,t;for(i=0;i<3;i++)for(k=i+1;k<4;k++)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;i++)printf("%d,",a[0][i]);}程序运行后的输出结果是A、6,2,1,1,B、1,1,2,6,C、2,3,4,6,D、6,4,3,2,标准答案:D知识点解析:利用二重for循环对二维数组af4][4]的主对角线上的元素{1,6,2,1}实现按列从大到小排序,所以数组a[4][4]的值变为{{6,4,3,2,},{8,2,5,7},{3,7,1,5},{4,8,6,1}},最后输出数组a[4][4]第一行上的元素,所以输出结果为6,4,3,2。23、有以下程序#include<stdio.h>#defineN3voidfun(inta[][N],intb[])main(){inti,j;{intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;for(i=0;i<N;i++)fun(x,y);{b[i]=a[i][0];for(i=0;i<N;i++)printf("%d,",y[i]);for(j=1;j<N;j++)printf("\n");if(b[i]<a[i][j])b[i]=a[i][j];}}}A、1,3,5,B、2,4,8,C、3,5,7D、3,6,9,标准答案:D知识点解析:函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。24、以下选项中,能正确进行字符串赋值的是A、chars[5]={’A’,’B’,’C’,’D’,’E’};B、char*s="ABCDE";C、chars[4][5]={"ABCDE"};D、char*s;gets(s);标准答案:B知识点解析:对于选项A)字符串中无法存放字符串结束标志’\0’,选项C)每行仅仅存放5个字符,同样的不能存放字符串结束标志,选项D)中指针变量s没有实际的内存空间,无法存放输入的字符串。因此正确的选项为B),相当于char*s;s="ABCDE",把字符串常量的首地址存放到指针变量中存储。25、以下叙述中正确的是A、函数调用“strlen(s);”会返回字符串s实际占用内存的大小(以字节为单位)B、两个字符串可以用关系运算符进行大小比较C、当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和D、C语言本身没有提供对字符串进行整体操作的运算符标准答案:D知识点解析:C语言中没有运算符可以处理字符串,要调用“string”库中的函数来处理字符串,其中strlen函数主要测试字符串中实际字符的个数,比实际占用的内存至少要少一个。Strcat(s1,s2涵数用于连接两个字符串,是把字符串s2连接到s1的后面。26、以下选项中,没有编译错误的是A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’);B、charstr1[5]="pass",str2[6];str2=str1;C、charname[10];name="china";D、charstr4[];str4="helloworld";标准答案:A知识点解析:选项A)是定义了字符数组str3[];并对其赋初值。选项B)中语句str2=str1非法,字符数组不能直接赋值。选项C),D)和选项B)一致。27、有以下程序#include<stdio.h>voidmain(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’0’&&s[i]<=’9’)n++;printf("%d\n",n);}程序运行后的输出结果是A、0B、7C、3D、8标准答案:C知识点解析:在主函数中的for循环语句中,当s[i]的值不等于0~9之间的数字时,结束循环语句的执行。由字符数组s的初值可以得到for循环语句执行了三次,所以变量n的值等于3。28、以下能正确定义字符串的语句是A、charstr="kx43";B、charstr[]:"\0";C、charstr=";D、charstr[]={’\064’};标准答案:B知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。国家二级C语言(函数和数组)机试模拟试卷第2套一、选择题(本题共29题,每题1.0分,共29分。)1、设有定义:intx[2][3];则以下关于二维数组x的叙述错误的是A、数组X可以看作是由x[0]和x[1]两个元素组成的一维数组B、可以用x[0]=0;的形式为数组所有元素赋初值0C、元素x[0]可看作是由3个整型元素组成的一维数组D、x[0]和x[1]是数组名,分别代表一个地址常量标准答案:B知识点解析:二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第0行的元素,再存放第1行的元素……称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有符号元素的一维数组。另外在给二维数组赋初值时可以不用含化括号对。例如。inta[4][3]={1,2,4,5};在编译时,系统将按a数组元素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后而的元素自动补初值0。以上将给a数组第一行的元素和第二行的第一个元素依次赋予1、2、4、5,其他元素的初值都为0。2、有以下程序#inclUde#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;iA、1,3,5,B、2,4,8,C、3,5,7D、3,6,9,标准答案:D知识点解析:函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。3、以下语句中存在语法错误的是A、charss[][20]={"right?"};B、char*ss[6];ss[1]="right?";C、char*ss[]={"right?"};D、charss[61120];ss[1]="right?";标准答案:A知识点解析:选项A)中定义了二维数组ss,可以用于存储字符串,但是字符串的存储不能通过赋值,仅可以初始化或者输入得到,而选项C)和A)不同,选项C)为指针数组,对于指针变量可以保存常量字符串的地址。4、下列叙述中正确的是A、两个连续的单引号(")是合法的字符常量B、可以对字符串进行关系运算C、两个连续的双引号("")是合法的字符串常量D、空字符串不占用内存,其内存空间大小是0标准答案:C知识点解析:两个连续的双引号:"",是一个字符串常量,称为“空串”。5、以下选项中,能正确进行字符串赋值的是A、chars[5]={’A’,’B’,’C’,’D’,’E’};B、char*s="ABCDE";C、chars[4][5]={"ABCDE"};D、char*s;gets(s);标准答案:B知识点解析:对丁选项A)字符串中无法存放字符串结束标志‘\0’,选项C)每行仅仅存放5个字符,同样的不能仔放字符串结束标忐,选项D)中指针变量s没有实际的内存空间,无法存放输入的字符串。因此正确的选项为B),相当于char*s:s="ABCDE",把字符串常量的首地址存放到指针变量中存储。6、有以下程序#includeintfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序运行后的输出结果是A、6B、7C、1D、0标准答案:B知识点解析:函数fun的土要功能是计算字符串中实际字符的个数.因此主函数中调用fun得到结果为7。7、若有以下程序段charstr[4][12]={"as","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,含有4个元素,for循环strp分别保存了二维数组str中的4个字符串的首地址,因此strp为二级地址,不能保存字符串的首地址,*strp或者strp[0]中存放了字符串"aa"的首地址。所以不能正确引用字符串的为选项A)。8、以下叙述中正确的是A、下面的语句用赋初值方式来定义字符串,其中,’\0’是必须的charstrl[]={’s’,’t’,’r’,’l’,’\0’}:B、有定义语句:charstrl[]="str!";,数组strl将包含4个元素C、字符串常量"strl"的类型是:字符串数据类型D、字符数组的每个元素可存放一个字符,并且最后一个元素必须是’\0’字符标准答案:B知识点解析:选项B)中除了字符串中实际字符之外,还要存储字符串结束标志,应为5个元素。在C语言中没有字符串数据类型,因此选项C)不正确,选项D)字符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。9、以下叙述中正确的是A、charca[3][5]={"A","BB","CCC"};是不合语法的B、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组C、charca[][5]={"A","BB","CCC"};是不合语法的D、char*ca[3]={"A","BB","CCC"};是不合语法的标准答案:B知识点解析:字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项B)的说法正确。选项A)和C)对于ca的定义是正确的。选项D)定义一个指针数组,可以保存多个字符串的首地址。10、以下叙述中正确的是A、函数调用strlen(s);会返回字符串S实际占用内存的大小(以字节为单位)B、两个字符串可以用关系运算符进行大小比较C、当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和D、C语言本身没有提供对字符串进行整体操作的运算符标准答案:D知识点解析:C语言中没有运算符可以处理字符串,要调用“string库中的函数来处理字符串,其中strlen函数主要测试字符串中实际字符的个数,比实际占用的内存至少要少一个。Strcat(s1,s2)函数用于连接两个字符串,是把字符串s2连接剑s1的后面。11、以下叙述中正确的是A、不能用字符串常量对字符数组名进行整体赋值操作B、字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素C、charstr[7]="string!";在语法上是合法的,运行也是安全的D、char*str;str="Hello";与charstr[];str="Hello":效果是一样的标准答案:A知识点解析:字符数组仅仅可以采用定义时仞始化以及输入得剑数据,在程序其他部分不允许对其进行赋值。字符串常最中除了实际字符之外还有结束标志,选项B)错误,而选项C)中,没有空间存放字符串结束标志,因此运行是不安全的。选项D)中第一个str为指针,叫以赋值,而后面的为数组,在程序中赋值出错。12、以下叙述中正确的是A、语句charstr[10]="string?";和charstr[10]={"string?"};并不等价B、对于一维字符数组,不能使用字符串常量来赋初值C、对于字符串常量"string?",系统已自动在最后加入了’\0’字符,表示串结尾D、在语句charstr[]="string!";中,数组str的大小等于字符串的长度标准答案:C知识点解析:存C语言中,字符串是借助于字符型一维数组来存放的,可以借助在定义时初始化以及输入来把字符串存入数组,并规定以字符’\0’作为“字符串结束标志”。’\0’是一个转义字符,称为空值,它的ASCII码值为0。’\0’作为标志占用存储空间,但不计入字符串的实际长度。在C语言中,系统在每个字符串的最后自动加入一个字符(’\0’)作为字符串的结束标志。13、设有定义charstr[]="Hello";则语句pfintf("%d%d",sizeof(str),strlen(str));的输出结果是A、66B、65C、55D、56标准答案:B知识点解析:sizeof主要用于测试变量所占的实际内存,而strlen函数主要测试字符串中实际字符的个数,字符串"Hello"占有内存6个字节,而字符串中共有5个字符。14、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是A、aa数组的两个元素只能存放含有4个字符的一维数组的首地址B、aa数组的值分别是字符串"abcd"和"ABCD"C、aa是指针变量,它指向含有两个元素的字符型数组D、aa[0]存放了字符串"abcd"的首地址标准答案:D知识点解析:题目中char*aa[2],定义了指针数组aa,有两个元素,aa[0]存放"abcd"地址,而aa[1]存放”ABCD"地址。15、以下选项中,没有编译错误的是A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’};B、charstrl[5]="pass",str2[6];str2=str1;C、charname[10];name="china";D、charstr4[];str4="helloworld";标准答案:A知识点解析:选项A)是定义了字符数组str3[],并对其赋初值。选项B)中语句str2=str1非法,字符数组不能直接赋值。选项C),D)和选项B)一致。16、有以下程序main(){chara[5][10]={"one","two","three","four","five");inti,j;Chart;for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(a[i][0]>a[j][0]){t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;)puts(a[1]);}程序运行后的输出结果是A、fwoB、owoC、twoD、fix标准答案:A知识点解析:这个程序的执行过程是当i=0时,j=1,a[0][0]=0a[3][0]=f;置换a[2][0]=f,a[3][0]=t;此时,a[2][0]=Ca[1][0]=t,再置换a[2][0]=t,a[1][0]=f,;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fwo。17、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是A、while((s[i++]=getchar())?=’\n’)=s[i]=’\0’;B、scanf("%s",s);C、gets(s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:B知识点解析:本题考查标准输入输出函数和循环语句。gets(s)函数的作用是将输入的字符读入字符串s,直到遇到回车。而scanf7()函数接收字符串时的结束标志为回车或者空格。18、设有定义:charp[]={’1’,’2’,’3’},*q=p;以下不能计算出一个char型数据所占字节数的表达式是A、sizeof(p)B、sizeof(char)C、sizeof(*q)D、sizeof(p[0])标准答案:A知识点解析:选项A)计算的是p[]字符数组首地址所占的内存字节数,返回值数组中所有元素占有的空间。*q和p[0]分别表示数组p中下标为0的字符元素,选项B)和D)都可以计算char型数据占有的字节数。19、有以下程序#include#includevoidmain(){charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s\n",p);}程序运行后的输出结果是A、9.One*Dream!B、10.One*Dream?C、9.One*WorldD、10.One*World标准答案:B知识点解析:在主函数中定义了二维字符数组str,并对它赋初值。定义字符指针p,并把字符串str[1]的地址赋给它。所以这时字符指针p指向字符串“One*Dream!”,然后在两个输出语句中,分别输出这个字符串的长度10和字符串本身。20、有以下程序#includevoidmain(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(S[i]>=’0’&&S[i]<=’9’)n++;printf("%d\n",n);}程序运行后的输出结果是A、0B、7C、3D、8标准答案:C知识点解析:在主函数中的for循环语句中,当s[i]的值不等于0~9之间的数字时,结束循环语句的执行。由字符数组s的初值可以得到for循环语句执行了三次,所以变量n的值等于3。21、以下不能将S所指字符串正确复制到t所指存储空间的是A、for(i=0;t[i]=s[i];i++);B、while(*t=*s){t++;s++;}C、for(i=0,j=0;t[i++]=s[j++];);D、do{*t++=*s++;}while(*s);标准答案:D知识点解析:在选项D)中,不能把s所指字符串的结束标志符赋给字符串t。22、下列语句组中,正确的是A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={"Olympic"};D、chars[7];s={"Olympic"};标准答案:A知识点解析:选项A)中定义了指针变量s,通过赋值语句保存字符串常量的地址,而字符数组绝对不能赋值,而只能初始化或者输入。23、有以下程序main(){charch[]="uvwxyz",*pc;pc=ch;printf("%c\n",*(pc+5));}程序运行后的输出结果是A、0B、元素ch[5]的地址C、zD、字符Y的地址标准答案:C知识点解析:在程序中语句pc=ch;的功能是字符指针pc指向字符串数组ch[]的地址,而*(ps+5)表示字符串数组ch[]中第6个字符z。24、有以下程序#includevoidmain(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’&&s[i]<=’z’)n++;printf("%d\n",n);}程序运行后的输出结果是A、0B、3C、5D、2标准答案:D知识点解析:这段程序的功能求出字符串s中字符在小写字符a到z之间字符的个数。在程序中字符串s的值为“012xy”,所以在字符串s中符合要求的字符的个数等于2。25、以下能正确定义字符串的语句是A、charstr="\x43":B、charstr[]="\0";C、charstr=";D、charstr[]={’\064’};标准答案:B知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。26、以下关于字符串的叙述中正确的是A、两个字符串中的字符个数相同时才能进行字符串大小的比较B、可以用关系运算符对字符串的大小进行比较C、空串比空格打头的字符串小D、C语言中有字符串类型的常量和变量标准答案:C知识点解析:C语言本身并没有设置一利,类型来定义字符串变量,却允许使用“字符串常量”。字符串常量是由双引号括起来的一串字符。任意两个字符串的大小比较要调用字符串比较函数strcmp(s1,s2)来进行,其比较的方法是依次对s1和s2中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(比较字符大小的依据是其ASCII码值)。27、若要求从键盘读入含有空格字符的字符串,应使用函数A、getc()B、gets()C、getchar()D、scanf()标准答案:B知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋给变量ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入Enter键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets()函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pD其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。28、有以下程序main(){chars[]="abcde";s+=2:printf("%d\n",s[0]);执行后的结果是A、输出字符C的ASCII码B、输出字符CC、输出字符a的ASCII码D、程序出错标准答案:D知识点解析:因为字符数组s[]中的数组名s表示的是一个地址常量。所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。29、有下列程序:fun(charp[][10]){intn=0,i;for(i=0;i<7;i++)if(p[i][0]==’T’)n++;returnn;}main(){charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun");printf("%d\n",fun(str));}程序执行后的输出结果是A、1B、3C、0D、2标准答案:D知识点解析:本题在主函数中定义了一个字符二维数组str[][10],并用{“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”,“Sun”}初始化。函数fun(charp[][10])的功能是统计出p[][10]中p[i][0]等十字符T的个数。所以fun(str)的功能是统计一周七天中英文名称首7母为“T”的个数。因为字符串“Tue”和“Thu”的首字符是“T”,所以n=2。国家二级C语言(函数和数组)机试模拟试卷第3套一、选择题(本题共28题,每题1.0分,共28分。)1、有以下程序#include<stdio.h>#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<N;i++){b[i]=a[i][0];for(j=1;j<N;j++)if(b[i]<a[i][j])b[i]=a[i][j];}}main(){intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}A、1,3,5,B、2,4,8,C、3,5,7D、3,6,9,标准答案:D知识点解析:函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。2、以下语句中存在语法错误的是A、charss[][20]={"right?"};B、char*ss[6];ss[1]="right?";C、char*ss[]={"right?"};D、charss[6][20];ss[1]="right?";标准答案:A知识点解析:选项A中定义了二维数组ss,可以用于存储字符串,但是字符串的存储不能通过赋值,仅可以初始化或者输入得到,而选项C和A不同,选项C为指针数组,对于指针变量可以保存常量字符串的地址。3、下列叙述中正确的是A、两个连续的单引号(’’)是合法的字符常量B、可以对字符串进行关系运算C、两个连续的双引号("")是合法的字符串常量D、空字符串不占用内存,其内存空间大小是0标准答案:A知识点解析:两个连续的双引号:"",是一个字符串常量,称为“空串”。4、以下选项中,能正确进行字符串赋值的是A、chars[5]={’A’,’B’,’C’,’D’,’E’};B、char*s="ABCDE";C、chars[4][5]={"ABCDE"};D、char*s;gets(s);标准答案:B知识点解析:对于选项A字符串中无法存放字符串结束标志‘\0’,选项C每行仅仅存放5个字符,同样的不能存放字符串结束标志,选项D中指针变量s没有实际的内存空间,无法存放输入的字符串。因此正确的选项为B,相当于char*s;s="ABCDE",把字符串常量的首地址存放到指针变量中存储。5、有以下程序#include<stdio.h>intfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序运行后的输出结果是A、6B、7C、1D、0标准答案:B知识点解析:函数fun的主要功能是计算字符串中实际字符的个数,因此主函数中调用fun得到结果为7。6、若有以下程序段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,含有4个元素,for循环strp分别保存了二维数组str中的4个字符串的首地址,因此strp为二级地址,不能保存字符串的首地址,*strp或者strp[0]中存放了字符串"aa"的首地址。所以不能正确引用字符串的为选项A。7、以下叙述中正确的是A、下面的语句用赋初值方式来定义字符串,其中,’\0’是必须的charstr1[]={’s’,’t’,’r’,’1’,’\0’};B、有定义语句:charstr1[]="str1";,数组str1将包含4个元素C、字符串常量"str1"的类型是:字符串数据类型D、字符数组的每个元素可存放一个字符,并且最后一个元素必须是’\0’字符标准答案:B知识点解析:选项B中除了字符串中实际字符之外,还要存储字符串结束标志,应为5个元素。在C语言中没有字符串数据类型,因此选项C不正确,选项D字符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。8、以下叙述中正确的是A、charca[3][5]={"A","BB","CCC"};是不合语法的B、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组C、charca[][5]={"A","BB","CCC"};是不合语法的D、char*ca[3]={"A","BB","CCC"};是不合语法的标准答案:B知识点解析:字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项B的说法正确。选项A和C对于ca的定义是正确的。选项D定义一个指针数组,可以保存多个字符串的首地址。9、以下叙述中正确的是A、函数调用strlen(s);会返回字符串s实际占用内存的大小(以字节为单位)B、两个字符串可以用关系运算符进行大小比较C、当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和D、C语言本身没有提供对字符串进行整体操作的运算符标准答案:D知识点解析:C语言中没有运算符可以处理字符串,要调用“string库中的函数来处理字符串,其中strlen函数主要测试字符串中实际字符的个数,比实际占用的内存至少要少一个。Strcat(s1,s2)函数用于连接两个字符串,是把字符串s2连接到s1的后面。10、以下叙述中正确的是A、不能用字符串常量对字符数组名进行整体赋值操作B、字符串常量"Hello"会被隐含处理成一个无名字符型数组,它有5个元素C、charstr[7]="string!";在语法上是合法的,运行也是安全的D、char*str;str="Hello";与charstr[];str="Hello";效果是一样的标准答案:A知识点解析:字符数组仅仅可以采用定义时初始化以及输入得到数据,在程序其他部分不允许对其进行赋值。字符串常量中除了实际字符之外还有结束标志,选项B错误,而选项C中,没有空间存放字符串结束标志,因此运行是不安全的。选项D中第一个str为指针,可以赋值,而后面的为数组,在程序中赋值出错。11、以下叙述中正确的是A、语句charstr[10]="string!";和charstr[10]={"string!"};并不等价B、对于一维字符数组,不能使用字符串常量来赋初值C、对于字符串常量"string!",系统已自动在最后加入了’\0’字符,表示串结尾D、在语句charstr[]="string!";中,数组str的大小等于字符串的长度标准答案:C知识点解析:在C语言中,字符串是借助于字符型一维数组来存放的,可以借助在定义时初始化以及输入来把字符串存入数组,并规定以字符’\0’作为“字符串结束标志”。’\0’是一个转义字符,称为空值,它的ASCII码值为0。’\0’作为标志占用存储空间,但不计入字符串的实际长度。在C语言中,系统在每个字符串的最后自动加入一个字符(’\0’)作为字符串的结束标志。12、设有定义charstr[]="Hello";则语句printf("%d%d",sizeof(str),strlen(str));的输出结果是A、66B、65C、55D、56标准答案:B知识点解析:sizeof主要用于测试变量所占的实际内存,而strlen函数主要测试字符串中实际字符的个数,字符串"Hello"占有内存6个字节,而字符串中共有5个字符。13、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是A、aa数组的两个元素只能存放含有4个字符的一维数组的首地址B、aa数组的值分别是字符串"abcd"和"ABCD"C、aa是指针变量,它指向含有两个元素的字符型数组D、aa[0]存放了字符串"abcd"的首地址标准答案:D知识点解析:题目中char*aa[2],定义了指针数组aa,有两个元素,aa[0]存放"abcd"地址,而aa[1]存放"ABCD"地址。14、以下选项中,没有编译错误的是A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’};B、charstr1[5]="pass",str2[6];str2=str1;C、charname[10];name="china";D、charstr4[];str4="helloworld";标准答案:A知识点解析:选项A是定义了字符数组str3[],并对其赋初值。选项B中语句str2=str1非法,字符数组不能直接赋值。选项C,D和选项B一致。15、有以下程序main(){chara[5][10]={"one","two","three","four","five"};inti,j;chart;for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(a[i][0]>a[j][0]){t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;}puts(a[1]);}程序运行后的输出结果是A、fwoB、owoC、twoD、fix标准答案:A知识点解析:这个程序的执行过程是当i=0时,j=1,a[0][0]=o<a[1][0]=t;不置换;当i=1时,j=2,a[1][0]=t=a[2][0]=t;不置换;当i=2时,j=3,a[2][0]=t>a[3][0]=f;置换a[2][0]=f,a[3][0]=t;此时,a[2][0]=f,a[1][0]=t,再置换a[2][0]=t,a[1][0]=f,;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fwo。16、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是A、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;B、scanf("%s",s);C、gets(s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:B知识点解析:本题考查标准输入输出函数和循环语句。gets(s)函数的作用是将输入的字符读入字符串s,直到遇到回车。而scanf()函数接收字符串时的结束标志为回车或者空格。17、设有定义:charp[]={’1’,’2’,’3’},*q=p;以下不能计算出一个char型数据所占字节数的表达式是A、sizeof(p)B、sizeof(char)C、sizeof(*q)D、sizeof(p[0])标准答案:A知识点解析:选项A计算的是p[]字符数组首地址所占的内存字节数,返回值数组中所有元素占有的空间。*q和p[0]分别表示数组p中下标为0的字符元素,选项B和D都可以计算char型数据占有的字节数。18、有以下程序#include<stdio.h>#include<string.h>voidmain(){charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s\n",p);}程序运行后的输出结果是A、9,One*Dream!B、10,One*Dream!C、9,One*WorldD、10,One*World标准答案:B知识点解析:在主函数中定义了二维字符数组str,并对它赋初值。定义字符指针p,并把字符串str[1]的地址赋给它。所以这时字符指针p指向字符串“One*Dream!”,然后在两个输出语句中,分别输出这个字符串的长度10和字符串本身。19、有以下程序#include<stdio.h>voidmain(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’0’&&s[i]<=’9’)n++;printf("%d\n",n);}程序运行后的输出结果是A、0B、7C、3D、8标准答案:C知识点解析:在主函数中的for循环语句中,当s[i]的值不等于0~9之间的数字时,结束循环语句的执行。由字符数组s的初值可以得到for循环语句执行了三次,所以变量n的值等于3。20、以下不能将s所指字符串正确复制到t所指存储空间的是A、for(i=0;t[i]=s[i];i++);B、while(*t=*s){t++;s++;}C、for(i=0,j=0;t[i++]=s[j++];);D、do{*t++=*s++;}while(*s);标准答案:D知识点解析:在选项D中,不能把s所指字符串的结束标志符赋给字符串t。21、下列语句组中,正确的是A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={"Olympic"};D、chars[7];s={"Olympic"};标准答案:A知识点解析:选项A中定义了指针变量s,通过赋值语句保存字符串常量的地址,而字符数组绝对不能赋值,而只能初始化或者输入。22、有以下程序main(){charch[]="uvwxyz",*pc;pc=ch;printf("%c\n",*(pc+5));}程序运行后的输出结果是A、0B、元素ch[5]的地址C、zD、字符y的地址标准答案:C知识点解析:在程序中语句pc=ch;的功能是字符指针pc指向字符串数组ch[]的地址,而*(ps+5)表示字符串数组ch[]中第6个字符z。23、有以下程序#include<stdio.h>voidmain(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’&&s[i]<=’z’)n++;printf("%d\n",n);}程序运行后的输出结果是A、0B、3C、5D、2标准答案:D知识点解析:这段程序的功能求出字符串s中字符在小写字符a到z之间字符的个数。在程序中字符串s的值为“012xy”,所以在字符串s中符合要求的字符的个数等于2。24、以下能正确定义字符串的语句是A、charstr="\x43";B、charstr[]="\0";C、charstr=’’;D、charstr[]={’\064’};标准答案:B知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。25、以下关于字符串的叙述中正确的是A、两个字符串中的字符个数相同时才能进行字符串大小的比较B、可以用关系运算符对字符串的大小进行比较C、空串比空格打头的字符串小D、C语言中有字符串类型的常量和变量标准答案:C知识点解析:C语言本身并没有设置一种类型来定义字符串变量,却允许使用“字符串常量”。字符串常量是由双引号括起来的一串字符。任意两个字符串的大小比较要调用字符串比较函数strcmp(s1,s2)来进行,其比较的方法是依次对s1和s2中对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符决定所在串的大小(比较字符大小的依据是其ASCⅡ码值)。26、若要求从键盘读入含有空格字符的字符串,应使用函数A、getc()B、gets()C、getchar()D、scanf()标准答案:B知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋给变量ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入Enter键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets()函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。27、有以下程序#include<stdio.h>main(){chars[]="abcde";s+=2;printf("%d\n",s[0]);}执行后的结果是A、输出字符c的ASCII码B、输出字符cC、输出字符a的ASCII码D、程序出错标准答案:D知识点解析:因为字符数组s[]中的数组名s表示的是一个地址常量。所以语句“s+=2;”不能将指针在当前位置的基础上再向后移动两位。因而程序编译时出错。28、有下列程序:fun(charp[][10]){intn=0,i;for(i=0;i<7;i++)if(p[i][0]==’T’)n++;returnn;}main(){charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};printf("%d\n",fun(str));}程序执行后的输出结果是A、1B、3C、0D、2标准答案:D知识点解析:本题在主函数中定义了一个字符二维数组str[][10],并用{“Mon”,“Tue”,“Wed”,“Thu”,“Fri”,“Sat”,“Sun”}初始化。函数fun(charp[][10])的功能是统计出p[][10]中p[i][0]等于字符’T’的个数。所以fun(str)的功能是统计一周七天中英文名称首字母为“T”的个数。因为字符串“Tue”和“Thu”的首字符是“T”,所以n=2。国家二级C语言(函数和数组)机试模拟试卷第4套一、选择题(本题共28题,每题1.0分,共28分。)1、有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)#include#includemain(){chara[10]="abc",b[10]="012",c[10]="xyz";strcpy(a+1,b+2);puts(strcat(a,c+1));}程序运行后的输出结果是A、bc2yzB、a2yzC、a12xyzD、12yz标准答案:B知识点解析:程序执行strcpy(a+1,b+2)后,字符数组a的值为“a2”,再进行字符串的连接strcat(a,c+1),此时字符数细a的值为“a2yz”。2、若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是A、main(){……x=fun(2,10);……)floatfun(inta,intb){……}B、floatfun(inta,intb){……}main(){……x=fun(i,j);……}C、floatfun(int,int);main(){……x=fun(2,10);……}floatfun(inta,intb){……}D、main(){floatfun(inti,intj);……x=fun(i,j);……}floatfun(inta,intb){……}标准答案:A知识点解析:C语言规定,函数必须先定义,后调用(函数的返回值类型为int或char时除外)。在选项A中,调用的子函数在调用后面定义,所以不正确。在选项B、C中,被调用函数在主函数之前定义,再在主函数中调用,所以是正确的;在选项D中,在主函数中先对子函数floatfun(inti,inti)进行了声明,然后进行调用。3、以下叙述中正确的是A、用户自己定义的函数只能调用库函数B、不同函数的形式参数不能使用相同名称的标识符C、在C语言的函数内部,可以定义局部嵌套函数D、实用的C语言源程序总是由一个或多个函数组成标准答案:D知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之问没有主从关系,不能嵌套定义函数。4、若有定义语句:chars[10]="1234567\0\0";则strlen(s)的值是A、8B、7C、9D、10标准答案:B知识点解析:宁符串长度函数strlen(s)表示计算出以s为起始地址的字符串的长度,并作为函数值返回。这个长度值不包括串尾的结束标志’\0’。5、有以下程序#includemain(){charp[20]={’a’,’b’,’c’,’d’},q[]="abc",r[]="abcde";strcat(p,r);strcpy(p+strlen(q),q);printf("%d\n".strlen(p));}程序运行后的输出结果是A、9B、11C、6D、7标准答案:C知识点解析:字符串连接函数strcat(p,r)的功能是把字符数组p[]和r[]连接起来,此时字符数组p[]的有效字符长度为9,再执行strcpy(p+strlen(q),q)字符串复制函数,把字符数组q[]复制到字符数组p[]从p[3]开始到p[5]数组位置中,由于字符数组q[]中的内容为字符串“abc”复制时把字符串结束标志’\null’也复制到字符数组p[]中,这时字符函数strlen(p)返回字符数组p[]的有效字符长度为6。6、若有定义语句:char*s1="OK",*s2="ok";以下选项中,能够输出"OK"的语句是A、if(strcmp(s1,s2)!=0)puts(s1);B、if(strcmp(s1,s2)!=0)puts(s2);C、if(strcmp(s1,s2)==1)puts(s1);D、if(strcmp(s1,s2)==0)puts(s1);标准答案:A知识点解析:字符串比较函数strcmp的功能是对s1和s2所指字符串进行比较。如果s1s2,返回正数,所以对于本题来说,能够输出“OK”的语句是选项A所指的语句。7、有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母#include#includevoidfun(char*p){inti=0;while(p[i]){if(p[i]==’’&&islower(p[i-1]))p[i-1]=p[i-1]-’a’+’A’;i++;}}main(){chars1[100]="abcdEFG!";fun(s1);printf("%s\n",s1);}程序运行后的输出结果是A、AbCdEFg!B、abcdEFG!C、abcdEFg!D、aBcDEFG!标准答案:D知识点解析:函数fun(char*p)的功能是如果p[i]指向的字符为空宁符并且其前一个字符是小写字母,则把小写字母变成大字母,所以在主函数中,执行fun(s1)后,小写字母b,d都改成大字母。8、若有以下定义和语句charsl[10]="abcd!",*s2="\n123\\";printf("%d%d\n",strlen(s1),strlen(s2));则输出结果是A、105B、107C、55D、58标准答案:C知识点解析:本题要注意的是转义字符的问题,在字符串s2中,有两个转义字符,分别是回车换行符和反斜线。所以其字符串长度等于5。9、有以下程序#includeintfun(inta,intb){if(b==0)returna;elsereturn(fun(--a,--b));}main(){printf("%dha",fun(4,2));)程序的运行结果是A、1B、2C、3D、4标准答案:B知识点解析:由程序可知函数fun(inta,intb)是一个递归函数。所以当主函数中调用fun(4,2)时,其执行过程如下:fun(4,2)->fun(3,1)->fun(2,0),其返回值为2。10、下列选项中,能够满足“只要字符串s1等于字符串s2,则执行ST”要求的是A、if(s1==s2)ST;B、if(strcpy(s1,s2)==1)ST;C、if(strcmp(s2,s1)==0)ST;D、if(s1-s2==0)ST;标准答案:C知识点解析:在C语言中要对两个字符串的人小进行比较,就需要调用字符串比较函数strcmp(),如果这个函数的返回值等于0,说明两个字符串相等。11、以下叙述中正确的是A、函数名代表该函数的入口地址B、所有函数均不能接受函数名作为实参传入C、函数体中的语句不能出现对自己的调用D、如果函数带有参数,就不能调用自己标准答案:A知识点解析:函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项B错误的,在C语言中允许进行递归调用,即自己调用自己,选项C和选项D是错误的。12、以下叙述中正确的是A、函数既可以直接调用自己,也可以间接调用自己B、任何情况下都不能用函数名作为实参C、函数的递归调用不需要额外开销,所以效率很高D、简单递归不需要明确的结束递归的条件标准答案:A知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地递增或递减,可以应用这个转化过程使问题得到解决,同时为了有效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项C和选项D不正确。函数名表名了函数的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年企业员工派遣服务协议
- 2024南京住宅二手交易协议范本
- 2024年第三方商铺租赁协议
- 商铺租赁协议书2024年
- 2024年协议管理流程及岗位职责
- 2024年担保公司贷款协议格式
- 2024水利设施堤坝施工合作协议
- 2024年酒店管理承包协议格式
- 2024年二手物资买卖协议模板
- 2024年度软件定制开发服务协议模板
- 廉洁风险点及控制措施
- 2024年广西来宾产业投资集团有限公司招聘笔试参考题库含答案解析
- 项目管理甘特图课件
- 2024年甘肃省普通高中信息技术会考试题(含24套)
- 我国的武装力量课件
- 液化石油气瓶安全使用告知书范文
- 供应室护理责任组长竞聘
- 高中数学教师的专业发展路径
- LTC与铁三角从线索到回款
- 《旅游市场营销》课程教学设计
- 工程流体力学课后习题答案-(杜广生)
评论
0/150
提交评论