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

从键盘输入数据对数组进行初始化,编写计算数组元素的最大值、最小值和平均值和删除某一个位置元素的函数。这是作业,我写了一道程序,就是不知道哪里错误了,希望大神可以

我是C渣渣 发布于 2014-12-15 09:47, 4807 次点击
2、数组操作,参见下例程序,熟悉数组运算。
#include <iostream>
using namespace std;
void sort(int T[])
{int temp;
    for (int i=0;i<20;i++)
    {
        for (int j=i+1;j<20;j++)
        {
            if (T[i]<=T[j])
            {
                temp=T[i];
                T[i]=T[j];
                T[j]=temp;
            }
        }
    }
}

int search(int T[],int key)
{
    int index;
    for(int i=0;i<20;i++)
    {
        if (T[i]==key)
        {    index=i;
            break;
        }

    }
    return index;
}
void main()
{
    int A[20]={12,23,34,10,16,45,29,34,98,56,67,78,23,44,55,66,77,88,99,69};
   
    sort(A);

    for (int i=0;i<20;i++)
    {
        cout<< A[i] <<"  ";   
    }
    int kk;
    cout<<"输入要查找的数据:";
    cin>>kk;
    kk=search(A,kk);
    cout <<"查找的数据在数组的第"<<kk<<"位置。"<<endl;


}
3、按照上例的方法生成一个一维数组,从键盘输入数据对数组进行初始化,编写计算数组元素的最大值、最小值和平均值和删除某一个位置元素的函数。

以下是我的程序
//从键盘输入数据对数组进行初始化,编写计算数组元素的最大值、最小值和平均值和删除某一个位置元素的函数//

#include "stdafx.h"
#include <iostream>
using namespace std;
int A[];

void max(int T[])//这是求最大值的函数//
{   int temp;
    for (int i=0;i<5;i++)
    {
        for (int j=i+1;j<5;j++)
        {
            if (T[i]<=T[j])
            {
                temp=T[i];
                T[i]=T[j];
                T[j]=temp;
            }
        }
    }
    cout<<T[0];
}

void min(int T[])//这是求最小值的函数//
{   int temp;
    for (int i=0;i<5;i++)
    {
        for (int j=i+1;j<5;j++)
        {
            if (T[j]<=T[i])
            {
                temp=T[i];
                T[i]=T[j];
                T[j]=temp;
            }
        }
    }
       cout<<T[0];
}

void average(int A[],int aver)//这是最平均值的函数,但不知道为什么输出的时候就是没有初始化//
{   int sum;

    for (int i=0;i<5;i++)
    {
       sum+=A[i];
    }
    aver=sum/5;
    cout<<aver;  
}
void delete_item(int A[], int item, int* n) //这是删除一个数据的函数,我自己上网找的,因为删除其中一个数据是可以找到它然后把后面的元素往前推//
{
  int i, j;
  for(i=0;i <(*n);i++)
  {
    if(A[i]==item)
    {
      for(j=i;j <(*n);j++)
        A[j]=A[j+1];
      (*n)--;
    }
  }


 
void main()
{   int aver;
    int A[5]={0};
    for(int i=0;i<5;i++)
    {
    cout<<"请输入第"<<i<<"个数据:";
    cin>>A[i];
    }
   
    cout<<"max=";
    max(A);
    cout<<""<<endl;
    cout<<"min=";
    min(A);
    cout<<""<<endl;
    cout<<"average=";
    average(A,aver);
    cout<<""<<endl;
   
    int n;
    n=sizeof(A)/sizeof(int); //这个是引用了C语言的,但是我学的是C++,希望通过visualc++6.0就可以编译//
    printf("n=%d\n", &n);
    delete_item(A, A[5], n);
for(;i<5;i++)
    {  cout<<A[i]<<" ";
    }

}



C:\Program Files\Microsoft Visual Studio\MyProjects\shiyan6\shiyan6.cpp(70) : error C2601: 'main' : local function definitions are illegal
C:\Program Files\Microsoft Visual Studio\MyProjects\shiyan6\shiyan6.cpp(97) : fatal error C1004: unexpected end of file found
这是编译出现的错误,我不知道为什么会变成这个样子。希望高人帮我看看哪里需要改的哟,谢谢啦,辛苦了~
16 回复
#2
xufan2014-12-15 10:10
参考一个这个代码:
程序代码:
#include <iostream>
using namespace std;
int A[];
void max(int T[])//这是求最大值的函数//
{   int temp;
for (int i=0;i<5;i++)
{
    for (int j=i+1;j<5;j++)
    {
        if (T[i]<=T[j])
        {
            temp=T[i];
            T[i]=T[j];
            T[j]=temp;
        }
    }
}
cout<<T[0];
}
void min(int T[])//这是求最小值的函数//
{   int temp;
for (int i=0;i<5;i++)
{
    for (int j=i+1;j<5;j++)
    {
        if (T[j]<=T[i])
        {
            temp=T[i];
            T[i]=T[j];
            T[j]=temp;
        }
    }
}
cout<<T[0];
}
void average(int A[],int aver)//这是最平均值的函数,但不知道为什么输出的时候就是没有初始化//
{   int sum = 0;
for (int i=0;i<5;i++)
{
    sum+=A[i];
}
aver=sum/5;
cout<<aver;
}
void delete_item(int A[], int item, int n) //这是删除一个数据的函数,我自己上网找的,因为删除其中一个数据是可以找到它然后把后面的元素往前推//
{
    int i, j;
    for(i=0;i <(n);i++)
    {
        if(A[i]==item)
        {
            for(j=i;j <(n);j++)
                A[j]=A[j+1];
            (n)--;
        }
    }
}

    void main()
    {
        int aver = 0;
    int A[5]={1,2,3,4,5};
    //for(int i=0;i<5;i++)
   
//{
   
//    cout<<"请输入第"<<i<<"个数据:";
   
//    cin>>A[i];
   
//}
    cout<<"max=";
    max(A);
    cout<<""<<endl;
    cout<<"min=";
    min(A);
    cout<<""<<endl;
    cout<<"average=";
    average(A,aver);
    cout<<""<<endl;
    int n;
    n=sizeof(A)/sizeof(int); //这个是引用了C语言的,但是我学的是C++,希望通过visualc++6.0就可以编译//
    delete_item(A, A[4], n);
    for(int i = 0;i<n - 1;i++)
    {
        cout<<A[i]<<" ";
    }
    cout<<endl;
}

#3
我是C渣渣2014-12-15 10:16
回复 2楼 xufan
谢谢你,可是我要从键盘中输入数组元素,而且要随机删除一个数据,就是指定删除A[3]才可以哦,可以再帮我看看嘛,感激不尽~
#4
我是C渣渣2014-12-15 10:26
回复 2楼 xufan
#include "stdafx.h"
#include <iostream>
using namespace std;
int A[];
void max(int T[])//这是求最大值的函数//
{   int temp;
for (int i=0;i<5;i++)
{
    for (int j=i+1;j<5;j++)
    {
        if (T[i]<=T[j])
        {
            temp=T[i];
            T[i]=T[j];
            T[j]=temp;
        }
    }
}
cout<<T[0];
}
void min(int T[])//这是求最小值的函数//
{   int temp;
for (int i=0;i<5;i++)
{
    for (int j=i+1;j<5;j++)
    {
        if (T[j]<=T[i])
        {
            temp=T[i];
            T[i]=T[j];
            T[j]=temp;
        }
    }
}
cout<<T[0];
}
void average(int A[],int aver)//这是最平均值的函数,但不知道为什么输出的时候就是没有初始化//
{   int sum = 0;
for (int i=0;i<5;i++)
{
    sum+=A[i];
}
aver=sum/5;
cout<<aver;
}
void delete_item(int A[], int item, int n) //这是删除一个数据的函数,我自己上网找的,因为删除其中一个数据是可以找到它然后把后面的元素往前推//
{
    int i, j;
    for(i=0;i <(n);i++)
    {
        if(A[i]==item)
        {
            for(j=i;j <(n);j++)
                A[j]=A[j+1];
            (n)--;
        }
    }
}

    void main()
    {   int i=0;
        int aver = 0;
    int A[5]={1,2,3,4,5};
    for(;i<5;i++)
    {
        cout<<"请输入第"<<i<<"个数据:";
      cin>>A[i];
    } for(;i<5;i++)
  cout<<A[i]<<' ';
 cout<<endl;
    cout<<"max=";
    max(A);
    cout<<""<<endl;
    cout<<"min=";
    min(A);
    cout<<""<<endl;
    cout<<"average=";
    average(A,aver);
    cout<<""<<endl;
    int n;
    n=sizeof(A)/sizeof(int); //这个是引用了C语言的,但是我学的是C++,希望通过visualc++6.0就可以编译//
    delete_item(A, A[4], n);
    for(;i<n - 1;i++)
    {
        cout<<A[i]<<" ";
    }
    cout<<endl;
}
刚刚改了一下,可以输入了,平均值也对了,就是不能删除数据,可以帮我改改吗,O(∩_∩)O谢谢
#5
xufan2014-12-15 10:57
delete_item(A, A[4], n);第二个参数就是待删除的值, 你用一个变量替换就可以了。
#6
我是C渣渣2014-12-15 11:02
回复 5楼 xufan
我不是很明白用变量替换是什么意思,可以解释一下吗,O(∩_∩)O谢谢
#7
yangfrancis2014-12-15 12:59
求最大值最小值及平均值是推荐用数组的,但如果还要删除其中其一元素的话,我感觉更推荐用链表来做,把前一元素的next指针指向后一元素,中间的元素自然就不存在了。总觉得用数组太繁琐,还涉及到更新脚标等一系列问题。
另外,求最大值或最小值应该可以一个循环完成吧?只是求一个极值,又不全部排序,总觉得单一循环的两两比较算法应该可以解决才对。不过我没有具体去写,光说不练,以上看法仅供参考。
#8
我是C渣渣2014-12-15 16:39
回复 7楼 yangfrancis
我不是很懂你说的链表,因为我是C++初学者,这是老师布置的作业,要求我们用数组去做,定位其中一个元素,然后把后面的值赋给前面的元素就可以实现删除数据。但是我编译的不知道为什么不可以。可以帮我看看程序哪里错误了吗,O(∩_∩)O谢谢
#9
yangfrancis2014-12-15 22:35
void delete_item(int A[], int item, int* n) //这是删除一个数据的函数,我自己上网找的,因为删除其中一个数据是可以找到它然后把后面的元素往前推//
{
  int i, j;
  for(i=0;i <(*n);i++)
  {
    if(A[i]==item)
    {
      for(j=i;j <(*n);j++)
        A[j]=A[j+1];
      (*n)--;
    }
  }
恕小可眼拙,楼主的这部分代码好像逻辑上看不出什么问题呢。或许仅仅是因为你少了半边花括号吗?不会是这么狗血的错误吧。
#10
我是C渣渣2014-12-15 23:53
回复 9楼 yangfrancis
没有哦。我在原来的程序里面是有花括号的,没有语法错误,就是没办法执行这个语句,不能删除数据~好郁闷,不过还是谢谢你的解答。
#11
word1232014-12-16 09:31
你的求最大值和最小值的时候,数组的顺序都排好了,还怎么删除指定值????
#12
word1232014-12-16 09:32
//#include "stdafx.h"
#include <iostream>
using namespace std;
int A[];
void max(int T[])//这是求最大值的函数//
{   int temp;
for (int i=0;i<5;i++)
{
    for (int j=i+1;j<5;j++)
    {
        if (T[i]<=T[j])
        {
            temp=T[i];
            T[i]=T[j];
            T[j]=temp;
        }
    }
}
cout<<T[0];
}
void min(int T[])//这是求最小值的函数//
{   int temp;
for (int i=0;i<5;i++)
{
    for (int j=i+1;j<5;j++)
    {
        if (T[j]<=T[i])
        {
            temp=T[i];
            T[i]=T[j];
            T[j]=temp;
        }
    }
}
cout<<T[0];
}
void average(int A[],int aver)//这是最平均值的函数,但不知道为什么输出的时候就是没有初始化//
{   int sum = 0;
for (int i=0;i<5;i++)
{
    sum+=A[i];
}
aver=sum/5;
cout<<aver;
}
void delete_item(int A[], int item, int n) //这是删除一个数据的函数,我自己上网找的,因为删除其中一个数据是可以找到它然后把后面的元素往前推//
{
    int i, j;
    for(i=0;i <(n);i++)
    {
        if(A[i]==item)
        {
            for(j=i;j <(n);j++)
                A[j]=A[j+1];
            (n)--;
        }
    }
}

    void main()
    {   int i=0;
        int aver = 0;
    int A[5]={1,2,3,4,5};
    for(;i<5;i++)
    {
        cout<<"请输入第"<<i<<"个数据:";
      cin>>A[i];
    }
    i=0;
    for(;i<5;i++)
  cout<<A[i]<<' ';
cout<<endl;
    cout<<"max=";
    max(A);
    cout<<""<<endl;
    cout<<"min=";
    min(A);
    cout<<endl;
    cout<<"输出:";
        for(int kk=0;kk<5;kk++)
    {
        cout<<A[kk]<<" ";
    }
    cout<<endl;
    cout<<""<<endl;
    cout<<"average=";
    average(A,aver);
    cout<<""<<endl;
    int n;
    n=sizeof(A)/sizeof(int); //这个是引用了C语言的,但是我学的是C++,希望通过visualc++6.0就可以编译//
    delete_item(A, A[4], n);
    i=0;
    for(;i<n - 1;i++)
    {
        cout<<A[i]<<" ";
    }
    cout<<endl;
}
#13
word1232014-12-16 09:34
最后删除的那个数会是数组里面最大的那个数!!!
#14
我是C渣渣2014-12-16 15:35
回复 13楼 word123
谢谢你。程序是对的,可是怎么样才能不让它删掉最大的,就是之前不排序就好了吗
#15
yangfrancis2014-12-17 08:57
试一下n不用指针,换成传值的变量看行不行,还不行的话就真不知道了。
#16
gl5235183212014-12-20 19:42
楼主问题解决了吗?
#17
我是C渣渣2014-12-26 00:31
解决了。谢谢。
1