中国石油大学 C 语言答案.docx
- 文档编号:11545731
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:60
- 大小:95.31KB
中国石油大学 C 语言答案.docx
《中国石油大学 C 语言答案.docx》由会员分享,可在线阅读,更多相关《中国石油大学 C 语言答案.docx(60页珍藏版)》请在冰豆网上搜索。
中国石油大学C语言答案
6.1谁能出线
背景:
电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。
按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。
输入:
按顺序给出一个小组10个人的最后得分(int)。
输出:
能够出线的学生序号(0~9)。
#include
voidmain()
{
inta[10];
intb=0,i,n,max=0;
for(i=0;i<10;i++)
{scanf("%d",&a[i]);}
for(i=0;i<10;i++)
{
if(a[i]>max)
{max=a[i];}
}
for(i=0;i<10;i++)
{
if(a[i]==max)
{
printf("%d\n",i);
}
}
}
6.2统计素数的个数
求出 2到m之间(含m,m<=1000)所有素数并放在数组a中。
输入:
正整数m
输出:
从小到大的所有素数,及个数(素数输出的时候用%4d来控制)
如:
输入:
10
输出:
2357
4
#include
intmain()
{
intx,n,t[100],j,i=0;
scanf("%d",&n);
for(x=2;x<=n;x++)
{
for(j=2;j<=x;j++)
{
if(x%j==0)break;
}
if(x==j)
{t[i]=x;
printf("%4d",t[i]);
i++;
}
}
printf("\n%d\n",i);
return0;
}
6.3冒泡法排序
冒泡排序(BubbleSort)的基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。
即在第一趟:
首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。
至此第一趟结束,将最大的数放到了最后。
在第二趟:
仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
编写程序,对输入的十个数按照从小到大排序
#include
voidmain()
{
inti,j,n;
inta[10];
for(i=0;i<10;i++)scanf("%d",&a[i]);
for(i=0;i<10;i++)
for(j=9;j>i;j--)
if(a[j-1]>a[j])
{
n=a[j-1];
a[j-1]=a[j];
a[j]=n;
}
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
6.4插入法排序
如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。
定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。
#include
voidmain()
{
inta[11];
intm,n,j,i;
for(i=0;i<10;i++)scanf("%d",&a[i]);
scanf("%d",&m);
a[10]=m;
for(i=0;i<11;i++)
for(j=10;j>i;j--)
if(a[j-1]>a[j])
{
n=a[j-1];
a[j-1]=a[j];
a[j]=n;
}
printf("%d",a[0]);
for(i=1;i<11;i++)
printf("%d",a[i]);
printf("\n");
}
6.5二维数组
程序定义了 4× 4的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。
例如:
数组中的值为
假设n为10,则输出结果如下:
(输出的数按照4位宽度来输出,即%4d)
#include
voidmain()
{
inta[4][4];
intm,i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
scanf("%d",&m);
for(i=0;i<4;i++)
{
for(j=0;j<=i;j++)
{
a[i][j]=m*a[i][j];
}
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
}
6.6数组逆序输出
问题描述
从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。
要求输出每个元素时以一个空格隔开。
提示:
用第一个与最后一个交换。
#include
voidmain()
{
intm[10],n[10],i;
for(i=0;i<10;i++)
{
scanf("%d",&m[i]);
}
for(i=0;i<10;i++)
{
n[i]=m[9-i];
}
printf("%d",n[0]);
for(i=1;i<10;i++)
printf("%d",n[i]);
printf("\n");
}
6.9求二维数组周边元素之和
编写一个程序,求出4×5的二维数组周边元素之和。
输入:
二维数组元素
输出:
周边元素之和
如:
输入:
13579
29994
69998
13570
输出:
61
#include
voidmain()
{
inta[4][5],i,j,n=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
}
for(j=0;j<5;j++)
n=n+a[0][j];
for(j=0;j<5;j++)
n=n+a[3][j];
n=n+a[1][0]+a[2][0]+a[1][4]+a[2][4];
printf("%d\n",n);
}
6.10存储并输出一个矩阵
编程,输入n,存储并输出如下例(n=5)所示的图形。
12345
11234
11123
11112
11111
#include
voidmain()
{
inta[10][10],i,j,n;
scanf("%d",&n);
for(i=0;i { for(j=0;j printf("1"); a[i][i+1]=2; for(j=i+1;j printf("%d",2+j-i-1); printf("\n"); } } 6.11给数组中的元素按顺序编号 对数组a[10]中的十个整数从小到大进行连续编号,输出各个元素的编号。 要求不能改变数组a中元素的顺序,且相同的整数要具有相同的编号。 例如数组是: A=(5,3,4,7,3,5,6,8,9,10)则输出为: (4,1,3,7,1,4,6,8,9,10) #include intmain() { inta[10],b[10],i,j,n=1; for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++) { for(j=0;j<10;j++) { if(a[i]>a[j]) { n++; } } b[i]=n; n=1; } for(i=0;i<10;i++) { printf("%3d",b[i]); }printf("\n"); return0; } 6.12求各位数字组成的最大数 任意输入一个自然数,输出该自然数的各位数字组成的最大数。 例如,输入1593,则输出为9531。 输入: 自然数n 输出: 各位数字组成的最大数 #include voidmain() { inta[10],i,j,x,m,n; scanf("%d",&x); for(i=0;x>0;i++) { a[i]=x%10; x=x/10; } m=i; for(i=0;i { for(j=i+1;j { if(a[i]<=a[j]) {n=a[i];a[i]=a[j];a[j]=n;} } } for(i=0;i printf("%d",a[i]); printf("\n"); } 7.1数的合并 请编写函数fun,其功能是: 将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是: 将a的十位和个位依次存放在c数的十位和千位上,b的十位和个位依次存放在c数的个位和百位上。 例如: 当a=45,b=12,调用该函数后,c=5241。 #include voidfun(inta,intb,int*c) { *c=(a%10)*1000+(a/10)*10+b/10+(b%10)*100; } intmain() { inta,b,c; scanf("%d%d",&a,&b); fun(a,b,&c); printf("%d\n",c); } 7.2数组中奇偶数 请编一个函数fun(int*a,intn,int*odd,int*even),函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。 形参n给了数组中数据的个数: 利用指针odd返回奇数之和,利用指针even返回偶数之和。 例如: 数组中的值依次为: 1,8,2,3,11,6;则利用指针odd返回奇数之和15;利用指针even返回偶数之和16。 #include #defineN20 voidfun(int*a,intn,int*odd,int*even) {inti; for(i=0,*odd=0,*even=0;i {if(a[i]%2) *odd=*odd+a[i]; else *even=*even+a[i]; } } intmain() {inta[N],i,n,odd,even; scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); fun(a,n,&odd,&even); printf("Thesumofoddnumbers: %d\n",odd); printf("Thesumofevennumbers: %d\n",even); return0; } 7.3浮点数四舍五入 请编一个函数voidfun(doublea,double*h),函数的功能是对变量h中的值保留2位小数,并对第三位进行四舍五入(规定h中的值为正数)。 例如: h值为8.32433,则函数返回8.32; h值为8.32533,则函数返回8.33 #include voidfun(doublea,double*h) {*h=(int)(a*100+0.5)/100.0; } intmain() { doublea,h; scanf("%lf",&a); fun(a,&h); printf("Theresult: %lf\n",h); return0; } 7.4字符移动 请编一个函数voidfun(char*s),函数的功能是把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。 例如: 原有的字符串为: Mn.123xyZ,则调用该函数后,串中的内容为: n.123xyZM。 #include #defineN81 #include voidfun(char*s) {intt,i; t=strlen(s); s[t]=s[0]; for(i=1;i<=t;i++) s[i-1]=s[i]; s[t]=0; } intmain() {chara[N]; gets(a); fun(a); printf("%s\n",a); } 7.5生成新数 给定程序中,函数fun的功能是: 将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。 例如,输入一个数: 27638496,新的数: 为739。 #include #include voidfun(int*n) {inta[100],i,m,p,q,sum=0; for(i=0;*n! =0;) {p=*n%10; if(p%2) {a[i]=p; i++;} *n=*n/10; } for(m=0;m {q=pow(10,m); sum=sum+a[m]*q;} *n=sum; } intmain() {intn=-1; while(n>99999999||n<0) {scanf("%d",&n);} fun(&n); printf("%d\n",n); return0; } 7.6字符串转换成整数 请编写一个函数fun,它的功能是: 将一个数字字符串转换为一个整数。 例如,若输入字符串"-1234",则函数把它转换为整数值-1234。 函数fun中给出的语句仅供参考。 #include #include intfun(char*p) {intt=0,i; for(i=0;p[i]! =0;i++) {if(p[i]>=48&&p[i]<=57) t=t*10+p[i]-48; } if(p[0]=='-') t=t*(-1); returnt; } intmain() {chars[10]; intn; gets(s); n=fun(s); printf("%d\n",n); return0; } 7.7二维数组按列优先存放 请编写函数fun,函数的功能是: 将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,二维数组中的数据为: WWWW SSSS HHHH 则字符串中的内容应是: WSHWSHWSHWSH。 #include #defineM3 #defineN4 voidfun(chars[][N],char*b) {inti,j,t=0; for(j=0;j for(i=0;i<3;i++) b[t++]=s[i][j]; } intmain() {chara[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; fun(w,a); puts(a); return0; } 7.8删除字符串中指定的星号 假定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是: 除了尾部的*号之外,将字符串中其它*号全部删除。 在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为: ****A*BC*DEF*G*******,删除后,字符串中的内容应当是: ABCDEFG*******。 /*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/ #include /*PRESETCODEEND-NEVERTOUCHCODEABOVE*/ voidfun(char*p,char*t) { char*q; for(q=p;p<=t;p++) if(*p! ='*') *q++=*p; while(*p) *q++=*p++; *q=0; } /*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/ intmain() {chars[81],*t; gets(s); t=s; while(*t)t++; t--; while(*t=='*')t--; fun(s,t); puts(s); return0; } /*PRESETCODEEND-NEVERTOUCHCODEABOVE*/ 7.9统计数字字符 请编写函数fun,它的功能是: 统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。 例如,字符串s为: abcdef35adgh3kjsdf7。 输出结果为: 4。 /*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/ #include /*PRESETCODEEND-NEVERTOUCHCODEABOVE*/ voidfun(char*s,int*t) { *t=0; for(;*s! =0;s++) if(*s>='0'&&*s<='9') (*t)++; } /*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/ intmain() {chars[80]="abcdef35adgh3kjsdf7"; intt; gets(s); fun(s,&t); printf("%d\n",t); return0; } /*PRESETCODEEND-NEVERTOUCHCODEABOVE*/ 7.10将两个串按要求形成一个新串 给定程序的函数fun的功能是: 逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。 例如,若主函数中a字符串为: aBCDeFgH,主函数中b字符串为: ABcd,则c中的字符串应为: aBcdeFgH。 #include #include voidfun(char*p,char*q,char*c) {intk,n,m,i,j; char*s,*t,*h; i=strlen(p),j=strlen(q); k=i>j? j: i; for(n=0;n *c=(*p)>=(*q)? *p: *q; m=n,s=c,t=p,h=q; k=i>j? i: j; if(k==i) {for(n=m,c=s,p=t;n *c=*p; *c=0; } if(k==j) {for(n=m,c=s,q=h;n *c=*q; *c=0; } } intmain() {chara[10],b[10],c[80]; gets(a);gets(b); fun(a,b,c); puts(c); return0; } 7.11统计子串的个数 请编写函数fun,它的功能是: 统计substr所指子字符串在str所指字符串中出现的次数。 例如,若str中的字符串为aaaslkaaas,子字符串为as,则应输出2。 /*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/ #include /*PRESETCODEEND-NEVERTOUCHCODEABOVE*/ voidfun(char*p,char*q,int*n) {intt,i; for(*n=0;*p! =0;p++) { for(t=0,i=0;*(q+i)! =0;i++) if(*(p+i)! =*(q+i)) t=1; if(t==0) (*n)++; } } /*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/ intmain() { charstr[80],substr[80]; intcount; gets(str); gets(substr); fun(str,substr,&count); printf("%d\n",count); return0; } /*PRESETCODEEND-NEVERTOUCHCODEABOVE*/ 7.12按要求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国石油大学 语言答案 中国 石油大学 语言 答案