当前位置:文档之家› 中国石油大学(华东)C语言在线测评答案 第8章数组(2013级亲测正确)

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

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

输入范例 3 0 54 -710 27 32767 10 1 500 2输出范例 32767提示先假定第一个元素时最大值,然后和其他的元素一个一个的进行比较,直到找到最大值。

#include<stdio.h>int main(){int a[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);return 0;}8.6 数组逆序输出问题描述从键盘上输入一个数组(10个元素),将原数组逆序重新排列后输出。

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

提示:用第一个与最后一个交换。

#include<stdio.h>int main(){int a[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=9;i>=0;i--)printf("%d ",a[i]);printf("\n");return 0;}8.1 谁能出线背景:电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。

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

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

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

#include<stdio.h>int main(){int a[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);return 0;8.2 统计素数的个数求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。

输入:正整数m输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)#include<stdio.h>int main(){int a[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);return 0;8.3 冒泡法排序冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。

即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。

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

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

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

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

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

编写程序,对输入的十个数按照从小到大排序#include<stdio.h>int main(){int a[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");return 0;}8.4 插入法排序如果一个数组中保存的元素是有序的(由小到大),向这个数组中插入一个数,使得插入后的数组元素依然保持有序。

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

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

输入:自然数 n 输出:各位数字组成的最大数#include<stdio.h>int main(){int a[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]<a[i+1]){ t=a[i]; a[i]=a[i+1]; a[i+1]=t; }for(i=0;i<k;i++)printf("%d",a[i]);printf("\n");return 0;}8.8 二维数组问题描述:程序定义了4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。

例如:数组中的值为假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)#include<stdio.h>int main(){int a[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"); }return 0;}8.9 在屏幕上显示杨辉三角形杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。

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

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

杨辉三角有如下性质:1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。

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

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

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

例如:n=5 图形如下:#include <stdio.h>#define M 100int 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(j==i||j==0) a[i][j]=1; }for(i=2;i<=n;i++)for(j=1;j<i;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"); }return 0;}8.10 求二维数组周边元素之和编写一个程序,求出4×5的二维数组周边元素之和。

输入:二维数组元素输出:周边元素之和如:输入:输出:61#include<stdio.h>int main(){int a[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);return 0;}8.11 存储并输出一个矩阵编程,输入 n ,存储并输出如下例( n=5 )所示的图形。

#include<stdio.h>int main(){int a[100][100],n,i,j;scanf("%d",&n);for(i=0;i<n;i++)for(j=0;j<n;j++)a[i][j]=1;for(i=0;i<n;i++)for(j=i+1;j<n;j++)a[i][j]=j+(1-i);for(i=0;i<n;i++){ for(j=0;j<n;j++)printf(" %d",a[i][j]);printf("\n"); }return 0;}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<stdio.h>int main(){int a[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");return 0;}8.13矩阵加法方阵阶数为n(n<100),例如当n=3时,矩阵int a[3][3],矩阵int b[3][3]。

相关主题