海大c程序设计2010年上机及答案.doc

上传人:啊飒飒 文档编号:10720719 上传时间:2021-06-01 格式:DOC 页数:19 大小:125KB
返回 下载 相关 举报
海大c程序设计2010年上机及答案.doc_第1页
第1页 / 共19页
海大c程序设计2010年上机及答案.doc_第2页
第2页 / 共19页
海大c程序设计2010年上机及答案.doc_第3页
第3页 / 共19页
海大c程序设计2010年上机及答案.doc_第4页
第4页 / 共19页
海大c程序设计2010年上机及答案.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《海大c程序设计2010年上机及答案.doc》由会员分享,可在线阅读,更多相关《海大c程序设计2010年上机及答案.doc(19页珍藏版)》请在三一文库上搜索。

1、C 程序设计课程期末上机考试考试时间:50 分钟考试方式:从下面的20 题中随机抽取一题,再附加一题,共需完成2 道题。分值分配:第一题60 分,第二题40 分,共100 分考试时间:第十八周1 请编写函数long fun(long int x),功能是:将长整型数x 中每一位上为奇数的数依次取出,并逆序构成一个新数返回。例如:程序运行时输入123456789,输出:b=97531。#includelong fun(long int x)long m,n,i;n=x;m=0;while(n!=0)i=n%10;if(i%2=1)m*=10;m+=i;n-=i;n=n/10;return m;v

2、oid main()long a,b;printf(Please input a long int num:);scanf(%ld,&a);b=fun(a);printf(b=%ldn,b);2 编写函数void fun(char *s,char *t,char *p)将未在字符串s 中出现、而在字符串t 中出现的字符, 形成一个新的字符串放在p 中,p 中字符按原字符串中字符顺序排列,但去掉重复字符。例如: 当s 为12345, t 为8624677时, p 中的字符为: 867;当s 为”good luck”,t 为”thank you very much”时,输出:”thanyverm”

3、2#include#includevoid fun(char *s,char *t,char *p)int i,j,n;int flag;char *x,*y,*z;y=t;z=p;n=0;for(i=0;i50;i+)if(*y=0)*z=0;break;x=s;flag=0;for(j=0;j50;j+)if(*x=0)break;if(*x=*y)flag=1;break;x+;if(flag=0)x=p;for(j=0;jn;j+)if(*x=*y)flag=1;break;x+;if(flag=0)3*z=*y;z+;n+;y+;void main()char s150,s250,s

4、350;gets(s1);gets(s2);fun(s1,s2,s3);puts(s3);3 编写函数int fun(int m),计算并返回满足表达式:1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+n)=m 最大的n。例如,当m=10000 时,程序输出:n=38。#includeint fun(int m)int n=0,s=0,t=0;while(s=m)n+;t+=n;s+=t;return n-1;void main()int x;scanf(%d,&x);printf(n=%dn,fun(x);4编写函数void fun(int *x,int n),它的功能是:

5、删除数组x中所有包含数字6的数据,后续的剩余元素赋值为-1。规定x中数据都为正数。如程序运行时若输入:122 1461 6234 16 11 663 911 2671 381 6删除后输出: 122 11 911 381 -1 -1 -1 -1 -1 -1#define N 10 #includevoid fun(int *x,int n) int i,j,s=0; for(i=0;i10;i+)/查找含6的数据 for(j=xi;j!=0;j/=10) if(6=j%10) xi=-1; s+; break; for(i=0;i10 & s!=0;i+)/更改数据 if(-1=xi) for

6、(j=i;j10;j+) if(-1!=xj) break; xi=x-j; xj=-1; s-; 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); 5 编写函数long fun(int high,int n),功能是:计算并返回high 以内(不包含high)最大的n 个素数之和。若不足n 个,则到最小素数2 为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。#includ

7、e#includelong fun(int high,int n)int i,f;long max,s,m;if(high%2=1)max=high-2;elsemax=high-1;s=0;m=0;while(m2)f=0;for(i=3;i=sqrt(max);i+=2)if(max%i=0)f=1;break;if(f=0)s+=max;m+;max-=2;if(mn)s+=2;6return s;void main()int k,n;scanf(%d%d,&k,&n);printf(sum=%ldn,fun(k,n);6 请编写函数int fun(int *a,int n),它的功能是

8、:把形参a 所指数组中的偶数按原顺序依次存放到a0、a1、a2、中,把奇数从数组中删除,偶数个数通过函数值返回,以-1 作为有效数据的结束标志。例:若输入:1 2 3 4 5 6 78 9 10 11 12 13 14 15,输出:2 4 6 8 10 12 14 n=7#includeint fun(int *a,int n)int i,j;i=0;for(j=0;ji)*(a+j)=-1;i+;return i;void main()int x15,i,n;for(i=0;i15;i+)scanf(%d,x+i);n=fun(x,15);for(i=0;xi!=-1;i+)printf(%

9、d ,xi);printf(n=%dn,n);77给定程序中,函数fun的功能是:有MN二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:11 52 43 4 25 22 求最大值并对调后:11 22 43 4 25 5222 33 46 58 16 47 22 33 46 47 16 5883 42 54 26 47 0 0 42 54 26 47 834 5 6 7 8 9 4 5 6 7 8 945 96 17 18 39 2 45 2 17 18 39 96排序后最终输出:45

10、2 17 18 39 960 42 54 26 47 8322 33 46 47 16 5811 22 43 4 25 524 5 6 7 8 9#define N 6#define M 5#includevoid fun(int aMN) int i,j,k,m,t; for(i=0;iM;i+) k=0; for(j=1;jN;j+) if(aikaij) k=j; t=aik; aik=aiN-1; aiN-1=t; for(i=0;iM-1;i+) k=i; for(j=i+1;jM;j+) if(akN-1ajN-1) k=j; if(i!=k) for(m=0;mN;m+) t=a

11、km; akm=aim; aim=t; void main()int xMN=11,52,43,4,25,22,22,33,46,58,16,47,83,42,54,26,47,0,4,5,6,7,8,9,45,96,17,18,39,2,i,j;fun(x);for(i=0;iM;i+) for(j=0;jN;j+) printf(%3d,xij); printf(n); 88. 函数void fun(int x,char * p)实现十进制整数x 到二进制的转换。转换后的二进制数以字符串的方式放置于p 所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#includev

12、oid fun(int x,char *p)int m=0x40000000;unsigned int i=0;if(x1;while(m!=0)if(m&x)=0)*(p+i)=0;i+;else*(p+i)=1;i+;m=m1;*(p+i)=0;main()int a;char c18;scanf(%d,&a);fun(a,c);printf(%dS BINARY IS: %sn,a,c);9. 编写函数int fun(char (*ss)N,int m,char *s),功能是:形参ss 指向一个m 行N 列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s9所指的字符数组中

13、,然后返回此最大字符串的长度。#include#define N 30int fun(char (*ss)N,int m,char *s)int len20;int i,j,t,n;char *p;n=N;p=ss;for(i=0;im;i+)leni=0;while(*(p+i*n+leni)!=0)leni+;t=len0;j=0;for(i=1;it)t=leni;j=i;for(i=0;it;i+)*(s+i)=*(p+j*n+i);*(s+t)=0;return t;main()char a8N,bN;int i,len;for(i=0;i8;i+)gets(ai);len=fun(

14、a,8,b);printf(len=%d,str=%sn,len,b);10 给定程序中,函数void fun(char *s)的功能是:在形参s 所指字符串中的每个数字字符之后插入一个*号。例如,形参s 所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。10#include#include#includevoid fun(char *s)char str80;int i,j;i=0;j=0;while(*(s+i)!=0)strj=*(s+i);j+;if(*(s+i)=0x30 & *(s+i)0x40)strj=*;j+;i+;strj=

15、0;for(i=0;i80;i+)*(s+i)=stri;void main()char str80;gets(str);fun(str);puts(str);11给定程序中,函数void fun(char *s)的功能是:把形参s 所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21#includevoid fun(char *s)int len=0;int i;11char t,r;while(*(s+len)!=0)len+;t=*(s);fo

16、r(i=0;ilen;i+=2)r=*(s+i);*(s+i)=t;t=r;*s=t;void main()char str80;gets(str);fun(str);puts(str);12编写函数void fun(char *s1,char *s2),功能是:对形参s1 所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2 所指字符数组中,形成一个新串。例如,下面程序若输入:The C Programming Language ,输出:LTaegghmnor。(表空格)#includevoid fun(char *s1,char *s2)char t80,c;int i,j,l

17、en=0;while(*(s1+len)!=0)tlen=*(s1+len);len+;for(i=len-1;i0;i-)for(j=0;jtj+1)c=tj;tj=tj+1;tj+1=c;12j=0;for(i=0;ilen;i+=2)*(s2+j)=ti;j+;*(s2+j)=0;void main()char a80,b80;gets(a);fun(a,b);puts(b);13函数void fun(char s)的功能是:将s 所指字符串中ASCII 值为奇数的字符删除。例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符A 的ASCII码值为奇数、字符1 的AS

18、CII 码值也为奇数、都应当删除,其它依此类推。最后s 中内容是:“BDF24”。#includevoid fun(char s)int i,j;i=0;j=0;while(si!=0)if(si%2=0)sj=si;j+;elsesi=0;i+;sj=0;void main()13char a80;gets(a);fun(a);puts(a);14请编写一个函数int fun(long int x),它的功能是:判断整数x 是否是同构数。若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5 的平方数是25,5 是25 中右侧的数,所以

19、5 是同构数,输出Yes。要求x 的值不大于10000。#include#includeint fun(long int x)int n;long y;y=x*x;n=log10(x)+1;n=pow(10,n);if(y%n=x)return 1;elsereturn 0;void main()int x;scanf(%d,&x);if(fun(x)=1)puts(Yes);elseputs(No);15编写取子字符串函数void fun(char s1,char s2,int m,int n),其作用是将字符数组s2 中从第m 个字符开始的共n 个字符拷贝到数组s1 中;若s2 中剩余字符

20、不足n 个,则取到尾部。程序运行时,当输入abcd123、4,3 时应输出d12;当我们输入abcd123、4,6 时应输出d123。注意,这里是将1 作为起始计数。#includevoid fun(char s1,char s2,int m,int n)14int i;for(i=0;in;i+)s1i=s2m+i-1;s1n=0;main()static char a100,b100;int s,len;void fun(char s1,char s2,int m,int n);puts(ENTER A STRING:);gets(a);puts(ENTER STARTING POSITI

21、ON AND LENGTH:);scanf(%d,%d,&s,&len);fun(b,a,s,len);printf(THE SRBSTING IS:%sn,b);16. 编写函数void fun(char *str),将参数字符串中各单词首字母变大写,其余字母变小写。输入输出在main 中实现。如输入you HAVE 10 books,dont you? 输出You Have 10 Books,Dont You?。单词以空格、逗号、句号分隔。#includevoid fun(char *str)int hf=1;char *p=str;while(*p!=0)if(*p=A & *p=a &

22、 *p=z)if(hf=0)p+;continue;else*p-=32;hf=0;p+;continue;switch(*p)case .:case ,:case :hf=1;default:p+;continue;void main()char a100;gets(a);fun(a);puts(a);17. n 个整数,前面各数循环顺序后移m 个位置,最后m 个数变成最前面m 个数。写函数void fun(int *p,int n,int m),实现上述功能。在main()中输入与输出。如下面程序输出 7 8 9 10 1 2 3 4 5 6 。注意,m 可能大于n。#includevoi

23、d fun(int *p,int n,int m)int a80;int i;for(i=0;in;i+)ai=*(p+i);16for(i=0;in;i+)*(p+(i+m)%10)=ai;void main()void fun(int *,int ,int );int x10=1,2,3,4,5,6,7,8,9,10,i;fun(x,10,14);for(i=0;i10;i+)printf(%d ,xi);printf(n);18. 编写函数void fun(char *s1,char *s2),实现字符串s1 与s2 的交叉连接,连接后得到的新字符串放在s1 中。如输入abc12345,

24、输出a1b2c345,若输入abcde123,则输出a1b2c3de。#include#includevoid fun(char *s1,char *s2)char *p1,*p2;char c100;int i;p1=s1;p2=s2;i=0;while(*p1!=0 | *p2!=0)if(*p1!=0)ci=*p1;i+;p1+;if(*p2!=0)ci=*p2;i+;p2+;17ci=0;i=0;p1=s1;while(ci!=0)*p1=ci;p1+;i+;*p1=0;main()char a100,b100;void fun(char *,char *);gets(a);gets(

25、b);fun(a,b);puts(a);19. 传说可以根据两个人的生日来计算其缘分.方法:将两个人的生日各位相加,将得到的数再一次各位相加,直到其值为一个一位数,此数即代表两个人的缘分.例如,两个生日为:19820523,19841111,则各位相加:1+9+8+2+5+2+3+1+9+8+4+1+1+1+1得:56;再5+6 得11;再 1+1 得2,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入.#includeint fun(long x,long y)int s=0;int i;long m,n,k;m=x;n=y;for(i=0;i9)m=s;s=m%10;m-=s;m=m/

26、10;s+=m;return s;void main()long x,y;int k;scanf(%ld%ld,&x,&y);k=fun(x,y);printf(yuan fen is %d,k);20. m 个人围成一圈,1,2,3 循环报数,报到3 的人退出,并将退出的序号依次存到数组p 中,包括最后一个人的序号。到最后只余1 人,输出最后留下的是第几号(最初的序号,以1 起始)及。若m=6,则输出n=1 3 6 4 2 5 1;若m=10,则输出n=4 3 6 9 2 7 8 5 10 4;若m=100,则输出n=91。函数int fun(intn ,int *p)实现上述功能,返回n

27、个人中最后余的1 人的起始序号,并将退出的序号顺序写入p 指向的数组中。#includeint fun(int n ,int *p)int a10000;int i,j,k,m;for(i=0;i0)if(j=3)19if(ai=1)*(p+n-m)=i+1;ai=0;m-;k=i+1;j=1;i=(i+1)%n;elsei=(i+1)%n;elseif(ai=1)j+;i=(i+1)%n;elsei=(i+1)%n;return k;void main()int m,a10000,i,num;scanf(%d,&m);num= fun(m,a);printf(n=%dn,num);for(i=0;im;i+)printf(%8d ,ai);printf(n);_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1