实验四一维数组、二维数组一、实验目的与要求1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。
2、掌握与数组有关的算法。
二、实验内容1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。
#include "stdafx.h"#include<stdio.h>void swap2(int*,int*);void bubble(int a[],int n);int main(void){int n,a[8];int i;printf("Enter n(n<=8):");scanf("%d",&n);printf("Enter a[%d]:", n);for(i=0;i<n;i++)scanf("%d", &a[i]);bubble(a,n);printf("After sorted,a[%d]=", n);for(i=0;i<n;i++)printf("%3d",a[i]);return 0;}void bubble(int a[],int n) /*n是数组a中待排序元素的数量*/{int i,j;for(i=1;i<n;i++) /*外部循环---请问这个嵌套循环怎么理解??*/for(j=0;j<n-i;j++) /*内部循环---请问这个嵌套循环怎么理解??*/if(a[j]>a[j+1])swap2(&a[j],&a[j+1]); /*交换*/}void swap2(int *px,int *py){int t;t=*px;*px=*py;*py=t;}单向冒泡排序法://输入10个整数,按从大到小输出//#include<stdio.h>void main(){int i,j,t,a[10];printf("请输入10个整数\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=1;j<10;j++) //10个数要来回做(10-1)趟次//for(i=1;i<11-j;i++) //第j趟要做(10-j)次比较//if(a[i]>a[i-1]) //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//{t=a[i];a[i]=a[i-1];a[i-1]=t;}printf("按从大到小排序输出结果是:\n");for(i=0;i<10;i++)printf("%-3d",a[i]);printf("\n");}双向冒泡排序法://输入10个整数,按从大到小输出//#include<stdio.h>void main(){int i,j,t,k,a[10];printf("请输入10个整数\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(j=1;j<10;j++) //10个数要来回做(10-1)趟次//{for(i=1;i<11-j;i++) //第j趟要做(10-j)次比较,双向冒泡法,是先从上至下两两比较一次//if(a[i]>a[i-1]) //每做完一趟,就会将数组中较小的一个数沉淀下来,较大的数不断往上冒//{t=a[i];a[i]=a[i-1];a[i-1]=t;}for(k=i-1;k>0;k--) //与单向冒泡不同的是,这是双向冒泡的关键,每一次从顶至下比较完一次后,同时再从下//if(a[k]>a[k-1]) //至上比较一次,也就是说每一趟数组中的元素两两比较了两次,这就是双向冒泡排序了//{t=a[k];a[k]=a[k-1];a[k-1]=t;}}printf("按从大到小排序输出结果是:\n");for(i=0;i<10;i++)printf("%-3d",a[i]);printf("\n");}$(2)输入N个整数,使用改进的冒泡排序,将数据由大到小输出。
#include "stdafx.h"#include<stdio.h>void swap2(int*,int*);void bubble(int a[],int n);int main(void){int n,a[8];int i;printf("Enter n(n<=8):");scanf("%d",&n);printf("Enter a[%d]:", n);for(i=0;i<n;i++)scanf("%d", &a[i]);bubble(a,n);printf("After sorted,a[%d]=", n);for(i=0;i<n;i++)printf("%3d",a[i]);return 0;}void bubble(int a[],int n) /*n是数组a中待排序元素的数量*/{int i,j;for(i=1;i<n;i++) /*外部循环---请问这个嵌套循环怎么理解??*/for(j=0;j<n-i;j++) /*内部循环---请问这个嵌套循环怎么理解??*/if(a[j]>a[j+1])swap2(&a[j],&a[j+1]); /*交换*/}void swap2(int *px,int *py){int t;t=*px;*px=*py;*py=t;}2、*******输入N-1个整数组成一数列,再输入某数x,先将数列排序,根据x的值插入到有序数列中。
#include<stdio.h>main (){void Rank(int N,int n[]);int i,j,k;int n[11];printf("请输入10个整数:");for(i=0;i<10;i++)scanf("%d",&n[i]);Rank(10,n); //调用函数对输入的数组排序printf("\n请输入需要插入的整数:");scanf("%d",&k);if(k>n[9])n[10]=k;else{for(i=0;n[i]<=k;i++);for(j=9;j>=i;j--)n[j+1]=n[j]; //腾出位置,用以插入所输入的数n[i]=k;}printf("\n排序后此数列按升序排列为:");for(i=0;i<=10;i++)printf("%-4d",n[i]);}void Rank(int N,int n[]){int i,k,iTemp;for(k=1;k<=N-1;k++)for(i=N-1;i>=k;i--)if(n[i-1]>n[i]){iTemp=n[i];n[i]=n[i-1];n[i-1]=iTemp;}printf("排序后此数列按升序排列为:");for(i=0;i<=N-1;i++)printf("%-4d",n[i]);printf("\n");}3、输入行数n,打印出杨辉三角。
#include <stdio.h>int main(){ int yh[101][101]={{},{0,1}},i,n,m; scanf("%d",&m); /*输入要打印的行数,,,不能太大。
我水平不高。
*/for(i=2;i<=m;i++) { yh[i][1]=yh[i][i]=1; for(n=2;n<i;n++) { yh[i][n]=yh[i-1][n-1]+yh[i-1][n]; } }for(i=1;i<=m;i++) { for(n=1;n<=i;n++) { printf("%d",yh[i][n]); } printf("\n"); }return 0;}#include<stdio.h>#include<math.h>main(){ int a[8][8],i,j;for(i=0;i<8;i++){for(j=0;j<8;j++)if(j==0)a[i][j]=1;else if(i==j)a[i][j]=1;else if(i>j&&j>=1)a[i][j]=a[i-1][j]+a[i-1][j-1];elsea[i][j]=0;}for(i=0;i<8;i++){for(j=0;j<=i;j++)printf("%3d",a[i][j]);printf("\n");}}4、青年歌手参加歌曲大奖赛计分系统(1)有N个评委进行打分,求这位选手的平均得分(去掉一个最高分和一个最低分)。
#include <stdio.h>#include <stdlib.h>#include <time.h>void bubble_sort(int a[],int n){int i,j, itmp;for (i =0; i<n;i++){for(j=i+1 ;j<n;j++){if( a[i] >= a[j]){itmp = a[j];a[j] = a[i];a[i] = itmp;}}}}int main( int argc, char **argv){int iguide[10] = {0};srand((unsigned )time(NULL));for (int i = 0 ; i< 8;i++){int isum = 0;for (int j = 0 ; j< 10; j++){iguide[j] = rand()%10 +1;}bubble_sort(iguide,10);for (int l = 1;l<=8; l++){isum += iguide[l];}printf("The avg score the %d singer get is %d \n" ,i+1,isum/8); }return 0;}$(2)有N个评委进行打分,求M个选手每个人的平均得分(去掉一个最高分和一个最低分),并按平均得分由高到低排序输出。