实验七 数组

一、实验目的

1.掌握一维数组和二维数组的定义,数组元素的引用形式和数组的输入输出方法。
2.了解与数组有关的算法(如插入、排序、查找等)。

二、实验学时

三、实验内容

1.从键盘输入十个学生的成绩,输出平均成绩以及高于平均成绩的学生人数。

#include<stdio.h>
#define x 10
int average(int score[],int n){
int i,sum=0;
for(i=0;i<n;i++)
sum+=score[i];
return sum/n;
}
void read(int score[],int n){
int i;
for(i=0;i<n;i++)
scanf("%d",&score[i]);
}
int main(){
int i,score[x],aver,n,count=0;
printf("input n:");
scanf("%d",&n);
read(score,n);
aver=average(score,n);
printf("average score is %d\n",aver);
for(i=0;i<n;i++)
if(score[i]>aver)
count++;
printf("高于平均成绩的人数:%d\n",count);
return 0;
}

在这里插入图片描述

2.某数列前两项为 2 和 3,其后每项为前两项之和,求此数列的前 10 个数并输出
显示。

#include<stdio.h>
long F(int n){
	if(n==1)
	return 2;
	else if(n==2)
	return 3;
	else return (F(n-1)+F(n-2));
}
int main(){
	int i,x,n;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		x=F(i);
		printf("%d ",x);
	}
	return 0;
}

在这里插入图片描述

3.输入 n×n 的矩阵,用函数编程计算并输出其两条对角线上的各元素之和。

#include<stdio.h>
#define x 5
int Diagonal(int a[x][x],int n){
	int i,j,sum=0;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(i==j||i+j==n-1)
			sum+=a[i][j];
		}
	}
	return sum;
}
void InputMatrix(int a[x][x],int n){
	int i,j;
	printf("input %d*%d matrix:\n",n,n);
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}
}
int main(){
	int a[x][x],sum,n;
	printf("input n:");
	scanf("%d",&n);
	InputMatrix(a,n);
	sum=Diagonal(a,n);
	printf("对角线各元素之和:%d\n",sum);
	return 0;
}

在这里插入图片描述

4.用编程输出杨辉三角形。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

#include<stdio.h>
#define x 7
int main(){
	int i,j,a[x][x];
	for(i=0;i<x;i++){
		for(j=0;j<=i;j++){
			if(i==j||j==0)
			a[i][j]=1;
			else a[i][j]=a[i-1][j-1]+a[i-1][j];
		}
	}
	for(i=0;i<x;i++){
		for(j=0;j<=i;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

在这里插入图片描述

5.编程实现在一个按升序排列的数组中查找 x 应插入的位置,将 x 插入数组中,
使数组元素仍按升序排列。

#include <stdio.h>
#define N 5
void Date(float a[]);
void Insert(float a[],float x);
int main()
{
	int i,j;
	float x,a[N+1];
	printf("输入5个数\n");
	for(i=0;i<N;i++)
	{
		scanf("%f",&a[i]);
	}
	printf("输入插入的数:\n");
	scanf("%f",&x);
	printf("\n");
	Date(a);
	Insert(a,x);
	printf("插入后的排列为:");
	for(i=0;i<N+1;i++)
	{
		printf("%4.1f",a[i]);
	}
	return 0;
}
void Date(float a[])
{
	int i,j,k,temp;
	for(i=0;i<N-1;i++)
	{
		k=i;
		for(j=i+1;j<N;j++)
		{
			if(a[j]>a[k])
			{
				k=j;
			}
		}
		if(k!=j)
		{
			temp=a[k];
			a[k]=a[i];
			a[i]=temp;
		}
	}
}
void Insert(float a[],float x)
{
	int i=0,big=0;
	while(i<N&&x<a[i])
	{
		i++;
	}
	big=i;
	for(i=N-1;i>=big;i--)
	{
		a[i+1]=a[i];
	}
	a[big]=x;
}

在这里插入图片描述

6.用交换排序法对一个数组进行排序。

#include<stdio.h>
void Read(int a[],int n){
	int i;
	printf("input number:");
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
}
void Sort(int a[],int n){
	int i,j,temp;
	for(i=0;i<n-1;i++){
		for(j=i+1;j<n;j++){
			if(a[j]<a[i]){
				temp=a[i];
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}
}
void Print(int a[],int n){
	int i;
	for(i=0;i<n;i++){
		printf("%d  ",a[i]);
	}
	printf("\n");
} 
int main(){
	int a[5],n;
	printf("input n:");
	scanf("%d",&n);
	Read(a,n);
	Sort(a,n);
	printf("排序后:\n"); 
	Print(a,n);
	return 0;
}

在这里插入图片描述

7.用选择排序法对一个数组进行排序。

#include<stdio.h>
void Sort(int a[],int n){
	int i,j,temp,k;
	for(i=0;i<n-1;i++){
		k=i;
		for(j=i+1;j<n;j++){
			if(a[j]<a[k]){
				k=j;
			}
		}
		if(k!=i){
			temp=a[k];
	    	a[k]=a[i];
			a[i]=temp;
		}
	}
}
int main(){
	int a[]={7,2,5,1,8},i,n;
	printf("input n:");
	scanf("%d",&n);
	Sort(a,n);
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}

在这里插入图片描述

8.用冒泡排序法对一个数组进行排序(算法参考教材 P226 8.16)。

#include<stdio.h>
void bubbleSort(int a[],int n)
{
  int i,j,temp,changed;
  for(i=0;i<n-1;i++)
  {
    changed=0;
    for(j=0;j<n-1-i;j++)
    {
     if(a[j]>a[j+1])
     {
      temp=a[j];
      a[j]=a[j+1];
      a[j+1]=temp;
      changed=1;
     }
    }
     if(changed==0) break;
  }
}
int main()
{
int a[]={5,2,4,1,8},n,i;
printf("intput n:");
scanf("%d" ,&n);
bubbleSort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}

在这里插入图片描述

9.输入一个有序的整数数组和一个整数 x,用折半查找法查找 x 在数组中的位置。

#include<stdio.h>
void read(int a[],int n)
{
  int i;
  printf("input number:");
  for(i=0;i<n;i++)
  scanf("%d",&a[i]);
}
int binarySearch(int a[],int n,int x)
{
  int i,low=0,high=n-1,mid;
  while(low<=high)
  {
    mid=(low+high)/2;
	if(x==a[mid])
    break;
    if(x>a[mid])
    low=mid+1;
    else high=mid-1;
  }
    if(low>high)
	return -1;
    else return mid;
}
int main(){
  int n,x,a[5],mid;
  printf("input n:");
  scanf("%d",&n);
  printf("input x:");
  scanf("%d" ,&x);
  read(a,n);
  mid=binarySearch(a,n,x);
  printf("x在数组中的位置为%d",mid);
  return 0;
}

在这里插入图片描述

四、实验小结

在实验报告中记录各题实验代码及运行结果,针对实验中遇到的问题及解决
方法、或尚未解决的问题、实验收获等,仔细撰写实验报告。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值