中国石油大学第六章计算机作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

【研究创新型】6.1 谁能出线
电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:
按顺序给出一个小组10个人的最后得分(int)。

输出:
能够出线的学生序号(0~9)。
#include
void main ()
{
int s[10],a,i;
a=0;
for (i=0;i<=9;i++)
{scanf ("%d",&s[i]);
if (s[i]>a) a=s[i];
}
for (i=0;i<=9;i++)
if (a==s[i]) printf ("%d\n",i) ;
}
6.2 统计素数的个数
求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。

输入:正整数m

输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)

如:

输入:10

输出:2 3 5 7
4
#include
void main ()
{
int a,i,b,c;
c=0;
scanf ("%d",&a);
for (i=2;i{
for (b=2;bif (i%b==0) break ;

if(b==i)
{
printf ("%4d",i);
c++;
}
}
printf("\n");
printf ("%d\n",c);
}
6.3 冒泡法排序
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

编写程序,对输入的十个数按照从小到大排序
#include
void main ()
{
int s[10],a,i,b,c;
scanf ("%d%d%d%d%d%d%d%d%d%d",&s[1],&s[2],&s[3],&s[4],&s[5],&s[6],&s[7],&s[8],&s[9],&s[0]);
for (a=9 ; a>=0 ; a--)
{
for (i=0 ; iif (s[i]printf (" %d",s[a]);
}
printf ("\n");
}
6.4 插入法排序
如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。
#include
void main ()
{
int s[11],a,i,b,c;

scanf ("%d%d%d%d%d%d%d%d%d%d",&s[0],&s[1],&s[2],&s[3],&s[4],&s[5],&s[6],&s[7],&s[8],&s[9]);
scanf("%d",&a);
for (i=9 ; i>=0; i--)
if (as[i+1]=s[i] ;
s[i]=a;}
else {
s[i+1]=a;
break ;}
for (i=0 ; i<=10 ; i++)
printf (" %d",s[i]);
printf ("\n");
}
6.5 求各位数字组成的最大数
任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。

输入: 自然数 n

输出: 各位数字组成的最大数
#include
int main ()
{
int s[11],a,i=0,j,b,d;
scanf("%d",&a);
while ( a>0 )
{
b=a%10;
s[i]=b;
i++;
a=a/10;
}

for (j=0 ; jfor (d=i-1 ; d>=j; d--)
if (s[j]>=s[d]) ;
else
{
b=s[j];s[j]=s[d];s[d]=b;
}
for (j=0 ; jprintf ("%d",s[j]);
printf ("\n");
}
6.6 数组逆序输出
从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。要求输出每个元素时以一个空格隔开。

提示:

用第一个与最后一个交换。
#include
void main ()
{
int s[20],a,b,c,i;
for (i=0;i<10;i++)
scanf ("%d",&s[i]);
for (c=10; c<20 ; c++)
{
s[c]=s[19-c];
printf ("%d ",s[c]);
}
printf ("\n");
}
6.7 求最大值
问题描述

要求从键盘输入10个整型数据,找出其中的最大值并显示出来。

输入范例

3 0 54 -710 27 32767 10 1 500 2

输出范例

32767

提示

先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。
#include
int main ()
{ int s[10],i,max;
for (i=0 ; i<10 ; i++)
scanf ("%d",&s[i]);
max=s[0];
for (i=0 ; i<9 ; i++)
if (max
printf ("%d\n",max);
}

6.9 在屏幕上显示杨辉三角形
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。

杨辉三角有如下性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、每个数字等于上一行的左右两个数字之和。

编写程序,输入正数n, 将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

#include
#define M 100
int main()
{
int a[M][M];
int i,j,n;
scanf("%d",&n);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
{
if(i==j||j==0)
a[i][j]=1;
}
for(i=1;i

<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
if(j<=i)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}
6.10 求二维数组周边元素之和
编写一个程序,求出4×5的二维数组周边元素之和。

输入:二维数组元素

输出:周边元素之和

如:

输入:

1 3 5 7 9

2 9 9 9 4

6 9 9 9 8

1 3 5 7 0


输出:61
#include
#define M 4
int main()
{
int a[M][M+1];
int i,j,sum=0;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(i==0||i==3||j==0||j==4)
sum=sum+a[i][j];
printf("%d\n",sum);
return 0;
}
6.11 存储并输出一个矩阵
编程,输入 n ,存储并输出如下例( n=5 )所示的 图形。

1 2 3 4 5

1 1 2 3 4

1 1 1 2 3

1 1 1 1 2

1 1 1 1 1
#include
void main ()
{
int a[20][20],i,j,b;
scanf("%d",&b);
a[0][0]=1;
for (i=0;ifor(j=0;jif (j<=i) a[i][j]=1;
else a[i][j]=1+j-i;
for (i=0;i{
for(j=0;jprintf ("%2d",a[i][j]);
printf ("\n");
}
}
6.12 给数组中的元素按顺序编号
对数组 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
int main()
{
int a[10],b[10]={1,1,1,1,1,1,1,1,1,1};
int i,j,t;
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]) b[i]++;
for(i=0;i<10;i++)
printf("%3d",b[i]);
printf("\n");
}
6.13矩阵加法
方阵阶数为n(n<100),例如当n=3时,矩阵int a[3][3],矩阵int b[3][3]。 矩阵的数据由用户输入。输出新的矩阵c=a+b。 输出格式: c00 c01 c02 c10 c11 c12 c20 c21 c22 每两个数字之间有1个空格

关于输入
方阵阶数n
矩阵a:
a00 a01 a02
a10 a11 a12
a20 a21 a22
矩阵b:
b00 b01 b02
b10 b11 b12
b20 b21 b22

关于输出
矩阵c:
c00 c01 c02
c10 c11 c12
c20 c21 c22
#include
int main()
{
int a[100][100],b[100][100],c[100][100];
int i,j,t;
scanf("%d",&t);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jscanf("%d",&b[i][j]);
for(i=0;ifor(j=0;jc[i][j]=b[i][j]+a[i][j];
for(i=0;ifor(j=0;j{
if (jelse printf("%d\n",c[i][j]);
}

}
6.14矩阵转置
在数学上,矩阵是指纵横排列的二维数据表格,最早来自于方程

组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。矩阵概念在生产实践中也有许多应用,比如矩阵图法以及保护个人帐号的矩阵卡系统(由深圳网域提出)等等。“矩阵”的本意也常被应用,比如监控系统中负责对前端视频源与控制线切换控制的模拟设备也叫矩阵。

设A为n×n阶矩阵(即n行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j)
定义A的转置为这样一个n×n阶矩阵B,满足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素),记A'=B。(有些书记为AT=B,这里T为A的上标)


直观来看,将A的所有元素绕着一条从第1行第1列元素出发的右下方45度的射线作镜面反转,即得到A的转置。

输入:

有n+1行(2 ≤n≤10),第一行是一个整数n,代表矩阵为n行n列。后面n行表示矩阵的取值

输出:

转置后的矩阵
#include
int main()
{
int a[100][100],b[100][100],c[100][100];
int i,j,t;
scanf("%d",&t);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;ifor(j=0;jb[i][j]=a[j][i];
for(i=0;i{
for(j=0;jif(jelse printf("%d\n",b[i][j]);
}
}
6.15求一系列整数中出现最多的数字
给定一系列整数,对每个整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。

输入:

有两行,第一行是整数n(1<=n<=100),表示有n个整数;第二行是n个整数值

输出:

出现次数最多的数字d(如果d不唯一,要列出全部)及其出现的次数

输入样例:

1
1233

输出样例:

出现次数最多2次的数字是 3
#include
int main()
{
int a[100],b[10]={0,1,2,3,4,5,6,7,8,9},c[10]={0,0,0,0,0,0,0,0,0,0},d[5];
int i,j,t,m,n,max,r=0;
scanf("%d",&t);
for(i=0;iscanf("%d",&d[i]);
for(i=0;iwhile(d[i]!=0)
{
m=d[i]%10;
d[i]=d[i]/10;
a[r]=m;
r++;
c[m]++;
}
for(i=0;i<10;i++)
{
if(max}
printf("出现次数最多%d次的数字是",max);
for(i=0;i<10;i++)
{
if(max==c[i]) printf(" %d",b[i]);
}
printf("\n");
}