中国海洋大学春上机试题高档题答案Word文件下载.docx
《中国海洋大学春上机试题高档题答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《中国海洋大学春上机试题高档题答案Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
if(num%2==0)
{
s=s+num*wei;
wei=wei*10;
}
x=(x-num)/10;
}
returns;
2
【问题描述】
计算并返回满足表达式:
1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<
=m最大的n。
【输入形式】
从标准输入中输入一个长整形数m
【输出形式】
将生成的最大n输出到标准输出中
【样例输入】
m=10000
【样例输出】
n=38
intm,n;
m="
);
%d"
m);
n=fun(m);
n=%d"
n);
intfun(intm)
intn,i;
ints=0;
for(n=1;
s<
=m;
n++)
for(i=1;
i<
=n;
i++)s=s+i;
returnn-2;
3
【问题描述】输出比x大的最初k(k<
1000)个素数,x和k键盘输入,输出时用一个空格分隔数据。
注意最小的素数是2。
【样例输入】710
【样例输出】11131719232931374143
【样例说明】-710
【样例输出】2357111317192329
math.h>
voidfun(int,int);
intx,k;
%d%d"
x,&
k);
if(x<
=2)//x<
=2时素数由2找起
x=2;
fun(x,k);
if(x>
2)//x>
2时素数由x+1开始找起;
x=x+1;
voidfun(intn,intk)
intj,i;
j=0;
//记录输出的素数数量
for(;
j<
k;
for(i=2;
=sqrt(n);
if(n%i==0)break;
if(i>
sqrt(n))
printf("
%d"
j++;
4
【问题描述】字符串str中单词以空格作分隔,如果单词之间不止一个空格,则删除多余的空格,使单词之间只保留一个空格。
字符串开始的空格也只保留一个。
【输入形式】从标准输入中输入字符串
【样例输入】It'
s
10:
10
o'
clock
I
am
late.
【样例输出】It'
s10:
10o'
clock,Iamlate.
string.h>
inti,n;
chars[1000];
//测试数据或许很长
gets(s);
s[i]!
='
\0'
;
if(s[i]=='
'
&
s[i+1]=='
)
for(n=i;
s[n]!
n++)s[n]=s[n+1];
i--;
//因为可能有两个以上空格相连的情况,需要退位检测接下来还有没有空格
puts(s);
5
!
有int型5×
6二维数组,分别将每一行的最大值与本行的最后一个数据(第6-1列数据)对调,其余数据保持不变。
然后按每一行的最大值对二维数据各行降序排序并输出变换后的数组。
从标准输入中输入一个5*6的二维数组
将生成的二维数组输出到标准输出中
(输入的数据的范围【999,-999】)
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
(输出时用格式符%5d)
2
96
83
58
52
9
#defineM5
#defineN6
intmain()
voidfun(inta[M][N]);
inta[M][N]={{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}};
//m:
记录行;
n:
记录列
fun(a);
for(m=0;
m<
M;
m++)
for(n=0;
n<
N;
n++)printf("
%5d"
a[m][n]);
printf("
\n"
voidfun(inta[M][N])
intm,n,k,i,t;
k=0;
//k:
记录第二下标
for(n=1;
if(a[m][k]<
a[m][n])k=n;
//循环后k为最大数值的第二下标
t=a[m][k];
a[m][k]=a[m][N-1];
a[m][N-1]=t;
M-1;
k=m;
记录第一下标
for(n=m+1;
if(a[k][N-1]<
a[n][N-1])k=n;
//循环后k为最大数值的第一下标
if(m!
=k)
{
for(i=0;
{
t=a[k][i];
a[k][i]=a[m][i];
a[m][i]=t;
}//将第k行与第m(m=0,1,2,3,4)行交换;
}
6
【问题描述】在字符串s中,每两个字母之间加一个*,其余字符保持不变并输出字符串。
【输入形式】从标准输入中输入一个字符串
【输出形式】将生成的字符串序列输出到标准输出中
【样例输入】Ihad123_book.
【样例输出】Ih*a*d123_b*o*o*k.
{
intl,i;
l=strlen(s);
l;
if(((s[i]>
a'
s[i]<
z'
)||(s[i]>
A'
Z'
))&
((s[i+1]>
s[i+1]<
)||(s[i+1]>
)))
%c*"
s[i]);
elseprintf("
%c"
7
【问题描述】实现十进制长整型数x到二进制的转换。
输入一个十进制数,将其转换为二进制数以字符串形式存放于数组中并输出。
从标准输入中输入一个长整型数
将转换后的二进制数输出
13
1101
【样例说明】
考虑正数、负数和零的情况
//除2取余,倒序输出
intx,num,n[100],i=0;
if(x==0)n[0]=0;
0)
x=-x;
while(x!
=0)
num=x%2;
n[i]=num;
i++;
x=x/2;
i--;
n[i]=-n[i];
//x<
0时把最后一位转为负数即可(输出时的第一位)
i--;
//因为上方的i++最终多加一位
i>
=0;
i--)printf("
n[i]);
8
【问题描述】统计字符串str中不同字符的个数输出。
【输出形式】将生成的个数输出到标准输出中
【样例输入】Oneworld,Onedream!
【样例输出】13
【样例说明】统计包含标点符号和空格,大写和小写视为不同字符。
chars[100],key;
//由s[0]开始一个个作为key,扫描其后的字符是否为key
intl,i,j,num;
num=l;
//num初始值为字符串长度,扫描到相同字符时才减
key=s[i];
if(s[i]!
=NULL)
for(j=i+1;
j++)
if(s[j]==key)
num--;
s[j]=NULL;
//若s[j]与之前字符相同,在总数中减去其后将其置为NULL,以防再次成为key
}
num);
9
【问题描述】输入一个正整数n,计算1-1/4+1/7-1/10+1/13-1/16+……的前n项之和,输出时保留3位小数。
【输入形式】从键盘输入一个正整数n。
【输入输出样例1】
(下划线部分表示输入)
Entern:
3
sum=0.893
intfm=-2,i,n;
doublesum=0;
"