级中国海洋大学C语言上机题库及答案.docx
- 文档编号:30754502
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:21
- 大小:19.98KB
级中国海洋大学C语言上机题库及答案.docx
《级中国海洋大学C语言上机题库及答案.docx》由会员分享,可在线阅读,更多相关《级中国海洋大学C语言上机题库及答案.docx(21页珍藏版)》请在冰豆网上搜索。
级中国海洋大学C语言上机题库及答案
2014中国海洋大学C语言上机考试题库以及答案(20套)
1.编写函数longfun(longx),它的功能是:
将长整型参数x中每一位上为偶数的数依次取出,构成一个新数返回。
高位仍在高位,低位仍在低位。
例如:
下面程序运行时输入:
124578902,程序输出:
24802.
#include
longfun(longx)
{
inti,j,m,n;
for(i=0,m=0,n=1;x>0;i++)
{
j=x%10;
if(j%2==0)
{m=m+n*j;n=n*10;}
x=(x-j)/10;
}
returnm;
}
voidmain()
{longa,b;
printf("Enteranumber:
");
scanf("%ld",&a);
b=fun(a);
printf("b=%ld\n",b);
}
2.编写函数voidfun(intk,int*p),功能是:
将参数k(2≤k≤32767)所有的不相同质因子升序写入p所指的一维数组中,以-1作为所有质因子的结束标志。
例如:
下面程序运行时若输入200,输出:
25;若输入27720,输出:
235711;若输入101,输出101。
#include
#include
intcheck(intx)
{
inti;
for(i=2;i if(x%i==0){return0;break;} if(i==x)return1; } voidfun(intk,int*p) {intcheck(intx); inti,j=0; for(i=2;i<=k;i++) { if(check(i)==1&&k%i==0){p[j]=i;j+=1;} } p[j]=-1; } voidmain() {intx,a[17]={0},i; do{printf("Enteranumber(2-32767): "); scanf("%d",&x); }while(x<2); fun(x,a); for(i=0;a[i]! =-1;i++) printf("%d",a[i]); printf("\n"); } 3.编写函数voidfun(int*x,intn),功能是: 求出长度为n的数组x中的最大数与次最大数,并把最大数和a[0]对调,次最大数与a[1]对调,其余的数保持不变。 下面程序运行时若输入: 2461397058,则输出: 9861327054。 #include #defineN10 voidfun(int*x,intn) { } voidmain() {inta[N],i; for(i=0;i scanf("%d",a+i); fun(a,N); for(i=0;i printf("%d",a[i]); printf("\n"); } 4.数组x中保存有n个整数,编写函数intfun(int*x,intn,float*w),对数组x进行如下操作: 从第0个元素起对每5个元素求一个平均埴,并将这些均值依次存放在w所指的数组中。 函数返回平均值的个数。 例如: 若输入n为14,14个数据为: 112135245516275818011121314,则只为前10个求均值,输出结果为: 29.2023.80 #include intfun(int*x,intn,float*w) { inti,j,s; for(i=0;i<(n/5);i++) { s=0; for(j=i*5;j<(i*5+5);j++) s=s+*(x+j); *(w+i)=s/5.0; } return(n/5); } voidmain() {inta[30],i,n,m; floatb[6]; printf("Inputanumber: "); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); m=fun(a,n,b); for(i=0;i printf("%0.2f",b[i]); printf("\n"); } 5.编写函数intfun(intx,longinty),功能: 计算满足表达式x0+x1+x2+...+xn 例如,当x=2,y=1000时,程序输出8。 #include #include intfun(intx,longinty) { inti,s=0; for(i=0;s s=s+pow(x,i); returni-2; } voidmain() {intx;longy; scanf("%d%ld",&x,&y); printf("n=%d\n",fun(x,y)); } 6.编写函数intfun(char(*ss)[N],intm,char*s),功能是: 形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。 求出最长的字符串,复制到s所指的字符数组中,然后返回此最长字符串的长度。 #defineN30 #include #include intfun(char(*ss)[N],intm,char*s) { inta,i; strcpy(s,ss[0]); for(i=1;i if(strlen(s) strcpy(s,ss[i]); a=strlen(s); return(a); } voidmain() {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); } 7.编写函数intcountw(char*str),统计字符串str中单词的个数。 单词之间以空格,逗号,句号作分隔,数字也看做单词。 单词之间可能不止一个分隔符。 如输入: It's10: 10o'clock,Iamlate.屏幕上输出"Thereare6words." #include intcountw(char*str) { inti,j; for(i=1,j=0;str[i];i++) { if(str[i]==''&&(str[i-1]! =''&&str[i-1]! =','&&str[i-1]! ='.')) j++; if(str[i]==','&&(str[i-1]! =''&&str[i-1]! =','&&str[i-1]! ='.')) j++; if(str[i]=='.'&&(str[i-1]! =''&&str[i-1]! =','&&str[i-1]! ='.')) j++; } if(str[0]! =''&&str[0]! =','&&str[0]! ='.') j++; returnj; } voidmain() {chars[200]; gets(s); printf("Thereare%dwords.\n",countw(s)); } 8.编写函数voidfun(char*str),功能: 字符串str中单词以空格作分隔,如果单词之间不止一个空格,则删除多余的空格,使单词之间只保留一个空格。 字符串开始的空格也只保留一个。 例如,程序运行时若输入: It's10: 10o'clock,Iamlate. 输出: It's10: 10o'clock,Iamlate. #include voidfun(char*str) { inti,j; for(i=0;str[i];i++) { if(str[i]=='') if(str[i+1]=='') { for(j=i+1;str[j];j++) str[j]=str[j+1]; i=i-1;} } } voidmain() {chars[100]; puts("Enterastring: "); gets(s); fun(s); puts(s); } 9.函数voidfun(intx,intk,int*p)的功能是: 求出比x大的最初k(k<1000)个素数,放入p所指数组中。 例如: 程序运行时输入: 1010,输出: 11131719232931374143 #include #include intcheck(intx) { inti; if(x<2)return1; for(i=2;i<=sqrt(x);i++) { if(x%i==0)break; } if(i>sqrt(x))return0; return1; } voidfun(intx,intk,int*p) { inti,j; p[0]=x+1; for(i=0;i { for(j=p[i];check(j);j++) p[i]=j+1; p[i+1]=p[i]+1; } }voidmain() {inta,b,n[1000],i; scanf("%d%d",&a,&b); fun(a,b,n); for(i=0;i printf("%d",n[i]); puts(""); } 10.编写函数intfun(inta,intb),在[a,b]范围内统计满足下面条件的数的个数。 条件: 该数是素数,且该数逆序后形成的数也是素数。 例如,在[100,150]范围内101107113131149满足条件,则下面程序运行时输入100150,输出: num=5。 #include #include intcheck(intx) { inti; if(x<2)return1; for(i=2;i { if(x%i==0) { return0; break; } } if(i==x)return1; } intnixu(intx) {inty=0; while(x) { y=10*y+x%10; x=x/10; } return(y); } intfun(inta,intb) { inti,n=0; for(i=a;i<=b;i++) if(check(i)&&check(nixu(i))) n++; returnn; } voidmain() {intnum,a,b; scanf("%d%d",&a,&b); num=fun(a,b); printf("num=%d\n",num); } 11.编写函数voidfun(char*s),功能: 在s所指字符串中每两个字母之间加一个*,其余字符保持不变。 例如,下面程序运行时,若输入: Ihad123_book.输出: Ih*a*d123_b*o*o*k. #include #include voidfun(char*s) { inti,j; for(i=0;s[i];i++) if(((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122))&&((s[i+1]>=65&&s[i+1]<=90)||(s[i+1]>=97&&s[i+1]<=122))) { for(j=strlen(s)+1;j>i+1;j--) s[j]=s[j-1]; s[j]='*'; } } voidmain() {charx[80]; gets(x); fun(x); puts(x); } 12.编写函数intfun(intk),功能: 从5个红球,6个白球,7个黑球中任意取出k(2≤k≤18)个球作为一组进行组合。 在每组中,可以没有红球和白球,但必须要有黑球。 不同组合的数目作为函数值返回。 例如,若k为8时,正确的组合数是31;若k为2时,正确的组合数是3;或k为3时,正确的组合数是6。 #include intfun(intk) { inti,j,h,s; for(i=1,s=0;i<=7;i++) for(j=0;j<=6;j++) for(h=0;h<=5;h++) if(i+j+h==k) s++; returns; } voidmain() {intx,n; scanf("%d",&x); n=fun(x); printf("n=%d\n",n); } 13.编写函数voidfun(char*str),功能: 对形参str所指字符串中的字符按ASCII码升序排序。 例如,下面程序运行时输入: TheCProgrammingLanguage<回车> 输出: CLPTaaaeegggghimmnnorru #include #include voidfun(char*str) { intj,i; chart; for(i=0;str[i];i++) { for(j=i+1;j if((int)str[i]>(int)str[j]) { t=str[i]; str[i]=str[j]; str[j]=t; } } } voidmain() {chars[100]; gets(s); fun(s); puts(s); } 14.请编写函数voidfun(int*a,intn,inty),它的功能是: 把y值插入到有n个数的a数组中,a数组中的数已按由大到小的次序排好,y的值从键盘读入。 插入后,数组中的数仍然有序。 对照下面三种情况运行程序: 1)插在最前2)插在最后3)插在中间 若输入数11,输出201816141211108642 输入数1,输出20181614121086421 输入数33,输出332018161412108642 #include voidfun(int*a,intn,inty) { inti,j; for(i=0;i { if(y>a[i])break; } for(j=n;j>i;j--) a[j]=a[j-1]; a[i]=y; } voidmain() {inti,a[11]={20,18,16,14,12,10,8,6,4,2},x; voidfun(int*,intn,inty); scanf("%d",&x); fun(a,10,x); for(i=0;i<11;i++) printf("%d",*(a+i)); } 15.编写函数intfun(char*s1,char*s2),在字符串s1中统计字符串s2出现的次数并返回。 若s2在s1中未出现,则返回0。 例如: 若输入的字符串s1为: abaaAabcaabbabca,字符串s2为: ab,则程序输出: n=4 若输入的字符串s1为: abaaAabcaabbabca,字符串s2为: abd,则程序输出: Nofind #include #include intfun(char*s1,char*s2) { inti,j,n=0; for(i=0;i<=strlen(s1)-strlen(s2);i++) { for(j=0;j if(s1[i+j]! =s2[j])break; if(j==strlen(s2)) n++; } returnn; } voidmain() {chara[80],b[80]; intn; printf("Pleaseinputthefirststring: "); gets(a); printf("Pleaseinputthesecondstring: "); gets(b); n=fun(a,b); if(n==0) printf("Nofind\n"); elseprintf("n=%d\n",n); } 16.编写函数intfun(char*str),功能是: 统计字符串str中不同字符的个数并做为函数值返回。 例如,下面程序运行时若输入: Oneworld,Onedream! 输出: n=13 #include intfun(char*str) { inti,j,n; for(i=0,n=0;str[i];i++) { for(j=0;j { if(str[i]==str[j])break; } if(i==j) n++; } returnn; } voidmain() {chars[80]; intn; gets(s); n=fun(s); printf("n=%d\n",n); } 17.编写函数intfun(intm,intn,int*p),要求将范围[m,n]之间所有的fibonacci数写入p所指的一维数组中,fibonacci数的个数通过函数返回值带回。 例如,[0,30]之间的fibonacci数有7个,它们是: 123581321;[1000,32767]之间有7个,它们是: 159725846765109461771128657。 #include intfun(intm,intn,int*p) { inti,j,s,a[1000]={1,2}; for(i=2;i<1000;i++) a[i]=a[i-1]+a[i-2]; for(i=0,j=0,s=0;i<1000;i++) { if(a[i]>=m&&a[i]<=n) { p[j]=a[i]; j++; s++; } } returns; } voidmain() {inta,b,n,c[22],i; scanf("%d%d",&a,&b); n=fun(a,b,c); for(i=0;i printf("%6d",c[i]); printf("\nn=%d\n",n); } 18.编写函数char*fun(char*s1,char*s2,intn),将字符串s1中后面的n个字符复制到s2所指数组中,若s1不足n个字符,则用*在前端补齐至n个字符,写入s2中。 函数返回字符串s2的指针。 例如,下面程序运行时, 若输入: “abcd1234”和6,则输出“cd1234” 若输入: “abcd1234”和10,则输出“**abcd1234” #include #include char*fun(char*s1,char*s2,intn) { intl,i; l=strlen(s1); if(l>=n) strcpy(s2,&s1[l-n]); else { strcpy(&s2[n-l],s1); for(i=0;i s2[i]='*'; } return(s2); } voidmain() {charc1[80],c2[80]; gets(c1); fun(c1,c2,6); puts(c2); puts(fun(c1,c2,30)); } 19.编写函数voidfun(char*s,char*b,char*c),逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。 例如,若a中的字符串为aBCDeFgH,b中的字符串为: ABcd,则c中的字符串应为: aBcdeFgH。 #include #include voidfun(char*a,char*b,char*c) { inti,ls1,ls2; ls1=strlen(a);ls2=strlen(b); for(i=0;i<(ls1>ls2? ls2: ls1);i++) c[i]=(a[i]>b[i]? a[i]: b[i]); for(i=(ls1>ls2? ls2: ls1);i<(ls1>ls2? ls1: ls2);i++) { if(ls1>ls2) c[i]=a[i]; else c[i]=b[i]; } c[i]='\0'; } voidmain() {chars1[80],s2[80],s3[80]; gets(s1); gets(s2); fun(s1,s2,s3); puts(s3); } 20.编写函数voidfun(char*s),将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符和非数字字符原有的前后次序。 例如,若输入: numis0532-66ouc78,OK.执行结果为: numis-ouc,OK.05326678 #include #include voidfun(char*s) { inti,j=0,k=0; chart1[80],t2[80]; for(i=0;i { if(s[i]>57||s[i]<48) { t1[j]=s[i]; j++
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国海洋 大学 语言 上机 题库 答案