中国海洋大学上机考试题2016春季学期 答案2333
更新时间:2023-05-13 15:46:01 阅读量: 实用文档 文档下载
- 中国海洋大学上机考试推荐度:
- 相关推荐
《C程序设计》课程期末上机考试
考试时间:50分钟
考试方式:从下面的20题中随机抽取一题,再附加一题,共需完成2道题。附加题不事先给定
分值分配:第一题60分,第二题40分,共100分
考试时间:第十七周,2016年6月28-30号某天
1. 编写函数long fun(long x),它的功能是:将长整型参数x中每一位上为偶数的数依次取出,构成
一个新数返回。高位仍在高位,低位仍在低位。例如:下面程序运行时输入:124578902,程序输出:24802.
#include<stdio.h>
long fun(long x)
{int i=0,m,a[20];
long b=0;
do
{ m=x%10;
if(m%2==0)
{a[i]=m;
i=i+1;}
}
while((x/=10)!=0);
for(i=i-1;i>=0;i--)
{ b=b*10+a[i];}
return b;
}
int main()
{ long a,b;
printf("Enter a number:");
scanf("%ld",&a);
b=fun(a);
printf("b=%ld\n",b);
return 0;
}
2. 编写函数void fun(int k,int *p),功能是:将参数k(2≤k≤32767)所有的不相同质因子升序
写入p所指的一维数组中,以-1作为所有质因子的结束标志。例如:下面程序运行时若输入200,输出:2 5;若输入27720,输出:2 3 5 7 11;若输入101,输出101。
#include<stdio.h>
void fun(int k,int *p)
{int i,j=0;
for(i=2;i<=k;i++)
{
while(k!=i)
{
if(k%i==0)
{
p[j]=i;
j=j+1;
k=k/i;
1
}
else break;
}
}
p[j]=k;
p[j+1]=-1; }
int main()
{ int x,a[17]={0},i;
do{ printf("Enter a number(2-32767):");
scanf("%d",&x);
}while(x<2);
fun(x,a);
for(i=0;a[i]!=-1;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
3. 编写函数void fun(int *x,int n),功能是:求出长度为n的数组x中的最大数与次最大数,并
把最大数和a[0]对调,次最大数与a[1]对调,其余的数保持不变。下面程序运行时若输入:2 4 6
1 3 9 7 0 5 8,则输出:9 8 6 1 3
2 7 0 5 4。
#include<stdio.h>
#define N 10
void fun(int *x,int n)
{int i,j,k,t;
for(i=0;i<=1;i++)
{ j=k=i;
for(;j<n;j++)
{ if(*(x+k)<*(x+j)) k=j; }
t=*(x+i);*(x+i)=*(x+k);*(x+k)=t;
}
}
int main()
{int a[N],i;
for(i=0;i<N;i++)
scanf("%d",a+i);
fun(a,N);
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
4. 数组x中保存有n个整数,编写函数int fun(int *x,int n,float *w),对数组x进行如下操作:
从第0个元素起对每5个元素求一个平均埴,并将这些均值依次存放在w所指的数组中。函数返回平均值的个数。例如:若输入n为14,14个数据为:11 21 35 24 55 16 27 58 18 0 11 12 13 14,则只为前10个求均值,输出结果为:29.20 23.80
#include<stdio.h>
int fun(int *x,int n,float *w)
2
{
return (n/5); int i,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;
}
}
}
int main()
{int a[30],i,n,m;
float b[6];
printf("Input a number: ");
scanf("%d ",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
m=fun(a,n,b);
for(i=0;i<m;i++)
printf("%0.2f ",b[i]);
printf("\n");
return 0;
}
5.编写函数int fun(int x,long int y),功能:计算满足表达式x0+x1+x2+...+x n<y的最大的
n并作为函数返回值带回。例如,当x=2,y=1000时,程序输出8。
#include<stdio.h>
#include<math.h>
int fun(int x,long int y)
{int i,n=0,m=0;
while(y-m>=0)
{
n++;
m=m+pow(x,n);
3
}
return n-1;
}
int main()
{int x;long y;
scanf("%d%ld",&x,&y);
printf("n=%d\n",fun(x,y));
return 0;
}
6. 编写函数int fun(char (*ss)[N],int m,char *s),功能是:形参ss指向一个m行N列的二维字
符数组,每行存放一个字符串。求出最长的字符串,复制到s所指的字符数组中,然后返回此最长字符串的长度。
#define N 30
#include<stdio.h>
#include<string.h>
int fun(char (*ss)[N],int m,char *s)
{int i,j,k;
s=ss[0];
for(i=0;i<m;i++)
{
if(strlen(s)<strlen(ss[i]))
{
s=ss[i];
}
}
j=strlen(s);
printf("str=%s ",s);
return j;
}
int main()
{char a[8][N],b[N];
int i,len;
for(i=0;i<8;i++)
gets(a[i]);
len=fun(a,8,b);
printf("len=%d,str=%s\n",len,b);
return 0;
}
7. 编写函数int countw(char *str),统计字符串str中单词的个数。单词之间以空格,逗号,句号
作分隔,数字也看做单词。单词之间可能不止一个分隔符。如输入:
It's 10:10 o'clock ,I am late.屏幕上输出"There are 6 words."
#include<stdio.h>
int countw(char *str)
{char c;
int i=0,num=0,word=0;
while((c=str[i])!='\0')
4
{
if(c==' ')
{
word=0;
}
else if(word==0)
{
word=1;
num++;
}
i++;
}
return num;
}
int main()
{char s[200];
gets(s);
printf("There are %d words.\n",countw(s));
return 0;
}
8. 编写函数void fun(char *str),功能:字符串str中单词以空格作分隔,如果单词之间不止一个
空格,则删除多余的空格,使单词之间只保留一个空格。字符串开始的空格也只保留一个。例如,程序运行时若输入: It's 10:10 o'clock , I am late.
输出: It's 10:10 o'clock , I am late.
#include<stdio.h>
void fun(char *str)
{char c,b;
int i=0,j,m,n;
while((c=str[i])!='\0')
{
while(c=='0')
{
if(str[i+1]=='0')
{
j=i;
while((b=str[j])!='\0')
{
str[j]=str[j+1];
j++;
}
}
}
i++;
}
puts(str);
5
}
int main()
{char s[100];
puts("Enter a string:");
gets(s);
fun(s);
puts(s);
return 0;
}
9. 函数void fun(int x,int k,int *p)的功能是:求出比x大的最初k(k<1000)个素数,放入p所
指数组中。例如:程序运行时输入:10 10,输出:11 13 17 19 23 29 31 37 41 43
#include<math.h>
void fun(int x,int k,int *p)
{int m,i,j,n=0;
for(m=x;n<=k;m++)
{ j=sqrt(m);
for(i=2;i<=j;i++) {if(m%i==0) break;}
if(i>=j+1) {*p++=m;n++;}
}
}
int main()
{int a,b,n[1000],i;
scanf("%d%d",&a,&b);
fun(a,b,n);
for(i=0;i<b;i++)
printf("%d ",n[i]);
puts("");
return 0;
}
10. 编写函数int fun(int a,int b),在[a,b]范围内统计满足下面条件的数的个数。条件:该数是素
数,且该数逆序后形成的数也是素数。例如,在[100,150]范围内101 107 113 131 149 满足条件,则下面程序运行时输入100 150,输出:num=5。
#include<math.h>
#include<stdio.h>
int fun(int a,int b)
{int c[100]={0},i,t,j=0,l,m,d=0,x,s;
long int k;
for(m=a;m<=b;m++)
{ k=sqrt(m);
for(i=2;i<=k;i++)
{ if(m%i==0) break;}
if(i>=k+1) {c[j++]=m;}
}
putchar('\n');
for(i=0;i<j;i++)
{ m=c[i];
for(k=0;;)
6
{m=m/10;if(m==0) break;k++;}
t=k;l=k;
for(s=0,k=0;k<=t;k++)
{ x=c[i]%10; c[i]=c[i]/10;
s=s+x*pow(10,l--);
}
c[i]=s;
}
for(i=0;c[i]!=0;i++)
{ k=sqrt(c[i]);
for(j=2;j<=k;j++)
{if(c[i]%j==0) break;}
if(j>=k+1) d++;
}
return(d);
}
}
int main()
{int num,a,b;
scanf("%d%d",&a,&b);
num=fun(a,b);
printf("num=%d\n",num);
return 0;
}
11. 编写函数void fun(char *s),功能:在s所指字符串中每两个字母之间加一个*,其余字符保持
不变。
例如,下面程序运行时,若输入:I had 123_book. 输出:I h*a*d 123_b*o*o*k.
#include<stdio.h>
void fun(char *s)
{int i,j,k,n=0;
char a,b;
for(i=0;*(s+i)!='\0';i++);
n=i;
for(i=0;*(s+i)!='\0';i++)
{ a=*(s+i);b=*(s+i+1);
if(((a<='z')&&(a>='a')||(a<='Z')&&(a>='A'))&&((b<='z')&&(b>='a')||(b>='A')&&(b<='Z'))) { for(j=0;j<=n-i;j++)
{ k=n;
*(s+k-j+1)=*(s+k-j); }
*(s+i+1)='*';
n++;
}
}
}
int main()
{char x[80];
7
gets(x);
fun(x);
puts(x);
return 0;
}
#include<stdio.h>
void fun(char *a,char *b)
{
int i,j;
for(i=0,j=0;a[i];)
{
b[j++] = a[i++];
if(!(i%3))
b[j++] = '#';
}
b[j] = '\0';
}
void main()
{
char x[80],y[120];
gets(x);
fun(x,y);
puts(y);
}
12. 编写函数int fun(int k),功能:从5个红球, 6个白球,7个黑球中任意取出k(2≤k≤18)个
球作为一组进行组合。在每组中,可以没有红球和白球,但必须要有黑球。不同组合的数目作为函数值返回。例如,若k为8时,正确的组合数是31;若k为2时,正确的组合数是3;或k为3时,正确的组合数是6 。
#include<stdio.h>
int fun(int k)
{int i,j,l,n=0;
for(i=1;i<=7;i++)
{ for(j=0;j<=6;j++)
{ for(l=0;l<=5;l++)
if(k==i+j+l) n++;
}
}
return(n);
}
int main()
{int x,n;
scanf("%d",&x);
n=fun(x);
printf("n=%d\n",n);
return 0;
8
}
13.编写函数void fun(char *str),功能:对形参str所指字符串中的字符按ASCII码升序排序。例
如,下面程序运行时输入:The C Programming Language<回车>
输出: CLPTaaaeegggghimmnnorru
#include<stdio.h>
#include<string.h>
void fun(char *str)
{ char m;
int i,j,p,q,x;
x=strlen(str);
for(i=1;i<x;i=i+2)
{ for(j=1;j<x-i;j=j+2)
{if(str[j]>str[j+2])
{ m=str[j];
str[j]=str[j+2];
str[j+2]=m;}
}
}
}
int main()
{char s[100];
gets(s);
fun(s);
puts(s);
return 0;
}
14. 请编写函数void fun(int *a, int n, int y),它的功能是:把y值插入到有n个数的a数组中,
a数组中的数已按由大到小的次序排好,y的值从键盘读入。插入后,数组中的数仍然有序。对照下面三种情况运行程序:
1) 插在最前2) 插在最后 3) 插在中间
若输入数11,输出 20 18 16 14 12 11 10 8 6 4 2
输入数1,输出 20 18 16 14 12 10 8 6 4 2 1
输入数33,输出 33 20 18 16 14 12 10 8 6 4 2
#include <stdio.h>
void fun(int *a,int n,int y)
{int i,j;
for(i=0;i<10;i++)
{
if(y>=a[i])
{
for(j=9;j>=i;j--)
{
a[j+1]=a[j];
}
a[i]=y;
break;
}
9
a[10]=y;
}
}
int main()
{int i,a[11]={20,18,16,14,12,10,8,6,4,2},x;
void fun(int *,int n,int y);
scanf("%d",&x);
fun(a,10,x);
for(i=0;i<11;i++)
printf("%d ",*(a+i));
return 0;
}
15. 编写函数int fun(char *s1,char *s2),在字符串s1中统计字符串s2出现的次数并返回。若s2
在s1中未出现,则返回0。例如:
若输入的字符串s1为:abaaAabcaabbabca,字符串s2为:ab ,则程序输出:n=4
若输入的字符串s1为:abaaAabcaabbabca,字符串s2为:abd,则程序输出:No find
#include<string.h>
#include<stdio.h>
int fun(char *s1,char *s2)
{
}
int main()
{ char a[80],b[80];
int n;
printf("Please input the first string:");
gets(a);
printf("Please input the second string:");
gets(b);
n=fun(a,b);
if(n==0)
printf("No find\n");
else printf("n=%d\n",n);
return 0;
}
#include<string.h>
#include<stdio.h>
int fun(char *str,char ch)
{
int i,j,m=0,p=0;
p=strlen(str);
m=strlen(str);
for(i=0;i<m;i++)
{
10
while(str[i]==ch)
{
for(j=i;j<m;j++)
{
str[j]=str[j+1];
str[j+1]='\0';
}
m=strlen(str);
}
}
if(m==p)
{
m=-1;
}
return m;
}
void main()
{
char a[80]={0},b;
int n;
printf("Please input a string:");
gets(a);
printf("Please input a delete character:");
b=getchar();
n=fun(a,b);
if(n==-1)
printf("No find %c\n",b);
else printf("%s,n=%d\n",a,n);
}
16. 编写函数int fun(char *str),功能是:统计字符串str中不同字符的个数并做为函数值返回。
例如,下面程序运行时若输入:One world,One dream! 输出:n=13
#include<stdio.h>
int fun(char *str)
{ int i,j,m=1,p,x,q;
p=strlen(str);
for(i=0;i<p;i++)
{ for(j=0;j<i;j++)
{ x=str[i];
q=str[j];
if(x==q)
{break;}
if(j+1>=i)
{ m++;}
11
}
}
return m;
}
int main()
{char s[80];
int n;
gets(s);
n=fun(s);
printf("n=%d\n",n);
return 0;
}
17. 编写函数int fun(int m,int n,int *p),要求将范围[m,n]之间所有的fibonacci数写入p所指
的一维数组中,fibonacci数的个数通过函数返回值带回。例如,[0,30]之间的fibonacci数有7个,它们是:1 2 3 5 8 13 21 ;[1000,32767]之间有7个,它们是:1597 2584 6765 10946 17711 28657 。
#include<stdio.h>
int fun(int m,int n,int *p)
{int i=0,num=0;
int f1=1,f2=1;
while(f1<=n)
{
if((f1>=m && f1<=n) )
{
p[i++] = f1;
num++;
}
if((f2>=m && f2<=n) && f2 != p[i-1] )
{
p[i++] = f2;
num++;
}
f1=f1+f2;
f2=f2+f1;
}
return num;
}
int main()
{int a,b,n,c[22],i;
scanf("%d%d",&a,&b);
n=fun(a,b,c);
for(i=0;i<n;i++)
printf("%6d",c[i]);
printf("\nn=%d\n",n);
return 0;
}
18.编写函数char *fun(char *s1,char *s2,int n),将字符串s1中后面的n个字符复制到s2所指
12
数组中,若s1不足n个字符,则用*在前端补齐至n个字符,写入s2中。函数返回字符串s2的指针。例如,下面程序运行时,
若输入:“abcd1234”和6,则输出“cd1234”
若输入:“abcd1234”和10,则输出“**abcd1234”
#include<stdio.h>
#include<string.h>
char *fun(char *s1,char *s2,int n)
{int i,m=0,p=0,x=0;
m=strlen(s1);
if(m<n)
{ for(p=m-1,x=n-1;p>=0,x>=n-m;p--,x--)
{ s2[x]=s1[p];}
for(i=0;i<n-m;i++)
{ s2[i]='*';}
}
if(m>n)
{for(p=m-1,x=n-1;p>=m-n,x>=0;p--,x--)
{ s2[x]=s1[p];}
}
if(m==n)
{ strcpy(s2,s1);}
}
int main()
{char c1[80],c2[80];
gets(c1);
fun(c1,c2,6);
puts(c2);
puts(fun(c1,c2,30));
return 0;
}
19. 编写函数void fun(char *a,char *b,char *c),逐个比较a、b两个字符串对应位置中的字符,
把ASCII值大或相等的字符依次存放到c数组中,形成一个新的字符串。例如,若a中的字符串为aBCDeFgH,b中的字符串为:ABcd,则c中的字符串应为:aBcdeFgH。
#include<stdio.h>
char *fun(char *s,char *b,char *c)
{int i,j;
for(i=0,j=0;i<strlen(a)&&j<strlen(b);i++,j++) {
if(a[i]>b[i]) c[i]=a[i]; else
c[i]=b[i]; }
if(i==strlen(a)) {
for(;j<strlen(b);j++) c[j]=b[j]; c[j]='\0'; } else {
13
for(;i<strlen(a);i++) c[i]=a[i]; c[i]='\0'; }
}
void main() {char s[80]; gets(s);
puts(fun(s)); }
}
int main()
{char s1[80],s2[80],s3[80];
gets(s1);
gets(s2);
fun(s1,s2,s3);
puts(s3);
return 0;
}
20. 编写函数void fun(char *s),将s所指字符串中的所有数字字符移到所有非数字字符之后,并保
持数字字符和非数字字符原有的前后次序。
例如,若输入:num is 0532-66ouc78,OK. 执行结果为:num is -ouc,OK.05326678
#include<stdio.h>
#include<string.h>
void fun(char *s)
{
char p;
int i,j,m;
m=strlen(s);
if(m%2==0)
{
p=s[m-1];
for(i=m-1;i>1;i=i-2)
{
s[i]=s[i-2];
}
s[1]=p;
}
if(m%2!=0)
{
p=s[m-2];
for(i=m-2;i>1;i=i-2)
{
s[i]=s[i-2];
}
s[1]=p;
} }
int main()
{char a[80];
14
gets(a);
fun(a);
puts(a);
return 0;
}
15
正在阅读:
中国海洋大学上机考试题2016春季学期 答案233305-13
高二数学导数及其应用单元测试题07-27
GRR表格MSA第四版(未加密)05-31
建筑常用十种保温材料特点08-21
计算机网络的发展历程05-02
辽宁石油化工大学简介08-06
三甲评审应知应会手册09-13
实验三苯甲醇的制备08-05
2012安徽徽匠测试题带答案 砌筑06-10
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 考试题
- 上机
- 中国
- 春季
- 海洋
- 学期
- 答案
- 大学
- 2016
- 2333
- 以工程商角度看综合布线
- 老年人尿路感染的病因分析及治疗
- 犬瘟热的诊断与治疗
- 旅游发展与资源型城市转型_基于_焦作现象_的解读_陶伟
- 中学生中考易错词语辑录
- 消防工程量清单1
- 初三期末期末中考08年昆明市高中阶段学校招生考试物理卷
- 2012广西壮族自治区驾校考试科目一C1考试答题技巧
- 内燃机车柴油机下排气故障的分析、判断及解决办法
- 小学科学四年级下册实验操作2
- 川豪工装事业部运营建议书
- 九年级电路故障分析专题训练
- B2C电子商务中消费者信任的影响因素分析
- 12化学动力学基础(二)
- 算符优先分析算法
- 山东理工大学大学生社会实践调研报告撰写要求
- 阴阳宅风水催财法
- 单词表牛津小学英语全册单词
- 2015三明幼儿园招聘教师备考必备:面试题答辩大全
- 齐齐哈尔市昂昂溪区数学五年级数学上册期末测试卷(A)