南京邮电大学C语言实验报告四

实验四:一维与二维数组实验

实验题目1【见实验教材实验五的题目1】编写程序exp5_1.c,在主函数中定义一维数组int array[10],自定义以下函数:输入数组元素,输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在(若存在,请输出下标)、给数组元素排序,要求在主函数中对各子函数进行调用和测试。

实验解答: 

  • 写出完整的源程序代码并做适当注释:
#include<stdio.h>
#define N 10
/*数组输出函数*/
void print(int a[], int n)
{
	int i;
	for(i=0;i<n;i++)
		printf("%5d",a[i]);
	printf("\n");
}

/*数组输入函数*/
void input(int a[], int n)
{
	int i;
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
}

//求数组的平均数
double aveage(int a[],int n)
{
	int i;
	double aveage,sum=0;
	for (i=0;i<n;i++)
		sum+=a[i];
	aveage=sum/n;
	printf("aveage=%f",aveage);
	return 0;
}

//输出数组元素最大值
int max(int a[],int n)
{
	int i,max;
	max=a[0];
	for(i=1;i<n;i++)
	{
		if(a[i]>max)
			max=a[i];
	}
	return max;
}

//输出数组元素最小值
int min(int a[],int n)
{
	int i,min;
	min=a[0];
	for(i=1;i<n;i++)
		if(a[i]<min)
			min=a[i];
	return min;
}
//查找指定下标元素
int find_farr(int a[], int n, int x, int farr[])
{
	int i;
	int b=0;
	for(i=b;i<n;i++)
	    if(x==a[i])
			farr[b++]=i;
			return b;
} 

//数组排序
void BubbleSort(int a[],int n)
{
	int i,j,temp;
	for (i=0;i<n-1;i++)
		for(j=n-1;j>i;j--)
			if(a[j]<a[j-1])
			{
				temp=a[j-1];
				a[j-1]=a[j];
				a[j]=temp;
			}
}
int main()
{
	int array[N],farr[N],i=0,n,x,c,choice,M,m,idx=0;
	do
	{
	printf("输入元素个数(1<=n<=%d):",N);
	scanf("%d",&n);
	}while(n<1||n>N);
	printf("please input %d elements:",n);
	input (array,n);
	printf("The array is :\n");
	print(array,n);
	printf("1 求数组平均数\n");
	printf("2 求数组最大值\n");
	printf("3 求数组最小值\n");
	printf("4 数组查找\n");
	printf("5 数组排序\n");
	printf("Please input your choice:");
	scanf("%d",&choice);
	switch(choice)
	{
	case 1:
		aveage( array,n);
		break;
	case 2:
		M=max(array,n);
		printf("max element:%d\n",M);
		break;
	case 3:
		m=min(array,n);
		printf("min element:%d\n",m);
		break;
	case 4:
		printf("Please input x be searched:");
		scanf("%d",&x);
		c=find_farr(array, n, x, farr);
	if(c==0)
	{	printf("Not found %d\n", idx);
	}
	else
	{	printf("Found %d in arr at the following indexs:\n",c);
	print(farr, c);
	}
		break;
	case 5:
		BubbleSort(array,n);
		print(array,n);break;
	default:
		printf("Input error!");
	}
	return 0;
}

实验题目(2)【见实验教材实验五的题目2】编写程序exp5_2.c,定义一个3*3的矩阵,要求实现读入矩阵、输出矩阵、矩阵转置、输出矩阵主对角线元素之和,所有功能均采用子函数实现。

实验解答:

①源程序exp5_2.c的源代码如下:

#include <stdio.h>
#define N 10
int input (int a[][N],int n)
{
	int i,j;
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			scanf("%d",&a[i][j]);
	return (a[i][j]);
}
int print(int a[] [N],int n)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			printf("%5d",a[i][j]);
	printf("\n");
	}
	return 0;
}
int transposition(int b[][N],int n)
{
	int i,j,array_b[N][N],array_a[N][N];
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			array_b[i][j]=array_a[j][i];
		printf("\n");
	}
	return array_b[i][j];
}
int sum_diag(int a[][N],int n)
{
	int s=0,i;
	for(i=0;i<n;i++)
	s+=a[i][i];
	return s;
}
int main()
{
	int n,choice,s,i,j;
	int array_a[N][N],array_b[N][N];
	printf("Please input n(1<=n<=10):");
	scanf("%d",&n);
	printf("The array is:\n");
	input(array_a,n);
	print(array_a,n);
	printf(" 1 transposition\n");
	printf("2  sum_diag\n");
	scanf("%d",&choice);
	switch(choice)
	{
	case 1:
		transposition(array_b,n);
		for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
			array_b[i][j]=array_a[j][i];
		printf("\n");
	}
	print(array_b,n);break;
	case 2:
	s=sum_diag(array_a,n);
	printf("%d",s);break;
	default:
		printf("Input error!");
	}
	return 0;
}

实验题目(3)【见实验教材实验五的题目4】:编写程序exp5_4.c,输出一个N阶螺旋方阵。如图1所示:

#include <stdio.h>
# define N 100
int main()
  {
	  int n,r,c,i,x=1;
      int a[100][100];
      printf("请输入一个整数\n");
      scanf("%d",&n);
      r=0;
	  c=n-1;
	  do
       {
		   for(i=(n-1-c);i<=c;i++)
             a[r][i]=x++;
		   for(i=r+1;i<=(n-1-r);i++)
             a[i][c]=x++;
		   for(i=c-1;i>=(n-1-c);i--)
           a[n-1-r][i]=x++;
		   r++;
		   for(i=(n-1-r);i>=r;i--)            
a[i][n-1-c]=x++;
		   c--;
	   } while(x<=(n*n));
	   for(i=0;i<n;i++)
     {
         for(r=0;r<n;r++)
			 printf("%5d",a[i][r]);
         printf("\n");
     }
	   return 0;
 }

实验题目(4)【见实验教材实验五的题目6】编写程序exp5_6.c,请判断花瓶是谁打碎的。教师花瓶碎了,班级只有四个小同学,老师询问小同学,已知是其中1人打碎的,还知道4人中每个人要么是诚实的,要么总是说谎的。

小同学回答老师的问题是:

甲说:“乙没有打碎,是丁打碎的。”

乙说:“我没有打碎,是丙打碎的。”

丙说:“甲没有打碎,是乙打碎的。”

丁说:“我没有打碎。”

根据四人回答判断谁打碎了花瓶。

实验解答:

①源程序exp5_6.c的源代码如下:

#include <stdio.h>
int main()
{
	int a[4];
	int i,j;
	for (i=0;i<4;i++)
	{
		for (j=0;j<4;j++)
			if(j==i)
				a[j]=1;
			else
				a[j]=0;
		if(a[3]+a[1]==1&& a[2]+a[1]==1&&a[0]+a[1]==1)
		{
			printf("打碎花瓶的是:");
			for(j=0;j<4;j++)
				if(a[j])
					printf("%d\n",j);
			printf("0是甲\n 1是乙\n 2是丙\n 3是丁\n");
		}
	}
	return 0;
}

 

②运行结果是:

打碎花瓶的是:1

0是甲

 1是乙

 2是丙

 3是丁

  • 37
    点赞
  • 165
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cookie爱吃小饼干

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值