注册 登录
编程论坛 C++教室

简单习题求帮助,求改正

fl8962 发布于 2012-10-18 21:48, 407 次点击
随意输入一个数字n,然后输入一个长度为n的数组,求出数组中的最大值。。
#include<stdio.h>
void main()
{
    int n,i,t;
    scanf("%d",&n);
    int a[n];
    printf("\n");
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n-1;i++)
    {    t=0;
        if(a[i]>a[i+1])
        {   
            t=a[i];
            a[i+1]=t;
        }
    }
    printf("%d",a[n-1]);
}这是我写的程序,运行不了,请教一下该如何改正。万分感谢。
5 回复
#2
小糊涂神c302012-10-18 22:08
这样的代码在C下是不能运行的,因为定义数组的时候数组的大小必须是固定的,也就是说,n必须是常量或常量表达式。
#3
yuwenhui20082012-10-18 22:26
在你定义一个数组a那条语句  int a[n] 错了。C 中定义数组时要求是静态的。即,你可以这么定义: int a[10], 但是不能像你那么定义。若要定义一个由用户输入长度的数组(动态数组),必须使用malloc函数。

对于你给的题目,可以用下面的程序:
#include<stdio.h>

#define MaxSize 100

void main()
{
    int n,i,t;
    int a[MaxSize] = {0};// 定义一个静态数组(MaxSize不是变量,而是宏),保证MaxSize大于你要比较的个数
   
    scanf("%d",&n);
    printf("\n");
   
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
   
    t = 0;
    for(i=0;i<n;i++)
    {
        if (a[i]>t)
        {
            t = a[i];
        }        
    }
    printf("the max number is %d \n",t);
}
#4
ji0821192012-10-18 22:48
直接用STL中的Vector<int>vec 来个for循环初始化n个值,然后return max_element(vec.begin(),vec.end());everything is ok!
#5
ji0821192012-10-18 22:53
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int get_max_element(vectro<int>&vec,int n)
{
   for(it i = 0;i<n;i++)
   vec.push_back(random()%7+2)//产生2-8的随机数
   return max_element(vec.begin(),vec.end());
}

int main()
{
   vector<int>vec;
    int n;
    cin>>n;
    cout<<get_max_element(vec,n)<<endl;
}
#6
pangdudu2012-10-19 09:52
回复 5楼 ji082119
return *max_element(vec.begin(),vec.end());因为max_element返回的是迭代器不是实际的值,所以需要使用解引用*才对。
1