1.输入一个大小为10的整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
例子:
输入一个数组:1 5 6 2 3 4 9 1
子数组的最大值:18
解答:
#include<stdio.h>
int main()
{
int a[10];
int y,i,m,n,z,sum=0;
printf("输入一个数组:");
for(y=0;y<10;y++)
{
scanf("%d",&a[y]);
}
for(i=0;i<10;i++)
{
m=0;
z=0;
while(a[i+m]<a[i+m+1])
{
m++;
}
for(n=0;i+n<=i+m;n++)
{
z=z+a[i+n];
}
if(z>sum)
{
sum=z;
}
}
printf("子数组最大值:%d",sum);
return 0;
}
运行结果:
解题思路:
用for循环和while循环确定升序的数组的下标,再利用for循环使升序的数组数累加寄存到z,用if语句多次比较确定最大的累加数sum,输出sum。
遇到的问题:
如果用for(i=0;a[i];i++)再用while(a[i+m]<a[i+m+1])会使循环数大于10,所以a[i]换成i<10更好。
知识点:
数组的运用,条件和循环语句的运用。
2.输入大小为10的两个数组(没有重复)
,实现一个求两个数组交集的函数例子:
数组1:1 16 5 7 9 0 10 8 14 3
数组2:2 4 5 6 7 8 10 12 14 16
交集:16 5 7 10 8 14
解答:
#include<stdio.h>
int main()
{
int a[10],b[10],c[10];
int i,m,n=0;
printf("输入数组a:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("输入数组b:");
for(i=0;i<10;i++)
{
scanf("%d",&b[i]);
}
printf("输出交集:");
for(i=0;i<10;i++)
{
for(m=0;m<10;m++)
{
if(a[i]==b[m])
{
c[n]=a[i];
n++;
}
}
}
for(i=0;i<n;i++)
{
printf("%5d",c[i]);
}
return 0;
}
运行结果:
解题思路:
先利用for循环输出数组a和b,再利用两个for循环将数组a和b中的数都比较一遍,相同的寄存在数组c中,寄存一个使数组c的下标n加1,最后用for循环将数组c中的寄存的交集数输出。
遇到的问题:
无。
知识点:
数组的运用,条件和循环语句的运用。
3.自己学一个排序算法,输入一个大小为10的数组,对数组进行升序和降序排列并输出。
例子:
大小为10的数组:6 7 1 5 4 3 9 1 10 15
升序排列:1 1 3 4 5 6 7 9 10 15
降序排列:15 10 9 7 6 5 4 3 1 1
解答:
#include<stdio.h>
int main()
{
int a[10];
int i,x,m,n;
printf("输入:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(m=0;m<9;m++)
{
for(i=0;i<9-m;i++)
{
if(a[i]>a[i+1])
{
n=a[i];
a[i]=a[i+1];
a[i+1]=n;
}
}
}
printf("升序:\n");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("降序:\n");
for(i=9;i>=0;i--)
{
printf("%d ",a[i]);
}
return 0;
}
运行结果:
解题思路:
用for循环输入数组a,在用双重for循环进行9躺比较,每趟比较进行9-m次比较,再相邻两个数比较,利用n从小到大排序,最后利用for循环进行升序和降序的输出。
遇到的问题:
比较粗心,容易把大小比较符号输入错误。
知识点:
数组的运用,循环语句的综合运用。