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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷26(共9套)(共67题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)“rb”(2)>(3)fwrite知识点解析:本题中函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.141480。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。标准答案:(1)t=1;(2)return(2*s);知识点解析:该题中函数功能是根据公式计算π值。从已给定源程序的main.主函数开始入手,通过键盘输入制定精度,然后通过“printf“\neps=%lf,Pi=%lf\n\n”,x,fun(x));”语句来调用fun函数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4,below中的数据应为:10、20、30、40。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:(1)该程序功能是返回低于平均分的人数。它的解题思路可以分解为以下几步:求总分一求平均分一逐个元素与平均分比较一统计低于平均分的人数。(2)从已给部分源程序的main主函数开始入手,核心函数fun(score,9,below)中的参数由题目可知,score存放着m个人的成绩,below存放低于平均分的分数。另外,根据score的定义,可知9为score数组中元素的个数,传给函数fun中的参数m。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includetypedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:",tt.num,);for(i=0;i<3;i++)printf("%5.1f",tt.score[i]);printf("\n");}/**********found**********/voidmodify(【1】*ss,floata){inti;for(i=0;i<3;i++)/**********found**********/ss->【2】*=a;}main(){STUstd={1,"Zhanghua",76.5,78.0,82.0};floata;printf("\nTheoriginalnumberandnameandscores:\n");show(std);printf("\nInputanumber:");scanf("%f",&a);/**********found**********/modify(【3】,a);printf("\nAresultofmodifying:\n");show(std);}标准答案:STUscore[i]&std知识点解析:第一空:由“voidmodify(___1___*ss,floata)”可知函数的第一个参数是个指针,又函数必须完成结构体各科成绩数据成员都乘以一个系数a,因此传入的参数是结构体指针,即第一空处应为“voidmodify(STU*ss,floata)”。第二空:对结构体各科成绩数据成员都乘以一个系数a,因此第二空处应为“ss->score[i]*=a;”。第三空:modify函数的第一个参数是指针,故调用该函数时第一个参数应该是变量std的地址“&std”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中fun函数的功能是:求出以下分数序列的前n项之和。2/1,3/2,5/3,8/5,13/8,21/13,……和值通过函数值返回main函数。例如,若n=5,则应输出:8.391667。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/***********found************/fun(intn){inta=2,b=1,c,k;doubles=0.0;for(k=1;k<=n;k++){s=s+1.0*a/b;/*********found***********/c=a;a+=b;b+=c;}return(s);}inain(){intn=5;printf("\nThevalueoffunctionis:%lf\n",fun(n));}标准答案:(1)doublefun(intn)(2)c=a;a+=b;b=c;知识点解析:(1)fun函数中的语句“doubles=0.0;"以及“return(s);"说明fun函数具有double返回值,所以应将“fun(intn)"改为“doublefun(intn)"。(2)根据题干中给出的公式可以推出每一项的特点,知道每一项的b值是前一项的c值,所以第二个标识下“b+=c;"改为"=c;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。二维数组中的数已在主函数中赋予。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineM3#defineN4voidfun(inttt[M][N],intpp[N]){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti,j,k,m,t[M][N],p[N];FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(m=0;m<10;m++){for(i=0;i标准答案:{inti,j,min,k;for(i=0;itt[j][i]){min=tt[j][i];k=j;}pp[i]=tt[k][i];}}知识点解析:进入fun函数,根据前面的分析:(1)依次访问每一列的元素。(2)在对每一列的访问过程中选出最小数。(3)将选出的最小数依次放到一维数组中。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*h,intx){SLIST*p,*q,*s;s=(SLIST*)malloc(sizeof(SLIST));/**********found**********/s->data=【1】;q=h;p=h->next;while(p!=NULL&&x>p->data){/**********found**********/q=【2】;p=p->next;}s->next=p;/**********found**********/q->next=【3】;}SLIST*creatlist(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}main(){SLIST*head;intx;inta[N]={11,12,15,18,19,22,25,29};head=creatlist(a);printf("\nThelistbeforeinserting:\n");outlist(head);printf("\nEnteranumber:");scanf("%d",&x);fun(head,x);printf("\nThelistafterinserting:\n");outlist(head);}标准答案:xps知识点解析:第一空:“s=(SLIST*)malloc(sizeof(SLIST));”显然s是一个新结点,第一空处是给新结点的数据域赋值x,因此第一空处应该是“s->data=x;”。第二空:循环“while(p!=NULL&&x>p->data)”是用来寻找插入位置,当链表没有结束且x仍然大于p所指向的结点的数据时,就不断的向链表后面搜索。在循环体内,语句“p=p->next;”是找到下一个结点的地址,变量q用来保存当前结点的地址,因此第二空处应该是“q=p;”。第三空:“s->next=p;”将s插入链表当中,s指向p,此时s结点已经指向需要插入位置的下一个节点,因此在需要插入s结点的位置的上一个结点需要指向s结点,故第三处应该为“q->next=s;”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动mmn函数,不得增行或删行。也不得更改程序的结构!#includevoidfun(char*s){inti,j;for(i=0,j=0;s[j]="\0";i++)if(s[i]>=’0’&&s[i]<=’9’)/**********found**********/s[j]=s[i];/**********found**********/s[j]=s[i];}main(){charitem[80];printf("\nEnterastring:");gets(item);printf("\n\nThestringis:\"%s\"\n",item);fun(item);printf("\n\nThestringofchangingis:\"%s\"\n",item);}标准答案:s[j++]=s[i];s[j]=’\0’;知识点解析:(1)第一个标识下面“for(i=0,j=0;s[i]!=’\0’;i++)”语句以i为循环参数对字符串s中的每一个字符进行循环判断,把是数字的字符从s[i]移到s[j]中,j指向s字符串的数组下标,j的初始值为0,且在循环过程中一直没有改变。显然违背题意。因此“s[j]=s[i];”应改为“s[j++]=s[i];”。其中“if(s[i]>=’0’&&s[i]<=’9’)”为判断条件,判断每一个元素是否为数字字符。(2)第二个标识下面,字符串的结束应以’\0’作为标志,所以程序中的“s[j]="\0";”语句应改为“s[j]=’\0’;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为:”ABCDEFGHIJK”,在t所指数组中的内容应是:”BDFHJ”。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstringS:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t[100];FILE*rf,*wf;inti;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);}标准答案:{inti,j=0;for(i=1;i知识点解析:(1)判断一个字符串中的某一字符下标i是否为偶数,可用“i%2==0”来判断;也可以从下标0开始,每次增2。(2)对串s中各个字符逐个进行考查,下标为奇数的字符就顺序放在新串t中,否则就不存放。(3)所有字符处理完后,记得在新串t的末尾加上结束符“’\0’”。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun,其功能是:计算并输出给定10个数的方差:例如,给定的10个数为15.0,19.0,16.0,15.0,18.0,12.0,15.0,11.0,10.0,16.0,输出为s=2.758623。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<math.h>doublefun(doublex[10]){inti;doubleavg=0.0;doublesum=0.0;doubleabs=0.0;doublesd;for(i=0;i<10;i++)【】;avg=sum/10;for(i=0;i<10;i++)【】;sd=【】;returnsd;}main(){doubles,x[10]={15.0,19.0,16.0,15.0,18.0,12.0,15.0,11.0,10.0,16.0};inti;printf("\nTheoriginaldatais:\n");for(i=0;i<10;i++)printf("%6.1f",x[i]);printf("\n\n");s=fun(x);printf("s=%f\n\n",s);}标准答案:sum+=x[i]abs+=(x[i]-avg)*(x[i]-avg)sqrt(abs/10)知识点解析:第一空:根据求方差的公式可知,首先要求出10个数的平均值,此处是利用for循环对10个数求累加和。第二空:使用for循环求出每个数与平均值之差的平方和。第三空:通过开方,求出10个数的方差,此处需要注意对库函数sqrt()的调用。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如,当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<conio.h>#include<stdio.h>#include<string.h>intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){p=s;r=t;while(*r)/**************found**************/if(*r==*p){r++;p++}elsebreak;/*************found**************/if(r==’\0’)n++;s++;}returnn;}main(){chars[100],t[100];intm;clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt:");scanf("%s",t);m=fun(s,t);printf("\nTheresultis:m=%d\n",m);}标准答案:(1)错误:if(*r==*p){r++;p++}正确:if(*r==*p){r++;p++;}(2)错误;if(r==’\0’)正确:if(*r==’\0’)知识点解析:从字符串s中找出于串t的方法是:从第一个字符开始,对字符串进行遍历;若s串的当前字符等于t串的第1个字符,两字符串的指针自动加1,继续比较下一个字符;若比较至字符串t的结尾,则跳出循环;若s串的字符和t串的字符不对应相同,则继续对下一个字符进行处理。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun(),它的功能是:根据以下公式求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。π/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…+1*2*3*…*n/(3*5*7*…*(2n+1))程序运行后,如果输入精度0.0005,则程序输出3.14…。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<math.h>doublefun(doubleeps){}main(){doublex;printf("Inputeps:");scanf("%1f",&x);printf("\neps=%1f,PI=%1f\n",x,fun(x));}标准答案:doublefun(doubleeps){doubles=1.0,s1=1.0;intn=1;while(s1>=eps)/*当某项大于精度要求时,继续求下—项*/{s1=s1*n/(2*n+1);/*求多项式的每—项*/s=s+s1;/*求和*/n++;}return2*s;}知识点解析:从第2项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s来表示总和后的结果。要注意s1,s的初值都为1.0,返回时要乘以2即return2*s,这跟数学思想有关系,学习者理解后就很简单了。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、标准答案:sum=0t[i][i]1知识点解析:第一空:由“returnsum;”可知sum变量记录了主对角线元素和反向对角线元素之和,第一空处是在使用sum变量之前对其初始化,因此第一空处应为“sum=0;”第二空:由第二个循环内“sum+=t[i][n-i-___3___];”可知,第一个循环是主对角元素和,第二个循环求反向对角线元素之和,因此第二空处应为“t[i][i]”。第三空:第二个循环求反向对角线元素之和,反向对角元素为t[i][n-i-1],故第三空应为“1”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:统计substr所指的字符串在str所指的字符串中出现的次数。例如,若字符串为aaas1kaaas,子字符串为as,则应输出2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:#includeintfun(char*str,char*substr){inti,j,k,num=0;//****found****for(i=0,str[i],i++)for(j=i,k=0;substr[k]==str[j];k++,i++)//****found****If(substr[k+1]==’\0’){num++;break;}returnnum;}voidmain(){charstr[80],substr[80];printf("Inputastring:");gets(str);printf("Inputasubstring:");gets(substr);printf("%d\n",fun(str,substr));}标准答案:(1)错误:for(i=0,str[i],i++)正确:for(i=0;str[i];i++)(2)错误:If(substr[k+1]=’\0’)正确:if(substr[k+1]==’\0’)知识点解析:for循环语句形式应为:for(表达式1;表达式2;表达式3),表达式之间是分号;C语言标识符区分大小写,所以条件句关键词if应小写。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入”abc4EFg”,则应输出”aBc4EFg”。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(char*ss){}main(){chartt[81];voidNONO();printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n\"%s\"",tt);fun(tt);printf("\nbecomes\n\"%s\"\n",tt);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;chartt[81];inti;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%s",tt);fun(tt);fprintf(wf,"%s\n",tt);}fclose(fp);fclose(wf);}标准答案:{inti;for(i=1;i=’a’&&ss[i]<=’z’)ss[i]-=32;}}知识点解析:(1)首先取得字符串中下标为奇数的字符。(2)判断奇数位置的字符是否为小写字母。(3)若(2)中的判断结果是小写字母,则对其进行转换。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3ksdf7。执行结果为:defadhkjsdf3537。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s){inti,j=0,k=0;chart1[80],t2[80];for(i=0;s[i]!=’\0’;i++)if(s[i]>=’0’&&s[i]<=’9’){/**********found**********/t2[j]=s[i];【1】;}elset1[k++]=s[i];t2[j]=0;t1[k]=0;/**********found**********/for(i=0;i标准答案:j++s[i]=t1[i]j知识点解析:第一空:如果s[i]是数字字符,则将s[i]保存在t2数组中,同时变量j自增,准备下次保存数字字符,故第一空处应为“j++”。第二空:语句“for(i=0;i二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#defineN80intfun(char*s,char*t){intn;char*p,*r;n=0;while(*s){p=s;/*********found**********/r==t;while(*r)if(*r==*p){r++;p++;}elsebreak;/*********found**********/if(*r=0)n++;s++;}returnn;}main(){chara[N],b[N];intm;printf("\nPleaseenterstringa:");gets(a);printf("\nPleaseentersubstringb:");gets(b);m=fun(a,b);printf("\nTheresultis:m=%d\n",m);}标准答案:r=t;if(*r==0)知识点解析:(1)根据“while(*r)if(*r==*p){r++;p++;}”可知该循环是比较r和p指向的字符串是否相等,本题的要求是计算字符串中含有某子串的数目,p指向的源字符串s,所以r应指向的是字符串t,故第一标识下应改成“r=t;”。(2)根据题意第二标识下“if(*r=0)”应该是判断r是否指向字符串尾,在C语言中,等于是用“==”标识,因此第二标识下应改成“if(*r==0)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),其功能是计算并输出下列多项式的值:F=1+1/1!+1/2!+1/3!+1/4!+…+1/m!例如,若主函数从键盘给键盘给m输入5,则输出为F=2.716667。注意:m的值要求大于1但不大于100。部分源程序给出如下。请勿改动main()函数与其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。试题程序:#includedoublefun(intm){}voidmain(){intm;doublef;FILE*out;printf("Inputm:");scanf("%d",&m);f=fun(m);printf("F=%f\n",f);out:fopen("outfile.dat","w");for(m=10;m<10;m++)fprintf(out,"%f\n",fun(m));fclose(out);}标准答案:doublet,s=1.0;//初始化求解多项式的值sinti,j;for(i=1;i<=m;i++)//m项多项式的循环{t=1.0;//阶乘求解初始化for(j=1;j<=i;j++)t*=j;s+=1.0/t;//求得多项式的和}returns;知识点解析:该程序的功能是计算并输出多项式的值。该题的解题思路是,根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。根据题干中给出的数列,推出每一项是阶乘的倒数,所以首先在循环中求得每一项的阶乘。其中阶乘的计算公式定义为:m!=m*(m一1)*(m一2)*…*1(m>1)m!=1(m=1)公式分为参数m是1和大于1的两种情况,例如,1的阶乘1!=1;5的阶乘5!=5*4*3*2*1。然后求得阶乘分之一的累加和。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是进行数字字符转换。若形参ch中是数字字符‘0’~‘9’,则‘0’转换成‘9’,‘1’转换成‘8’,‘2’转换成‘7’,……,‘9’转换成‘0’;若是其他字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)char(2)ch<=ˋ9ˊ(3)ˋ0ˊ知识点解析:函数fun的功能是进行数字字符转换,若是非数字字符则保持不变,因此首先对每个字符都必须先判断是否是数字字符,如果是数字字符则进行数字字符的转换。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:求三个数的最小公倍数。例如,给主函数中的变量x1、x2、x3分别输入15112,则输出结果应当是:330。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。标准答案:(1)intfun(intx,inty,intz)(2)returnj;知识点解析:本题中函数的功能是求三个数的最小公倍数。fun函数辛接收的值能同时被x、y、z除尽的最小数就是它们的最小公倍数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:87667589610l30l401980431451777则输出结果为:6,980注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k);”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是;删除字符数组中小于等于指定字符的字符,指定字符从键盘输入,结果仍保存例如,输入“abcdefghij”,指定字符为‘d’,则结果输出“defghij”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80voidfun(chars[],charch){inti=0,j=0;while(s[i]){if(sIii<ch)【】;else{【】i++;}}【】}main(){charstr[N],ch;clrscr();printf("\nInputastring:\n");gets(str);printf("\n***originalstring***\n");puts(str);printf("\nInputacharacter:\n");scanf("%c",&ch);fun(str,ch);printf("\n***newstring***\n");puts(str);}标准答案:i++s[j++]=s[i]s[j]=’\0’知识点解析:第一空:如果当前字符比指定字符小,则什么都不做,通过i++访问下一个字符。第二空,如果当前字符大于等于指定字符,则将它保存在字符数组s中。第三空:通过保存比指定字符大或相等的字符,来实现删除比指定字符小的字符。处理结束后,在字符串s最后要加上结束标记符‘\0’。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>intfun(int*x,inty){intt;/***************found***************/t=x;x=y;/***************found***************/return(y);}main(){inta=3,b=8;clrscr();printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}标准答案:(1)错误:t=x;x=y;正确:t=*X;*x=y;(2)错误;return(y);正确:return(t);知识点解析:本题考查指针变量做函数参数。同样,这里也涉及到一个“交换规则”,另外,根据题目主函数中fun()函数的调用方式说明fun()函数的参数应当为指针类型。交换结束后返回变量t。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN80voidfun(int*w,intp,intn){}main(){inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\nEnterp:");scanf("%d",&p);fun(a,p,n);printf("\nThedataaftermoving:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}标准答案:voidfun(int*w,intp,intn){inti,j,t;for(i=0;i<=p;i++)/*循环左移p+1次*/{t=w[0];for(j=1/j<n;j++)/*实现循环左移*/w[j-1]=w[j];w[j-1]=t;}}知识点解析:本题采用“循环左移”的算法(关于“循环左移”,我们在后面的试题中有详细的解释)。和我们在前面分析的稍有不同的是,一个是整型数组,一个是字符型数组。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#include<stdlib.h>voidWriteText(FILE*);voidReadText(FILE*);main(){FILE*fp;if((fp=fopen("myfile4.txt","w"))=NULL){printf("openfail!!in");exit(0);)WriteText(fp);fclose(fp);if((fp=fopen("myfile4.txt","r"))=NULL){printf("openfail!!in");exit(0);}ReadText(fp);fclose(fp);}/**********found**********/voidWriteText(FILE_1_){charstr[81];printf("\nEnterstringwith-1toend:\n");gets(str);while(strcmp(str,"-1")!=0){/**********found**********/fputs(_2_,fW);fputs("\n",fW);gets(str);)}voidReadText(FILE*fr){charstr[81];printf("\nReadfileandoutputtoscreen:\n");fgets(str,81,fr);while(!feof(fr)){/**********found**********/printf("%s",_3__);fgets(str,81,fr);}}标准答案:(1)*fw(2)str(3)str知识点解析:本题要求是把一段文本写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。主要是文件操作以及fputs和fwets函数的使用。第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,fputs("\n",fw)是将字符“\n”写入文件,可知fw是文件指针名,因此第一空处应该是voidwriteTextfFILE*fw)。第二空:while(strcmp(str"-1")!=0)循环的结束标志是str字符串等于“-1”时循环退出,如果str不等于“-1”,执行循环体内容:用fputs函数将str字符串写入文件。fputs函数的调用形式是:fputs(s,fp),其中s是指向字符串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此第二处应该是fputs(str,fw)。第三空:while(!feof(fr)循环的作用是不断读取文件直到到达文件尾,每次最多读81个,将读到的数据放在str字符串里,并用printf输出到屏幕,因此第三处应该是printf("%s",str)。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include<stdio.h>intfun(int*b){intk,al,a2,i=0;for(k=10;k<=55;k++){/**********found**********/a2=k/10;al=k-a2*10;if((k%3=0&&a2=5)||(k%3=0&&a1=5)){b[i]=k;i++;}}/**********found**********/returnk=}main(){inta[100],k,m;m=fun(a);printf(’’Theresultis:\n’’);for(k=0;k<m;k++)printf(’’%4d’’,a[k]);printf(’’\n’’);}标准答案:(1)a2=k/10;(2)returni;知识点解析:本题中函数的功能是从整数1到55之间,选出能被3整除且有一位上的数是5的数。其中,涉及整数个位的截取,以及判断某范围内能被3整除的判断条件表达式、循环。(1)第一标识下“a2=k/10;”是截取十位数,截取个位数是k%10,而截取十位数是k/10,因此第一标识下应改成“a2=k/10;”。(2)变量i是标识数组b的下标也就是数组的个数,题目中“returnk;”返回的是循环条件表达式中的变量,所以这单应该将“returnk;”改为“returni;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#include<stdio.h>voidfun(inta[],intn,int*max,int*d){}main(){inti,x[20],max,index,n=10;voidNON0();for(i=0;i<n;i++){x[i]=rand()%50;printf(’’%4d’’,x[i]);}printf(’’\n’’);fun(x,n,&max,&index);printf(’’Max=%5d,Index=%4d\n’’,max,index);NONOO;}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,x[201,max,index,n=10,j;fp=fopen(’’in.dat’’,’’r’’);wf=fopen(’’out.dat’’,’’w’’);for(i=0;i<10;i++){for(j=0;j<n;j++)fscanf(fp,’’%d,’’,&x[j]);fun(x,n,&max,&index);fprintf(wf,’’Max=%d,Index=%d\n’’,max,index);}fclose(fp);fclose(wf);}标准答案:inti;*max=a[0];*d=0;/*把数组的第1个元素值赋值给最大值变量*max*/for(i=l;i<n;i++)if(*max<a[i]){/*判断*max是否小于当前值*/*max=a[i];/*重新把最大值赋值给*max*/*d=i:/*记住下标*/}知识点解析:该程序功能是求一维整型数组元素中最大的值和它所在的下标。其中,求最大元素的方法:用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用max标记其当前最大值及其所在位置,从而找出最大值。进入fun函数,根据前面的分析:(1)*max指针变量首先指向数组a的第一个数据,同时将标志位*d初始值赋为0。(2)然后利用for循环对每一个当前数组数据与max标记的数据进行比较。(3)循环[f]将求得的最大数据a[i]赋值给*max,并将该数据项数组标志位赋给标志位*d。四、选择题(本题共40题,每题1.0分,共40分。)4、在关系代数运算中,有5种基本运算,它们是()。A、并(∪)、差(-)、交(∩)、除(÷)和笛卡儿积(×)B、并(∪)、差(-)、交(∩)、投影(π)和选择(σ)C、并(∪)、交(∩)、投影(π)、选择(σ)和笛卡儿积(×)D、并(∪)、差(-)、投影(π)、选择(σ)和笛卡儿积(×)标准答案:D知识点解析:并、差、笛卡儿积、投影和选择是5种基本的运算,其他运算即交、连接和除,均可以通过5种基本的运算来表达。5、在数据库系统的组织结构中,下列()映射把用户数据库与概念数据库联系了起来。A、外模式/模式B、内模式/外模式C、模式/内模式D、内模式/模式标准答案:A知识点解析:数据库有两层映像,即外模式/模式和模式/内模式映像。模式/内模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。6、下列关于线性链表的描述中,正确的是()。Ⅰ、只含有一个指针域来存放下一个元素地址Ⅱ、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)Ⅲ、结点由两部分组成数据域和指针域。A、仅Ⅰ、ⅡB、仅Ⅰ、ⅢC、仅Ⅱ、ⅢD、全部标准答案:D知识点解析:在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。7、下面关于数据库三级模式结构的叙述中,正确的是()。A、内模式可以有多个,外模式和模式只有一个B、外模式可以有多个,内模式和模式只有一个C、内模式只有一个,模式和外模式可以有多个D、模式只有一个,外模式和内模式可以有多个标准答案:B知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。8、设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为()。A、23,13,51,57,66,26,8l,69,76B、13,23,26,51,57,66,81,76,69C、23,13,51,57,26,66,81,69,76D、23,13,51,57,8l,26,66,69,76标准答案:A知识点解析:快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。9、下列哪一条不属于数据库设计的任务?()A、设计数据库应用结构B、设计数据库概论结构C、设计数据库逻辑结构D、设计数据库物理结构标准答案:A知识点解析:数据库设计工作量大而且过程复杂,既是一项数据库工程也是一项庞大的软件工程。考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数,据库的运行和维护。10、数据库技*的根本目标是()。A、数据存储B、数据共享C、数据查询D、数据管理标准答案:B知识点解析:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技*的根本目标是解决数据共享问题。11、需求分析阶段的任务是()。A、软件开发方法B、软件开发工具C、软件开发费用D、软件系统功能标准答案:D知识点解析:需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。12、关系数据库管理系统能实现的专门关系运算包括()。A、排序、索引、统计B、选择、投影、连接C、关联、更新、排序D、显示、打印、制表标准答案:B知识点解析:关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。13、数据管理技*发展的三个阶段中,()没有专门的软件对数据进行管理。Ⅰ.人工管理阶段Ⅱ.文件系统阶段Ⅲ.数据库阶段A、仅ⅠB、仅ⅢC、Ⅰ和ⅡD、Ⅱ和Ⅲ标准答案:A知识点解析:数据管理技*发展的三个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。14、下面说法正确的是()。A、一个C程序可以有多个主函数B、一个C语言的函数中只允许有一对花括号C、C程序的书写格式是自由的,一个语句可以写在一行上,也可以写在多行内D、在对C程序进行编译时,可以发现注释行中的拼写错误标准答案:C知识点解析:本题涉及C语言基本的3个知识点:①C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号;②C程序的注释部分仅仅是方便程序员阅读,提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释中的错误。15、下列不合法的用户标识符是()。A、j2_KEYB、DoubleC、4dD、_8_标准答案:C知识点解析:在C语言程序中,合法标识符的命名规则是:标识符可以由字*、数字和下划线组成,并且第一个字符必须是字*或下划线。16、以下4个选项,不能看作一条语句的是()。A、{;)B、intx=0,y=1,z=0;C、if(!a);D、if(b=0)m=1;n=2;标准答案:D知识点解析:if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号”{}”将几个语句括起来成为一个复合语句。选项D中没有将两个操作语句括起来,不能看作一条语句。17、设a和b均为int型变量,且a=6、b=11、c=3,则能使值为3的表达式是()。A、b%(c%4)B、b%(c-a%5)C、b%a-a%5D、(b%a)-(a%4)标准答案:D知识点解析:选项D括号内的运算分别是b%a=11%6=5和a%c=6%4=2,最后得到5.2=3。18、以下程序的输出结果是()。main(){inta=4,b=3,c=2,d=1;printf(”%d”,a>b?a:d>c?d:b);}A、1B、3C、2D、4标准答案:D知识点解析:本题首先判断a>b,当a>b时结果等于a,否则等于”d>c?d:b”,因为a>b,所以直接输出a的值,注:这里”a:d>c?d:b”是用来干扰考生的。19、阅读以下程序#include<stdio.h>main(){IntCase;floatprintF;printf(’’请输入2个数:’’);scanf(’’%d%f’’,&Case,&printF);printf(’’%d%f\n”,Case,printF);}以下说法正确的是()A、定义语句出错,Case是关键字,不能用作用户自定义标识符,printF不能用作用户白定义标识符。B、定义语句出错,Int无法被识别。C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出Case的值标准答案:B知识点解析:C语言是一种大小写敏感的语言,因此Int应为int,而CaseprintF则可以使用。20、若有定义:floatx=1.5;inta=1,b=3,c=2;则正确的SWitch语句是()。A、switch(x)B、switch((int)x);{case1.0:printf(’’*\n’’);{case1:printf(’’*\n’’);case2.0:printf(’’**\n’’);)case2:printf(’’**\n’’);}C、switch(a+b)D、switch(a+b){case1:print(’’*\n’’);{case1;printf(’’*\n’’);case2+1:printf(’’**\n’’);}casec:printf(’’**\n’’);}标准答案:C知识点解析:在C语言中,switch()后的一对圆括号中可以是整型表达式或字符表达式。case语句后面的常量表达式的类型必须与switch后圆括号中的表达式类型相同,各case语句标号的值应该互不相同。选项A中case后面的常量表达式为实型,所以不正确;选项D中case后面出现了变量表达式,所以选项D错误。21、有以下程序:main(){intk=33;printf(’’%d,%o,%x’’,k,k,k);}执行后的输出结果是()。A、33,033,0x21B、33,033,2lC、33,041,021D、33,41,21标准答案:D知识点解析:本题考查不同进制问的转换。printf输出函数中输出变量的格式,由输出格式符决定。题中”%o”格式符表示以八进制的形式输出;”%x”格式符表示以十六进制的形式输出。”33”的八进制和十六进制分别是41和21。22、当输入为’’Fool&Swalow’’时,下面程序的执行结果是()。#include<stdio.h>main()fcharc;while(c!=’?r1fc=getchar0;putchar(c);}}A、SwalowB、FoolC、Fool?D、?Swalow标准答案:C知识点解析:本程序是通过getchar()函数读入字符,并通过putchar()函数将字符逐个输出,当用户输入”?”时停止输出。23、下面程序段的输出结果是()。#include<stdio.h>main(){floatx=1.236547;printf(’’%f\n’’,(int)(x*1000+0.5)/(float)1000);}A、1.237000B、输出格式说明与输出项不匹配,输出无定值C、1.236000D、1.24标准答案:A知识点解析:本题中,(int)(x*1000+0.5)的结果为1237,(float)1000是将1000强制转换成float类型;整个表达式(int)(x*1000+0.5)/(float)1000的结果为1.237000,再以实数(6位小数)形式输出。24、若变量都已正确说明,则以下程序段()。#include<stdio.h>main(){inta=8;intb=6;printf(a>b?’’&&&a=%d’’;’’!!!b=%d’’,a,b);}A、输出为:&&&a=8B、输出为:!!!b=8C、输出为:&&&a=8111b=6D、全部错误标准答案:A知识点解析:本题考查printf的输出格式和条件表达式”?:”的使用。①printf函数输出时,”&&&%d\n”和”!!!%d\n”中的”&&&”和”…”都是直接输出。②条件表达式的基本格式为:a?b:c。其运算规则为:当a为非0时,整个表达式的值取b的值,当a为0时,整个表达式取c的值。printf函数中如果在格式说明符之前插入任何字符都将原样输出。本题中a>b为真,所以返同”&&&a=%d”。25、语句’’printf(’’a\bhow\’are\’y\\\bou\n’’);’’的输出结果是()。A、a\bhow\’are\’V\\boUB、a\bhow\’are\’y\bouC、how’are’youD、ahow’are’y\bou标准答案:C知识点解析:”\b”格式符表示退格,功能是将它后而的字*把它前面的字*覆盖,导致”\b”格式符前面的字*不能输出;”\’“格式符表示输出单引号字符;”∥”格式符表示输出反斜线字符。26、下面程序的运行结果是()。#include<stdio.h>main(){inti;for(i=l;i<=5;i++){if(i%2)printf(’’*’’);elseprintf(’’*’’);}}A、*#*#*B、#*#*#*C、*#*#D、#*#*标准答案:A知识点解析:分析程序可知,程序循环5次,然后利用if语句决定每次循环时输出的字符。当i为奇数时,i%2=1,if(i%2)为真,输出”∥;当i为偶数时,i%2=0,if(i%2)为假,执行else语句,输出“#”,所以当i取1、3、5值时输出”’’,当i取2、4值时输出“#”。27、以下关于return语句的叙述中不正确的是()。A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、如果一个函数有多个retum语句,那么不论运行到哪一个return语句,该函数将结束D、没有retum语句的自定义函数在执行完最后一条语句时返回到调用处标准答案:A知识点解析:retum语句主要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条retum语句返回函数的值,也呵以不包含retum语句。28、有以下程序:main(){intn=0;do{n++;printf(’’%d\n’’,n);}while(n<=3);}程序的输出结果是()。A、1B、1C、1D、1.22233e+006标准答案:C知识点解析:本题考查do…while循环。在do…while构成的循环体中,总是先执行一次循环体,然后再求表达式的值。当执行完第二次循环时,得到n=3,while循环表达式仍然成立,接着执行直到n=4,表达式不成立,跳出循环,结束程序。29、下面程序的运行结果是()。#include<stdio.h>voiddel(char*s){inti,j;char*a:a=s;for(i=0,j=0;a[i]!=’\0’;i++){if(a[i]>=’0’&&a[i]<=’9’){s[j]=a[i];j++;}s[j]=’\0’;}}main(){chars[]=’’aa89gggh’’;del(s);printf(’’\n%s’’,s);}A、aaB、89C、ggghD、aa89gggh标准答案:B知识点解析:本题中del(char*s)函数实现的功能是:逐个读入s数组中的字符,如果遇到数字,则将其重新存在s中,遇到非数字字符则跳过。所以最后输出的应该是字符串s中的所有数字。30、下列说法不正确的是A、int*fun();—fun是一个返回int指针的函数B、int(*fun)();—fun是一个返回int指针的函数C、int(*carray[5])0;—array是一个有5个元素的数组,每一个元素都是一个函数指针,指向一个返回int的函数。D、int(*fun(int))(int);—fun是带有一个int参数的函数,返回值是一个函数指针,这个指针指向带有一个int参数并返回int的函数。标准答案:B知识点解析:该函数中fun是一个函数指针。指向一个返回int的函数。31、下列程序的输出结果是()。#include<stdio.h>voidfun(int*a,int*b){int*k;k=a;a:b;b=k;)main(){inta=l,b=2,*x=&a,*y=&b;fun(x,y);printf(’’%d%d’’,a,b);}A、21B、12C、编译出错D、0标准答案:B知识点解析:本题考查函数调用时的参数传递。分析题目可知‰函数的形参是指向实参的指针,但main()函数中调用fun()函数时,实参是指针变量x、y(分别为指向a和b的指针),a、b的值在函数调用前后未发生变化,因而a=1,b=2,即输出12。32、下列二维数组初始化语句中,正确且与语句inta[][3]={1,2,3,4,5)等价的是()。A、inta[2];{{1,2,3},{4,5}};B、inta[][3]={1,2,3,4,5,0};C、inta[][3]={{1,0),{2,0),{3,0}};D、inta[2][]{{1,2,3},{4,5,6}};标准答案:B知识点解析:此题考查的是二维数组的初始化。题干中数组a的第二个下标为3,由此可知数组a是一个2行3列的数组,初始化时未赋初值的元素的值自动为0,所以与选项B是等价的,最后一个元素的值为0。33、有以下字符串,说明表达式strlen(s)值的是()。chars[10]:{’a’,’\n’,’a’,’b’,’\t’,’c’};A、10B、1C、6D、7标准答案:C知识点解析:strlen(s)返回s字符串中字符的个数,若s是一个数组,则返回数组元素的个数。34、有以下程序:#include<stdio.h>voidfun(char*c,intd){*c=*c+l;d+=1

温馨提示

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

评论

0/150

提交评论