int main()
{
int a; //virknes skaitlis
int N; //skaitlis
int count = 0;
int sum = 0;
double average;
int ok;
do {
cout << "Ievadiet, cik skaitļu būs virknē: " << endl;
cin >> a;
for (int i = 0; i < a; i++) {
cout << "Ievadiet veselu skaitli: " << endl;
cin >> N;
if (N % 2 == 1) {
count++;
sum += N;
}
}
average = (double)sum / count;
cout << "Virknes nepāra skaitļu vidējā artimētiskā vērtība ir: " << average << endl;
cout << " Vai turpināt (1) vai beigt (0)?" << endl;
cin >> ok;
} while (ok == 1);
if (sum == 0) {
cout << "Nevar aprēķināt nepāra skaitļu vidējo aritmētisko." << endl;
}
return (0);
}
该程序应询问键入链中有多少个数字,然后计算这些数字之间的奇数平均值。它正在工作,但是问题出在第二个循环中。在第二个循环中,算术平均值已经不正确,因为程序也包含了“第一圈”中的数字,但是我需要使它们独立。我应该怎么做才能使循环独立,这样我可以在不退出程序的情况下运行多个循环。
答案 0 :(得分:0)
#include <iostream>
int main()
{
double sum;
for(;;)
{
int amount = 0;
sum = 0;
int a;
std::cout << "Ievadiet, cik skaitļu būs virknē: " << std::endl;
std::cin >> a;
for (int i = 0; i < a; i++)
{
std::cout << "Ievadiet veselu skaitli: " << std::endl;
int N;
std::cin >> N;
if (N % 2 == 1)
{
amount++;
sum += N;
}
}
double average = (double)sum / amount;
std::cout << "Virknes nepāra skaitļu vidējā artimētiskā vērtība ir: " << average << std::endl;
std::cout << " Vai turpināt (1) vai beigt (0)?" << std::endl;
int ok;
std::cin >> ok;
if (ok != 1){
break;
}
}
if (sum == 0)
{
std::cout << "Nevar aprēķināt nepāra skaitļu vidējo aritmētisko." << std::endl;
}
return 0;
}
希望这行得通。
如果要这样做,请务必考虑变量的范围
int p = 0;
for (int i = 0; i < 100; i++){
p++;
}
//here p would still be 100, because it was declared outside of the scope of the for loop
如果我要这样做。
for (int i = 0; i < 100; i++){
int p = 0;
p++;
//would never get bigger then 1, because every iteration it gets reinstantiated.
}
//here p would be non-existent outside of the scope.
每次离开范围(几乎所有带有花括号的内容)时,该范围内的堆栈分配变量都将被删除。
堆分配的变量不会自动消失,必须显式删除它。
//heap allocated variable, recognised by the new keyword, which returns a pointer to your new variable.
int *numbers = new int[100];
//to delete it. If you don't do this you would get a memory leak.
delete numbers;
答案 1 :(得分:-1)
我相信我对您代码的修正会使事情顺利进行:
#include<iostream>
using namespace std;
int main()
{
int a; //virknes skaitlis
int N; //skaitlis
int count = 0;
int sum = 0;
double average;
int ok;
do {
count = 0;
sum = 0;
cout << endl << endl << "Ievadiet, cik skaitļu būs virknē: ";
cin >> a;
cout << endl;
for (int i = 0; i < a; i++) {
cout << "Ievadiet veselu skaitli: ";
cin >> N;
if (N % 2 == 1) {
count++;
sum += N;
}
}
if (count != 0) {
average = (double)sum / count;
cout << endl << "Virknes nepāra skaitļu vidējā artimētiskā vērtība ir: " << average << endl;
} else {
cout << endl << "Nevar aprēķināt nepāra skaitļu vidējo aritmētisko.\nNetika ievadīti nepāra skaitļi." << endl;
}
cout << endl << "Vai turpināt (1) vai beigt (0)? : ";
cin >> ok;
} while (ok == 1);
cout << endl;
return (0);
}