C程上机试题及答案_第1页
C程上机试题及答案_第2页
C程上机试题及答案_第3页
C程上机试题及答案_第4页
C程上机试题及答案_第5页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

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

文档简介

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

2、d 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”#includevo

3、id fun(char *s,char *t,char *p) int I,j,s1,t1,k,u1=0;s1=strlen(s);t1=strlen(t);for(I=0;It1;I+)for(j=0;j=s1)for(k=0;k=u1)pu1+=tI;pu1=;void main()char s150,s250,s350;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=3

4、8。int fun(int m)int i,sum1=0,sum2=0;for(i=1;sum2=m;i+)sum1=sum1+i;sum2+=sum1;return(i-2);void main()int x;scanf(%d,&x);printf(n=%dn,fun(x);4 编写函数void fun(int *x,int n),它的功能是:求出数组x中的最小数和次最小数,并把最小数和a0中的数对调、次最小数和a1中的数对调,其余的数保持不变。如程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:0 2 6 11 3 9 7 4 5 8。#define N 10void f

5、un(int *x,int n)int i,j,t,s;for(i=0;i2;i+)for(j=i+1,s=i;jn;j+)if(xjxs)s=j;t=xs;xs=xi;xi=t;main()int aN,i;for(i=0;iN;i+)scanf(%d,a+i);fun(a,N);for(i=0;i=2;i-)m=sqrt(i);for(j=2;jm) sum+=i;x+;if(x=n) break;return(sum);void main()int k,n;scanf(%d%d,&k,&n);printf(sum=%ldn,fun(k,n);6 请编写函数int fun(int *a,i

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

7、or(i=0;xi!=-1;i+)printf(%d ,xi);printf(n=%dn,n);7给定程序中,函数fun的功能是:有NN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=5,有下列矩阵:1 2 3 4 5 计算结果为:1 0 0 0 02 3 4 5 6 4 3 0 0 03 4 5 6 7 6 8 5 0 04 5 6 7 8 8 10 12 7 05 6 7 8 9 10 12 14 16 9#define N 5void fun(int aNN)int i,j;for(i=0;iN;i+)for(j=0;ji)aji+=a

8、ij;aij=0;void main()int xNN=1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9,i,j;fun(x);for(i=0;iN;i+)for(j=0;jN;j+)printf(%3d,xij); printf(n);8. 函数void fun(int x,char * p)实现十进制整数x到二进制的转换。转换后的二进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。#include stdio.hvoid fun(int x,char *p)int i,k=x;char s80

9、;for(i=0; ;i+)if(x%2=0) si=0;else si=1;x/=2;if(x=0) break;if(k=0;i-,p+)if(k0) *(p+1)=si;else *p=si;if(i=-1)if(k0) *(p+1)=;else *p=;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列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数

10、组中,然后返回此最大字符串的长度。#define N 30int fun(char (*ss)N,int m,char *s)int i;s=strcpy(s,*(ss+0);for (i=0;i0)strcpy(s,*(ss+i);return(strlen(s);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);10 给定程序中,函数void fun(char *s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串

11、为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。#include#includevoid fun(char *s) int i,j;char a100;for(i=0,j=0;si!=;i+,j+)aj=si;if(si=0&si=9)aj+1=*;j+;aj=;strcpy(s,a);void main()char str80;gets(str);fun(str);puts(str);11给定程序中,函数void fun(char *s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,

12、下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21void fun(char *s) int i;char t;for(i=1;*(s+i)!=;i+)if(i%2=0)t=*(s+0);*(s+0)=*(s+i);*(s+i)=t;void main()char str80;gets(str);fun(str);puts(str);12编写函数void fun(char *s1,char *s2),功能是:对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:The C

13、Programming Language,输出:LTaegghmnor。(表空格)void fun(char *s1,char *s2)int i,j,k; char x;k=strlen(s1);for(i=0;ik-1;i+)for(j=i+1;js1j)x=s1i;s1i=s1j;s1j=x;for(i=j=0;ik;i+)if(i%2=0)s2j=s1i;j+;s2j=;void main()char a80,b80;gets(a);fun(a,b);puts(b);13函数void fun(char s)的功能是:将s所指字符串中ASCII值为奇数的字符删除。例如,若s所指字符串中的

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

15、整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出Yes。要求x的值不大于10000。int fun(long int x) long m,a;for(a=10; ;a*=10)m=x*x%a;if(x=m) return(1);if(x*x/a=0) return(0);void main()int x;scanf(%d,&x);if(fun(x)=1)puts(Yse);else puts(No);15编写取子字符串函数void fun(char s1,char s2,int m,int n),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩

16、余字符不足n个,则取到尾部。程序运行时,当输入abcd123、4,3时应输出d12;当我们输入abcd123、4,6时应输出d123。注意,这里是将1作为起始计数。#includevoid fun(char s1,char s2,int m,int n) int a,i,j=0;a=strlen(s2);if(m+n-1a)for(i=m-1;i=a)for(i=m-1;ia;i+)s1j=s2i;j+;s1j=;main()static char a100,b100;int s,len;void fun(char s1,char s2,int m,int n);puts(ENTER A ST

17、RING:);gets(a);puts(ENTER STARTING POSITION 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 i;if

18、(*(str+0)=a&*(str+o)=a&*(str+i)=A&*(str+i)=Z)*(str+i)=*(str+i)+32; 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。#include stdio.hvoid fun(int *p,int n,int m) int i,j;m=m%n;for(

19、i=1;i=0;j-)pj+1=pj;p0=pn;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;i=i;k-)s1k+1=s1k;s1i=s2j;j+;i+;if(s1i) i+;main()char a100,b100;void fun(char *,char *);gets(a);gets(b);fun(a,b);puts(a);19. 传说可以根据两个人的生日来计算其缘分.方法:将两个人的生日各位相加,将得到的数再一次各位相加,直到其值为一个一位数,此数即代表两个人的

20、缘分.例如,两个生日为:19820523,19841111,则各位相加:1+9+8+2+5+2+3+1+9+8+4+1+1+1+1得:56;再5+6得11;再 1+1得2,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入.#include stdio.hint fun(long x,long y) long sum=0,m;for(m=x+y;m0|sum=10;) sum+=m%10;m/=10;if(m=0&sum=10)m=sum;sum=0;return(sum);main()long x,y;int k;scanf(%ld%ld,&x,&y);k=fun(x,y);printf(

21、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(int n ,int *p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。int fun(int n ,int *p)int i=0,j,k=0,m=0;int *a;a=malloc(n);for(j=0;j*(a+j)=j+1;j=0;while(m=n-1)

温馨提示

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

评论

0/150

提交评论