| 查看: 1098 | 回复: 8 | ||
[求助]
我自己写的程序,求高手改错
|
|
我自己写的程序,求高手改错 题目:计算并输出n个学生某学期m们课程的平均成绩 [ Last edited by jjdg on 2013-6-7 at 00:42 ] |
» 猜你喜欢
拟解决的关键科学问题还要不要写
已经有8人回复
最失望的一年
已经有17人回复
为什么nbs上溴 没有产物点出现呢
已经有6人回复
求推荐博导
已经有4人回复
存款400万可以在学校里躺平吗
已经有34人回复
求助一下有机合成大神
已经有4人回复
求推荐英文EI期刊
已经有5人回复
26申博
已经有3人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
疑惑?
已经有5人回复
» 本主题相关价值贴推荐,对您同样有帮助:

ausir
木虫 (正式写手)
- 应助: 18 (小学生)
- 金币: 2008.2
- 红花: 4
- 帖子: 500
- 在线: 178.5小时
- 虫号: 1939287
- 注册: 2012-08-15
- 性别: GG
- 专业: 集成电路制造与封装
【答案】应助回帖
★
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2013-06-11 23:24:18
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2013-06-11 23:24:18
|
现在的编译器对数据类型的定义要求比较严格。把 int *c 定义为 int c 编译无法通过。 另外 c=0; 会导致原来分配的数组空间丢失,不知道指到那里,因此不能用。 在后面求和是,正确的加法是 sum=sum+*(c+i) 而不是*c+*(c+i),计算从i=1起,到i<n,并且 sum 的初值要是 *c的值。 最后没有做内存释放,每次分配内存,会造成内存泄露。 做了以上修改后,就可以正确运算了。 在VS2012中,需要添加<stdlib.h>头文件,并且把scanf函数用scanf_s这个安全函数替代才可以正确运行。 |
2楼2013-05-24 13:07:14
limmettle
金虫 (正式写手)
- 应助: 2 (幼儿园)
- 金币: 1852.1
- 红花: 1
- 帖子: 374
- 在线: 109.2小时
- 虫号: 1456116
- 注册: 2011-10-23
- 专业: 流体力学
【答案】应助回帖
★
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2013-06-11 23:24:03
感谢参与,应助指数 +1
xzhdty: 金币+1, 谢谢参与 2013-06-11 23:24:03
|
根据楼主的这一句 c=(int*)malloc(n*sizeof(int)); 就可以知道c是一个整型指针,因此必须定义为 int *c; 当 c=(int*)malloc(n*sizeof(int)); 这一句执行过后,c的值是这个连续的n*sizeof(int)这一段内存的首地址,这时c指向该连续空间的第一个整数;c的值每加1,将会指向下一个整数。 因此,楼主的 c=0; 这一句实际上已经给c重新赋值,c已经不指向刚才开辟的内存空间,而指向内存中地址为0的空间,该空间是加载系统的空间,受系统保护,不允许入侵; *(c+i)取出楼主开辟的连续空间的第i+1个整数的值,因此求和应该写成 sum=0; for(i=0;i<n;i++) sum+=*(c+i); 开辟的空间使用完后应该及时释放,在本例中使用 free(c); 语句。既然使用了内存管理的函数,就应该管理好内存(有开辟就应该有释放),否则还不如直接使用数组呢,是吧? 另外,再给楼主一点建议吧 1.main函数的标准形式是不存在void main()这种的,规范的写法是 int main(){ ...; return 0; } 谭浩强老师的书看看就行,当不得真,不利于培养良好的编程习惯;我猜楼主c编程可能还不很熟练,建议空了翻翻《C Primer Plus》(中英文版都有的),很不错; 2.不建议二楼的朋友所说的使用scanf_s()函数,该函数不是ANSI C标准里的,在今后实际应用中可能存在移植性的问题。 |
3楼2013-05-25 11:41:30

4楼2013-05-28 19:29:11
5楼2013-05-29 19:37:31
【答案】应助回帖
★ ★ ★ ★
earth洛溪: 金币+3, ★有帮助 2013-06-11 16:10:43
xzhdty: 金币+1, 谢谢参与 2013-06-11 23:23:42
earth洛溪: 金币+3, ★有帮助 2013-06-11 16:10:43
xzhdty: 金币+1, 谢谢参与 2013-06-11 23:23:42
要不要这么复杂啊,不喜欢改你的,给你写一个吧题目:计算并输出n个学生某学期某们课程的平均成绩 #include <stdio.h> #include <stdlib.h> void main() { int n,i; float sum=0,temp,average;//总和和平均分可能带小数,定义为浮点型比较妥 printf(“Please input the number of students:”); scanf(“%d”,&n); printf("\n" ;for(i=0;i<n;i++) { printf("Please input the %d student's score",i); scanf("%f",&temp); sum=sum+temp; printf("\n" ;} average=sum/n; printf("The average of this course is %2.f\n",average);//精确到小数点后2位 } |

6楼2013-06-06 19:08:57

7楼2013-06-09 18:51:03

8楼2013-06-09 18:59:05

9楼2013-06-11 16:10:03













回复此楼
谢谢啦,我是大一的,刚开始学c++,不怎么会用,感谢你哦
要不要这么复杂啊,不喜欢改你的,给你写一个吧
;
