完整海洋大学c语言20道题上机答案.docx
- 文档编号:6562291
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:12
- 大小:21.48KB
完整海洋大学c语言20道题上机答案.docx
《完整海洋大学c语言20道题上机答案.docx》由会员分享,可在线阅读,更多相关《完整海洋大学c语言20道题上机答案.docx(12页珍藏版)》请在冰豆网上搜索。
完整海洋大学c语言20道题上机答案
(完整)中国海洋大学C语言20道题上机答案
编辑整理:
尊敬的读者朋友们:
这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)中国海洋大学C语言20道题上机答案)的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(完整)中国海洋大学C语言20道题上机答案的全部内容。
下面的程序我亲自在考试系统上测试,每个都是满分!
!
!
希望对你有帮助!
1.请编写函数longfun(longintx),功能是:
将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。
例如:
程序运行时输入1234567,输出:
b=7531.
longinty;
longintb=0;
for(y=x;y>0;y=y/10){
if((y%10)%2==1)
b=b*10+y%10;
}
returnb;
2.编写函数voidfun(char*s,char*t,char*p)将未在字符串s中出现、而在字符串t中出现的字符,
形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
例如:
当s为”12345”,t为”8624677"时,p中的字符为:
”867";
当s为”goodluck",t为”thankyouverymuch”时,输出:
”thanyverm"
intk=0,i,j,x=0,y;
for(i=0;i〈strlen(t);i++){//t
y=0;
for(j=0;j if(t[i]==s[j]){y=1;break;} } if(y==0){ x=0; for(j=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 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 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;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 11224342552 456789 inti,j,k,n,max,temp; for(i=0;i〈M;i++){ max=a[i][0],n=0; for(j=0;j 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; } for(i=0;i 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; for(i=0;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); for(i=0;i〈length;i++){ 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 inti;chart[80]; strcpy(t,s); for(i=0;*(t+i)! ='\0';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; for(i=0;*(s1+i)! =0;i++)n+=1; for(i=0;i〈n—1;i++) {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;i++) {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; for(i=0;*(s+i)! ='\0’;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 a: m+n—1); for(i=m—1;i {*s1=*(s2+i);s1++;} *s1='\0’; 16.编写函数voidfun(char*str),将参数字符串中各单词首字母变大写,其余字母变小写。 输入输出在main中实现。 如输入”youHAVE10books,don'tyou? ”输出 "YouHave10Books,Don’tYou? ”。 单词以空格、逗号、句号分隔. intlag=1;inti=0; while(str[i]! ='\0'){ 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; for(j=0;j〈m;j++) {for(i=n-1,k=p[n—1];i>0;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; for(i=0;x! =0||y! =0;i++) {s+=(x%10+y%10); x=x/10; y=y/10;} for(i=0,c=0;;i++) {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 若m=100,则输出n=91 函数intfun(intn,int*p)实现上述功能, 返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。 intabc=0,i; intindex; intpeople[1000]; intlength=n; intflag=0; for(i=0;i〈n;i++)people[i]=1; while(length〉1){ for(i=0;i〈n;i++){ if(people[i]==1){ flag++; if(flag==3){ people[i]=0; p[abc]=i+1; abc++; flag=0; } } } length=0; for(i=0;i if(people[i]==1){ index=i; length++; } } } p[abc]=index+1; returnindex+1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 海洋大学 语言 20 上机 答案