数组(1)

1..已有一个排好序的数组(共10个数,从键盘读入),再输入一个数,要求按次序规律将它插入到数组中并输出结果。(需要注意的是b所属不同位置的特殊情况的考量)

要求:严禁采用捷径编程方法

运行结果示例:

#include <stdio.h>

int main()

{

        int i,j,b,temp;

        int a[10];

    printf("输入数组10个元素的值:") ;

        for(i = 0;i < 10;i++)

        scanf("%d",&a[i]);

        printf("输入要插入数据的值:");

        scanf("%d",&b);

        for(i = 0;i <= 10;i++){

                if(b <= a[i]){

                        for(j = 10;j > i;j--){

                    a[j] = a[j-1];//先最后一个元素开始顺次后移

                        }

                a[i] = b;//把指定元素b进行插入

                break;

                }

                if(b == a[9])//如果最后一个元素和b相等

                a[10] = b;//b放在最后一个元素

                if(b>a[9])

                a[10] = b;//这种情况同上

        }

        printf("结果是:");

        for(i = 0;i <= 10;i++)

        printf("%d ",a[i]);

       

        return 0;

}

2.从键盘输入5名学生3门课程的成绩,然后将每门成绩的最高分和最低分输出。

要求:此题应使用二维数组

运行结果示例:

#include<stdio.h>
int main()
{
	int a[5][3],max,min,i,j;//五个学生三门课
	printf("输入学生成绩:");
	for(i=0;i<5;i++)
	{
		for(j=0;j<3;j++)
		scanf("%d",&a[i][j]);//读入学生的成绩
	 } 
	 printf("成绩汇总输出:\n");
	 printf("        最高分       最低分\n");
	 for(j=0;j<3;j++)
	 {
	 	
		 
	 	max=a[j][0];
	 	min=a[j][0];//给三门课的最大值和最小值依次赋初值,外循环三次,一次一门课
	 
	 	
	 	for(i=0;i<5;i++)//对于每门课进行选择法排序
	 	{
	 		if(a[i][j]>max)
	 		{
	 			max=a[i][j];
			 }
			 if(a[i][j]<min)
			 {
			 	min=a[i][j];
			 }
		 }
		 printf("课程%d       %d       %d",j+1,max,min);//由于j的起始值是1所以j+1
		 printf("\n");
	 }
	 return 0;
 } 

 3、随机产生包含10个数据的一位整型数组,用选择排序法对其进行排序后输出。

选择排序的算法分析:

⑴ 从所有n个待排序元素中选择最小的值,将它与a[0]交换;

⑵ 从剩下的n-1个元素中选择最小的值,将它与a[1]交换;

⑶ 重复上述操作直到剩下两个元素时,选择其中最小的与a[n-1]交换。

#include <iostream.h>
#include <iomanip.h>
#include <time.h>
#include <stdlib.h>
void main()
{
	int a[10],i,j,t;
	srand(time(NULL));//生成随机数防止重复的套路操作
	for(i=0;i<10;i++)
		a[i]=rand()%100;//生成10个1~100的随机数
	for(i=0;i<10;i++)
		cout<<setw(5)<<a[i];//输出已经建立完成的数组
	cout<<endl;
	for(i=0;i<10;i++)//外循环从第一个数开始
		for(j=i+1;j<10;j++)//内循环从第二个数开始
			if(a[j]<a[i])
			{   t=a[i];
				a[i]=a[j];
				a[j]=t;
			}//选择法(一瓶酱油一瓶醋)
    for(i=0;i<10;i++)
	cout<<setw(5)<<a[i];//输出排序完成的数组
	cout<<endl;
}

4.已有两个数组a和b都是按由小到大顺序排列的有序数组(其中数组a有M个数,数组b有N个数),编写程序,将a、b两个数组合并后送入数组c,并使c也按由小到大排列。

要求:将数组元素的个数值定义为符号常量,例如:# define  M  7

运行结果示例:

作业3
#include <stdio.h>
#define M 7
#define N 5
int main()
{
 int  i = 0, j = 0, arra[M]={0}, arrb[N]={0}, arrc[M+N]={0}, k = 0, t = 0;
 printf("Input array a<%d个元素>: ",M);
 for (i = 0; i < M; i++)
 {
  scanf("%d", &arra[i]);
 }
 printf("Input array b<%d个元素>:",N);
 for (i = 0; i < N; i++)
 {
  scanf("%d", &arrb[i]);
 }//先向数组a和数组b依次读入元素
 i=0;
 j=0;
 
 for (k = 0; k < M+N; k++)//外循环是M+N次,目的是创建一个新的数组
 {
  if (arra[i] == 0)//如果a数组中的数据是0,说明这个数组没用啦,只需要把b数组的元素拷给空的数组
  {
   for (t = j + i; t < M + N; t++)
   {
    arrc[t] = arrb[j];
    j++;
   }
  }
  else if (arrb[j] == 0)//这个同理可证
  {
   for (t = j + i ; t < M + M; t++)
   {
    arrc[t] = arra[i];
    i++;
   }
  }
  else
  {
   if (arrb[j] <= arra[i])
   {
    arrc[k] = arrb[j];每次都对a和b数组中的对应值进行判断,把较小的值,暂时拷给c
    j++;//b数组执行下一个元素
   }
   else
   {
    arrc[k] = arra[i];
    i++;
   }
  }
}
 for (i = 0; i < M + N; i++)
 {
  printf("%d ", arrc[i]);
 }
 return 0;
}

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值