海大c程上机题附答案及附加题_第1页
海大c程上机题附答案及附加题_第2页
海大c程上机题附答案及附加题_第3页
海大c程上机题附答案及附加题_第4页
海大c程上机题附答案及附加题_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、编写函数 long fun(long x) ,它的功能是 :将长整型参数 x 中每一位上为偶数的数依次取出, 构成一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:2,程序输出:24802.#includelong fun(long x)long i,m,sum=0;int j=0,n;for(i=x;i0;)m=i%10;i=i/10;if(m%2=0)j+;for(n=1;nj;n+)m=m*10; sum+=m;return sum;void main()long a,b;printf(Enter a number:); scanf(%ld,&a);b=fun(a);

2、printf(b=%ldn,b);编写函数void fun(int k,int *p),功能是:将参数k (2 kw 32767)所有的不相同质因子升 序写入 p 所指的一维数组中,以 -1 作为所有质因子的结束标志。例如:下面程序运行时若 输入 200,输出: 2 5;若输入 27720,输出: 2 3 5 7 11;若输入 101,输出 101。#include#includevoid fun(int k,int *p)int i,j,t=0;double b;for(i=2;i=k;i+) 先判断是不是质数,在判断是不是因子。b=sqrt(i);for(j=2;jb&k%i=0)pt=i

3、;t+;pt=-1;void main()int x,a17=0,i;do printf(Enter a number(2-32767):);scanf(%d,&x);while(x2);fun(x,a);for(i=0;ai!=-1;i+)printf(%d ,ai);printf(n);编写函数 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。#in

4、clude#define N 10void fun(int *x,int n)int i,j,k,t;for(i=0;i2;i+)k=i;for(j=i+1;jxk)k=j;t=xk;xk=xi;xi=t;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);数组x中保存有n个整数,编写函数intfun(int *x,int n,float *w),对数组x进行如下操作: 从第 0 个元素起对每 5 个元素求一个平均埴,并将这些均值依次存放在 w 所指的数组

5、中。函数返回平均值的个数。例如:若输入n为14,14个数据为:11 21 35 24 55 16 27 58 18 0 1112 13 14,则只为前 10 个求均值,输出结果为: 29.2023.80#includeint fun(int *x,int n,float *w)int num=n/5;注意每个数的类型,int temp=0;int i;for(i=0;inum;+i)temp=5*i; wi=(float)(xtemp+xtemp+1+xtemp+2+xtemp+3+xtemp+4)/5;return num;void main()int a30,i,n,m;float b6;

6、printf(Input a number: );scanf(%d ,&n);for(i=0;in;i+)scanf(%d,&ai);m=fun(a,n,b);for(i=0;im;i+)printf(%0.2f ,bi);printf(n);编写函数intfun(int x,long int y),功能:计算满足表达式 x0+x1+x2+.+xny的最大的n并作为函数返回值带回。例如,当x=2,y=1000 时,程序输出 8。#include int fun(int x,long int y)int i;long sum=0,k=1;for(i=0;sumy;i+) 注意每次执行完程序其指数

7、为多少。即 i 与指数的关系。 sum+=k;k=k*x;return i-2;void main()int x;long y;scanf(%d%ld,&x,&y); printf(n=%dn,fun(x,y);编写函数 int fun(char (*ss)N,int m,char *s) ,功能是:形参 ss 指向一个 m 行 N 列的二维 字符数组,每行存放一个字符串。求出最长的字符串,复制到 s 所指的字符数组中,然后返 回此最长字符串的长度。#include #include#define N 30int fun(char (*ss)N,int m,char *s)int i,j,t=

8、0,x;for(j=0;jt) x=j;t=i; for(i=0;it;i+) si=ssxi;si=0;return(t);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);编写函数 int countw(char *str) ,统计字符串 str 中单词的个数。单词之间以空格,逗号, 句号作分隔,数字也看做单词。单词之间可能不止一个分隔符。如输入:Its 10:10 oclock ,I am late. 屏幕上输出 There are 6

9、 words.#includeint countw(char *str)int w=0,i,k=0;for(i=0;stri!=0;i+)前面一个是 或,或。且后面一个为字母或数字就可以说明有一个单词。if(stri= |stri=,|stri=.) w=0;Elseif(w=0)w=1;k+;return k;void main()char s200;gets(s);printf(There are %d words.n,countw(s);编写函数 void fun(char *str) ,功能:字符串 str 中单词以空格作分隔,如果单词之间不止 一个空格, 则删除多余的空格, 使单词之

10、间只保留一个空格。 字符串开始的空格也只保留一 个。例如,程序运行时若输入 : Its 10:10 oclock , I am late.输出: Its 10:10 oclock , I am late.#include void fun(char *str)发现两个空格则将后面的前移,前移后注意 i 后退一 位。int i,t; for(i=0;stri!=0;i+) if(stri= &stri+1= ) for(t=i+1;strt!=0;t+) strt=strt+1; strt+1=0;i-; void main()char s100; puts(Enter a string:);g

11、ets(s);fun(s);puts(s);函数void fun(int x,int k,int *p)的功能是:求出比x大的最初k(k1OOO)个素数,放入p所指 数组中。例如:程序运行时输入: 10 10,输出: 11 13 17 19 23 29 31 37 41 43 #include #includevoid fun(int x,int k,int *p) int t=0;long i,j;double m;if(x=1) for(i=x+1;tk;i+)m=sqrt(i);for(j=2;jm)pt=i; t+;elsefor(i=2;tk;i+)m=sqrt(i);for(j=2

12、;jm)pt=i; t+;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.编写函数intfun(int a,int b),在a,b范围内统计满足下面条件的数的个数。条件:该数是素数,且该数逆序后形成的数也是素数。例如,在 100,150范围内 101 107 113 131 149 满 足条件,则下面程序运行时输入 100 150,输出 :num=5。#include#includeint fun(int a,int b)int i,j,c,k=0,w

13、,n,sum;double m,d;for(i=a;i=b;i+)m=sqrt(i);for(j=2;jm)for(w=i,sum=0;w0;)判断原数是不是质数倒序c=w%10;sum=10*sum+c;w=w/10;d=sqrt(sum); for(n=2;nd) k+;return k;void main()倒序后是不是质数11.int num,a,b; scanf(%d%d,&a,&b); num=fun(a,b); printf(num=%dn,num);编写函数 void fun (char *s),功能:s 所指字符串中每两个字母之间加一个 *,其余字符保持不变。例如,下面程序运

14、行时,若输入: I had 123_book. 输出: I h*a*d 123_b*o*o*k. #include#includevoid fun(char *s)int i,j,L;L=strlen(s);for(i=1;i=a & si =A & si =a & si-1 =A & si-1 =i;j-)sj+1=sj;si=*;L+;void main()char x80;gets(x);fun(x);puts(x);编写函数intfun (i nt k),功能:从5个红球,6个白球,7个黑球中任意取出 k(2w k 18) 个球作为一组进行组合。 在每组中, 可以没有红球和白球,但必须

15、要有黑球。不同组合的数 目作为函数值返回。例如,若 k 为 8 时,正确的组合数是 31 ;若 k 为 2 时,正确的组合数 是 3;或 k 为 3 时,正确的组合数是 6 。#includeint fun(int k)int red,white,black;int sum=0,temp;for(black=1;black=7;black+)for(white=0;white=6;white+)for(red=0;red=5;red+)temp=black+white+red;if(temp=k)sum+;return sum;void main()int x,n;scanf(%d,&x);n

16、=fun(x); printf(n=%dn,n);编写函数void fun(char *str),功能:对形参str所指字符串中的字符按ASCII码升序排序。例如,下面程序运行时输入:The C Programming Language输出: CLPTaaaeegggghimmnnorru#includevoid fun(char *str)int i,j,k=0;char c;也可以采用冒泡法进行排序。for(i=0;stri!=0;i+)k=i;这里用的是换位法排序。for(j=i+1;strj!=0;j+)if(strjstrk)k=j;if(k!=i)c=stri;stri=strk;

17、strk=c;void main()char s100;gets(s);fun(s);puts(s);请编写函数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

18、4 2#include void fun(int *a,int n,int y)int i,j,t;an=y;for(i=0;in+1;i+)for(j=0;jn-i;j+)if(ajaj+1)t=aj;aj=aj+1;aj+1=t;void main()将要插入的数放到最后,然后整体用冒泡法排序。15.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);编写函数int fun (char *

19、s1,char *s2),在字符串si中统计字符串s2出现的次数并返回。 若 s2 在 s1 中未出现,则返回0。例如:若输入的字符串s1 为: abaaAabcaabbabca,若输入的字符串s1 为: abaaAabcaabbabca,#include #include int fun(char *s1,char *s2)int i,j,m=0,n=0;for(i=0;istrlen(s1);i+) for(j=0;jstrlen(s2);j+)if(s1i+j!=s2j) m=1;if(m=0) n+; m=0;return n;void main() char a80,b40;int

20、n;printf(Please input the first string:); gets(a);printf(Please input the second string:);gets(b);字符串字符串s2 为: ab ,则程序输出:s2为:abd,则程序输出:i+j 是为了再返回原来的起点。每使用完一次 m 要将其归n=4 No find0.n=fun(a,b);if(n=0)printf(No find %sn,b);else printf(%s,n=%dn,b,n);编写函数 int fun(char *str) ,功能是:统计字符串 str 中不同字符的个数并做为函数值返 回。例

21、如,下面程序运行时若输入: One world,One dream! 输出: n=13 #include int fun(char *str)int i,j,k=0;for(i=0;stri;i+)for(j=0;j=i)k+;return k;void main()char s80;int n;gets(s);n=fun(s);printf(n=%dn,n);编写函数 int fun(int m,int n,int *p) ,要求将范围 m,n 之间所有的 fibonacci 数写入 p 所指 的一维数组中, fibonacci 数的个数通过函数返回值带回。例如,0,30 之间的 fibon

22、acci 数有7 个,它们是 :1 2 3 5 8 13 21 ;1000,32767 之间有 7 个,它们是 :1597 2584 6765 10946 17711 28657 。#includeint fun(int m,int n,int *p)int t,num=0;long f,f1=1,f2=1; if(mn)t=m;m=n;n=t; for(f=1,t=0;f=m)pt=f;t+;num+;f1=f2; f2=f ; f=f1+f2;return num;void main()int a,b,n,c22,i;scanf(%d%d,&a,&b);n=fun(a,b,c);for(i

23、=0;in;i+)printf(%6d,ci);printf(nn=%dn,n);n 个字符复制到 s2 所 s2 中。函数返回字符编写函数 char *fun(char *s1,char *s2,int n) ,将字符串 s1 中后面的 指数组中,若 s1 不足 n 个字符,则用 * 在前端补齐至 n 个字符,写入 串 s2 的指针。例如,下面程序运行时,若输入:“abcd1234”和6,则输出“ cd1234”若输入:“ abcd1234”和 10,则输出“ *abcd1234 ”#include#includechar *fun(char *s1,char *s2,int n)int i

24、,k;k=strlen(s1);if(nk)for(i=0;i=n)s1i=0;strcpy(s2,s1);if(n=k)strcpy(s2,s1);if(nk)for(i=n-1;i=0;i-)s1i=s1i-n+k;if(i=n-k-1)s1i=*;s1n=0;strcpy(s2,s1);return s2;void main()char c180,c280;int n;gets(c1);scanf(%d,&n);fun(c1,c2,n);puts(c2);编写函数 void fun(char *s,char *b,char *c) ,逐个比较 a、b 两个字符串对应位置中的字符,把ASC

25、II值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH b中的字符串为:ABcd,贝U c中的字符串应为: aBcdeFgH#include#includevoid fun(char *a,char *b,char *c)int i,l,m,k=0;if(strlen(a)strlen(b)l=strlen(a);m=strlen(b);else m=strlen(a);l=strlen(b);k=1;for(i=0;i=bi)ci=ai;elseci=bi;if(k=0)for(;il;i+)ci=ai;elsefor(;il;i+)ci=bi;c

26、i=0;void main()char s180,s280,s380;gets(s1);gets(s2);fun(s1,s2,s3);puts(s3);编写函数 void fun(char *s) ,将 s 所指字符串中的所有数字字符移到所有非数字字符之后, 并保持数字字符和非数字字符原有的前后次序。例如,若输入: num is 0532-66ouc78,OK. 执行结果为 :num is -ouc,OK.05326678 #include#includevoid swap(char *a,char *b)char temp;temp=*a;*a=*b;*b=temp;void fun(cha

27、r *s)char i;int n;int num,m=0,o=0; num=strlen(s);for (i=0;si!=0;i+)if (si=0) & (si=0) & (sim) break;for (n=i;n+1num;n+) swap(&sn,&sn+1);i-;void main()char a80;gets(a);fun(a);puts(a);选做 1:编写函数 int fun(char *str,char ch) ,统计字符串 str 中指定字符 ch 的个数, 统计结果 作为函数返回值带回。#include #includeint fun(char *str,char c

28、h)int i=0,k,j;k=strlen(str); for(j=0;jk;j+) if(ch=strj)i+;return(i);void main()char a100,b; puts(Please input a string:);gets(a);puts(Please input a character:);b=getchar(); printf(n=%dn,fun(a,b);选做2 编写函数float fun(int m),功能是:根据正整型形参m,计算如下公式的值:y=1-1/2+1/3-1/4+1/5.+(-)1/m,该值作为函数返回值。#include #includefl

29、oat fun(int m)float s=0;int i=1;for(i=1;im+1;i+) s+=1.0/i*pow(-1,i+1);if(i = 1)printf(1); continue;if (i%2 = 0)printf(-1/%d,i);elseprintf(+1/%d,i);printf(=%fn,s);void main()int x;scanf(%d,&x);fun(x);选做 3. 编写函数 int fun(int (*p)N,int m) ,功能:计算 m 行 N 列的二维数组外 围各数据之和。例如,下面程序输出: 57#include#define N 5int f

30、un(int (*p)N,int m)int s=0,i;for(i=0;im;i+)s=s+p0i; s=s+pm-1i;for(i=1;im-1;i+)s=s+pi0; s=s+pm-1i;return(s);void main() int a4N=3,2,5,4,2,6,2,3,9,1,4,6,1,8,6,7,6,5,4,2; printf(sum=%dn,fun(a,4);选做 4. 编写函数 int fun(float *p,int n) ,功能 :统计有 n 个数据的一维数组 p 中 大于平均值的数组元素个数。例如,若输入:3 5 6 1 2 8 9 6 输出: n=4#inclu

31、de int fun(float *p,int n)int i,s=0,j=0;float a;for(i=0;in;i+)a=s/n;for(i=0;ia) j+;return(j);void main() float a8;int n,i;for(i=0;i8;i+)scanf(%f,&ai);n=fun(a,8);printf(n=%dn,n);选做 5. 编写函数 float fun(float *p,int n) ,功能:计算有 n 个数据的一维数组 p 的平均值并返回。例如,若输入: 3 5 6 1 2 8 9 6 输出: average=5.00 注:部分程序代码在学号T2.C 文件中,请启动TC程序完成本题。#include float fun(float *p, int n)int i;float sum = 0;for (i = 0;i n;i+)sum+=pi;return sum/n;void main()float a8

温馨提示

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

评论

0/150

提交评论