中国海洋大学C程考试题库20题.docx

上传人:b****4 文档编号:4226202 上传时间:2022-11-28 格式:DOCX 页数:17 大小:20.93KB
下载 相关 举报
中国海洋大学C程考试题库20题.docx_第1页
第1页 / 共17页
中国海洋大学C程考试题库20题.docx_第2页
第2页 / 共17页
中国海洋大学C程考试题库20题.docx_第3页
第3页 / 共17页
中国海洋大学C程考试题库20题.docx_第4页
第4页 / 共17页
中国海洋大学C程考试题库20题.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

中国海洋大学C程考试题库20题.docx

《中国海洋大学C程考试题库20题.docx》由会员分享,可在线阅读,更多相关《中国海洋大学C程考试题库20题.docx(17页珍藏版)》请在冰豆网上搜索。

中国海洋大学C程考试题库20题.docx

中国海洋大学C程考试题库20题

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

考试时间:

40分钟

考试方式:

从下面的20题中随机抽取一题,再附加一题,共需完成2道题。

分值分配:

第一题60分,第二题40分,共100分

考试时间:

第十八周

1.请编写函数longfun(longintx),功能是:

将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。

例如:

程序运行时输入123456789,输出:

b=97531。

#include

longfun(longintx)

{longa,b=0;

a=x;

for(;a!

=0;)

{if((a%10)%2!

=0)

b=b*10+a%10;

a/=10;

}

returnb;

}

voidmain()

{longa,b;

printf("Pleaseinputalongintnum:

");

scanf("%ld",&a);

b=fun(a);

printf("b=%ld\n",b);

}

2.编写函数voidfun(char*s,char*t,char*p)将未在字符串s中出现、而在字符串t中出现的字符,形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。

例如:

当s为"12345",t为"8624677"时,p中的字符为:

"867";

当s为”goodluck”,t为”thankyouverymuch”时,输出:

”thanyverm”

#include

inttest(char*s,intn,charch)

{inti;

for(i=0;i

if(s[i]==ch)return1;

return0;

}

voidfun(char*s,char*t,char*p)

{inti,j;

for(i=j=0;t[i]!

=0;i++)

if(test(s,strlen(s),t[i])==0&&test(t,i,t[i])==0)

{p[j]=t[i];

j++;

}

p[j]=0;

}

voidmain()

{chars1[50],s2[50],s3[50];

gets(s1);gets(s2);

fun(s1,s2,s3);

puts(s3);

}

3.编写函数intfun(intm),计算并返回满足表达式:

1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。

例如,当m=10000时,程序输出:

n=38。

intfun(intm)

{inta,i,s;

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

for(i=1;i<=a;i++)

s+=i;

return(a-2);

}

voidmain()

{intx;

scanf("%d",&x);

printf("n=%d\n",fun(x));

}

4.编写函数voidfun(int*x,intn),它的功能是:

求出数组x中的最小数和次最小数,并把最小数和a[0]中的数对调、次最小数和a[1]中的数对调,其余的数保持不变。

如程序运行时若输入:

24611397058,则输出:

02611397458。

#defineN10

voidfun(int*x,intn)

{inti,j,k,t;

for(i=0;i<2;i++)

{k=i;

for(j=i+1;j

if(*(x+k)>*(x+j))

k=j;

if(k!

=i)

{t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;

}

}

main()

{inta[N],i;

for(i=0;i

scanf("%d",a+i);

fun(a,N);

for(i=0;i

printf("%d",a[i]);

printf("\n");

}

5.编写函数longfun(inthigh,intn),功能是:

计算并返回high以内(不包含high)最大的n个素数之和。

若不足n个,则到最小素数2为止。

例如:

若high=100,n=10,则函数的返回值为:

732;若high=11,n=10,则函数返回:

17。

longsushu(m)

{inti;

for(i=2;i

if(m%i==0)

break;

if(i>=m)return1;

elsereturn0;

}

longfun(inthigh,intn)

{inti,j=0;

longs=0;

if(high<=2)return0;

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

if(sushu(i))

{s+=i;

j++;

if(j>=n)

returns;

}

returns;

}

voidmain()

{intk,n;

scanf("%d%d",&k,&n);

printf("sum=%ld\n",fun(k,n));

}

6.请编写函数intfun(int*a,intn),它的功能是:

把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。

例:

若输入:

123456789101112131415,输出:

2468101214n=7

intfun(int*a,intn)

{inti,j,k=0;

*(a+n)=-1;

for(i=0;*(a+i)!

=-1;i++)

if(*(a+i)%2!

=0)

{for(j=i;*(a+j+1)!

=-1;j++)

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

*(a+j)=-1;

i--;

k++;

}

return(n-k);

}

voidmain()

{intx[15],i,n;

for(i=0;i<15;i++)

scanf("%d",x+i);

n=fun(x,15);

for(i=0;x[i]!

=-1;i++)

printf("%d",x[i]);

printf("n=%d\n",n);

}

7.给定程序中,函数fun的功能是:

有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。

例如,若N=5,有下列矩阵:

12345计算结果为:

10000

2345643000

3456768500

456788101270

56789101214169

#defineN5

voidfun(inta[N][N])

{inti,j;

for(i=0;i

for(j=0;j

if(j>i)

{a[j][i]+=a[i][j];

a[i][j]=0;

}

}

voidmain()

{intx[N][N]={{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;i

{for(j=0;j

printf("%3d",x[i][j]);

printf("\n");

}

}

8.函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。

转换后的二进制数以字符串的方式放置于p所指向的数组中。

如输入13,输出1101,输入-13,输出-1101。

#include"stdio.h"

voidfun(intx,char*p)

{char*q,t;

if(x<0){*p++='-';x=-x;}

if(x==0)

{*p++='0';*p=0;return;}

q=p;

for(;x!

=0;x/=2)

*p++=x%2+'0';

*p=0;

for(p--;q

{t=*q;*q=*p;*p=t;

}

}

main()

{inta;

charc[18];

scanf("%d",&a);

fun(a,c);

printf("%d'SBINARYIS:

%s\n",a,c);

}

9.编写函数intfun(char(*ss)[N],intm,char*s),功能是:

形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。

求出最大的字符串,复制到s所指的字符数组中,然后返回此最大字符串的长度。

#defineN30

intfun(char(*ss)[N],intm,char*s)

{inti,max;

max=0;

for(i=1;i

if(strcmp(ss[i],ss[max])>0)max=i;

strcpy(s,ss[max]);

returnstrlen(ss[max]);

}

main()

{chara[8][N],b[N];

inti,len;

for(i=0;i<8;i++)

gets(a[i]);

len=fun(a,8,b);

printf("len=%d,str=%s\n",len,b);

}

10.给定程序中,函数voidfun(char*s)的功能是:

在形参s所指字符串中的每个数字字符之后插入一个*号。

例如,形参s所指的字符串为:

def35adh3kjsdf7。

执行结果为:

def3*5*adh3*kjsdf7*。

#include

#include

voidfun(char*s)

{inti,j;

chara[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);

}

voidmain()

{charstr[80];

gets(str);fun(str);

puts(str);

}

11.给定程序中,函数voidfun(char*s)的功能是:

把形参s所指字符串中下标为偶数的字符右移到下一个偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动(注:

字符串的长度大于等于2)。

例:

若输入:

abcd123,输出:

3badc21

voidfun(char*s)

{inti,t,l;

l=strlen(s);

if(l%2==1)

{

t=s[l-1];

for(i=l-1;i>0;i-=2)

s[i]=s[i-2];

s[0]=t;

}

else

{

t=s[l-2];

for(i=l-2;i>0;i-=2)

s[i]=s[i-2];

s[0]=t;

}

}

voidmain()

{charstr[80];

gets(str);

fun(str);

puts(str);

}

12.编写函数voidfun(char*s1,char*s2),功能是:

对形参s1所指字符串升序排序,并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。

例如,下面程序若输入:

TheCProgrammingLanguage,输出:

□□LTaegghmnor。

(□表空格)

voidfun(char*s1,char*s2)

{inti,j,n;

chart;

for(i=0;*(s1+i)!

='\0';i++)

{n=i;

for(j=i;*(s1+j)!

='\0';j++)

{if(*(s1+n)>*(s1+j))n=j;}

t=*(s1+n);*(s+n)=*(s+i);*(s+i)=t;

}

for(i=0;*(s1+)!

='\0';i++)

{if(i%2==0)

{*s2=*(s1+i);

s2++;

}

}

*s2='\0';

}

voidmain()

{chara[80],b[80];

gets(a);

fun(a,b);

puts(b);

}

13.函数voidfun(chars[])的功能是:

将s所指字符串中ASCII值为奇数的字符删除。

例如,若s所指字符串中的内容为:

“ABCDEFG12345”,其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。

最后s中内容是:

“BDF24”。

voidfun(chars[])

{inti,j;

for(i=0;s[i]!

=0;i++)

{if(s[i]%2==1)

{for(j=i;s[j]!

=0;j++)

s[j]=s[j+1];

i--;

}

}

}

voidmain()

{chara[80];

gets(a);

fun(a);

puts(a);

}

14.请编写一个函数intfun(longintx),它的功能是:

判断整数x是否是同构数。

若是同构数,函数返回1;否则返回0。

所谓“同构数”是指这样的数,它出现在它的平方数的右边。

例如:

输入整数5,5的平方数是25,5是25中右侧的数,所以5是同构数,输出"Yes"。

要求x的值不大于10000。

intfun(longintx)

{longs;

s=x*x;

while(x!

=0)

{if(s%10!

=x%10)

return0;

x/=10;

s/=10;

}

return1;

}

voidmain()

{intx;

scanf("%d",&x);

if(fun(x)==1)

puts("Yse");

elseputs("No");

}

15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;若s2中剩余字符不足n个,则取到尾部。

程序运行时,当输入"abcd123"、4,3时应输出"d12";当我们输入"abcd123"、4,6时应输出"d123"。

注意,这里是将1作为起始计数。

#include

voidfun(chars1[],chars2[],intm,intn)

{inti,a,b;

a=strlen(s2);

b=(a

a:

m+n-1);

for(i=m-1;i

{*s1=*(s2+i);s1++;}

*s1='\0';

}

main()

{staticchara[100],b[100];

ints,len;

voidfun(chars1[],chars2[],intm,intn);

puts("ENTERASTRING:

");

gets(a);

puts("ENTERSTARTINGPOSITIONANDLENGTH:

");

scanf("%d,%d",&s,&len);

fun(b,a,s,len);

printf("THESRBSTINGIS:

%s\n",b);

}

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

输入输出在main中实现。

如输入"youHAVE10books,don'tyou?

"输出"YouHave10Books,Don'tYou?

"。

单词以空格、逗号、句号分隔。

#include

voidfun(char*str)

{inti,j;

for(i=0;str[i];i++)

if(str[i]>='A'&&str[i]<='Z')

str[i]+=32;

if(str[0]>='a'&&str[0]<='z')

str[0]-=32;

for(i=0;str[i];i++)

if(str[i]==''||str[i]==','||str[i]=='.')

{if(str[i+1]>='a'&&str[i+1]<='z')

str[i+1]-=32;

}

}

main()

{chara[100];

gets(a);

fun(a);

puts(a);

}

17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。

写函数voidfun(int*p,intn,intm),实现上述功能。

在main()中输入与输出。

如下面程序输出78910123456。

注意,m可能大于n。

#include"stdio.h"

voidfun(int*p,intn,intm)

{inti,j,k,t;

k=m%n;

for(i=0;i

{

t=p[n-1];

for(j=n-2;j>=0;j--)

p[j+1]=p[j];

p[0]=t;

}

}

main()

{voidfun(int*,int,int);

intx[10]={1,2,3,4,5,6,7,8,9,10},i;

fun(x,10,14);

for(i=0;i<10;i++)

printf("%d",x[i]);

printf("\n");

}

18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。

如输入abc12345,输出a1b2c345,若输入abcde123,则输出a1b2c3de。

#include

#include

voidfun(char*s1,char*s2)

{inti,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++;

}

}

main()

{chara[100],b[100];

voidfun(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,即为两人的缘分.编写计算缘分程序,两个生日由键盘输入.

#include"stdio.h"

intfun(longx,longy)

{inti,s,t;

for(i=0,s=0;i<8;i++)

{s+=(x%10+y%10);

x=x/10;y=y/10;

}

while(s>=10)

{for(i=0,t=0;s;i++)

{t+=s%10;

s=s/10;

}

s=t;

}

returns;

}

main()

{longx,y;

intk;

scanf("%ld%ld",&x,&y);

k=fun(x,y);

printf("yuanfenis%d",k);

}

20.m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。

到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)及。

若m=6,则输出n=1364251;若m=10,则输出n=43692785104;若m=100,则输出n=91……。

函数intfun(intn,int*p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。

#include

#include

#include

intfun(intn,int*p)

{inti,*s,j,k,t;

s=(int*)malloc(sizeof(int)*n);

for(i=0;i

s[i]=i+1;

t=0;

for(k=0,i=0,j=0;k

{if(s[i]!

=0)

{j++;

if(j==3)

{p[t]=s[i];

t++;

s[i]=0;

j=0;k++;

}

}

if(i==n-1)i=-1;

}

for(i=0;i

if(s[i]!

=0)break;

p[t]=s[i];

returns[i];

}

voidmain()

{intm,a[10000],i,num;

scanf("%d",&m);

num=fun(m,a);

printf("n=%d\n",num);

for(i=0;i

printf("%8d",a[i]);

printf("\n");

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1