完整海洋大学c语言20道题上机答案Word格式.docx
《完整海洋大学c语言20道题上机答案Word格式.docx》由会员分享,可在线阅读,更多相关《完整海洋大学c语言20道题上机答案Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
j++){//s
if(t[i]==s[j]){y=1;
break;
}
if(y==0){
x=0;
j〈k;
j++){
if(p[j]==t[i])
{x=1;
break;
}
}
if(x==0&
&y==0)
{p[k]=t[i];
k++;
}
}
p[k]='
\0'
3.编写函数intfun(intm),计算并返回满足表达式:
1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)
〈=m最大的n。
例如,当m=10000时,程序输出:
n=38.
inti,s1=0,s2=0;
for(i=1;
;
i++)
{s1+=i;
s2+=s1;
if(s2〉m)break;
return(i—1);
4.编写函数voidfun(int*x,intn),它的功能是:
删除有n个数据的数组x中所有包含数字6的数据,后续的剩余元素赋值为-1。
n为数组长度,规定x中数据都为正数。
如程序运行时若输入:
12214616234161166391126713816
删除后输出:
12211911381—1—1—1—1-1—1
intm;
intp=0,flag,i,k;
for(m=0;
m<
n;
m++){
flag=0;
k=x[m];
while(x[m]>
0){
if((x[m]%10)==6){
flag=1;
break;
x[m]=x[m]/10;
}
if(flag==0){
x[p]=k;
p++;
for(i=p;
i<
n;
i++){
x[i]=—1;
5.编写函数longfun(inthigh,intn),功能是:
计算并返回high以内(不包含high)最大的n个素数之和。
若不足n个,则到最小素数2为止。
若high=100,n=10,则函数的返回值为:
732;
若high=11,n=10,则函数返回:
17。
inti,j,s=0,m=0;
for(i=high-1;
i〉=2;
i--)
{
for(j=2;
j〈i;
j++)
if(i%j==0)break;
if(j〉=i)
{m+=1;
s+=i;
if(m==n)break;
return(s);
6.请编写函数intfun(int*a,intn),它的功能是:
把形参a所指数组中的偶数按原顺序依次存放到
a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以—1作为有效数据的结束标志。
例:
若输入:
123456789101112131415,输出:
2468101214n=7
inti,j;
for(i=0;
i++)
if(a[i]%2!
=0)
{
for(j=i;
n—1;
j++)
a[j]=a[j+1];
i--;
n--;
a[n]=—1;
returnn;
7.给定程序中,函数fun的功能是:
有M×
N二维数组,分别将每一行的最大值与本行的最后一个数据
(第N-1列数据)对调,其余数据保持不变。
然后按每一行的最大值对二维数据各行降序排序.
例如,有右侧数组数据:
11524342522求最大值并对调后:
11224342552
223346581647223346471658
8342542647004254264783
456789456789
4596171839245217183996
排序后最终输出:
45217183996
04254264783
223346471658
456789
inti,j,k,n,max,temp;
for(i=0;
i〈M;
max=a[i][0],n=0;
N;
if(a[i][j]〉max){
max=a[i][j];
n=j;
temp=a[i][N-1];
a[i][N-1]=a[i][n];
a[i][n]=temp;
M;
for(j=M-1;
j〉i;
j——){
if(a[j][N—1]>
a[j—1][N-1]){
for(k=0;
k〈N;
k++){
temp=a[j][k];
a[j][k]=a[j—1][k];
a[j—1][k]=temp;
8。
函数voidfun(intx,char*p)实现十进制整数x到二进制的转换。
转换后的二进制数以字
符串的方式放置于p所指向的数组中。
如输入13,输出1101,输入—13,输出—1101。
inti;
if(x〈0)
{x=—x;
*p='
—’;
p++;
i=1;
while(x>
〉i)
i++;
p[i]=’\0’;
do{i——;
p[i]=(x&1)+'
0’;
x〉>
=1;
while(i);
9。
——20编写函数intfun(char(*ss)[N],intm,char*s),功能是:
形参ss指向一个
m行N列的二维字符数组,每行存放一个字符串。
求出最大的字符串,复制到s所指的
字符数组中,然后返回此最大字符串的长度。
inti,len;
intmax=—1;
m;
i++)
{len=strlen(ss[i]);
if(len〉max)
{max=len;
strcpy(s,ss[i]);
returnmax;
10.给定程序中,函数voidfun(char*s)的功能是:
在形参s所指字符串中的每个数字字符
之后插入一个*号。
例,形参s所指的字符串为:
def35adh3kjsdf7。
执行结果为:
def3*5*adh3*kjsdf7*。
intlength,i,j;
length=strlen(s);
i〈length;
if(s[i]〉47&&
s[i]<
58){
for(j=length;
j〉i;
j--){
s[j+1]=s[j];
s[i+1]='
*'
length++;
11.给定程序中,函数voidfun(char*s)的功能是:
把形参s所指字符串中下标为偶数的字符右移到下一个
偶数位置,最右边被移出字符串的字符绕回放到第一个偶数位置,下标为奇数的字符不动
(注:
字符串的长度大于等于2).例:
abcd123,输出:
3badc21
chart[80];
strcpy(t,s);
*(t+i)!
='
if(i%2==0)*(s+i+2)=*(t+i);
if(i%2==0)*s=*(t+i-2);
else*s=*(t+i-1);
*(s+i)='
\0’;
12.编写函数voidfun(char*s1,char*s2),功能是:
对形参s1所指字符串升序排序,
并将排序后下标为偶数的字符取出,写入形参s2所指字符数组中,形成一个新串。
例如,
下面程序若输入:
TheCProgrammingLanguage,输出:
□□LTaegghmnor。
(□表空格)
inti,j,k,n=0;
chart;
*(s1+i)!
=0;
i++)n+=1;
for(i=0;
i〈n—1;
{k=i;
for(j=i+1;
j++)
if(*(s1+j)〈*(s1+k))k=j;
if(k!
=i){t=s1[k];
s1[k]=s1[i];
s1[i]=t;
}for(i=0,j=0;
i〈n;
{if(i%2==0){s2[j]=s1[i];
j++;
s2[j]=0;
13.函数voidfun(chars[])的功能是:
将s所指字符串中ASCII值为奇数的字符删除。
例如,若s所指字符串中的内容为:
“ABCDEFG12345"
,其中字符A的ASCII码值为
奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。
最后s中内容是:
“BDF24"
。
inti,j=0;
*(s+i)!
if(*(s+i)%2==0)
{*(s+j)=*(s+i);
j++;
*(s+j)='
\0’;
14.请编写一个函数intfun(longintx),它的功能是:
判断整数x是否是同构数.
若是同构数,函数返回1;
否则返回0。
所谓“同构数”是指这样的数,它出现在它的平方数的右边.
输入整数6,6的平方数是36,6是36中右侧的数,所以6是同构数,输出"
Yes”.
要求x的值不大于10000。
longm,a;
for(a=10;
;
a*=10)
{m=x*x%a;
if(x==m)
return
(1);
if(x*x/a==0)
return(0);
15.编写取子字符串函数voidfun(chars1[],chars2[],intm,intn),其作用是
将字符数组s2中从第m个字符开始的共n个字符拷贝到数组s1中;
若s2中剩余字符不足n个,
则取到尾部.程序运行时,当输入”abcd123”、4,3时应输出”d12"
当我们输入”abcd123”、
4,6时应输出"
d123"
注意,这里是将1作为起始计数。
inti,a,b;
a=strlen(s2);
b=(a<
m+n-1?
a:
m+n—1);
for(i=m—1;
b;
{*s1=*(s2+i);
s1++;
*s1='
16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。
输入输出在main中实现。
如输入”youHAVE10books,don'
tyou?
”输出
"
YouHave10Books,Don’tYou?
”。
单词以空格、逗号、句号分隔.
intlag=1;
inti=0;
while(str[i]!
){
if(str[i]==’'
||str[i]=='
,'
||str[i]=='
.'
||str[i]=='
?
’||str[i]=='
’)
{lag=1;
i++;
continue;
if(lag==1)
{if(str[i]〉='
a'
&
str[i]〈=’z’){str[i]-=32;
}lag=0;
elseif(lag==0){if(str[i]〉=’A'
str[i]〈='
Z’)str[i]+=32;
i++;
17.n个整数,前面各数循环顺序后移m个位置,最后m个数变成最前面m个数。
写函数voidfun(int*p,intn,intm),实现上述功能。
在main()中输入与输出.
如下面程序输出78910123456.注意,m可能大于n。
inti,j,k;
j〈m;
{for(i=n-1,k=p[n—1];
i>
i-—)
*(p+i)=*(p+i—1);
*p=k;
18.编写函数voidfun(char*s1,char*s2),实现字符串s1与s2的交叉连接,连接后得到的新字符串放在s1中。
如输入abc
12345,输出a1b2c345,若输入abcde
123,则输出a1b2c3de。
char*m1=s1,str[100]={0},i=0;
while(*s1&
*s2){str[i++]=*s1++;
str[i++]=*s2++;
while(*s1){str[i++]=*s1++;
while(*s2){str[i++]=*s2++;
}
strcpy(m1,str);
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,即为两人的缘分。
编写计算缘分程序,两个生日由键盘输入.
inti,s=0,c;
x!
=0||y!
{s+=(x%10+y%10);
x=x/10;
y=y/10;
for(i=0,c=0;
{c+=s%10;
s=s/10;
if(s==0)
{s=c;
if(s>
=0&
&s<
=9)return(s);
elsec=0;
20。
m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,
包括最后一个人的序号。
到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)
若m=6,则输出n=1〈CR〉364251;
若m=10,则输出n=4<
CR>
36927185104;
若m=100,则输出n=91<
369……1005891。
函数intfun(intn,int*p)实现上述功能,
返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。
intabc=0,i;
intindex;
intpeople[1000];
intlength=n;
intflag=0;
i++)people[i]=1;
while(length〉1){
if(people[i]==1){
flag++;
if(flag==3){
people[i]=0;
p[abc]=i+1;
abc++;
flag=0;
length=0;
if(people[i]==1){
index=i;
length++;
p[abc]=index+1;
returnindex+1;