全国计算机二级C语言考试_第1页
全国计算机二级C语言考试_第2页
全国计算机二级C语言考试_第3页
全国计算机二级C语言考试_第4页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

1、 给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN8typedefstruct1st{intdata;structlist*next;}SLIST;SLIST*creatlist(char*);voidoutlist(SLIST*);intfun(SLIST*h,charch){SLIST*p;intn=0;p=h->next;/*******************/while(p!= 1 ){ n++;/**********found**********/if(p->data=ch)return2;elsep=p->next;}return0;}main(){SLIST*head;intk;charch;chara[N]={'m7p\,gVal;wVxVrVd,);head=creatlist(a);outlist(head);printf(HEnteraletter:M);scanf("%c",&ch);/*******************/k=fun(_3-);if(k==0) printf("\nNotfound!\n");else printf("Thesequencenumberis:%d\n",k);}第1处:内容为[while(p!=0)]第2处:内容为[if(p->data==ch)returnn;]第3处:内容为[k=fun(head,ch);]2、给定程序modi.c中,函数fun的功能是:给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实际个数。例如,n=8时输入:193.199、195.673、195.757,196.051、196.092、196.596、196.579,196,763所得平均值为:195.838745,在平均值以上的实数个数应为:5请改正程序中的错误,使它能得出正确结果。#include<conio.h>#include<stdio.h>#include〈windows.h>intfun(floatx[],intn)/************found************/intj,c=0;floatxa=0.0;for(j=0;j<n;j++)xa+=x|j]/n;printf(,'ave=%f\n,',xa);for(j=0;j<n;j++)/************found************/if(x[j]=>xa)C++;returnc;}main(){floatx[100]=(193.199f,l95.673f,195.757f,l96.051f,196.092f,l96.596f,196.579f,196.763f};system(nclsn);printf(,'%d\n,',fun(x,8));第1处:内容为[{intj,c=0;floatxa=0.0;]第2处:内容为[if(x[j]>=xa)]3、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h一指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****abcdefg********。在编写函数时,不得使用C语言提供的字符串函数。voidfun(char*a,char*h,char*p){charb[81],*x;inti=0,j=0;while(x<h){b[j]=*x;x++;j++;}while(h<=p)if(*h!=*){b[j]=*h;j++;h++;}elseh++;P++;whilefp){b[j]=*p;j++;p++;}b|j]='\Ol;j=O;while(b[j]){a[i]=b[j];i++;j++;)a[i]=W;第2题1、给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN8typedefstruct1st{intdata;structlist*next;}SLIST;SLIST*creatlist(int*a);voidoutlist(SLIST*);voidfun(SLIST*h,int*n){SLIST*p;/**********found**********/—1—=0;p=h->next;while(p){(*n)++;/*******************/P=p-> 2 ;main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48),num;head=creatlist(a);outlist(head);/********* nd字*********/fun( 3 ,&num);printf("\nnumber=%d\nH,num);}第1处:内容为K*n)=0;]第2处:内容为[p=p->next;]第3处:内容为[fun(head,&num);]2、给定程序modi.c中,fun函数的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确结果。fun(intn,int*a){inti,j,p,t;for(j=O;j<n-l;j++){P=j;/************ ************/for(i=j+1;i<n-l;i++)if(a[pj>a[i])/************found************/t=i;if(p!=j){t=a[jj;a[j]=alpj;a[p]=t;}})第1处:内容为[for(i=j+l;i<n;i++)]第2处:内容为[p=i;]3、请编写一个函数fun,它的功能是:根据以下公式求n的值(要求满足精度0.0005,即某项小于X 1 1X2 1X2X3 1X2X3X4 lX2X-Xn—=1+—+ + + + + 2 3 3X5 3X5X7 3X5X7X9 3X5X-X(2n+l)0.0005时停止迭代): 程序运行后,如果输入精度0.0005,则程序输出为3.140578。doublefun(doubleeps){intn=fl;doubledown=l,up=1;doubleone,pi=0;one=(double)up/(double)down;while(one>=eps){pi+=one;n++;up=up*n;down=down*(2*n+1);one=(double)up/(double)down;}returnpi*2;)第3题1、给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域之和作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN8typedefstruct1st{intdata;structlist*next;}SLIST;SLIST*creatlist(int*);voidoutlist(SLIST*);intfun(SLIST*h){SLIST*p; ints=0;p=h->next;while(p)(/**********found**********/s+=p-> 1 ;/**********found**********/p=p-> 2 ;)returns;)main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48);head=creatlist(a);outlist(head);

printf(',\nsum=%d\nn,fun( 3printf(',\nsum=%d\nn,fun( 3 ));elsereturnt;第2处:内容为[p=p->next;]笫3处:内容为[printf("\nsum=%d\n",fun(head));]2、给定程序modi.c中,函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序时每五个元素求一个平均值,并将这些值依次存放在W所指的数组中,若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。#defineSIZE20fun(double*s,double*w){intkjdoubleaim;for(k=2,i=0;i<SIZE;i++){s[i]=k;k+=2;}/************ ************/sun=0.0;for(k=0,i=0;i<SIZE;i++){sum+=s[i];/************found************/if(i+l%5==0){ w[k]=sum/5;sum=0;k4-+;})returnk;)第1处:内容为[sum=0.0;]第2处:内容为[if((i+l)%5==0)]3、请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入beijing<CR>shanghai<CR>(vCR>为回车键)函数将返回shanghaiochar*fun(char*s,char*t){intfirst=0,second=0;char*p,*q;p=s;q=t;while(*p++!='0')first++;while(*q++!=^1)second++;if(first==second)return$elseif(first>second)return$)第4题1、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include <stdio.h>#include <string.h>#defineN8typedefstruct{charnum[10];intyear,month,day;}STU;/**********found**********/ 1 fin(STU*std,(har*num){inti;STUa={*'*',9999,99,99);for(i=0;i<N;i++)/**********found**********/if(strcmp( 2 ,num)==0)/**********fQund**********/return( 3 );returna;)main(){STUstd[N]={{"HllllM984,2,15},{“222222”,1983,9,21},{“333333*1984,9,1},{"444444",1983,7,15},{“555555”,1984,9,28},{“666666”[983,1115},{“777777”,1983,6,22},{“888888”[984,8,19}};STUp; charn[10]="666666n;p=fun(std,n);if(p.num[0]==0)printf(u\nNotfound!\nn);else{printf(M\nSucceed!\n");printf(u%s %d-%d-%d\n",p.num,p.year,p.month,p.day);))第1处:内容为[STU£in(STU*std,char*num)]第2处:内容为[if(strcmp(std「].num,num)==O)]第3处:内容为[return(std[i])J2^ 给定程序modi.c中,函数fun的功能是:从s所指字符串中,找出t所指子串的个数作为函数值返回。例如,当s所指字符串中的内容为:"abcdabfab",t所指字符串的内容为:“ab”,则函数返回整数3。#include<conio.h>#include<stdio.h>#include<string.h>#include<windows.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;/************************/if(r=>\O')n++;s++;}returnn;}main()chars[100],t[100];intm;system(HclsM);printf("\nPleaseenterstringS:");scanf(,,%s,',s);printf(u\nPleaseentersubstringm=fun(s,t);printf(n\nTheresultis:m=%d\n,',m);)第1处:内容为[if(*==*p){r++;p++;}]第2处:内容为[if(*r==W)]3、规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串最前面连续的*号不得多于n个:若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****:若n的值为8,则字符串中的内容仍为:*******A*bc*DEF*G****。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。voidfun(char*a,intn){charb[81];inti=O,j=O,s=O,k;while(a[i]==**){s++;i++;}if(s>n){for(c=0;k<n;k++){bU]='*';j++;)while(a[i]){b|j]=a[i];j++;i++;)如]=、0';i=0;j=0;while(b|jl){a[i]=b[j];i++;j++;}a[i]=Vr;)}第5题1、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。#include<stdio.h>#defineN8typedefstruct{intnum;intyear,month,day;}STU;int£in(STU*std,STU*k,htyear){inti,n=O;for(i=0;i<N;i++)/**********found**********/if( 1 ==year)/********* nd**********/k[n++]=__2_;/********* nd**********/return( 3 );)main(){STUstd[N]={{1,1984,2,15},{2J983,9,21},{3,1984,9,1},{4,1983,7,15),{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19});STUk[N]; inti,n,year;printf(HEnterayear:");scanf("%du,&year);n=fun(std,k,year);if(n==0)printf("\nNopersonwasbomin%d\n",year);else{printf("\nThesepersonswerebomin%d\nH,year);for(i=0;i<n;i++)printf(H%d%d-%d-%d\n",k[i].num,k[i].year,k[i].month,k[i].day);})第1处:内容为[if(std[i].year==year)]第2处:内容为[k[n++]=std[i];]第3处:内容为[return(n);]2,给定程序modi.c中,函数fun的功能是:将十进制正整数m转换成k(2Wk<9)进制数,并按位输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)«#include<conio.h>#inciude<stdio.h>#include<windows.h>voidfun(intm,intk){intaa[20],i;for(i=0;m;i++)(/************found************/aa[i]=m/k;m/=k;)/************found************/for(;i;i-)printf(H%dH,aa[i]);)main(){intb,n;system(nclsn);printf("\nPleaseenteranumberandabase:\nH);scanf(w%d%dH,&n,&b);fun(n,b);printf(,)\nM);)第1处:内容为[aa[i]=m%k;]第2处:内容为[for(i=i-l;i>=0;i—)]3、 请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80,floatfun(foat*a,intn){inti;floataverage;doublesum=0;for(i=0;i<n;i-H-)sum+=a[i];average=(float)sum/n;returnaverage;第6题1、给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以•个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include<stdio.h>typedefstruct{intnum;charname[9J;floatscore[3];}STU;void«how(STUtt){inti;printf("%d%s:'\tt.num,);for(i=0;i<3;i++)printf(,,%5.1f,,tt.score[i]);printf(H\nH);)/*********字found**********/voidmodify( 1 *ss,floata){inti;for(i=0;i<3;i++)/*********字found**********/ss-> 2 *=a;)main(){STUstd={1,"ZhanghuaM,76.5,78.0,82.0Jfloata;printf("\nTheoriginalnumberandnameandscores:\n");show(std);printf("\nlnputanunber: ");scanf(M%f\&a);/*******************/modify(-3—,a);printf("\nAresultofmodifying:\nH);show(std);}第1处:内容为[voidmxlify(STU*ss,floata)]第2处作:内容为[ss->score[i]*=a;J第3处:内容为[modify(&std,a);]2^给定程序modi.c中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCH码升序排序后输出。例如:若输入:edcba,则应输出:abcde0#defineM20voidfun(chart[])chare;inti,j;/************found************/for(i=strlen(t);i;i-)for(j=0;j<i;j++)/*********** nd************/

if(tU]<tU+U){c=t[j];tUMU+l];t[j+l]=c;}|第1处:内容为[for(i=strlen(t)-l;i;i--)]第2处:内容为3、 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当是:78.875.voidfun(STREC*p){inti;doubleaver=0; /*将平均分赋初值0*/for仁0;ivN;i++){aver=aver+(*p).s[i];}/*求和*/(*p).ave=aver/N; /*计算平均值*/)第7题给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按num成员进行升序排列。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include<stdio.h>typedefstruct{intnum;charname[10];}PERSON;/*******************/voidfun(PERSON_1—)/**********found**********/_2_temp;if(std[O].num>std[1].num){temp=std[0];std[O]=std[lJ;if(std[0].num>std[2].num){temp=std[0];std[0]=std[2J;if(std[1].num>std[2].num){temp=std[l];std[l]=std[2J;std[1std[1J=temp;}std[2]=temp;}std[2J=temp;}main()PERSONstd[]={5,,,Zhanghu",2,,'WangLi',,6,,,LinMin,,);inti;/********* **********/fun(一3-);printf(H\nTheresultis:\nM);for(i=0;i<3;i++)printf(M%d,%s\n,',std[i].num,std[i].name);)第1处:内容为[void£in(PERSONstd[3])]第2处:内容为[PERSONtemp;]第3处:内容为[fun(std);]2、给定程序modi.c中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值为3,b中的值原为8,程序运行后a中的值为8,b中的值为3。intfun(int*x,inty)intt;/************found************/t=x;x=y;/************found************/return(y);)main()inta=3,b=8;system(HclsM);printf(H%d%d\n",a,b);b=fun(&a,b);printf("%d%d\nM,a,b);}第1处:内容为[t=*x;*x=y;]第2处:内容为[returnt;]3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在h所指的数组中,高于等于平均分的学生人数通过形参传回,平均分通过函数值返回。doublefun(STREC*a,STREC*b,int*n){inti,j;doubleaver=0;*n=0;for(i=0;i<N;i++)aver=aver+a[i].s;aver=aver/N;for(i=0;i<N;i++)if(a[i].s>=aver){b[*n].s=a[i].s;for(j=0;j<10;j++)b[*n].num[j]=a[i].num[j];*n=*n+l;return^ver);

}第8题1、给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include<stdio.h>typedefstruct{charname[10];intage;}STD;{STDmax;intSTD£in(STDstd[],htn)/**********found,{STDmax;intmax= 1 ;for(i=l;i<n;i++)/*******************/if(max.age< 2 )max=std[i];returnmax;}main(){ STDstd[5]={MaaaM7Jbbb”,16m8;'ddd",l7,Heeen,15};STDmax;max=fun(std,5);printf("\nTheresult:\n");/**********f^)und**********/printf(n\nName:%s,Age: %d\n”, 3 ,max.age);)第1处:内容为[max=*std;]第2处:内容为[if(max.agevstd[i].age)max=std[i];]第3处:内容为[printf("\nName:%s,Age:%d\n';,max.age);]给定程序modi.c中,函数fun的功能是:计算正整数num的各位上的数字之积,例如,若输入:252,则输出应该是:20o若输入:202,则输出应该是:0o#include<stdio.h>#inciude<conio.h>#include<windows.h>longfun(longnum){/************found************/longk;do{k*=num%10;/************ ************/num\=10;}while(num);return(k);)main(){longn;systemC^cls");printf(HPleaseenteranumber:n);scanf(H%ldn,&n);printf(,,\n%ld\n,,,fun(n));}第1处:内容为[longk=l;]第2处:内容为[num/=10;]3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。voidfun(STRECa[]){inti,j,p,t,k;charh;for(i=0;i<N;i++){P=i;forj=i+l;j<N;j++) /*按分数从高到低进行排序*/if(a[p].s<a[j].s)p=j;if(p!=i){t=a[p].s;a[p].s=a[i].s;a[i].s=t;for(k=0;k<10;k++){h=a[p].num[kj;a[p].num[k]=a[i].num[k];a[i].num[k]=h;}}}第9题1、给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按长度由短到长进行排序。ss所指字符串数组中共有M个字符串,且串长<N。请在程序的下划线处填入正确的内容并把F划线删除,使程序得出正确的结果。#define M#define N#define M#define Nvoidfin(char{inti,jk,20(*ss)[N])函];chart[N];for(i=0;i<M;i++)n[i]=strlen(ss[i]);for(i=0;i++){k=i;/**********fQund**********/for(j=—1—;j<M;j++)/**********found**********/if(n[k]>n[j])_2_;if(k!=i){strcpy(t,ss[i]);strcpy(ss[i],ss[k]);/*********nd**********/strcpy(ss[k], 3 );n[k]=n[i];

}}}第1处:内容为[for(j=i+l;j<M;j++)]第2处:内容为[if(n[k]>n[j])k=j;J第3处:内容为[strcpy(ss[k],t);]2、给定程序modi.c中,函数fun的功能是:将字符串中的内容按逆序输出,但不改变字符串中的内容。例如,若字符串为abed,则应输出:deba。请改正程序中的错误,使它能得出正确结果.#include<stdio.h>/************[ound************/fun(chara){if(*a){fun(a+l);/************[ound************/printf(H%cM*a);}}main(){charj[10]=,'abcdn;primf("处理前字符串=%s\n处理后字符串=",s);fun(s);printf(H\n");}第1处:内容为[fun(char*a)]第2处:内容为[printf(”%c”,*a);]3、函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的上位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12。调用该函数后,c=2415。voidfun(inta,intb,long*c)inta_up,a_low,b_up,b_low;a_up=a/10;ajow=a%10;b_up=b/10;b」ow二b%10;*c=bjow*1000+a_up*100+b_up*10+a_low;)第10题1、给定程序中,函数fun的功能是:求出形参SS所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符用数组中共有M个字符串,且串长<N。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineM5#defineN20voidfin(char(*ss)[NJ){inti,j,k=0,n,m,len;for(i=0;i<M;i++){len=strlen(ss[i]);if(i=0)n=len;if(len>n){/**********found**********/n=len;))for(i=0;i<M;i++)1一1一=i;{m=n;len=strlen(ss[i]);/萃*********^^und**********/for(j=—2—;j>=0;j--)ss[i][m-]=ss[i]|j];for(j=0;j<n-len;j++)/*********¥found**********/3 ='**;})第1处:内容为[n=len;k=i;J第2处:内容为[for(j=len;j>=0;j・・)]第3处:内容为[ss[i][j]='*';]2、给定程序modi.c中,函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中x和y的值不等,z和y的值不等。例如,当x的值为9、y的值为11、z的值为15时,函数值为-3.50。#include<stdio.h>#include<math.h>#defineFU(m,n)(m/n)floatfun(floata,floatb,floatc){floatxalue;/x***********found************/value=FU(a+b,a-b)+FU(c+b,c-b);/***********ound************/Return(Value);)main(){floatx,yz,sum;printf("Inputxyz:");scanf("%f%f%f',&x,&y,&z);printf("x=%f,y=%f,z=%f\nH,x,y,z);if(x==ylly==z){printf(nDataerror!\nn);}sum=fun(x,y,z);printf("Theresultis:%5.2f\nn,sum);)第1处:内容为[value=FU((a+b),(a・b))+FU((c+b),(c・b));]第2处:内容为[retum(value);]3、学生的记录由学号和成绩组成,N名学生的数据上在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)oSTRECfun(STREC*a,char*b){inti,f=O;STRECp;p=a[O];for(i=0;i<N;i++)if(strcmp(a[i].num,b)==O){p=a[i];f=1;)iff==0){p.num[0]='\0';ps=-l;}returnp;第11题1、给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据从小到大顺序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排列。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN8typedefstruct1st{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 ;}第1处:内容为[s->data=x;]第2处:内容为[q=p;]第3处:内容为[q->next=s;]2、N个有序整数数列已放在•维数组中,给定程序modi.c中,函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowvhigh),施把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中:反之,下一次的查找范围落在中间位置之前的元素中。直到low>high,查找结束。请改正程序中的错误,使它能得出正确结果。#defineN10/************found************/voidfun(inta[],intm){intbw=0,high=N-1,mid;while(low<=high){mid=(low+high)/2;if(m<a[mid])high=mid-l;/************found************/elseif(m>=a[mid])low=mid+l;elsereturn(mid);)retum(-l);)第1处:内容为[fun(inta[],intm)]第2处:内容为[elseif(m>a[mid])]3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在h所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。intfun(STREC*a,STREC*b,h){inti,j=O,k,f=O;for(i=0;i<N;i++)if((a[i].s>=l)&&(a[i].s<=h)){for(k=0;k<10;k++)b[j].num[k]=a[i].num[k];b[j].s=a[i].s;j++;f++;)return(f);第12题1、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回

值为1,失败时返回值为Oo在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。intfun(char*source,char*target)charch;/**********,ound**********/if((fs=fopen(source, 1 ))==NULL)return0;if((ft=fopen(target,,,w,,))==NULL)return0;printf("\nThedatainfile:\n");ch=fgetc(fs);/**********found字*********/while(!feof( 2 )){putchar(ch);/*******************/fputc(ch, 3 );ch=fgetc(fs);fclose(fs);fclose(ft);printf(n\n\nM);return1;第1第2第1第2第32、处:处:处:内容为[while(!feof(fs))]内容为[fputc(ch,ft);]给定程序modi.c中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值,从第1项起,斐波拉契级数序列为:1、1、2、3、5,8、13、21、……例如,若给n输入7,该项的斐波拉契级数值为:13o#include<stdio.h>longfun(intg)/************found************/switch(g);{case0:retum0;/***********************/case1;case2:retum1;}return(fun(g-1)+fun(g-2));}main(){longfb;intn;printf(nInputn:,,);scanf("%d,',&n);printf(',n=%d\n',,n);fib=fun(n);printf(,'fib=%d\n\n,,,fib);第1处:内容为[switch(g)]第2处:内容为[casel:case2:retum1;]3、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,72,64,87;则平均分应当是:78.625odoublefun(STREC*h){STREC*p;doubleaver=0;p=h->next;while(p!=0){aver=aver+p->s;p=p->next;)aver=aver/N;returnaver;)第13题1、给定程序中,函数fun的功能是:将自然数1〜10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。intfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,W"))==NULL)return0;for(i=l;i<=10;i++)/**********tound**********/fprintf( 1 ,”%d%f\n",i,sqrt((double)i));printf(n\nSucceed!\nn);/**********found**********/2 :printf("\nThedatainfile:\nM);/**********j'iound**********/if((fp=fopen(—3—Jr"))==NULL)return0;fscanf(fp,"%d%f;&n,&x);while(!feof(fp)){ printf(H%d %f\nH,n,x);fscanf(fp;,%d%f;&n,&x);}fclose(fp);return1;)main(){charfname[]="myfile3.txtM;fun(fname);)第1处:内容为[fprintf(fp,"%d%f\n”,i,sqrt((double)i));]第2处:内容为[fclose(fp);]第3处:内容为[if((fp二fopen(fname,T))==NULL)]2、给定程序modi.c中,函数fun的功能是:统计子字符串substr在字符串str中出现的次数。例如,若字符串为aaasIkaaas,子字符串为as,则应输出2。fun(char*str,char*substr){inti,j,k,num=0;/************[ound************/for(i=0,str[i],i++)for(j=i,k=0;substr[k]==str[j];k++j++)/************found************/If(substr[k+1]==AO'){num++;break;}returnnum;)第1处:内容为[for(i=0;str[i];i++)]第2处:内容为[if(substr[k+l]==V))]3、请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n22)位的整数,函数求出w的低n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;w值为923,则函数返回23o解法一:unsignedfun(unsignedw){inti,j,sqr=1;unsignedresult;char*str,ch[5];str=ch;for(i=1;(i<6)&&(w>=1);i++){str[i-1]=,0,+w%10;w/=10;}str[i-1]=0;result=str[O]-'O';for(j=l;j<i-2;j++){sqr*=10;result+=(str[j]-'0')*sqr;)returnresult;}解法二:unsignedfun(unsignedw){if(w>=10000)returnw%10000;if(w>=1000)returnw%1000;if(w>=100)returnw%100;returnw%10;)第14题1、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1(独立一行)作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include<stdlib.h>voidWriteText(FILE*);voidReadText(FILE*);main(){HLE*fp;if((fp=fopen(Hmyfile4.txt,V,wM))=NULL){printf(nopenfail!!\nM);ecit(O);}WriteText(fp);fclose(fp);if((fp=fopen("myfile4.txt,,;'r',))==NULL){printf(Hopenfail!!\nH);ait(0);}ReadText(fp);fclose(fp);}/**********fQund**********/voidWriteText(FILE—1_){charstr[81];printf("\nEnterstringwith-1toend:\nH);gets(str);while(strcmp(str,"-r,)!=0){/**********found**********/fputs( 2 ,fw);fputs(H\nH,fw);gets(str);))voidReadText(FILE*fr){charstr[81];printf(,,\nReadfileandoutputtoscreen:\n");fgets(str,81,fr);while(!feof(fr)){/**********fQund**********/printf("%s",—3_);fgets(str,81,fr);))第1处:内容为[voidWriteText(FILE*fw)]第2处:内容为[fputs(str,fw);fputs("\n",fw);]第3处:内容为[printf("%s",str);]给定程序modi.c中,函数fun的功能是:从字符串s中删除所有小写字母c.#include<stdio.h>voidfun(char*s){intij;for(i=j=0;s[i]!='\0';i++)if(s[i]!='c,)/************found************/s|j]=s[i];/************[ound************/s[i]=\0';}main(){char$80];printf(nEnterairing:M);gets(s);printf(uTheoiginaliring:M);puts(s);fun(s);printf(HThestringafterdeleted:,,);puts(s);printf(H\n\nH);}第1处:内容为[sU++]=s[i];]第2处:内容为[sUkxr;]3、请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最大元素在数组中的下标,用k返回。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980intfun(int*s,intt,int*k){intmax_integer=0;inti=0;max_integer=s[0];for(i=0;i<t;i=i+l){if(max_integer<s[i]){max_integer=s[i];*k=i;}}return*k;}第15题1、给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN5typedefstruct{intnum;charname[10];chartel[10];JSTYPE;voidcheck();/********* nd**********/intfun( 1 *std)/**********found**********/_2_*fp;inti;if((fp=fopen(',myfile5.dat,,;,wb',))==NULL)retum(O);printf("\nOulpuldatatofile!\nH);for(i=0;i<N;i++)/**********found**********/fwrite(&std[i],sizeof(STYPE),1,—3_);fclose(fp);return(1);)第1处作:内容为[intfun(STYPE*std)]第2处:内容为[FILE*fp;inti;]第3处:内容为[fwrite(&std[i],sizeof(STYPE),1,fp);]2、给定程序modi.c中,函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数为:55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0。请改正程序中的错误,使它能得出正确结果。#include<stdio.h>voidfun(float*p,float*q,float*s)/************tound************/float*k;if(*p<*q){ k=*p;*p=*q;*q=k;}/************found************/if(*s<*p){ k=*s;*s=*p;*p=k;}if(*q<*s){ k=*q;*q=*s;*s=k;})main(){floatab,c;printf(nInputabe:");£anf(”%f%f%『,&a,&b,&c);printf(Ha=%4.1f,b=%4.1f,c=%4.1f\n\nn,a,b,c);fun(&a,&b,&c);printf(Ha=%4.1f,b=%4.1f,c=%4.1An\n'\a,b,c);第1处:内容为[floatk;]第2处:内容为[if(*s>*p)]3、请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234”,则函数把它转换为整数值-1234。longfun(char*p)longn=0;intflag=O;while(*p!=W){if(*p=='J)flag=l;elseif(*p=,+,)flag=O;elsen=n*10+(*p-'0');p++;)if(flag=l)n=-n;returnn;}第16题1、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN8typedefstruct1st{intdata;structlist*next;}SLIST;voidfun(SLIST*p){SLIST*t,*s;t=p->next;s=p;while(t->next!=NULL)t=t-> 1printf(H%d",—2_);s->next=NULL;/**********found**********/free(_3一);}第1处:内容为[t=t->next;]第2处:内容为[printf("%d”,t->data);]第3处:内容为[free(。;]2、给定程序MODI1.C中函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。char*fun(chartt[])inti;for(i=0;tt[i];i++)/********* nd***********/if(('a'<=tt[i])11(tt[i]<='z*))/**********found***********/tt[i]+=32;retum(tt);)main()Ichartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));)第1处:内容为[if(('a,<=tt[i])&&(tt[i]<=Z))]第2处:内容为3、请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:711142122283335424449voidfun(intm,int*a,int*n)|inti,count=0;for(i=l;i<=m;i++){if(i%7==0IIi%ll==0){a[count+4-]=i;)*n=count;}第17题1、给定程序中一建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是,删除链表中数据域值相同的结点,使之只保留一个。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SJST*h){SLIST*p,*q;p=h->next;if(p!=NULL){q=p->next;

while(q!=NULL){if(5->data==q->data){p->next=q->next;/**********found**********/free(-1_);/********** nd**********/q=p-> 2 ;else{p=q;/**********found**********/q=q-> 3 ;)}}}第1处:内容为[free(q);]第2处:内容为[q=p->next;]第3处:内容为[q=q->next;]2、给定程序modi.c中fun函数的功能是:分别统计字符串中大写字母和小写字母的个数。例如:给字符串ss输入:"AAaaBBbl23CCccccd”,则输出结果应为:upper=6,lower=8请改正fun函数中的错误,使它能计算出正确的结里XfS.O#include<windows.h>/**********found**********/voidfun(char*s,inta,intb)while(*s){if(*s>='A1&&*s<='Z')/:,,*********found字*********/a++;if(*s>='a'&&*s<=N)/**********found**********/b++;s++;}}main(){charsllOOJ;intupper=0,lower=0;system(ncls");printf(M\nPleaseastring:");gets(s);fun(s,&upper,&lower);printf("\nupper=%dlower=%d\n",upper,lower);)第1处:内容为[voidfun(char*s,int*a,int*b)]第2处:内容为[*a=l+*a;]第3处:内容为[++(*b);]请编写一个函数ftm,它的功能是:找出一维整型数组元素中最大的值和它所在的卜标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。voidfin(inta[],intn,rit*max,ht*d)(inti,base,subscript;base=a[0];subscript=O;for(i=l;i<n;i++){if(a[i]>base){subscript=i;base=a[i];}}*max=base;*d=subscript;}第18题1、函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量cl、c2、c3返回主函数。例如,当n=123H4350时,结果应该为:cl=3c2=lc3=2o请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include<stdio.h>intcl,c2,c3;void£in(longn){cl=c2=c3=0;while(n){switch( 1 )/**********found**********/case1: cl++; 2.c2++; 3 ;c3++;)n/=10;))main(){longn=123114350L;fun(n);printf(n\nTheresult:\nn);printf(Hn=%ld cl=%dc2=%dc3=%d\n",n,cI,c2,c3);c2=%d第1处:内容为[switch(n%10)]第2处:内容为[case1:cl++;break;]第3处:内容为[case2:c2++;break;J2、给定程序modi.c中函数fun的功能是:判断字符ch是否与字符串str中的某个字符相同,若相同,什么也不做;若不同,则插在串的最后。#include<conio.h>#include<stdio.h>#include<string.h>#include<windows.h>/**********found**********/voidfun(charstr,charch){while(*str&&*str!=ch)str++;/**********found**********/if(*str=(h){str[0]=ch;/**********found字*********/str[l]=O;)}main(){chars[81J,c;system,cis");printf(M\nPleaseenterastring:\nH);gets(s);printf("\nPleaseenterthecharactertosearch:");c=getchar();fun(s,c);printf(M\nTheresultis%s\nH,s);)第1处:内容为[voidfun(char*str,charch)]第2处:内容为[if(*str!=ch)]第3处:内容为[str[l]=为3、函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当S所指字符串中的内容为:"ABCDEFGHIJK",在t所指数组中的内容应是:"BDFHJ"。voidfun(char*s,chart[]){inti,slenth,n=O;slenth=strlen(s);for(i=l;i<slenth;i+=2)tln++J=s[iJ;t[n]=、0';)第19题1、函数fun的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应的大写英文字母;若ch中是大写英文字母,则转换成对应的小写英文字母:若是其它字符则保持不变;并将转换后的结果作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。#include <stdio.h>#include <ctype.h>charfun(charch)(/**********fbund**********/if((ch>='a,) 1 (ch<='z,))returnch-'a'+'A';if(isupper(ch))/********** nd**********/returnch痴二 2 ;/*********不found**********/return 3 ;)main(){charcl,(2;printf(H\nTheesult:\n");cl='w*;c2=£in(cl);TOC\o"1-5"\h\zprintf(Mcl=%c c2=%c\nM,cl, c2);cl='W';c2=£m(cl);printf(Hcl=%c c2=%c\nM,c1, c2);cl=8;c2=£in(cl);printf(Hcl=%c c2=%c\nM,c1, c2);}第1处:内容为[if((ch>=,a)&&(ch<='z))]第2处:内容为[returnchfa'-'A';]第3处:内容为[returnch;]2、已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和。给定程序modi.c中函数fun的功能是:计算并输出该数列前n项的平方根之和sum。n的值通过形参传入。例如,当n=10时,程序的输出结果应为:23.197745«请改正函数fun中的错误,使程序能输出正确的结果。#include<conio.h>#include<stdio.h>#include<math.h>#include<windows.h>/************found************/fun(intn){doublesum,sO,4,s2,$htk;sum=1.0;if(n<=2)sum=0.0;sO=0.0

温馨提示

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

评论

0/150

提交评论