国家计算机二级C语言上机题库_第1页
国家计算机二级C语言上机题库_第2页
国家计算机二级C语言上机题库_第3页
国家计算机二级C语言上机题库_第4页
国家计算机二级C语言上机题库_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

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

文档简介

填空

L给定程序中,函数fun的功能是:在带有头结点的单向链表中,查找数据域中值为ch的结点。找到后通过

函数值返回该结点在链表中所处的顺序号;若不存在值为ch的结点,函数返回0值。

intfun(SLIST*h,charch)

{SLIST*p;intn=0;p=h->next;

while(p!=0)

{n++;

if(p->data==ch)returnn;

elsep=p->next;}

return0;}

main()

{SLIST*head;intk;charch;char=

head=creatlist(a);

outlist(head);

printf(z,Enteraletter/7);

scanf(〃%c〃,&ch);

k=fun(head,ch);

if(k==0)printfC\nNotfoundIW);

elseprintf("Thesequencenumberis;%d\n〃,k);)

2.给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储

单元中。

voidfun(SLIST*h,int*n)

{SLIST*p;

(*n)=0;

p=h->next;

while(p)

{(*n)++;

p=p->next;}}

main()

{SLIST*head;

inta[N]={12,87,45,32,91,16,20,48},num;

head=creatlist(a);outlist(head);

fun(head,&num);

printf(〃\nnumber二%d\n〃,num);}

3.给定程序中,函数fun功能计算出带有头结点单向链表中各结点数据域之和为函数值返回

intfun(SLIST*h)

{SLIST*p;ints=0;

p=h->next;

while(p)

{s+=p->data;

p=p->next;}

returns;}

main()

{SLIST*head;

inta[N]={12,87,45,32,91,16,20,48};

head=creatlist(a);outlist(head);

printf(,,\nsum=%d\nz/,fun(head));}

4.人员的记录由编号和出生年月日组成,N名人员数据已在主函数中存入结构体数组std中,且编号唯一。

函数fun功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数

据中的编号为空串。

/**********found**********/

STUfun(STU*std,char*num)

{inti;STUa={〃〃,9999,99,99};

for(i=0;i<N;i++)

if(strcmp(std[i],num)==0)

return(std[i]);

returna;}

5.人员的记录由编号和出生年月日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun功

能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满

足指定条件的人数。

intfun(STU*std,STU*k,intyear)

{inti,n=0;

for(i=0;i<N;i++)

if(std[i].year==year)

k[n++]=std[i];

return(n);)

6,给定程序通过定义并赋初值方式,利用结构体变量存储了一名学生学号姓名和3门课成绩。函数fun功能

将该学生各科成绩都乘以一系数a

voidshow(STUtt)

{inti;

printf(z,%d%s:z,,tt.num,tt.name);

for(i=0;i<3;i++)printf(,z%5.Ifz,,tt.score[i]);

printf(〃\n〃);}

voidmodify(STU*ss,floata)

{inti;

for(i=0;i<3;i++)

ss->score[i]*=a;}

main()

{STUstd={1,"Zhanghua",76.5,78.0,82.0};

floata;

printf(z,\nTheoriginalnumberandnameandscores:\n〃);show(std);

printf(,z\nlnputanumber:〃);scanf&a);

modify(&std,a);

printf(〃\nAresultofmodifying:\n〃);

show(std);}

7.给定程序中函数fun功能将形参指针所指结构体数组中三个元素按num成员进行升序排列

voidfun(PERSONstd[3]))

{PERSONtemp;

if(std[0].num>std[l].num)

{temp=std[0];std[0]=std[l];std[l]=temp;}

if(std[0].num>std[2].num)

{temp=std[0];std[0]=std[2];std[2]=temp;}

if(std[l].num>std[2].num)

{temp=std[l];std[l]=std[2];std[2]=temp;}}

mainO

{PERSONstd[]={5,"Zhanghu”,2,"WangLi”,6,"LinMin”};

inti;

fun(std);

printf(z,\nTheresultis:\n〃);

for(i=0;i<3;i++)

printf(〃%d,%s\n〃,std[i].num,std[i].name);}

8.给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在

main函数中输出。

STDfun(STDstd[],intn)

{STDmax;inti;

max=*std;

for(i=l;i<n;i++)

if(max.age<std[i].age)max=std[i];

returnmax;}

main()

{STDstd[5]={〃aaa〃,17,〃bbb〃,16,〃ccc〃,18,〃ddd〃,17,〃eee〃,15};

STDmax;

max=fun(std,5);

printf(z,\nTheresult:\n〃);

printf(,z\nName:%s,Age:%d\n〃,max.name,max.age);}

9.给定程序中,函数fun功能对形参ss所指字符串数组M个字符串按长度由短到长进行排序。ss所指字符

串数组中共有M个字符串且串长〈N。

voidfun(char(*ss)[N])

{inti,j,k,n[M];chart[N];

for(i=0;i<M;i++)n[i]=strlen(ss[i]);

for(i=0;i<M-l;i++)

{k=i;

for(j=i+1;j<M;j++)

if(n[k]>n[j])k=j;

if(k!=i)

{strcpy(t,ss[i]);

strcpy(ss[i],ss[k]);

strcpy(ss[k],t);

n[k]=n[i];

}}}

10.给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用

字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长<N。

voidfun(char(*ss)[N])

{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){

n=len;k=i;}}

for(i=0;i<M;i++)

if(i!=k)

{m=n;

len=strlen(ssEi]);

for(j=len;j>=0;j­)

ss[i][m—]=ss[i][j];

for(j=0;j<n-len;j++)

ss[i][j]=*';}}

11.给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据从小到大顺序链

接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序

排列。

voidfun(SLIST*h,intx)

{SLIST*p,*q,*s;

s=(SLIST*)malloc(sizeof(SLIST));

s->data=x;

q=h;

p=h->next;

while(p!=NULL&&x>p->data){

q=p;

p=p->next;}

s->next=p;

q->next=s;}

12.给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返

回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量

sfname中,目标文件名放在变量tfname中。

intfun(char*source,char*target)

{FILE*fs,*ft;charch;

if((fs=fopen(source,〃r〃))==NULL)

return0;

if((ft=fopen(target,〃w"))==NULL)

return0;

printf(,z\nThedatainfile:\n〃);

ch=fgetc(fs);

while(!feof(fs))

{putchar(ch);

fputc(ch,ft);

ch=fgetc(fs);}

fclose(fs);fclose(ft);

printf(〃\n\n〃);

return1;}

13.给定程序中,函数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++)

fprintf(ft,z,%di,sqrt((double)i));

printf(〃\nSucceed!\n〃);

fclose(fp);

printf(〃\nThedatainfile:\n〃);

if((fp=fopen(fname,〃r〃))==NULL)

return0;

fscanf(fp,〃%d%f〃,&n,&x);

while(!feof(fp))

{printf(z,%d%f\nz,,n,x);fscanf(fp,&n,&x);}

fclose(fp);

return1;}

14.给定程序功能从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用7(独立一行)

作为字符串输入结束标志.然后将文件内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和

WriteText实现。

voidWriteText(FILE*fw)

{charstr[81];

printf(,z\nEnterstringwith-1toend:\n〃);

gets(str);

while(strcmp(str,^-l^)!=0){

fputs(str,fw);fputs(〃\n〃,fw);

gets(str);}}

voidReadText(FILE*fr)

{charstr[81];

printf(z,\nReadfileandoutputtoscreen:\n〃);

fgets(str,81,fr);

while(!feof(fr)){

printf(〃%s〃,str);

fgets(str,81,fr);}

15.给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班

级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。

intfun(STYPE*std)

{FILE*fp;inti;

if((fp=fopen(,,myfile5.dat〃,〃wb〃))=NULL)

return(0);

printf(z,\n0utputdatatofile!\n〃);

for(i=0;i<N;i++)

fwrite(&std[i],sizeof(STYPE),1,fp);

fclose(fp);

return(1);)

16.给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun

函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。

voidfun(SLIST*p)

{SLIST*t,*s;

t=p->next;s=p;

while(t->next!=NULL)

{s=t;

t=t->next;}

printf(,z%d〃,t->data);

s->next=NULL;

free(t);}

17.给定程序已建立个带有头结点单向链表链表中各结点按数据域递增有序链接。fun功能是删除链表中数据

域值相同结点使之只保留一个

voidfun(SLIST*h)

{SLIST*p,*q;

p=h->next;

if(p!=NULL)

{q=p->next;

while(q!=NULL)

{if(p->data==q->data)

{p->next=q->next;

free(q);

q=p->next;}

else

{p=q;

q=q->next;}}}

18.函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量cl、

c2>c3返回主函数。例如,当『123114350时,结果应该为:cl=3c2=lc3=2。

voidfun(longn)

{cl=c2=c3=0;

while(n){/switch(n%10)

{case1:cl++;break;

case2:c2++;break;

case3:c3++;}

n/=10;}}

19.函数fun的功能是进行字母转换。若形参ch中是小写英文字母,则转换成对应的大写英文字母;若ch

中是大写英文字母,则转换成对应的小写英文字母;若是其它字符则保持不变;并将转换后的结果作为函数

值返回。

charfun(charch)

{if((ch>=,a)&&(ch<=,z'))

returnch-'a'+'A';

if(isupper(ch))

returnch+'a''A';

returnch;

)

20.给定程序中,函数fun的功能是:有NXN矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m

个位置,左边置为0。例如,N=3,m=2,有下列矩阵程序执行结果为

123001

456004

789007

voidfun(int(*t)[N],intm)

{inti,j;

for(i=0;i<N;i++)

{for(j=N-l-m;j>=0;j—)

t[i][j+m]=t[i][j];

for(j=0;j<m;j++)

t[i][j]=O;}}

21.给定程序中,函数fun功能:求出形参ss所指字符串数组中最长字符串长度,将其余字符串右边用字符*

补齐,使其与最长字符串等长。ss所指字符串数组中共有M个字符串且串长〈N。

voidfun(char(*ss)[N])

{inti,j,n,len=0;

for(i=0;i<M;i++)

{n=strlen(ss[i]);

if(i==0)len=n;

if(n>len)len=n;}

for(i=0;i<M;i++){

n=strlen(ss[i]);

for(j=0;j<len-n;j++)

ss[i][n+j]='*';

ss[i][n+j+1]='\0';}}

22.给定程序中,函数fun功能:求ss所指字符串数组中长度最长字符串所在行下标,作为函数值返回,并

把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串且串长CN。

/**********found**********/

intfun(char(*ss)[N],int*n)

{inti,k=0,len=0;

for(i=0;i<M;i++)

{len=strlen(ss[i]);

if(i==0)*n=len;

if(len>*n){*n=len;

k=i;}}

return(k);}

23.给定程序中,函数fun功能:求ss所指字符串数组中长度最短字符串所在行下标,作为函数值返回,并

把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串且串长〈N。

intfun(char(*ss)[N],int*n)

{inti,k=0,len=N;

for(i=0;i<m;i++)

{len=strlen(ss[i]);

if(i==0)*n=len;

if(len<*n)

{*n=len;

k=i;}}

return(k);}

24.给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持

数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7.执行结果

defadhkjsdf3537o

voidfun(char*s)

{inti,j=0,k=0;chartl[80],t2[80];

for(i=0;s[i]!-\0';i++)

if(s[i]>=,0,&&s[i]<='9')

{t2[j]=s[i];j++;}

elsetl[k++]=s[i];

t2[j]=0;tl[k]=0;

for(i=0;i<k;i++)s[i]=tl[i];

for(i=0;i<j;i++)s[k+i]=t2[i];}

25.给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参

s所指的字符串为:def35adh3kjsdf7.结果def3*5*adh3*kjsdf7*。

voidfun(char*s)

{inti,j,n;

for(i=0;s[i]!=,\0*;i++)

if(s[i]>=0'&&s[i]<=9*)

{n=0;

while(s[i+l+n]!=0)n++;

for(j=i+n+l;j>i;j—)

s[j+l]=s[j];

*';

i=i+l;})

26.给定程序中,fun功能统计形参s所指字符串中数字字符出现的次数并存放在形参t所指变量中,最后

在主函数中输出。例形参s所指字符串为abcdef35adgh3kjsdf7。输出结果为4

voidfun(char*s,int*t)

{inti,n;

n=0;

for(i=0;s[i]!=(int)NULL;i++)

if(s[i]>=,O"&&s[i]<='9')n++;

*t=n;}

27.给定程序中,函数fun功能:把形参s所指字符串中下标为奇数字符右移到下一个奇数位置,最右边被

移出字符串字符绕回放到第一个奇数位置,下标为偶数字符不动(注:字符串的长度大于等于2)。例如,形

参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。

voidfun(char*s)

{inti,n,k;charc;

n=0;

for(i=0;s[i]!=,\0*;i++)n++;

/**********found**********/

if(n%2==0)k=n-l;

elsek=n_2;

/**********found**********/

c=s[k];

for(i=k-2;i>=l;i=i-2)s[i+2]=s[i];

/**********found**********/

s[l]=c;}

28.给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按ASCH码大小递增排序,

并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指字符串

为:baawrskjghzlicda,执行后p所指字符数组中字符串为:aachjlsw0

voidfun(char*s,char*p)

{inti,j,n,x,t;

n=0;

for(i=0;s[i]!=,\0*;i++)n++;

for(i=l;i<n-2;i=i+2){

/**********found**********/

t=i;

/**********found**********/

for(j=i+2+2;j<n;j=j+2)

if(s[t]>sLj])t=j;

if(t!=i)

{x=s[i];s[i]=s[t];s[t]=x;}}

for(i=l,j=0;i<n;i=i+2,j++)p[j]=s[i];

/**********found**********/

p[j]=o;}

29.给定程序中,函数fun的功能是:将NXN矩阵中元素的值按列右移1个位置,右边被移出矩阵的元素绕

回左边。例如,N=4,有下列矩阵

21121324计算结果为:24211213

2516473838251647

2911325454291132

422133101042233

voidfun(int(*t)[N])

{inti,j,x;

/**********found**********/

for(i=0;i<N;i++)

{/**********found**********/

x=t[i][N-l];

for(j=N-l;j>0;j—)

/**********found**********/

t[i][0]=x;}}

30.给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式

从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示

在屏幕上。

voidfun(char*s,inta,doublef)

{/**********found**********/

FILEfp;

charstr[100],strl[100],str2[100];

intal;doublefl;

fp=fopen(,zfilel.txt,z,〃w〃);

fprintf(fp,〃%s%d%f\n〃,s,a,f);

/**********found**********/

fclose(fp);

fp=fopenCfilel.txt",〃r〃);

/**********found**********/

fscanf(FP,,z%s%s%s/z,str,strl,str2);

fclose(fp);

al=atoi(strl);

fl=atof(str2);

printf(,z\nTheresult:\n\n%s%d%f\n〃,str,al,fl);}

31.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方

式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据

覆盖该学生原来的数据,其它学生的数据不变。

voidfun(char*filename,STUn)

{intp,m;

FILE*fp;

p=sizeof(STU);

m=p*(-1L);

/**********found**********/

fp=fopen(filename,〃rb+〃);

/**********found**********/

fseek(fp,m,SEEK_END);

/**********found**********/

fwrite(&n,sizeof(STU),1,fp);

fclose(fp);}

32.给定程序blankl.c中,函数fun的功能是:计算的前n项之和。若x=2.5,n二15时,函数值

।52曾/M3

/«)=1+X-—+-------+(-1—.

234!(«-1)!"为:1.917914。

doublefun(doublex,intn)

{doublef,t;inti;

/**********found**********/

f=1;

t=-1;

for(i=l;i<n;i++)

{/**********found**********/

t*=(T)*x/i;

/**********found**********/

f+=t;}

returnf;}

33.给定程序blankl.c中,函数fun的功能是:计算的前n项。若x=2.5,n=12时,函数值为:12.182340。

=1+左+不+…+—T

21n\

doublefun(doublex,intn)

{doublef,t;inti;

f=1.0;

/**********found**********/

t=1;

/**********found**********/

for(i=l;i<n;i++)

{/**********found**********/

t*=x/i;

f+=t;}

returnf;}

f(x)=1+x+—+•••+——<10~b

34.给定程序blankl.c中,函数fun功能:计算2!加直到若x=2.5,函数值为:

12.182494c

doublefun(doublex)

{doublef,t;intn;

/**********found**********/

f=1.0+x;

t=x;

n=1;

do{n++;

/**********found**********/

t*=x/n;

/**********found**********/

f+=t;

}while(fabs(t)>=le-6);

returnf;}

35.给定程序中,函数fun的功能是:有NXN矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第

一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,

临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:

123计算结果为741

456852

789963

voidfun(int(*t)[N])

{intj,r[N];

for(j=0;j<N;j++)r[j]=t[0][j];

for(j=0;j<N;j++)

/**********found**********/

t[0][N-j-l>t[j][O];

for(j=0;j<N;j++)

t[j][0>t[N-l][j];

/**********found**********/

for(j=N-l;j>=0;j—)

t[N-l][N-l-j]=t[j][N-l];

for(j=N-l;j>=0;j—)

/**********found**********/

t[j][N-l]=r[j];}

36.给定程序中,函数fun的功能是:有NXN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左

下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵:

123计算结果为100

456650

78910149

/**********found**********/

voidfun(int(*t)[N])

{inti,j;

for(i=l;i<N;i++)

{for(j=0;j<i;j++)

{

/**********found**********/

t[i][j]=t[i][j]+t[j][i];

/**********found**********/

=0;}}}

37.给定程序中,函数fun的功能是:计算NXN矩阵的主对角线元素和反向对角线元素之和,并作为函数值

返回。注意:要求先累加主对角线元素中的值,然后累加反向对角线元素中的值。例如,若N=3,有下列矩

阵:fun函数首先

123累加1、5、9,然后累加3、

4565、7,函数的返回值为30。

789

fun(intt[][N],intn)

{inti,sum;

/**********found**********/

sum=0;

for(i=0;i<n;i++)

/**********found**********/

sum+=t[i][i];

for(i=0;i<n;i++)

/**********found**********/

sum+=t[i][n-i-1];

returnsum;}

38.函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[l].a[2]、…中,把偶数

从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中数据最初排列为:9、1、4、2、3、6、5、

8、7,删除偶数后a所指数组中数据为:9、1、3、5、7,返回值为5。

intfun(inta[],intn)

{inti,j;

j=0;

for(i=0;i<n;i++)

/**********found**********/

if(a[i]%2==l)

{/**********found**********/

a[j]=a[i];j++;}

/**********found**********/

returnj;}

39.函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a⑴、a[2]、…中,把奇数

从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、

8、7,删除奇数后a所指数组中数据为:4、2、6、8,返回值为4。

intfun(inta[],intn)

{inti,j;

j=0;

for(i=0;i<n;i++)

/**********found**********/

if(a[i]%2==0){

/**********found**********/

a[j]=a[i];j++;}

/**********found**********/

returnj;}

40.函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把形参a所指数组中的最大值

放在a[l]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3];

其余以此类推。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,

数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。

voidfun(inta[],intn)

{inti,j,max,min,px,pn,t;

for(i=0;i<n-l;i+=2)

{/**********found**********/

max=min=a[i];

px=pn=i;

for(j=i+l;j<n;j++){

/**********found**********/

if(max<a[j])

{max=a[j];px=j;}

/**********found**********/

if(min>a[j])

{min=a[j];pn=j;}}

if(pn!=i)

{t=a[i];a[i]=min;a[pn]=t;

if(px==i)px=pn;}

if(px!=i+1)

{t=a[i+l];a[i+l]=max;a[px]=t;}}}

41.函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中最小值放在a[l]

中;再把a所指数组元素中次大值放在a[2]中,把a数组元素中次小值放在a[3]中;其余以此类推。例如:

若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、

2、7、3、6、4、5o形参n中存放a所指数组中数据的个数。

voidfun(int*a,intn)

{inti,j,max,min,px,pn,t;

/**********found**********/

for(i=0;i<n-l;i+=2)

{max=min=a[i];

px=pn=i;

/**********found**********/

for(j=i+l;j<n;j++)

{if(max<a[j])

{max=a[j];px=j;}

if(min>a[j])

{min=a[j];pn=j;}}

if(px!=i)

{t=a[i];a[i]=max;a[px]=t;

if(pn==i)pn=px;}

if(pn!=i+1)

{t=a[i+l];a[i+l]=min;a[pn]=t;}}}

42.函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中

存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、

4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。

voidfun(inta[],intn)

{inti,t,p;

/**********found**********/

p=(n%2==0)?n/2:n/2+l;

for(i=0;i<n/2;i++)

{t=a[i];

/**********found**********/

a[i]=a[p+i];

/**********found**********/

a[p+i]=t;}}

43.函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、

8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据个数。

voidfun(inta[],intn)

{inti,t;

/**********found**********/

for(i=0;i<n/2;i++)

{t=a[i];

/**********found**********/

a[i]=a[n-l-i];

/**********found**********/

a[n―i.—]]~t,}}

44.fun功能是进行数字字符转换.若形参ch中是数字字符,0'〜'9'则'0'转换成'9'T'转换成'8''2'转换成

'7'…'9'转换成'0';若其它字符则保持不变并将转换后结果作为函数值返回

charfun(charch)

{/**********found**********/

if(ch>='O'&&ch〈二'9')

/**********found**********/

return'9'-(ch,O');

returnch;}

45.函数fun功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作为函数值返回。

intfun(intn)

{inti,j,count=0;

printf(z,\nTheprimenumberbetween3to%d\n〃,n);

for(i=3;i<=n;i++){

/**********found**********/

for(j=2;j<i;j++)

/**********found**********/

if(i%j==0)

break;

/**********found**********/

if(j>=i)

{count++;printf(count%15?〃%5d〃:〃\n%5d〃,i);}}

returncount;}

46.用筛选法可得到2~n(n<10000)之间所有素数,方法是首先从素数2开始将所有2倍数从数表中删去(把数

表中相应位置值置成0);接着从数表中找下一个非0数并从数表中删去该数所有倍数;依此类推直到所找下一

个数等于n为止.这样会得到一个序列:23571113171923…函数fun用筛选法找出所有小于等于n的素数,并

统计素数的个数作为函数值返回。

intfun(intn)

{inta[10000],i,j,count=0;

for(i=2;i<=n;i++)a[i]=i;

i=2;

while(i<n){/**********found**********/

for(j=a[i]*2;j<=n;j+=a[i])

a[j]=0;

i++;

/**********found**********/

while(a[i]==0)

i++;}

printf(,z\nTheprimenumberbetween2to%d\n〃,n);

for(i=2;i<=n;i++)

/**********found**********/

if(a[i]!=0)

{count++;printf(count%15?〃%5d〃:〃\n%5d〃,a[i]);}

returncou}

47.甲乙丙丁四人同时开始放鞭炮,甲每隔tl秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4

秒放一次,每人各放n次.fun功能是根据形参提供值,求出总共听到多少次鞭炮声作为函数值返回.注意当几

个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒.例若tl=7,t2=5,t3=6,t4=4,n=10,总共可听到28

次鞭炮声

SdefineOK(i,t,n)((i%t==O)&&(i/t<n))

intfun(inttl,intt2,intt3,intt4,intn)

{intcount,t,maxt=tl;

if(maxt<t2)maxt=t2;

if(maxt<t3)maxt=t3;

if(maxt<t4)maxt=t4;

count=l;/*给count赋初值*/

/**********found**********/

for(t=l;t<maxt*(nT);t++)

{if(OK(t,tl,n)||OK(t,t2,n)||OK(t,t3,n)||OK(t,t4,n))count++;}

/**********found**********/

returncount;}

48.fun功能是从三个形参abc中找出中间那个数作为函数值返回.例当a=3b=5c=4时中数为4.

intfun(inta,intb,intc)

{intt;

/**********found**********/

t=(a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b)):((a>c)?___2___:((b>c)?c:___3___));

returnt;}

49.给定程序中,函数fun功能将形参给定字符串整数浮点数写到文本文件中,再用字符方式从此文本文件

中逐个读入并显示在终端屏幕上

voidfun(char*s,inta,doublef)

{/**********found**********/

FILE*fp;

charch;

fp=fopen(z,filel.txtz,,〃w〃);

fprintf(fp,〃%s%d%f\n〃,s,a,f);

fclose(fp);

fp=fopen(z,filel.txtz,,〃r〃);

printf(,z\nTheresult:\n\n〃);

ch=fgetc(fp);

/**********found**********/

while(!feof(fp)){

/**********found**********/

putchar(ch);ch=fgetc(fp);}

putchar(,\n,);

fclose(fp);}

50.程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方

式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序

后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。

voidfun(char*filename)

{FILE*fp;inti,j;

STUs[N],t;

/**********found**********/

fp=fopen(filename,〃rb〃);

fread(s,sizeof(STU),N,fp);

fclose(fp);

for(i=0;i<N-l;i++)

for(j=i+l;j<N;j++)

/**********found**********/

if(s[i]・sno>s[j].sno)

{t=s[i];s[i]=s[j];s[j]=t;}

fp=fopen(filename,〃wb〃);

/**********found**********/

fwrite(s,sizeof(STU),N,fp);

fclose(fp);}

51.给定程序中,函数fun的功能是:找出100至x(xW999)之间各位上的数字之和为15的所有整数,然

后输出;符合条件的整数个数作为函数值返回。例如,当x值为500时,各位数字之和为15的整数有:159、

168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、

447、456、465、474、483>492。共有26个。

fun(intx)

{intn,si,s2,s3,t;

/**********found**********/

n=0;

t=100;

/**********found**********/

while(t<=x)

{sl=t%10;s2=(t/10)%10;s3=t/100;

if(sl+s2+s3==15)

{printf(,,%d”,t);

n++;}

/**********found**********/

++t;}

returnn;}

52.给定程序中fun功能找出100〜999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)

整数然后输出;符合条件整数个数作为函数值返回.例如,当x值为5时,100〜999之间各位上数字之和为5

的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、5000共有15个。

当x值为27时,各位数字之和为27的整数是:999o只有1个。

fun(intx)

{intn,si,s2,s3,t;

n=0;

t=100;

/**********found**********/

while(t<=999){

/**********found**********/

sl=t%10;s2=(t/10)%10;s3=t/100;

/**********found**********/

if(sl+s2+s3==x)

{printf(z,%d〃,t);

n++;}

t++;}

returnn;}

53.给定程序中fun功能将形参s所指字符串中所有字母字符顺序前移其它字符顺序后移,处理后新字符串

首地址作为函数值返回.例s所指字符串为asdl23fgh543df,处理后新字符串asdfghdf123543。

char*fun(char*s)

{inti,j,k,n;char*p,*t;

n=strlen(s)+l;

t=(char*)malloc(n*sizeof(char));

p=(char*)malloc(n*sizeof(char));

j=0;k=0;

for(i=0;i<n;i++)

{if(((s[i]>='a')&&(s[i"='z'))||((s[i]>='A')&&(s[i"='Z'))){

/**********found**********/

t[j]=*(s+i);j++;}

else

{p[k]=s[i];k++;}}

/**********found**********/

for(i=0;i<k;i++)t[j+i]=p[i];

/**********found**********/

t[j+k]=0;

returnt;}

54.给定程序中,函数fun功能:计算形参x所指数组中N个数平均值(规定所有数均为正数),作为函数值

返回;并将大于平均值数放在形参y所指数组中,在主函数中输出。例如有10个正数:4630324061745

154826,平均值为:30.500000o主函数中输出:4632404548

doublefun(doublex[],double*y)

{inti,j;doubleav;

/**********found**********/

av=0;

/**********found**********/

for(i=0;i<N;i++)av=av+x[i]/N;

for(i=j=0;i<N;i++)

/**********found**********/

if(x[i]>av)y[j++]=x[i];

yLj]=-l;

returnav;}

55.给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函

数值返回,规定字符串中只含9以下数字字符。例如,主函数中输入字符串:32486和12345,在主函数中

输出的函数值为:4483U

longctod(char*s)

{longd=0;

while(*s)

if(isdigit(*s)){

/**********found**********/

d=d*10+*s-'O';

/**********found**********/

x++;)

returnd;

)

longfun(char*a,char*b)

{/**********found**********/

returnctod(a)+ctod(b);)

56.给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便

于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.,

函数的返回值为6。

intfun(char*s)

{intn=0,flag=0;

while(*s!=,\0?)

{if(*s!=''&&flag==0){

/**********found**********/

n++;flag=l;}

/**********found**********/

if(*s=='‘)flag=0;

/**********found**********/

s++;}

returnn;}

57.填空给定程序中,函数fun功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺

序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M

voidfun(char(*ss)[M])

{char*ps[N],*tp;inti,j,k;

for(i=0;i<N;i++)ps[i]=ss[i];

for(i=0;i<N-l;i++){

/**********found**********/

k=i;

for(j=i+l;j<N;j++)

/**********found**********/

if(strlen(ps[k])<strlen(*(ps+j))k=j;

/**********found**********/

tp=ps[i];ps[i]=ps[k];ps[k]=tp;}

printf(z,\nThestringaftersortingbylength:\n\nz,);

for(i=0;i<N;i++)puts(ps[i]);}

58.给定程序中,函数fun功能是:在形参ss所指字符串数组中查找与形参t所指字符串相同的串,找到后

返回该串在字符串数组中的位置(下标值),未找到则返回ss所指字符串数组中共有N

温馨提示

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

评论

0/150

提交评论