您好,欢迎来到花图问答。
搜索
您的当前位置:首页中国海洋大学上机题考试题2014秋季学期

中国海洋大学上机题考试题2014秋季学期

来源:花图问答


《C程序设计》课程期末上机考试

考试时间:50分钟 考试方式:从下面的20题中随机抽取一题,再附加一题,共需完成2道题。

附加题不事先给定

分值分配:第一题60分,第二题40分,共100分 考试时间:2015.1.22 具体时间与安排见网站通知

1. 请编写函数long fun(long int x),功能是:将长整型数x中每一位上为奇数的

数依次取出,并逆序构成一个新数返回。例如:程序运行时输入1234567,输出:b=97531。 #include long fun(long int x) { int c,d=0;

do{

c=x%10;

if(c%2!=0); d=d*10+c; x=x/10; }

while (x); return d; }

void main() {long a,b;

printf(\"Please input a long int num:\"); scanf(\"%ld\ b=fun(a);

printf(\"b=%ld\\n\}

2. 编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字

符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。

例如: 当s为\"12345\为\"8624677\"时, p中的字符为: \"867\";

当s为”good luck”,t为”thank you very much”时,输出:”thanyverm” #include #include

void fun(char *s,char *t,char *p) { int i,a[256]={0}; for(i=0;t[i];i++) a[t[i]]=1;

1

for(i=0;s[i];i++) a[s[i]]=0; for(i=0;t[i];i++) {

if(!a[t[i]]) continue; *p++=t[i]; a[t[i]]=0; }

*p='\\0'; }

void main()

{char s1[50],s2[50],s3[50]; 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。 #include int fun(int m) {

int s=0,a,i;

for(i=0,a=0;s<=m;i++) {

a+=i; s+=a; }

return(i-2); }

void main() {int x;

scanf(\"%d\

printf(\"n=%d\\n\}

4. 编写函数void fun(int *x,int n),它的功能是:删除有n个数据的数组x

中所有包含数字6的数据,后续的剩余元素赋值为-1。n为数组长度,规定x中数据都为正数。

如程序运行时若输入:122 1461 6234 16 11 663 911 2671 381 6

2

删除后输出: 122 11 911 381 -1 -1 -1 -1 -1 -1 #define N 10

#include

void fun(int *x,int n) {

int i,j=0,k,t; for (i=0;ik=x[i]; while (k!=0) { t=k%10;

if(t==6) break; else k=k/10; }

if(k==0)

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

for(;jvoid main() {int a[N],i;

for(i=0;ifor(i=0;iprintf(\"%d \ printf(\"\\n\"); }

5. 编写函数long fun(int high,int n),功能是:计算并返回high以内(不包含

high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。 #include

long fun(int high,int n) {

int i,j,m,x=0,sum=0;

3

for (i=high-1;i>=2;i--) {

m=sqrt(i);

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

if(i%j==0) break; if(j>m)

{sum+=i;x++;} if(x==n) break; }

return(sum); }

void main() {int k,n;

scanf(\"%d%d\

printf(\"sum=%ld\\n\}

6. 请编写函数int fun(int *a,int n),它的功能是:把形参a所指数组中的偶数

按原顺序依次存放到a[0]、a[1]、a[2]、„„中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15,输出:2 4 6 8 10 12 14 n=7 #include int fun(int *a,int n) { int i,j=0;

for(i=0;ia[j]=*(a+i); j++; }

a[j]=-1; return(j); }

void main() {int x[15],i,n; for(i=0;i<15;i++) scanf(\"%d\ n=fun(x,15);

for(i=0;x[i]!=-1;i++) printf(\"%d \

4

printf(\"n=%d\\n\}

7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本

行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据:

11 52 43 4 25 22 求最大值并对调后:11 22 43 4 25 52 22 33 46 58 16 47 22 33 46 47 16 58 83 42 26 47 0 0 42 26 47 83 4 5 6 7 8 9 4 5 6 7 8 9 45 96 17 18 39 2 45 2 17 18 39 96 排序后最终输出:

45 2 17 18 39 96 0 42 26 47 83 22 33 46 47 16 58 11 22 43 4 25 52 4 5 6 7 8 9

#define N 6 #define M 5

#include void fun(int a[M][N]) {

int i,j,t,m,max,k; for(i=0;i<5;i++) {

max=a[i][0];m=0; for(j=1;j<6;j++) {

if(maxmax=a[i][j]; m=j; } }

t=a[i][m];

a[i][m]=a[i][5]; a[i][5] =t; }

for(k=0;k<4;k++) for(i=0;i<4-k;i++)

5

if(a[i][5]t=a[i][j];

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

void main()

{int x[M][N]={{11,52,43,4,25,22},{22,33,46,58,16,47},{83,42,,26,47,0},

{4,5,6,7,8,9},{45,96,17,18,39,2}},i,j;

fun(x);

for(i=0;i{for(j=0;jprintf(\"%3d\ printf(\"\\n\"); } }

8. 函数void fun(int x,char * p)实现十进制整数x到二进制的转换。转换后的二

进制数以字符串的方式放置于p所指向的数组中。如输入13,输出1101,输入-13,输出-1101。 #include \"stdio.h\" #include

void fun(int x,char *p) {

int i,k=x; char s[80]; for(i=0;;i++) {

if(x%2==0) s[i]='0'; else

s[i]='1'; x/=2;

if(x==0) break; }

if(k<0)

*(p+0)='-';

for(;i>=0;i--,p++)

6

if(k<0)

*(p+1)=s[i]; else

*p=s[i]; if(i==-1) {

if(k<0)

*(p+1)='\\0'; else

*p='\\0'; } }

void main() {int a;

char c[18]; scanf(\"%d\ fun(a,c);

printf(\"%d'S BINARY IS: %s\\n\}

9. 编写函数int fun(char (*ss)[N],int m,char *s),功能是:形参ss指向一个

m行N列的二维字符数组,每行存放一个字符串。求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。 #define N 30

#include #include

int fun(char (*ss)[N],int m,char *s) {

int i;

s=strcpy(s,*(ss+0)); for (i=0;iif(strcmp(*(ss+i),s)>0) strcpy(s,*(ss+i)); return(strlen(s)); }

void main()

{char a[8][N],b[N]; int i,len;

for(i=0;i<8;i++) gets(a[i]);

7

len=fun(a,8,b);

printf(\"len=%d,str=%s\\n\ }

10. 给定程序中,函数void fun(char *s)的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdf7*。 #include #include #include void fun(char *s) {

int i,j; char a[100];

for(i=0,j=0;*(s+i)!='\\0';i++,j++) {

a[j]=*(s+i);

if(*(s+i)>='0'&&*(s+i)<='9') {

*(a+j+1)='*';j++; } }

a[j]='\\0'; strcpy(s,a); }

void main() {char str[80]; gets(str); fun(str); puts(str); }

11.给定程序中,函数void fun(char *s)的功能是:把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:字符串的长度大于等于2)。例:若输入:abcd123,输出:3badc21 #include void fun(char *s) {

char temp; int i,j;

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

8

if(i%2==0)j=i; temp=s[j];

for(i=j;i>=2;i=i-2) s[i]=s[i-2]; s[0]=temp; }

void main() {char str[80]; gets(str); fun(str); puts(str); }

12.编写函数void fun(char *s1,char *s2),功能是:对形参s1所指字符串升序排

序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。例如,下面程序若输入:The C Programming Language,输出:□□LTaegghmnor。(□表空格) #include

void fun(char *s1,char *s2) {

int i,j,k,n=0; char t;

for(i=0;s1[i]!=0;i++) n+=1; for(i=0;ifor(j=i+1;jif(k!=i) {t=s1[k];s1[k]=s1[i];s1[i]=t;} }

for(i=0,j=0;iif(i%2==0) {

s2[j]=s1[i];j++; } }

s2[j]=0; }

void main()

{char a[80],b[80];

9

gets(a); fun(a,b); puts(b); }

13.函数void fun(char s[])的功能是:将s所指字符串中ASCII值为奇数的字符删

除。例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值为奇数、„、字符1的ASCII码值也为奇数、„都应当删除,其它依此类推。最后s中内容是:“BDF24”。 #include void fun(char s[]) {

int i,j;

for(i=0;s[i]!='\\0';i++) if(s[i]%2!=0) {

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

void main() {char a[80]; gets(a); fun(a); puts(a); }

14.请编写一个函数int fun(long int x),它的功能是:判断整数x是否是同构数。

若是同构数,函数返回1;否则返回0。所谓“同构数”是指这样的数,它出现在它的平方数的右边。例如:输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出\"Yes\"。要求x的值不大于10000。 #include int fun(long int x) {

long m,a;

for(a=10; ;a*=10) {

m=x*x%a;

if(x==m) return(1);

10

if(x*x/a==0) return(0); } }

void main() {int x;

scanf(\"%d\ 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中剩余字符不足n个,则取到尾部。程序运行时,当输入\"abcd123\"、4,3时应输出\"d12\";当我们输入\"abcd123\"、4,6时应输出\"d123\"。注意,这里是将1作为起始计数。 #include #include

void fun(char s1[],char s2[],int m,int n) {

int i,a,b; a=strlen(s2);

b=(a*s1=*(s2+i);s1++; }

*s1='\\0'; }

void main()

{static char a[100],b[100]; int s,len;

void fun(char s1[],char s2[],int m,int n); puts(\"ENTER A STRING:\"); gets(a);

puts(\"ENTER STARTING POSITION AND LENGTH:\"); scanf(\"%d,%d\ fun(b,a,s,len);

printf(\"THE SRBSTING IS:%s\\n\}

16. 编写函数void fun(char *str),将参数字符串中各单词首字母变大写,其余字

11

母变小写。输入输出在main中实现。如输入\"you HAVE 10 books,don't you? \" 输出\"You Have 10 Books,Don't You?\"。单词以空格、逗号、句号分隔。 #include void fun(char *str) {

int i;

if(*(str+0)>='a'&&*(str+0)<='z') *(str+0)=*(str+0)-32;

for(i=1;*(str+i)!='\\0';i++) {

if(*(str+i-1)==' '||*(str+i-1)==','||*(str+i-1)=='.') {

if(*(str+i)>='a'&&*(str+i)<='z') *(str+i)=*(str+i)-32; } else

if(*(str+i)>='A'&&*(str+i)<='Z') *(str+i)=*(str+i)+32; } }

void main() {char a[100]; 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.h\"

void fun(int *p,int n,int m) {

int i,j;

for(i=1;i<=m;i++) {

for(j=n-1;j>=0;j--) *(p+j+1)=*(p+j); *(p+0)=*(p+n); }

12

}

void main()

{void fun(int *,int ,int );

int x[10]={1,2,3,4,5,6,7,8,9,10},i; fun(x,10,14); for(i=0;i<10;i++) printf(\"%d \ printf(\"\\n\"); }

18. 编写函数void fun(char *s1,char *s2),实现字符串s1与s2的交叉连接,连接

后得到的新字符串放在s1中。如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。 #include #include

void fun(char *s1,char *s2) {

int i,j,k;

for(j=0,i=1;s2[j]!='\\0';) {

for(k=strlen(s1);k>=i;k--) s1[k+1]=s1[k]; s1[i]=s2[j]; j++;i++;

if(s1[i]) i++; } }

void main()

{char a[100],b[100];

void fun(char *,char *); gets(a); gets(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,即为两人的缘分.编写计算缘分程序,两个生日由

13

键盘输入.

#include \"stdio.h\" int fun(long x,long y) {

long sum=0,m;

for(m=x+y;m>0||sum>=10;) {

sum+=m%10; m/=10;

if(m==0&&sum>=10) {

m=sum; sum=0; } }

return(sum); }

void main() {long x,y; int k;

scanf(\"%ld%ld\k=fun(x,y);

printf(\"yuan fen is %d\}

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 1 8 5 10 4;若m=100,则输出n=91 3 6 9„„100 58 91。函数int fun(int n ,int *p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。 #include

int fun(int n ,int *p) {

int arr1[10000]={0}; int i,j; int t1,t2;

for(i=0;iarr1[i]=i+1;

14

}

*p=arr1[2]; p++;

for(j=0;jt1=arr1[0]; t2=arr1[1];

for(i=0;iarr1[i]=arr1[i+3]; }

arr1[n-3-j]=t1; arr1[n-2-j]=t2; *p=arr1[2]; p++; }

*p=arr1[0]; p++;

*p=arr1[1]; return *p; }

void main()

{int m,a[10000],i,num; scanf(\"%d\ num= fun(m,a);

printf(\"n=%d\\n\ for(i=0;iprintf(\"%8d \ printf(\"\\n\"); }

15

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务