首页 > 代码库 > 02、数组

02、数组

数组

一、降序一个数组

/*
	2017年3月17日09:53:46
	功能:降序一个数组中的元素
*/
#include"stdio.h"
#define N 10
int main ()
{
	int i, j, t;									
	int a[N];

	printf("please input a array : \n");
	for (i = 0; i < N; i++)
	{
		printf("please input the %dth number: ", i+1);
		scanf("%d",&a[i]);
	}
	
	for(i = 0; i < N; i++)
		for (j = i+1; j < N; j++)								//实现交换,相同下标元素之间是对角线关系
		{
			if(a[i] <= a[j])
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}

		}

	for (i = 0; i < N; i++)
		printf("%d  ",a[i]);
	printf("\n");

	return 0;
}
/*
	总结:
	在VC++6.0中显示的结果:
	————————————————————
	please input a array :
	please input the 1th number: 1
	please input the 2th number: 2
	please input the 3th number: 3
	please input the 4th number: 4
	please input the 5th number: 5
	please input the 6th number: 6
	please input the 7th number: 7
	please input the 8th number: 8
	please input the 9th number: 9
	please input the 10th number: 10
	10  9  8  7  6  5  4  3  2  1
	————————————————————
*/

 

二、在升序的整型数组中插入一个数据仍为升序

/*
	2017年3月17日11:05:33
	功能:在升序的整型数组中插入一个数据仍为升序
*/
#include"stdio.h"
#define N 5
int main ()
{
	int i, j, m, t;
	int a[N];
	printf("please input a array: ");
	for (i = 0; i < N; i++)
	{
		printf("please input %dth number: ", i+1);
		scanf("%d",&a[i]);
	}
	printf("please input a number: ");
	scanf("%d",&m);
	for (i = 0; i < N; i++)
		for(j = i; j < N; j++)
		{
			if(a[i] >= a[j])
			{
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
		}
	for (i = 0; i < N; i++)
	{
		if(a[i] >= m && a[i-1] <=m)
			break;
	}
	for(j = N-1; j > i; j--)
	{
		a[j+1] = a[j];
	}
	a[j] = m;
	return 0;
}

  

三、在一个数组中插入一个数仍然有序

/*
	2017年7月1日15:32:27
	在一个数组中插入一个数仍然有序
*/
#include"stdio.h"
void insert (int, int*);
void insert1(int, int*, int);
int main()
{
	int insertNum;
	int a[100] = {2,4,6,8,10,12};
	printf("请输入一个数,保证有序序列继续有序:");
	scanf("%d",&insertNum);
	insert(insertNum, a);
	printf("%d %d %d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6]);
	return 0;
}

void insert (int insertNum, int *a)
{
	if(insertNum >= a[5])
	{
		a[6] = insertNum;
	}
	else if (insertNum > a[0])
	{
		for(int i =0; i < 6; i++)
		{
			if(insertNum >= a[i] && insertNum <= a[i+1] )
			{
				insert1(i+1, a, insertNum);
				break;
			}
		}
	}
	else if(insertNum <= a[0])
	{
		insert1(0, a, insertNum);
	}
}

void insert1(int i,int*a,int insertNum)
{
	for(int j = 5; j >= i;j--)
	{
		a[j+1] = a[j];
	}
	a[i] = insertNum;
}
/*
	在VC++6.0中显示的结果:
	——————————————————————
	请输入一个数,保证有序序列继续有序:4
	2 4 4 6 8 10 12
	——————————————————————
*/

 

四、对角线上的各元素求和,以及对角线上行,列下标均为偶数的各元素之和

/*
	2017年3月15日19:38:29
	功能:对角线上的各元素求和,以及对角线上行,列下标均为偶数的各元素之和
*/
#include"stdio.h"
int main ()
{
	int i, j, sum = 0, mul = 1, a[5][5];							//循环输入5*5的矩阵数组
	printf("input 5*5 array:\n");
	for(i = 0; i < 5; i++)
		for(j = 0; j < 5; j++)
			scanf("%d",&a[i][j]);

	printf("\n");

	for (i = 0; i < 5; i++)											//对行数进行确定,对哪些元素进行操作,是在行确定的基础下进行的
	{
		sum += a[i][i];												//对左对角线元素进行累加
	if (i != 2)														//对右对角线上的元素进行累加(对角线中间元素除外)
		sum +=a[i][4-i];
	if (i % 2 != 0)													//如果行下标为奇数,进入下一次循环
		continue;
	mul *= a[i][i];													//对左对角线元素进行累乘
	if (i != 2)
		mul *=a[i][4-i];											//对右对角线上的元素进行累乘(对角线中间元素除外

	}

	printf ("sum = %d mul = %d\n",sum, mul);

	return 0;
}
/*
	总结:
	在VC++6.0中显示的结果:
	————————————————————————————
	input 5*5 array:
	7 2 7 4 8
	9 3 5 7 4
	8 3 5 6 7
	4 8 5 3 5
	2 4 8 9 1

	sum = 44 mul = 560
	————————————————————————————
*/

五、循环输出方阵

/*
	2017年3月14日20:48:38
	功能:循环输出方阵
*/
#include"stdio.h"
int *fun(int *a,int n);
int main ()
{
	int a[10] ;
	int n, m;
	printf("please input some number: ");
	scanf("%d",&n);
	for(int i = 0; i < n; i++)
	{
		printf("please input %dth number:",i+1);
		scanf("%d",&a[i]);
	}
	m = n;
	while(m--)
	{
		fun(a,n);
		for (int j = 0; j < 6; j++)
			printf("%d  ",a[j]);
		printf("\n");
	}
	return 0;
}
int *fun(int *a,int n)
{

	int m, t;
	m = n-1;
	t = a[m];
	while(n--)
	{
		a[m] = a[m-1];
		m--;
	}
	a[0] = t;

	return a;
}
/*
	总结:
	在VC++6.0中显示的结果:
	————————————————————————
	please input some number: 6
	please input 1th number:1
	please input 2th number:2
	please input 3th number:3
	please input 4th number:4
	please input 5th number:5
	please input 6th number:6
	6  1  2  3  4  5
	5  6  1  2  3  4
	4  5  6  1  2  3
	3  4  5  6  1  2
	2  3  4  5  6  1
	1  2  3  4  5  6
	————————————————————————
	
*/

 

七、杨辉三角形

/*
	2017年3月16日08:03:31
	功能:杨辉三角形
*/
#include"stdio.h" 
#define N 6											//宏定义
void main ()
{
	int i, j, a[N][N];								//定义变量

	for (i = 0; i < N; i++)							//外循环代表输入所在行的元素
	{
		a[i][0] = 1;								//行首元素的值
		a[i][i] = 1;								//行尾元素的值
		for (j = 1; j < i; j++)						//此for()循环是确定此行中在其他列中的元素
			a[i][j] = a[i-1][j-1] + a[i-1][j];
	}

	for (i = 0; i < N; i++)							//显示结果
	{
		for (j = 0; j < N-i-1; j++)					//在数的前面添加相应的空格
			printf(" ");
		for (j = 0;j <= i; j++)
			printf("%2d ",a[i][j]);					//此时输出存入对应下标的元素
		printf("\n");
	}
}
/*
	总结:
	1、设计思想:对于有6行的杨辉三角形,可以用一个6行6列的二维数组a[6][6]来表示。对于第i行的元素:a[i][0]=1,a[i][i]=1(i=0,1,2,...,5),
	a[i][j] = a[i-1][j-1]+a[i-1][j](j=1,2,...,i-1).然后显示二维数组中的计算的结果,其中第1行的显示1个数据。。。第6行的显示6 个数据
	2、for(i = 0; i < N; i++)
			for(j = 0; j <= i; j++)
		这样的双for()循环的用处是给矩阵左下元素赋值
	3、for(i = 0; i < N; i++)
			for(j = i; j < N; j++)
		这样的双for()循环的用处是给矩阵右上元素赋值
	4、for(i = 0; i < N; i++)
			for(j = i; j <= i ; j++)
		这样的双for()循环的用处是给矩阵主对角线元素赋值
	5、for(i = 0; i < N; i++)
			for(j = N-i; j >= N-i; j--)
		这样的双for()循环的用处是给矩阵负对角线元素赋值
	6、在VC++6.0中显示的结果:
	————————————————————————————————
	      1
		 1  1
		1  2  1
	   1  3  3  1
	  1  4  6  4  1
	 1  5 10 10  5  1
	————————————————————————————————
*/

 

八、统计非负数之和 

/*
	2017年3月16日11:28:56
	功能:统计非负数之和
*/
#include "stdio.h"
int main ()
{
	int m, n = 0, sum = 0;
	int a[100];

	printf("please input 20 number: \n");
	for (int i = 0; i < 20; i++)
	{
		printf("the number is %dth : ", i+1);
		//a[i] = scanf("%d", &m);							//scanf()函数输入成功返回1,error	
		scanf("%d",&a[i]);									//此为正确输入的格式
		if (a[i] >= 0)										//满足条件执行if()语句中的内容,否则执行i++
		{	
			sum += a[i];
			n++;
		}
	}

	printf(" n = %d\n",n);

	return 0;
}
/*
	总结
	在VC++6.0中显示的结果:
	——————————————————————————
	please input 20 number:
	the number is 1th : 1
	the number is 2th : 2
	the number is 3th : 3
	the number is 4th : 4
	the number is 5th : 5
	the number is 6th : 6
	the number is 7th : 7
	the number is 8th : -4
	the number is 9th : 5
	the number is 10th : 3
	the number is 11th : 3
	the number is 12th : 3
	the number is 13th : 3
	the number is 14th : 3
	the number is 15th : 3
	the number is 16th : 3
	the number is 17th : 3
	the number is 18th : 3
	the number is 19th : 3
	the number is 20th : 3
	n =	19
	——————————————————————————
*/

  

 

  

  

  

02、数组