一、实验目的
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;
}
四、实验小结
在实验报告中记录各题实验代码及运行结果,针对实验中遇到的问题及解决
方法、或尚未解决的问题、实验收获等,仔细撰写实验报告。