C语言好难学啊,各位大神能帮帮忙么,做一下这道题最好能讲解一下思
呃拍得不清楚了,题目是:从键盘录取若干个整数,计算其中三个最大的偶数之和。例如:录入1,2,5,8,8,17,4,13,22,23。则三个最大的整数和为:22+8+8=38 展开
首先,要分析,你的输入是如何结束的,比如先输入要输入数据的个数,将这个数先保存到变量n中
开设一个数组,将输入的偶数顺序存放起来,假设数组元素个数的最大值为N,程序中可以用#define的方法来设定,比如:
#define N 1024
int a[N],nn; //这个数组将用来保存输入的所有偶数,nn存放存储偶数的个数
利用循环输入每一个数,遇到偶数存入a数组,nn自加1
给数组a排序,从大到小
将前3个数加起来输出
#include<stdio.h>
#define N 1024
void main() { int a[N],n,nn,i,j,k;
scanf("%d",&n); nn=0;
for ( i=0;i<n;i++ ) {
scanf("%d",&k); //注意不要用逗号分隔输入,用空格即可
if ( k%2==0 ) { a[nn]=k; nn++; }
}
for ( i=0;i<nn-1;i++ ) for ( j=i+1;j<nn;j++ ) if ( a[i]<a[j] ) { k=a[i];a[i]=a[j];a[j]=k; }
for ( i=k=0;i<3;i++ ) k+=a[i];
printf("%d\n",k);
}
#include <stdio.h>
#define N 10 //定义一个符号常量
int main()
{
int a[N],tmp[N],i,j,temp; //tmp数组是辅助数组
for(i=0;i<N;i++)
scanf("%d",&a[i]); //从键盘输入10个整数
for(i=0,j=0;i<N;i++)
{
if(a[i]%2 == 0) //如果是偶数,存放到辅助数组tmp中
{
tmp[j]=a[i];
j++;
}
}
int len=j; //tmp数组的元素个数
int k;
//用选择法从tmp数组中选出三个最大的整数分别放在tmp[0],tmp[1],tmp[2]中
for(i=0;i<3;i++)
{
k=i;
for(j=i+1;j<len;j++)
{
if(tmp[k]<tmp[j]) //用k来记录当前最大元素的下标
k=j;
if(k!=i)
{
temp=tmp[k];
tmp[k]=tmp[i];
tmp[i]=temp;
}
}
}
int sum=tmp[0]+tmp[1]+tmp[2];
printf("三个最大的偶数之和=%4d\n",sum);
return 0;
}
示例运行结果:
1 2 5 8 8 17 4 13 22 23
三个最大的偶数之和= 38
这个程序运行不了啊
怎么可能,我都给出示例运行结果了,你用的是什么编译器?如果你用的是VC++ 6.0可能是运行不了的,它不支持C99标准,建议你用GCC或者更高版本的编译器来编译就没问题的了,还有什么问题请留言吧。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int v[11]={1,2,5,8,8,17,4,13,11,22,23} ;
int a=0,b=0,c=0;
int temp1=0,temp2=0;
for (int i = 0; i < 11; ++i)
{
if (v[i]%2==0)
if(v[i]>a)
{
temp1=a;
temp2=b;
a=v[i];
b=temp1;
c=temp2;
}
else if(v[i]>b)
{
temp1=b;
b=v[i];
c=temp1;
}
else if(v[i]>c)
c=v[i];
}
printf("%d ",a+b+c);
return 0;
}
感觉写的有点麻烦 将就吧