C语言程序设计-[22] 数组应用

1、简单插入排序算法

根据以上分析,代码与结果如下:

#include "stdio.h"

int main()
{    
	int count,j,x,a[101];
    scanf("%d",&x);
    if(x<=0)
		return;
    else
		a[1]=x;
    count=1;
    scanf("%d",&x);
    while(x>0)
    {     
		 for(j=count; x>a[j]&&j>0; j--)  //将数循环后移1位
            a[j+1] = a[j];
        a[++j] = x;   //把x放在a[j+1]的位置
        count++;
        scanf("%d",&x);      
    }
    for(j=1;j<=count;j++)
        printf("%d ",a[j]);
    return 0;
}

2、两个矩阵的乘积

根据上面分析可知,ij是最终数组的行和列,这个数组的每个元素是由数组a的一行乘以数组b的一列并加起来得到的,所以k是循环3组数相乘并加起来,具体代码与结果如下:

#include "stdio.h"

int main()
{   
	int  a[2][3]={{1,2,3},{4,5,6}};
    int  b[3][2]={{1,4},{2,5},{3,6}};
    int  c[2][2]={{0,0},{0,0}};
    int i,j,k;
    for(i=0;i<2;i++)
    {   for(j=0;j<2;j++)
        {     
		 	for(k=0;k<3;k++)
                c[i][j]=c[i][j]+a[i][k]*b[k][j];
        }
    }
    printf("the array a * array b is :\n");
    for(i=0;i<2;i++)
    {     
		for(j=0;j<2;j++)
            printf("%4d",c[i][j]);
        printf("\n");
    }
    return 0;
}

3、将两个有序数组合并为一个有序数组

分析这个问题如下:

  1. 刚开始时,最终数组c的每一个元素要么来自数组a,要么来自数组b,这时需要比较这两个数组的对应元素来选择,直止数组a或数组b选完了;
  2. 若数组a或数组b选完了,那么最终数组c的后续元素都来自那个没有选完的数组。

根据以上分析,其代码与结果如下:

#include "stdio.h"
#define M 3
#define N 5

int main()
{
	int i=0,j=0,k;
	int a[M]={7,13,89},b[N]={9,14,25,36,49},c[M+N];
	for(k=0;k<M+N && i<M && j<N;k++)   //从数组a和数组b中选元素
	{
		if(a[i]>b[j])
		{
			c[k]=b[j];
			j++;
		}
		else
		{
			c[k]=a[i];
			i++;
		}
	}
	if(i==M)   //若数组a选完了,则把数组b剩下的元素加上即可
	{
		for(;j<N;j++)
		{
			c[k]=b[j];
			k++;
		}
	}
	if(j==N)   //若数组b选完了,则把数组a剩下的元素加上即可
	{
		for(;i<M;i++)
		{
			c[k]=a[i];
			k++;
		}
	}
	for(k=0;k<M+N;k++)
		printf("%4d",c[k]);
	printf("\n");
	return 0;
}

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值