标题:如何用NEW 和DELETE?
只看楼主
luoxin8556
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-16
 问题点数:0 回复次数:12 
如何用NEW 和DELETE?
用动态内存分配技术处理任意个学生单科成绩平均分的程序
#include<iostream.h>
void main()
{
int n,*h;
cout<<"输入学生个数:";
cin>>n;
h=new int[n];
for(int i=0;i<n;i++)
{
cout<<n<<"个学生的单科成绩为:"<<h[i]<<" ";
}
delete[]h;
}
我只能写到上面那个地步,但是如何处理单科成绩平均分,望指教。对NEW 和DELETE不太会运用,也不太明白是怎么一回事。
搜索更多相关主题的帖子: DELETE NEW 内存 单科 平均分 
2007-06-16 16:17
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 

int* x=new int;
*x=10;
//内存:
-------------------------------------------------------------------------------------
*x==>> |1byte|1byte|1byte|1byte| | | | | | | | | | | |
-------------------------------------------------------------------------------------
\ /
\这一段内存放10这个值/

cout<<*x<<endl; //如果你的目的输出指向内存的值后就不再用到这指向这段内存的值那么就得回收:
delete x; //如果不回收,就不能再用到这段内存了.就像一个杯子装满了水,如果你不把水倒出
//去,那么这杯了就不能再装进的水了.一个int占四个字节,如果你的内存只有四个
//字节的大小,那么如果你不回收内存,就会没有内存空间可用了,那么就会造成程序
//崩溃.至于什么时候回收内存,那得看你程序实际情况了.


/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-16 18:42
luoxin8556
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-16
得分:0 
以下是引用ioriliao在2007-6-16 18:42:45的发言:

int* x=new int;
*x=10;
//内存:
-------------------------------------------------------------------------------------
*x==>> |1byte|1byte|1byte|1byte| | | | | | | | | | | |
-------------------------------------------------------------------------------------
\ /
\这一段内存放10这个值/

cout<<*x<<endl; //如果你的目的输出指向内存的值后就不再用到这指向这段内存的值那么就得回收:
delete x; //如果不回收,就不能再用到这段内存了.就像一个杯子装满了水,如果你不把水倒出
//去,那么这杯了就不能再装进的水了.一个int占四个字节,如果你的内存只有四个
//字节的大小,那么如果你不回收内存,就会没有内存空间可用了,那么就会造成程序
//崩溃.至于什么时候回收内存,那得看你程序实际情况了.

你说的我能够明白,但是具体应用起来还是不太懂,我刚才修改了一下,请指正
题目是这样的:用动态内存分配技术处理任意个学生的单科平均成绩
我的代码是:
#include<iostream.h>
void main()
{
int d,c[100];;
float *h,sum=0;
cout<<"请输入学生个数:";
cin>>d;
cout<<"请输入"<<d<<"个学生的单科成绩:";
for(int a=0;a<d;a++)cin>>c[a];
for(int i=0;i<d;i++)
{sum+=c[i];}
h=new float(sum/d);
cout<<d<<"个学生的单科平均成绩为:"<<*h<<endl;
delete h;
}
不知道和是不是按题目的要求做,请大家指正

2007-06-16 20:26
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 

[CODE]#include <iostream>
#include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{
int d;
float aver=0; //平均成绩
float sum=0; //总成绩

cout<<"请输入学生个数:";
cin>>d;

float* a_class=new float[d];

cout<<"请输入"<<d<<"个学生的单科成绩:"<<endl;;
for(int a=0;a<d;a++) cin>>a_class[a];
for(int i=0;i<d;i++) { sum+=a_class[i];}

aver=sum/d;
cout<<d<<"个学生的单科平均成绩为:"<<aver<<endl;
delete []a_class;

system("PAUSE");
return 0;
}[/CODE]

你程序的书写要注意些


/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-16 21:04
luoxin8556
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-16
得分:0 
谢谢,写得太好了,但是我有些地方不明白,这个#include <stdlib.h>和using namespace std;有什么作用,主函数int main(int argc, char *argv[])内括号里的参数有什么作用?最后那个:system("PAUSE");又有什么作用,麻烦你再一次指教
另外你用NEW很巧妙的使数组自动分配到内存上,我却定义了数组的个数,这一点实在应该学习,我参照很多书,都直接用指针作输出,我没考虑可以这样利用指针。
2007-06-16 21:46
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 

#include <stdlib.h> //是用来调用dos命令的库 system("pause"); 就是暂停命令,不用这个也可以.用cin.get()也行,这是C语言的库,其实在c++里最好这样写 #include <cstdlib> 这是新的标准.C语言的头文件改为前面加上c去掉后面的
.h
using namespace 是使用名字空间,<iostream>的名字空间是std;
如果使用旧的头文件标准<iostream.h>就不用这么做,不过不赞同用旧的头文件标准.
至于这句int main(int argc, char *argv[])可以改为int main(),我只是新建C++工程里默认为这样的,
但这个程序用不着.int argc, char *argv[]这叫命令行吧,我也不是很懂这个.


/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-16 21:59
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 

补充几句.你看的书应该是比较老的那种吧,it行业的书要找些比较新的书来看.


/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-16 22:02
luoxin8556
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-6-16
得分:0 
我看的书都没有介绍说#include<iostream.h>要变成#include<iostream>的,应该算是比较旧的了,但是我觉得我才刚学不久,应该先从以前比较旧的书看起。我还是用VC++6.0的
我还想问一下用旧的头文件缺点在哪里?system("pause");这个暂停命令怎么使用,用来暂停程序执行吗?是程序自动暂停还是我手动暂停?
2007-06-17 00:29
ioriliao
Rank: 7Rank: 7Rank: 7
来 自:广东
等 级:贵宾
威 望:32
帖 子:2829
专家分:647
注 册:2006-11-30
得分:0 
如果你用的是vc就用不着system("pause")了,下载别的ide试试,像dev-c

[此贴子已经被作者于2007-6-17 9:40:54编辑过]



/images/2011/147787/2011051411021524.jpg" border="0" />
2007-06-17 08:13
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
以下是引用luoxin8556在2007-6-17 0:29:53的发言:
我还想问一下用旧的头文件缺点在哪里?

时代是在进步的,你换个新编译器试试,他不认识你的iostream.h


Fight  to win  or  die...
2007-06-17 09:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-148027-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.093010 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved