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;
}