zoukankan      html  css  js  c++  java
  • 27、数组的操作

    数组

    一、降序一个数组

    /*
    	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 : 
    ");
    	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("
    ");
    
    	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
    ",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:
    ");
    	for(i = 0; i < 5; i++)
    		for(j = 0; j < 5; j++)
    			scanf("%d",&a[i][j]);
    
    	printf("
    ");
    
    	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
    ",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("
    ");
    	}
    	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("
    ");
    	}
    }
    /*
    	总结:
    	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: 
    ");
    	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);
    
    	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
    	——————————————————————————
    */
    

      

    九、将数组中数字元素放于非数字元素的后面

    /*
    	2017年7月1日18:04:34
    	将数组中数字元素放于非数字元素的后面
    */
    #include"stdio.h"
    int main()
    {
    	int n = 0;
    	char a[100];
    	char b[100];
    	char c[100];
    	printf("please input a string: ");
    	gets(a);
    	char *pa = a;
    	char *pb = b;
    	char *ppb = b;
    	char *pc = c;
    	while(*pa)
    	{
    		if(*pa >= '1'&& *pa <= '9')
    		{
    			*pb = *pa;
    			pb++;
    			n++;
    		}
    		else
    		{
    			*pc = *pa;
    			pc++;
    		}
    		pa++;
    	}
    	*pb = '';
    	while(n--)
    	{
    		*pc = *ppb;
    		pc++;
    		ppb++;
    
    	}
    	*pc = '';
    	puts(c);
    	return 0;
    }
    

    十、将数组中数字元素后面插入*

    /*
    	2017年7月1日18:04:03
    	将数组中数字元素后面插入*
    */
    #include"stdio.h"
    int main ()
    {
    	int n = 0;
    	char a[100];
    	char b[100];
    	char c[100];
    	printf("please input a string : ");
    	gets(a);
    	char *pa = a;
    	char *ppa = a;
    	char *pb = b;
    	char *ppb = b;
    	char *pc = c;
    	while(*pa)
    	{
    		if((*pa >= '1')&&(*pa <= '9'))
    		{
    			*pb = '*';
    			pb++;
    			n++;
    		}
    		pa++;
    	}
    	*pb = '';
    	while(*ppa)
    	{
    		*pc = *ppa;
    		if((*pc >='1')&&(*pc <= '9'))
    		{
    			pc++;
    			*pc = *ppb;
    			pb++;
    		}
    		pc++;
    		ppa++;
    	}
    	*pc = '';
    
    	puts(c);
    
    
    	return 0;
    }
    

    十一、计算数组中所有元素的平均数,将低于平均数的数值输出 

    /*
    	2017年7月1日18:03:27
    	计算数组中所有元素的平均数,将低于平均数的数值输出
    */
    #include"stdio.h"
    int main()
    {
    	int m, i, j = 0, sum = 0, aver = 0;
    	int a[100], b[100];
    	printf("请输入需要统计人数的个数:");
    	scanf("%d",&m);
    	for(i = 0; i < m; i++)
    	{
    		printf("请输入%d个人的分数:",i+1);
    		scanf("%d",&a[i]);
    		sum += a[i];
    	}
    	aver = sum / m;
    	for(i = 0; i < m; i++)
    	{
    		if(a[i] < aver)
    			b[j++] = a[i];
    	}
    	for(i = 0; i < j; i++)
    	{
    		printf("%d   ",b[j]);
    	}
    
    	return 0;
    }
    

    十二、找出数组中最大的数据

    /*
    	2017年7月1日18:02:06
    	找出数组中最大的数据
    */
    #include"stdio.h"
    #define M 100
    int main ()
    {
    	int i, max;
    	int a[M];
    	for(i = 0; i < M; i++)
    	{
    		printf("please input %dth the number: ",i+1);
    		scanf("%d",&a[i]);
    		if(a[i] == 0)
    			break;
    	}
    	max = a[0];
    	for(int j = 0; j < i; j++)
    	{
    		if(a[j] > max)
    			max = a[j];
    	}
    	printf("the result is %d
    ",max);
    
    	return 0;
    }
    

    十三、找出指定数到100之间,并且能够被指定数整除所有的质数

    /*
    	2017年7月1日18:01:01
    	找出指定数到100之间,并且能够被指定数整除所有的质数
    */
    #include"stdio.h"
    int main()
    {
    	int m, i, j = 0;
    	int a[100];
    	printf("please input a number: ");
    	scanf("%d",&m);
    	for(i = m; i < 100; i++)
    	{
    		if((i % m == 0)&&(i % 2 != 0))
    			a[j++] = i;
    	}
    	for(i = 0; i < j; i++)
    	{
    		printf("%d   ",a[i]);
    	}
    	printf("
    ");
    	return 0;
    }
    

     

    十四、将数组中偶数位的元素循环逆置

    /*
        2017年3月13日08:42:48
        功能:将数组中偶数位的元素循环逆置
    */
    #include"stdio.h"
    #include"string.h"
    #define N 100
    int main()
    {
        int m = 0;
        int n = 0;
        int x = 0;
        int y = 0;
        int q = -1;
        char a[N];
        char b[N];
        char c[N];
        char d[N];
        printf("please input a string :");
        gets(a);
        for(int i = 0; a[i] != '';i++)
        {
            if(i % 2 == 0)
                b[m++] = a[i];
                
            else
                c[n++] = a[i];
            b[m] = '';
            c[n] = '';
        
        }
        while( x < strlen(a))
        {
        
            d[x++] = b[y++];
            d[x++] = c[((q++)+n)%n];
        
        }
        d[x] = '';
        if(strlen(a) % 2 == 0)
            puts(d);
        else 
        {
            d[x-1] = '';
            puts(d);
        }
    }
    /*
        总结:
        在VC++6.0中显示的结果:
        ————————————————————
        1、please input a string :12345678
            18325476
    
        2、please input a string :123456789
            183254769
        ————————————————————
    */ 

    十五、交换两个数组对应的值

    /*
        2017年3月13日10:40:04
        功能:交换两个数组对应元素的值
    */
    #include"stdio.h"
    int main(void)
    {
        int n = 0, m = 0, i;
        int a[100] = {1,3,5,7,9};
        int b[100] = {2,4,6,8,10,12,14,16};
        int *ppa = a;
        int *pa = a;
        int *ppb = b;
        int *pb = b;
        int t;
        while(*ppa)
        {
            n++;
            ppa++;
        }
        while(*ppb)
        {
            m++;
            ppb++;
        }
        while(*pa && *pb )
        {
            t = *pa;
            *pa = *pb;
            *pb = t;
            pa++;
            pb++;
        }
        for ( i = 0; i < n; i++)
        {
            printf("%d  ",a[i]);
            
        }
        printf ("
    ");
    
        for ( i = 0; i < m; i++)
        {
            printf("%d  ",b[i]);
    
        }
        printf ("
    ");
    
        return 0;
    }
    /*
        总结:
        在VC++6.0中显示的结果:
        ——————————————————————
        2  4  6  8  10
        1  3  5  7  9  12  14  16
        ——————————————————————
    */
    

      

    十六、升序,奇数在前,偶数在后

    /*
        2017年3月14日12:52:39
        功能:升序,奇数在前,偶数在后
    */
    #include "stdio.h"
    int main ()
    {
        int j = 0, k = 0;
        int a[10];
        int b[10];
        int c[10];
        int *pa = a;
    
        printf("please input 10 number: 
    ");
        for (int i = 0; i < 10; i++)
        {
            printf("please input %dth number: ",i+1);
            scanf("%d",&a[i]);
            if(a[i] % 2 ==0)
                b[j++] = a[i];
            else 
                c[k++] = a[i];
    
        }
    
        int *pb = b;
        int *pc = c;
    
        for(int p = 0; p < j; p++)
            for(int p1 = p; p1 < j; p1++)                                    //此处不能定义int p1 = 1;
                if(b[p] >= b[p1])
                    b[p1] = b[p];
    
        for(int q = 0; q < k; q++)
            for(int q1 = q; q1 < k; q1++)
                if(c[q] >= c[q1])
                    c[q1] = c[q];
    
        while(j)                                                            //此处不能用while(*pc)语句跳出循环
        {
            *pa = *pc;
            pa++;
            pc++;
            j--;
        }
        while(k)
        {
            *pa = *pb;
            pa++;
            pb++;
            k--;
        }
        for (i = 0; i < 10; i++)
            printf("%d   ",a[i]);
    
        return 0;
    }
    /*
        总结:
        在VC++6.0中显示的结果::
        ——————————————————————————
        please input 10 number:
        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
        please input 7th number: 7
        please input 8th number: 8
        please input 9th number: 9
        please input 10th number: 10
        1   3   5   7   9   2   4   6   8   10
    
        ——————————————————————————
    
    */
    

    十七、在a数组后面添加b数组的值

    /*
            2017年3月12日14:07:05
            功能:在a数组后面添加b数组的值
        */
    
        #include"stdio.h"
        int main()
        {
            int i = 0;
            char a[20];
            char b[20];
            char *pa = a;
            char *pb = b;
            printf("请输入字符串a:");
            gets(a);
            printf("请输入字符串b:");
            gets(b);                                            //使用gets()函数时,最后元素不需要添加结尾标识符''
            while (b[i++] != '')
            {
                ;
            }
            int string_b_len = i;                                //求出b[]数组的长度
            while (*pa)
            {
                pa++;
            }                                                    //将a[]数组的指针移到末尾
    
            if (string_b_len < 5)
            {
                for (int n = 0; n < string_b_len; n++)
                {
                    *pa = *pb;
                    pa++;
                    pb++;
                }
                
                puts(a);
            }
    
            else if (string_b_len >= 5)
            {
                for (int n = 0; n < 5; n++)
                {
                    *pa = *pb;
                    pa++;
                    pb++;
                }
                puts(a);
            }
        }
        /*
            总结:
            在VC++6.0中显示的结果:
            ——————————————————————
            请输入字符串a:asdfghjkl
            请输入字符串b:dft
            asdfghjkldft
            ——————————————————————
        */
     
    

      

    十八、在a数组后面添加b数组的值(数组实现)  

    源代码程序(数组实现):
    
    /*
            2017年3月12日14:07:05
            功能:在a数组后面添加b数组的值(数组实现)
        */
    
        #include"stdio.h"
        int main()
        {
            int j = 0;
            int i = 0;
            char a[20];
            char b[20];
            printf("请输入字符串a:");
            gets(a);
            printf("请输入字符串b:");
            gets(b);
            while (b[i] != '')
            {
                i++;
            }
            while (a[j] != '')
            {
                j++;
            }
            if (i < 5)
            {
                for (int x = 0; x < i; x++)
                {
                a[j++] = b[x];
                }
                a[j] = '';
            }
            else if (i >= 5)
            {
                for (int y = 0; y < 5; y++)
                {
                    a[j++] = b[y];
                }
                a[j] = '';
            }
    
            puts(a);
    
        }
        /*
            总结:
            在VC++6.0中显示的结果:
            ——————————————————————
            请输入字符串a:asdfghjkl
            请输入字符串b:dft
            asdfghjkldft
            ——————————————————————
        */
      
    
     
    

      

      

      

     

      

     

      

      

      

  • 相关阅读:
    poj 1113 Wall 凸包的应用
    NYOJ 78 圈水池 (入门级凸包)
    Monotone Chain Convex Hull(单调链凸包)
    poj Sudoku(数独) DFS
    poj 3009 Curling 2.0(dfs)
    poj 3083 Children of the Candy Corn
    Python join()方法
    通过FISH和下一代测序检测肺腺癌ALK基因融合比较
    华大病原微生物检测
    NGS检测ALK融合大起底--转载
  • 原文地址:https://www.cnblogs.com/wxt19941024/p/7102745.html
Copyright © 2011-2022 走看看