1)输入一个数组,求子数组最大值 2)xx 3)利用冒泡排序法排序

1)
解题思路:
首先,输入数组元素,循环判断是否为顺序子数组,若是,累加元素并判断它的下一位与下两位的大小关系
,若不是,则重新累加元素,然后将子数组输出,最后判断子数组大小即可
遇到的问题:
需要较好的逻辑理清关系
涉及的知识点:
循环结构,if条件语句
运行结果:
例:
输入一个数组:1234567809
子数组最大值:max=36
#include<stdio.h>
int main()
{
	int a[10],k[10],i,sum=0,c=0;//定义变量 
    for(i=0;i<=9;i++)//循环输入 
	{
		printf("a[%d]=",i); 
		scanf("%d",&a[i]);
	}
	c=a[0];
	for(i=0;i<9;i++)//循环并判断是否为顺序子数组 
	{
	    if(a[i]<a[i+1]) 
		{
			c=c+a[i+1];//累加计算总和	
			if(a[i+1]>a[i+2])//当不满足条件时输出子数组的总和 
			{
				k[sum]=c;
				printf("k[%d]=%d\n",sum,c);
				sum++;
			}		
		}
		else//后一元素小于前一元素 
		{
			 c=a[i+1];//重新循环,换成另一个子数组
			 continue;
		}
	}
	printf("k[%d]=%d\n",sum,c);//输出子数组 
	int g,j,max=k[0];
	for(j=1;j<=sum;j++)
	{
      	if(k[j]>max)
 	    {
           int max=k[j];      
        }
	}
	printf("max=%d\n",max);//输出最大子数组	    	
}
2)
解题思路:
首先,构造intersect函数,然后遍历两个数组,找出相同的数,并赋值给新数组
,计算长度,然后将数组长度通过指针存放,接着为返回数组分配空间,并赋值
遇到的问题:
返回数组涉及指针和动态内存分配问题,较为麻烦
涉及的知识点:
动态存储,指针,循环结构,if条件语句,函数调用

int* intersect(int* a,int* b,int* returnSize)
{
	int size=0;//定义整形变量
	int f[10];//定义整形数组
	int *f_bak;
	 
	for(int i=0;i<=9;i++)//遍历
	{
		for(int j=0;j<=9;j++)
		{
	        if(a[i]==b[j])//找到相等的数,然后放入新数组中
			{    
		       f[size]=b[j];
			    size++;
				break;				 
			}		
		}
	}
   *returnSize=size;//返回数组的大小 
   f_bak=(int *)malloc(sizeof(int)*size);//为返回数组分配空间 
   memcpy(f_bak,f,sizeof(int)*size);//为返回数组赋值  
   return f_bak; 
} 
3)
解题思路:
首先,循环输入,然后利用冒泡排序法排序,然后按顺序输出,或反序输出
遇到的问题:
无
涉及的知识点:
循环结构,if条件语句
运行结果:
例:
输入:17895234
正序输出:12345789
反序输出:98754321
#include<stdio.h>
int main()
{
	int a[10];
	int i,j,t,k,x;
	for(i=0;i<=9;i++)//循环输入 
	{
		printf("a[%d]=",i); 
		scanf("%d",&a[i]);
	}
	for(i=0;i<9;i++)
	{ 
       for(j=0;j<9-i;j++)
	   {
            if(a[j]>a[j+1])//进行排序 
            {
                t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;      	
            }	
	   }
	}
	printf("please choose your way:0或1\n");//设置两种选择,便于控制输出的方式 
	scanf("%d",&x);
	if(x==0)//顺序输出 
	{
	  printf("升序输出:\n");
	  for(i=0;i<10;i++)
	  {
		printf("%d\n",a[i]);
	  }
	}
    if(x==1)//倒序输出 
	{
      printf("降序输出:\n");
	  for(k=9;k>=0;k--)
	  {
		printf("%d\n",a[k]);
	  }
	}
	return 0;
} 



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值