C++课程项目报错:int*转int无效转换,求数组成绩计算代码修复
解决数组传递时的类型转换错误
嘿,咱们来搞定你遇到的这个报错:Error: invalid conversion from ‘int*’ to ‘int’。问题出在你定义的函数参数和实际传递的数组不匹配——你写的函数期望接收单个int值,但你传的是数组名,而在C++里数组名会自动转换成指向数组第一个元素的指针(也就是int*类型),类型对不上自然就报错啦。
下面一步步帮你修正代码:
1. 先改函数的参数定义
接收数组的函数,参数得改成数组类型或者指针类型,而且一定要加上数组长度参数(因为C++里数组传进函数后,没法直接知道它有多长)。比如:
- 原来的
double arrayAverage(int, int);要改成double arrayAverage(int grades[], int size);(或者double arrayAverage(int* grades, int size);,这两种写法在函数里效果是一样的) - 同理,
void droppedQuizzes(int, int);改成void droppedQuizzes(int grades[], int size);
2. 调整函数调用的方式
在main里调用这些函数的时候,直接传数组名和数组的长度就行,比如:
// 计算测验成绩的平均值 double quizAvg = arrayAverage(quizGrades, 7); // 处理低分测验 droppedQuizzes(quizGrades, 7);
3. 补全并修正后的完整代码示例
我把你的代码补全并修正了,还加了一些基础的函数实现,你可以参考:
#include <iostream> #include <algorithm> // 用来排序数组,处理低分的时候能用得上 using namespace std; // 计算四个成绩的平均值(比如项目成绩) double gradeAverage(double g1, double g2, double g3, double g4) { return (g1 + g2 + g3 + g4) / 4.0; } // 根据分数返回对应的绩点(你也可以改成返回字母等级,比如'A'、'B'这类) double letterGrade(double score) { if (score >= 90) return 4.0; else if (score >= 80) return 3.0; else if (score >= 70) return 2.0; else if (score >= 60) return 1.0; else return 0.0; } // 计算数组中成绩的平均值 double arrayAverage(int grades[], int size) { int sum = 0; for (int i = 0; i < size; i++) { sum += grades[i]; } // 转成double避免整数除法的坑 return static_cast<double>(sum) / size; } // 处理掉分的测验示例:去掉最低的两个分数 void droppedQuizzes(int grades[], int size) { sort(grades, grades + size); // 先排序,方便取高分部分 cout << "去掉最低分后的测验成绩:"; for (int i = 2; i < size; i++) { cout << grades[i] << " "; } cout << endl; } int main(){ int quizGrades[7] = {100, 0, 50, 30, 40, 100, 0}; int testGrades[2] = {50, 54}; int projectGrades[4] = {100, 0, 90, 95}; int labGrades[6] = {100, 100, 0, 50, 60, 70}; // 补全了你没写完的lab数组 // 调用各个函数 double quizAvg = arrayAverage(quizGrades, 7); cout << "测验成绩平均值:" << quizAvg << endl; droppedQuizzes(quizGrades, 7); double projectAvg = gradeAverage(projectGrades[0], projectGrades[1], projectGrades[2], projectGrades[3]); cout << "项目成绩平均值:" << projectAvg << endl; double testAvg = arrayAverage(testGrades, 2); cout << "测试成绩平均值对应的绩点:" << letterGrade(testAvg) << endl; return 0; }
几个关键知识点要记住
- C++里传数组的时候,数组名会变成指向首元素的指针,所以函数参数不能写单个
int,得用int[]或者int*。 - 一定要手动传数组长度,函数自己没法获取数组的大小(除非用
std::array这类容器,但课程项目里应该先掌握基础的数组传递)。 - 计算平均值的时候,记得把整数转换成
double,不然整数除法会把小数部分丢掉,结果就不对了。
内容的提问来源于stack exchange,提问作者freefloater
相关产品推荐
相关产品推荐

