数组的习题

1、编写一个程序。输出以下形式的前五行杨辉三角图案 

#include<stdio.h>
int main(int argc, const char *argv[])
{
	int n;
    //输入杨辉三角阶数
    printf("请输入阶数:");
	scanf("%d",&n);
	int arr[n][n];
 
	printf("%d阶杨辉三角为:\n",n);
    //控制行
	for(int i=0;i<n;i++)
	{
        //每一行前输出空格
		for(int j=0;j<n-i;j++)
		{
			printf(" ");
		}
        //控制列数
		for(int j=0;j<=i;j++)
		{
            //每一行第一个和最后一个赋值1
			if(j==0||i==j)
			{
				arr[i][j]=1;
			}
			else{
                //其余等上一行相邻两个数之和
				arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
			}
			printf("%d ",arr[i][j]);
		}
        //输出一行数字后换行
		printf("\n");
	}
	return 0;
}

 运行结果:

2、编写一个程序。请用 C 语言,对数组 {3, 2, 10, 1, 23, 15, 82} 进行由小到大的排序。

 冒泡排序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	
	int a[]={3, 2, 10, 1, 23, 15, 82};
    int n=sizeof(a)/sizeof(int);   //计算元素个数
	int i ,j,t;     
	
	//排序
	for(i=1;i<n;i++)   //排序趟数
	{
		for(j=0;j<n-i;j++)   //相邻元素比较,逆序,交换
		{
			if(a[j]>a[j+1])
			{
				t=a[j],a[j]=a[j+1],a[j+1]=t;
			}
		}
	}
	//输出
	printf("排序后的元素是:");
	for(i=0;i<n;i++)
	{
		printf("%4d",a[i]);
	}

	printf("\n");



	return 0;

}

 选择排序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
    
    int a[]={3, 2, 10, 1, 23, 15, 82};
    int n=sizeof(a)/sizeof(int);   //计算元素个数
	
	int i ,j,t;     

	for(i=0;i<n-1;i++)   
	{
		int min=i;
		for(j=i+1;j<n;j++)   
		{
			if(a[j]<a[min])
			{
				min=j;
			}
		}

		if(i!=min)
		{
			t=a[i],a[i]=a[min],a[min]=t;
		}
	}

	printf("排序后的元素是:");
	for(i=0;i<n;i++)
	{
	    printf("%4d" ,a[i]);
	}

	return 0;

}

运行结果:

 

3、编写一个程序。假设你有一只刚出生的母兔,母兔第3年开始生小兔,以后每年生一只。如果生出的都是母兔,请代码实现:输入你拥有该母兔后的第几年,输出该年你拥有的兔子数。

思路提示:1  1  2  3  5   8   13   21

#include <stdio.h>


int main()
{
	int n;
	int i;
	printf("拥有该母兔后的第几年:");
	scanf("%d", &n);
	int a[n];
	for(i=0;i<n;i++)
	{
		if(i==0||i==1)
		{
		    a[i] =1;
		}
		else
		{
			a[i] = a[i-1]+a[i-2];
		}
		printf("兔子数:%5d\n", a[i]);
	}

	return 0;
}

运行结果:

         运行结果未到达预期,代码还需要优化

4、编写一个程序。输入两个n行m列的矩阵A和B,输出他们的和A+B(小孩哥)

思路提示:定义两个二维数组 int a[10][10] , b[10][10];输入行数列数;然后对a数组元素和b数组元素对应求和【可以赋值给c数组】。最后输出求和后的结果

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int n,m;
	scanf("%d %d",&n,&m);
	
	int arr[n][m],brr[n][m],crr[n][m];
    //输入arr数组
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			scanf("%d",&arr[i][j]);
		}
	}
    //输入brr数组
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			scanf("%d",&brr[i][j]);
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
            //先初始化crr各项的值,再求和
			crr[i][j]=0;
			crr[i][j]=arr[i][j]+brr[i][j];
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			printf("%3d",crr[i][j]);
		}
	}
	return 0;
}

  运行结果:

 

5、编写一个程序。一个长度为10的数组中重复数据,现要求相同数据只保留一份,其他的用0来代替,被替换的数据移到数组末尾。(数组内容自定) 
a[  ]={3, 2, 10, 17, 23, 15, 82 , 17, 2, 78};
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	
	int a[]={3, 2, 10, 17, 23, 15, 82 , 17, 2, 78};
    int n=sizeof(a)/sizeof(int);   //计算元素个数
	int i ,j,t;     
	
	
	
	for(i=0; i<n; i++)
	{

        for(j=i+1; j<n; j++)
        {

            if(a[i]==a[j])    //重复数组用0代替
            {
                a[j] = 0;
            }
            
        }
	}


	
	//排序
	for(i=1;i<n;i++)   //排序趟数
	{
		for(j=0;j<n-i;j++)   //相邻元素比较,逆序,交换
		{
			if(a[j]<a[j+1])   //从大到小排序
			{
				t=a[j],a[j]=a[j+1],a[j+1]=t;
			}
		}
	}
	//输出
	printf("排序后的元素是:");
	for(i=0;i<n;i++)
	{
		printf("%4d",a[i]);
	}

	printf("\n");



	return 0;

}

 运行结果:

6、【选做题】编写一个程序。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值的那两个整数,并输出它们的数组下标。输入: nums = [3,2,4],target = 6 输出:[1,2]。

                 有空在补充!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值