1、1 C程序设计课程期末上机考试考试时间:50 分钟考试方式:从下面的20 题中随机抽取一题,再附加一题,共需完成2 道题。附加题不事先给定分值分配:第一题60 分,第二题 40 分,共 100 分考试时间:第十八周 1.编写函数long fun(long x),它的功能是:将长整型参数x 中每一位上为偶数的数依次取出,构成一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:124578902,程序输出:24802.#include long fun(long x)void main()long a,b;printf(Enter a number:);scanf(%ld,&a);
2、b=fun(a);printf(b=%ldn,b);2.编写函数void fun(int k,int*p),功能是:将参数k(2k32767)所有的不相同质因子升序写入 p 所指的一维数组中,以-1 作为所有质因子的结束标志。例如:下面程序运行时若输入200,输出:2 5;若输入27720,输出:2 3 5 7 11;若输入101,输出 101。#include void fun(int k,int*p)void main()int x,a17=0,i;do printf(Enter a number(2-32767):);scanf(%d,&x);while(x2);fun(x,a);for
3、(i=0;ai!=-1;i+)printf(%d,ai);printf(n);3.编写函数void fun(int*x,int n),功能是:求出长度为n 的数组 x 中的最大数与次最大数,并把最大数和a0 对调,次最大数与a1 对调,其余的数保持不变。下面程序运行时若输入:2 4 6 1 3 9 7 0 5 8,则输出:9 8 6 1 3 2 7 0 5 4。#include#define N 10 long fun(long x)long i,a,b=1;long result=0;for(i=1;x=1;i=i+)a=x%10;if(a%2=0)result+=a*b;b=b*10;x=
4、x/10;return(result);void fun(int k,int*p)int i,j,x=0;for(i=2;i=k;i+)if(k%i=0)for(j=2;j=i)px=i;x+;for(i=x;i17;i+)pi=-1;2 void fun(int*x,int n)void main()int aN,i;for(i=0;iN;i+)scanf(%d,a+i);fun(a,N);for(i=0;iN;i+)printf(%d,ai);printf(n);4.数组 x 中保存有n 个整数,编写函数int fun(int*x,int n,float*w),对数组 x 进行如下操作:从
5、第 0 个元素起对每5 个元素求一个平均埴,并将这些均值依次存放在w所指的数组中。函数返回平均值的个数。例如:若输入n 为 14,14 个数据为:11 21 35 24 55 16 27 58 18 0 11 12 13 14,则只为前10 个求均值,输出结果为:29.20 23.80#include int fun(int*x,int n,float*w)void main()int a30,i,n,m;float b6;printf(Input a number:);scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);m=fun(a,n,b);for(i=0;
6、im;i+)printf(%0.2f,bi);printf(n);5.编写函数int fun(int x,long int y),功能:计算满足表达式x0+x1+x2+.+xny的最大的n 并作为函数返回值带回。例如,当x=2,y=1000 时,程序输出8。#include int fun(int x,long int y)void main()int x;long y;scanf(%d%ld,&x,&y);printf(n=%dn,fun(x,y);void fun(int*x,int n)int i,t,t2,max=0,imax=1;for(i=1;ixmax)max=i;t=xmax;
7、xmax=x0;x0=t;for(i=2;iximax)imax=i;t2=ximax;ximax=x1;x1=t2;int fun(int*x,int n,float*w)int a,i,j;float sum=0;a=n/5;for(i=0;ia;i+)for(j=(5*i);j5*(i+1);j+)sum+=xj;wi=sum/5;sum=0;int fun(int x,long y)int i;long a=x,sum=1;for(i=1;sumy;i+)sum+=a;a*=x;return(i-2);3 6.编写函数int fun(char(*ss)N,int m,char*s),功
8、能是:形参ss 指向一个m行 N列的二维字符数组,每行存放一个字符串。求出最长的字符串,复制到s 所指的字符数组中,然后返回此最长字符串的长度。#define N 30#include int fun(char(*ss)N,int m,char*s)void main()char a8N,bN;int i,len;for(i=0;i8;i+)gets(ai);len=fun(a,8,b);printf(len=%d,str=%sn,len,b);7.编写函数int countw(char*str),统计字符串str中单词的个数。单词之间以空格,逗号,句号作分隔,数字也看做单词。单词之间可能不止
9、一个分隔符。如输入:Its 10:10 oclock ,I am late.屏幕上输出 There are 6 words.#include int countw(char*str)void main()char s200;gets(s);printf(There are%d words.n,countw(s);8.编写函数void fun(char*str),功能:字符串 str中单词以空格作分隔,如果单词之间不止一个空格,则删除多余的空格,使单词之间只保留一个空格。字符串开始的空格也只保留一个。例如,程序运行时若输入:Its 10:10 oclock ,I am late.输出:Its 1
10、0:10 oclock,I am late.#include void fun(char*str)int fun(char(*ss)N,int m,char*s)int i,j,max=0,imax=0;for(i=0;imax)max=j;imax=i;strcpy(s,ssimax);return max;int countw(char*str)int i,num=0,word=0;for(i=0;stri!=0;i+)if(stri=|stri=,|stri=.)word=0;else if(word=0)word=1;num+;return num;void fun(char*str)
11、int i,j;for(i=0;i100;i+)if(stri=)if(stri+1=)for(j=i+1;strj!=0;j+)strj=strj+1;i-=1;4 void main()char s100;puts(Enter a string:);gets(s);fun(s);puts(s);9.函数 void fun(int x,int k,int*p)的功能是:求出比x 大的最初k(k1000)个素数,放入p 所指数组中。例如:程序运行时输入:10 10,输出:11 13 17 19 23 29 31 37 41 43#include void fun(int x,int k,int
12、*p)void main()int a,b,n1000,i;scanf(%d%d,&a,&b);fun(a,b,n);for(i=0;ib;i+)printf(%d,ni);puts();10.编写函数int fun(int a,int b),在 a,b范围内统计满足下面条件的数的个数。条件:该数是素数,且该数逆序后形成的数也是素数。例如,在100,150范围内 101 107 113 131 149 满足条件,则下面程序运行时输入100 150,输出:num=5。#include#include int fun(int a,int b)void main()int num,a,b;scanf
13、(%d%d,&a,&b);num=fun(a,b);printf(num=%dn,num);void fun(int x,int k,int*p)int i=0,a,j;for(a=x+1;ik;a+)for(j=2;ja;j+)if(a%j=0)break;if(j=a)pi=a;i+;int fun(int a,int b)int num=0,x,x1,y,i,j;for(x=a;x=b;x+)for(i=2;ix;i+)if(x%i=0)break;if(i=x)for(x1=x,y=0;x1!=0;)y*=10;a=x1%10;x1/=10;y+=a;for(j=2;jy;j+)if(
14、y%j=0)break;if(j=y)num+;return num;5 11.编写函数void fun(char*s),功能:在s 所指字符串中每两个字母之间加一个*,其余字符保持不变。例如,下面程序运行时,若输入:I had 123_book.输出:I h*a*d 123_b*o*o*k.#include void fun(char*s)void main()char x80;gets(x);fun(x);puts(x);12.编写函数int fun(int k),功能:从5 个红球,6 个白球,7 个黑球中任意取出k(2 k18)个球作为一组进行组合。在每组中,可以没有红球和白球,但必须
15、要有黑球。不同组合的数目作为函数值返回。例如,若k 为 8 时,正确的组合数是31;若 k 为 2 时,正确的组合数是3;或 k 为 3时,正确的组合数是6。#include int fun(int k)void main()int x,n;scanf(%d,&x);n=fun(x);printf(n=%dn,n);13.编写函数void fun(char*str),功能:对形参str所指字符串中的字符按ASCII 码升序排序。例如,下面程序运行时输入:The C Programming Language 输出:CLPTaaaeegggghimmnnorru#include void fun(
16、char*str)void main()char s100;gets(s);fun(s);puts(s);void fun(char*s)int i,j;for(i=0;si!=0;i+)if(si=65&si=97&si=65&si+1=97&si+1i+1;j-)sj=sj-1;sj=*;void fun(char*str)int i,j,t;for(i=0;stri!=0;i+)for(j=i+1;strj!=0;j+)if(strjstri)t=strj;strj=stri;stri=t;int fun(int k)int i,j,h,n=0;for(i=1;i=7;i+)for(j=
17、0;j=5;j+)for(h=0;h=6;h+)if(i+j+h=k)n+;return(n);6 14.请编写函数void fun(int*a,int n,int y),它的功能是:把y 值插入到有n 个数的 a 数组中,a 数组中的数已按由大到小的次序排好,y 的值从键盘读入。插入后,数组中的数仍然有序。对照下面三种情况运行程序:1)插在最前2)插在最后 3)插在中间若输入数11,输出 20 18 16 14 12 11 10 8 6 4 2 输入数 1,输出 20 18 16 14 12 10 8 6 4 2 1 输入数 33,输出 33 20 18 16 14 12 10 8 6 4
18、2#include void fun(int*a,int n,int y)void main()int i,a11=20,18,16,14,12,10,8,6,4,2,x;void fun(int*,int n,int y);scanf(%d,&x);fun(a,10,x);for(i=0;i11;i+)printf(%d,*(a+i);15.编写函数int fun(char*s1,char*s2),在字符串s1 中统计字符串s2 出现的次数并返回。若s2在 s1 中未出现,则返回0。例如:若输入的字符串s1 为:abaaAabcaabbabca,字符串s2 为:ab,则程序输出:n=4 若输
19、入的字符串s1 为:abaaAabcaabbabca,字符串s2 为:abd,则程序输出:No find#include#include int fun(char*s1,char*s2)void main()char a80,b80;int n;printf(Please input the first string:);gets(a);printf(Please input the second string:);gets(b);n=fun(a,b);if(n=0)printf(No findn);void fun(int*a,int n,int y)int i,j;if(ya0)for(i
20、=n;i=0;i-)ai=ai-1;a0=y;else for(i=0;in;i+)if(yai+1)for(j=n;j=i+2;j-)aj=aj-1;ai+1=y;break;int fun(char*s1,char*s2)int i,j,p,n,num=0;for(i=0;s2i!=0;i+);n=i;for(i=0;s1i!=0;i+)if(s1i=s20)p=1;for(j=i+1;s2p!=0;j+,p+)if(s1j!=s2p)break;if(p=n)num+;return num;7 else printf(n=%dn,n);16.编写函数int fun(char*str),功
21、能是:统计字符串str中不同字符的个数并做为函数值返回。例如,下面程序运行时若输入:One world,One dream!输出:n=13#include int fun(char*str)void main()char s80;int n;gets(s);n=fun(s);printf(n=%dn,n);17.编写函数int fun(int m,int n,int*p),要求将范围 m,n 之间所有的fibonacci数写入 p 所指的一维数组中,fibonacci数的个数通过函数返回值带回。例如,0,30之间的 fibonacci数有 7个,它们是:1 2 3 5 8 13 21;1000
22、,32767之间有 7 个,它们是:1597 2584 6765 10946 17711 28657。#include int fun(int m,int n,int*p)void main()int a,b,n,c22,i;scanf(%d%d,&a,&b);n=fun(a,b,c);for(i=0;in;i+)printf(%6d,ci);printf(nn=%dn,n);18.编写函数char*fun(char*s1,char*s2,int n),将字符串s1 中后面的n 个字符复制到s2 所指数组中,若s1 不足 n 个字符,则用*在前端补齐至n 个字符,写入s2 中。函数返回字符串s
23、2 的指针。例如,下面程序运行时,int fun(char*str)int i,j,num=1;for(i=1;stri!=0;i+)for(j=0;ji;j+)if(stri=strj)break;if(j=i)num+;return num;int fun(int m,int n,int*p)int i,j=0,num=0;int a1000=1,2;for(i=2;i1000;i+)ai=ai-1+ai-2;for(i=0;i=m&ai=n)num+;pj=ai;j+;return num;8 若输入:“abcd1234”和 6,则输出“cd1234”若输入:“abcd1234”和 10
24、,则输出“*abcd1234”#include char*fun(char*s1,char*s2,int n)void main()char c180,c280;gets(c1);fun(c1,c2,6);puts(c2);puts(fun(c1,c2,30);19.编写函数void fun(char*s,char*b,char*c),逐个比较a、b 两个字符串对应位置中的字符,把 ASCII 值大或相等的字符依次存放到c 数组中,形成一个新的字符串。例如,若a 中的字符串为 aBCDeFgH,b 中的字符串为:ABcd,则 c 中的字符串应为:aBcdeFgH。#include void f
25、un(char*a,char*b,char*c)void main()char s180,s280,s380;gets(s1);gets(s2);fun(s1,s2,s3);puts(s3);char*fun(char*s1,char*s2,int n)int i,j,m;for(i=0;s1i!=0;i+);m=i;if(m=n)for(j=0,i=m-n;j=n-1;i+,j+)s2j=s1i;s2n=0;else for(j=0;jn-m;j+)s2j=*;for(i=0,j=n-m;i=y)for(i=0;i=bi?ai:bi);for(i=y+1;ai!=0;i+)ci=ai;cx+
26、1=0;else for(i=0;i=bi?ai:bi);for(i=x+1;bi!=0;i+)ci=bi;cy+1=0;9 20.编写函数void fun(char*s),将 s 所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符和非数字字符原有的前后次序。例如,若输入:num is 0532-66ouc78,OK.执行结果为:num is-ouc,OK.05326678#include void fun(char*s)void main()char a80;gets(a);fun(a);puts(a);void fun(char*s)int i,j=0,n,n1=0;int a80;for(i=0;si!=0;i+);n=i;for(i=0;i=0&si=9)n1+;aj=si;j+;for(i=0;i=0&si=9)for(j=i;jn;j+)sj=sj+1;i-;for(i=n-n1,j=0;in;i+,j+)si=aj;