題干: 輸入若干個數 平均值及和
想著用這道題練下指標 陣列 自定義函式 但是怎么都是死回圈
不知道邏輯錯誤在哪兒 感覺自己好像還缺基礎知識
#include<iostream>
using namespace std;
//宣告自定義函式
int* initNumGroup(int* p_num);
int* setNumGroup(int* p_num);
int calNumAvg(int* p_num);
//定義全域變數i
extern int i = 1;
//主函式
int main() {
int numGroup[200];
int* p_num = numGroup;
cout << "正在初始化陣列..." << endl;
p_num = initNumGroup(p_num);
cout << "請輸入數字..." << endl;
p_num = setNumGroup(p_num);
int sum = calNumAvg(p_num);
double avg = sum / i;
cout << "平均數:" << avg << "總數:" << sum << endl;
return 0;
}
//計算平均值
int calNumAvg(int* p_num) {
int sum = 0;
for (int j = 1; j <= i - 1; j++)
sum += *(p_num + j);
return sum;
}
//初始化陣列
int* initNumGroup(int *p_num) {
for (int i = 1; i <= 50; i++)
*(p_num + i) = -1;
return p_num;
}
//將用戶輸入的數字儲存在陣列里
int* setNumGroup(int *p_num) {
while (scanf_s("%d", (p_num + i)) && *(p_num + i) != -1)
i++;
return p_num;
uj5u.com熱心網友回復:
大體看了一遍,錯誤如下:1.initNumGroup函式和setNumGroup函式回傳值沒有意義,再看看指標的意義;
2.定義i沒必要extern,extern是外部變數,不是全域變數;
3.陣列下標從0開始,for回圈初始值要為0,全域變數i也應該是0.而且,你這里面的i和全域變數重復了,雖然語法上允許,但最好別這樣,你到底是想新建一個變數還是用全域變數?根據你的邏輯,應該是要新建一個,改為
void initNumGroup(int *p_num) {
for (int j = 0; j < 50; i++)
*(p_num + j) = -1;
}
4.你到底想輸入50個還是200個數?陣列宣告中括號里是元素個數,不是位元組數,想輸入50個數直接
int numGroup[50];
5.輸入時scanf_s回傳的不是輸入的數,而是讀入的資料數。你到底想怎么樣結束?還有,C++應該用標準庫cin,不要用C語言的scanf。如果是輸入-1結束,應該改為
do
{
cin>>*(p_num + i);
}while(*(p_num + (i++))!=-1);
6.計算平均值也是注意陣列下標從0開始。
int calNumAvg(int* p_num) {
int sum = 0;
for (int j = 0; j < i - 1; j++)
sum += *(p_num + j);
return sum;
}
7.計算平均值要先把一個數強制轉為double,否則結果還是整數,而且要除以i-1。
完整代碼:
#include<iostream>
using namespace std;
//宣告自定義函式
void initNumGroup(int* p_num);
void setNumGroup(int* p_num);
int calNumAvg(int* p_num);
//定義全域變數i
int i = 0;
//主函式
int main() {
int numGroup[50];
int* p_num = numGroup;
cout << "正在初始化陣列..." << endl;
initNumGroup(p_num);
cout << "請輸入數字..." << endl;
setNumGroup(p_num);
int sum = calNumAvg(p_num);
double avg = (double)sum / (i-1);
cout << "平均數:" << avg << "總數:" << sum << endl;
return 0;
}
//計算平均值
int calNumAvg(int* p_num) {
int sum = 0;
for (int j = 0; j < i - 1; j++)
sum += *(p_num + j);
return sum;
}
//初始化陣列
void initNumGroup(int *p_num) {
for (int j = 0; j < 50; j++)
*(p_num + j) = -1;
}
//將用戶輸入的數字儲存在陣列里
void setNumGroup(int *p_num) {
do
{
cin>>*(p_num + i);
}while(*(p_num + (i++))!=-1);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276764.html
標籤:C++ 語言
上一篇:if條件中使用取反出現問題
