中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx

上传人:b****5 文档编号:29456770 上传时间:2023-07-23 格式:DOCX 页数:21 大小:72.81KB
下载 相关 举报
中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx_第1页
第1页 / 共21页
中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx_第2页
第2页 / 共21页
中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx_第3页
第3页 / 共21页
中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx_第4页
第4页 / 共21页
中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx

《中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx(21页珍藏版)》请在冰豆网上搜索。

中国石油大学华东C语言在线测评答案 第8章数组级亲测正确.docx

中国石油大学华东C语言在线测评答案第8章数组级亲测正确

8.7求最大值

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

输入范例3 0 54 -710 27 32767 10 1 500 2

输出范例32767

提示先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。

#include

intmain()

{

inta[10],max,i;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

max=a[0];

for(i=0;i<10;i++)

if(a[i]>max)

max=a[i];

printf("%d\n",max);

return0;

}

8.6数组逆序输出

问题描述

从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。

要求输出每个元素时以一个空格隔开。

提示:

用第一个与最后一个交换。

#include

intmain()

{

inta[10],i;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(i=9;i>=0;i--)

printf("%d",a[i]);

printf("\n");

return0;

}

8.1谁能出线

背景:

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。

按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:

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

输出:

       能够出线的学生序号(0~9)。

#include

intmain()

{

inta[10],i,max;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

max=a[0];

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);

return0;

}

8.2统计素数的个数

求出 2到m之间(含m,m<=1000)所有素数并放在数组a中。

输入:

正整数m

输出:

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

#include

intmain()

{

inta[1001],m,n,i,j;

scanf("%d",&m);

for(i=1;i<=m;i++)

a[i]=i;

a[1]=0;

for(i=2;i<=m;i++)

for(j=i+1;j<=m;j++)

{

if(a[j]!

=0&&a[i]!

=0)

if(a[j]%a[i]==0)

a[j]=0;

}

n=0;

for(i=2;i<=m;i++)

if(a[i]!

=0)

{printf("%4d",a[i]);

n++;}

printf("\n%d\n",n);

return0;

}

8.3冒泡法排序

冒泡排序(BubbleSort)的基本概念是:

依次比较相邻的两个数,将小数放在前面,大数放在后面。

即在第一趟:

首先比较第1个和第2个数,将小数放前,大数放后。

然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。

至此第一趟结束,将最大的数放到了最后。

在第二趟:

仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。

如此下去,重复以上过程,直至最终完成排序。

  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

编写程序,对输入的十个数按照从小到大排序

#include

intmain()

{

inta[10],i,j,t;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

for(j=0;j<9;j++)

for(i=0;i<9-j;i++)

if(a[i]>a[i+1])

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

for(i=0;i<10;i++)

printf("%d",a[i]);

printf("\n");

return0;

}

 

8.4插入法排序

如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。

定义一个数组,长度为11,初始元素为10个,按照从小到大的方式输入,然后输入一个要插入的元素,使得插入后仍然有序。

8.5求各位数字组成的最大数

任意输入一个自然数,输出该自然数的各位数字组成的最大数。

输入:

自然数n输出:

各位数字组成的最大数

#include

intmain()

{

inta[100]={0},k,n,i,j,t;

scanf("%d",&n);

for(k=0;n!

=0;k++)

{a[k]=n%10;

n=n/10;}

for(j=0;j<99;j++)

for(i=0;i<99-j;i++)

if(a[i]

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

for(i=0;i

printf("%d",a[i]);

printf("\n");

return0;

}

8.8二维数组

问题描述:

程序定义了 4× 4的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n。

例如:

      数组中的值为

假设n为10,则输出结果如下:

(输出的数按照4位宽度来输出,即%4d)

#include

intmain()

{

inta[4][4],n,i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf("%d",&a[i][j]);

scanf("%d",&n);

for(i=0;i<4;i++)

for(j=0;j<=i;j++)

a[i][j]=n*a[i][j];

for(i=0;i<4;i++)

{for(j=0;j<4;j++)

printf("%4d",a[i][j]);

printf("\n");}

return0;

}

 

8.9在屏幕上显示杨辉三角形

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

  其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。

中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。

杨辉三角有如下性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。

2、第n行的数字个数为n个。

3、每个数字等于上一行的左右两个数字之和。

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

例如:

n=5 图形如下:

#include

#defineM100

intmain()

{

inta[M][M];

inti,j,n;

scanf("%d",&n);

for(i=0;i<=n;i++)

for(j=0;j<=n;j++)

{if(j==i||j==0)a[i][j]=1;}

for(i=2;i<=n;i++)

for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i<=n;i++)

{for(j=0;j<=i;j++)

printf("%3d",a[i][j]);

printf("\n");}

return0;

}

8.10求二维数组周边元素之和

编写一个程序,求出4×5的二维数组周边元素之和。

输入:

二维数组元素

输出:

周边元素之和

如:

输入:

输出:

61

#include

intmain()

{

inta[4][5],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);

return0;

}

8.11存储并输出一个矩阵

编程,输入n,存储并输出如下例(n=5)所示的图形。

#include

intmain()

{

inta[100][100],n,i,j;

scanf("%d",&n);

for(i=0;i

for(j=0;j

a[i][j]=1;

for(i=0;i

for(j=i+1;j

a[i][j]=j+(1-i);

for(i=0;i

{for(j=0;j

printf("%d",a[i][j]);

printf("\n");}

return0;

}

8.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

intmain()

{

inta[10],b[10],i,j,n;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

n=1;

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;

}

8.13矩阵加法

方阵阶数为n(n<100),例如当n=3时,矩阵inta[3][3],矩阵intb[3][3]。

矩阵的数据由用户输入。

输出新的矩阵c=a+b。

输出格式:

c00c01c02c10c11c12c20c21c22每两个数字之间有1个空格

关于输入

方阵阶数n

矩阵a:

a00a01a02

a10a11a12

a20a21a22

矩阵b:

b00b01b02

b10b11b12

b20b21b22

关于输出

矩阵c:

c00c01c02

c10c11c12

c20c21c22

注意:

输出时每行最后不能有空格

#include

intmain()

{

inta[100][100],b[100][100],c[100][100],i,j,n;

scanf("%d",&n);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

for(j=0;j

scanf("%d",&b[i][j]);

for(i=0;i

for(j=0;j

c[i][j]=a[i][j]+b[i][j];

for(i=0;i

{for(j=0;j

printf("%d",c[i][j]);

printf("%d\n",c[i][n-1]);

}

return0;

}

8.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

intmain()

{

inta[11][11],b[11][11],i,j,n;

scanf("%d",&n);

for(i=0;i

for(j=0;j

scanf("%d",&a[i][j]);

for(i=0;i

for(j=0;j

b[i][j]=a[j][i];

for(i=0;i

{for(j=0;j

printf("%d",b[i][j]);

printf("%d\n",b[i][n-1]);

}

return0;

}

8.15求一系列整数中出现最多的数字

给定一系列整数,对每个整数的每一位数字统计0~9各个数字的出现次数,求出现次数最多的数字。

输入:

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

输出:

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

#include

intmain()

{

inta[100],b[1000]={0},c[10]={0},n,i,j,number=0,max;

scanf("%d",&n);

for(i=0;i

scanf("%d",&a[i]);

for(i=0;i

for(j=number;a[i]!

=0;j++)

{b[j]=a[i]%10;a[i]=a[i]/10;number++;}

for(i=0;i

c[b[i]]++;

max=c[0];

for(i=0;i<10;i++)

if(c[i]>max)max=c[i];

printf("出现次数最多%d次的数字是",max);

for(i=0;i<10;i++)

if(c[i]==max)printf("%d",i);

printf("\n");

return0;

}

8.16装箱问题

假设有n项物品,大小分别为s1,s2,...,sn,其中si是整数且满足:

1<=si<=100。

要把这些物品装入到容量为100的一批箱子(序号1~n)中。

装箱方法是:

对每项物品si,依次扫描所有这些箱子,把si放入足以能够容下它的第一个箱子中(first-fit策略)。

写一个程序来模拟这个装箱的过程。

输入:

有两行。

第一行是整数n(n<=1000),表示物品的个数;第二行是n个整数si(si<=100),分别表示n个物品的大小

输出:

每个物品所在的箱子序号,并输出所需的箱子数目

输入样例:

8

6070809030401020

输出样例:

601

702

803

904

301

405

101

202

所需的箱子数目为5

#include

intmain()

{

ints[1000],v[1000],n,i,j,max=0;

scanf("%d",&n);

for(i=0;i

scanf("%d",&s[i]);

for(i=0;i

v[i]=100;

for(i=0;i

for(j=0;j

if(s[i]<=v[j])

{printf("%d%d\n",s[i],j+1);

v[j]=v[j]-s[i];

if(j>max)max=j;

break;

}

printf("所需的箱子数目为%d\n",max+1);

return0;

}

8.17求大于m且紧靠m的k个素数

请编写一个函数,其功能是:

将大于整数m且紧靠m的k个素数存入xx所指的数组中。

例如,若输入175,则应输出1923293137

提醒:

本题提交的时候,只需要提交fun函数就可以。

#include

intfun(intm,intn,intzz[1000])

{

inti,j,k=0;

for(i=m+1;k

{for(j=2;j

if(i%j==0)break;

if(j==i){zz[k]=i;k++;}

}

return(zz[k]);

}

/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/

intmain()

{

intm,n,zz[1000];

scanf("%d%d",&m,&n);

fun(m,n,zz);

for(m=0;m

printf("%6d",zz[m]);

printf("\n");

return0;

}

/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/

8.18找鞍点

编写fun函数,其功能是:

在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。

例如,有下列矩阵:

   1   2   13   4

   7   8   10   6

   3   5   9   7

   程序执行结果为:

   find:

 x[2][2]=9

提醒:

本题提交的时候,只需要提交fun函数就可以。

/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/

#include

#defineM3

#defineN4

/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/

 

voidfun(intx[][4])

{

inti,j,k,max,flag;

for(i=0;i<3;i++)

{

max=x[i][0];k=0;

for(j=0;j<4;j++)

if(x[i][j]>max){max=x[i][j];k=j;}

flag=1;

for(j=0;j<3;j++)

if(x[j][k]

if(flag){printf("find:

x[%d][%d]=%d\n",i,k,x[i][k]);break;}

}

if(flag==0)printf("notfind!

\n");

}

/*PRESETCODEBEGIN-NEVERTOUCHCODEBELOW*/

intmain()

{

intx[M][N],i,j;

for(i=0;i

for(j=0;j

scanf("%d",&x[i][j]);

fun(x);

return0;

}

/*PRESETCODEEND-NEVERTOUCHCODEABOVE*/

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1