7.13编程练习
作者:互联网
- 第一题
#include <iostream>
using namespace std;
double average(int, int);
int main() {
int a, b;
double s;
while (cin >> a >> b && a != 0 && b != 0)
{
s = average(a, b);
cout << "调和平均数为:" << s << endl;
}
return 0;
}
double average(int a, int b)
{
return 2.0*a*b/(a+b);
}
运行结果:
2 4
调和平均数为:2.66667
2 2
调和平均数为:2
2 0
- 第二题
#include <iostream>
using namespace std;
int in(double [], int);
void show(const double [], int);
double average(const double [], int);
const int Max_grade = 10;
int main() {
double grade[Max_grade];
int size = in(grade, Max_grade);
show(grade, size);
if (size > 0)
{
double av = average(grade, size);
cout << "平均成绩为:" << av << endl;
}
return 0;
}
int in(double grade [], int n)
{
double x;
int i = 0;
while (cin >> x && x != -1 && i < Max_grade)
{
grade[i++] = x;
}
return i;
}
void show(const double arr[], int n)
{
for (int i=0;i<n;i++)
{
cout << "高尔夫成绩为 #" << (i+1) << ": ";
cout << arr[i];
}
cout << endl;
}
double average(const double arr[], int n)
{
double sum=0;
for (int i=0;i<n;i++)
{
sum += arr[i];
}
return sum / n;
}
运行结果:
99
87
87
-1
高尔夫成绩为 #1: 99高尔夫成绩为 #2: 87高尔夫成绩为 #3: 87
平均成绩为:91
- 第三题
#include <iostream>
using namespace std;
struct box
{
char maker[40];
float height;
float width;
float length;
float volume;
};
void a(box x);
void b(box * x);
int main() {
box fox = {"crazy", 8, 8, 8, 500};
a(fox);
b(&fox);
return 0;
}
void a(box x)
{
cout << x.maker << endl;
cout << x.height << endl;
cout << x.width << endl;
cout << x.volume << endl;
}
void b(box * x)
{
x->volume = x->length * x->width * x->height;
cout << "容量变为:" << x->volume << endl;
}
运行结果:
crazy
8
8
500
容量变为:512
- 第四题
#include <iostream>
using namespace std;
long double probability(unsigned numbers1, unsigned picks1, unsigned numbers2, unsigned picks2);
int main() {
double total_1, choices_1, total_2, choices_2;
cout << "Enter the total number of choices on the game card and\n"
"the number of picks allowed:\n";
while ((cin >> total_1 >> choices_1 >> total_2 >> choices_2) && choices_1 <= total_1 && choices_2 <= total_2)
{
cout << "You have one chance in ";
cout << probability(total_1, choices_1, total_2, choices_2);
cout << " of winning.\n";
cout << "Next two numbers (q to quit):";
}
cout << "bye\n";
return 0;
}
long double probability(unsigned numbers1, unsigned picks1, unsigned numbers2, unsigned picks2)
{
long double result1 = 1.0, result2 = 1.0;
long double n1, n2;
unsigned p1, p2;
for (n1=numbers1, p1=picks1;p1 > 0;n1--, p1--)
{
result1 = result1 * n1 / p1;
}
for (n2=numbers2, p2=picks2;p2 > 0;n2--, p2--)
{
result2 = result2 * n2 / p2;
}
return result1 * result2;
}
运行结果:
Enter the total number of choices on the game card and
the number of picks allowed:
47 5 27 1
You have one chance in 4.14164e+07 of winning.
Next two numbers (q to quit):q
bye
- 第五题
#include <iostream>
using namespace std;
long jc(int n);
int main() {
int n;
long sum=0;
cout << "请输入一个整数计算阶乘:";
while (cin >> n)
{
sum = jc(n);
cout << n << "的阶乘为:" << sum << endl;
cout << "请再次输入数值进行求解:(q to quit)";
}
cout << "bye!\n";
return 0;
}
long jc(int n)
{
if (n == 0 || n == 1)
return 1;
if (n > 1)
return n * jc(n-1);
}
运行结果:
请输入一个整数计算阶乘:4
4的阶乘为:24
请再次输入数值进行求解:(q to quit)5
5的阶乘为:120
请再次输入数值进行求解:(q to quit)q
bye!
- 第六题
#include <iostream>
using namespace std;
const int Max = 20;
int Fill_array(double arr[], int n);
void Show_array(const double arr[], int n);
void Reverse_array(double * arr, int n);
void Reverse_array_2(double * arr, int n);
int main() {
double x[Max];
int size = Fill_array(x, Max);
Show_array(x, size);
if (size > 1)
{
cout << "完全反转数组:\n";
Reverse_array(x, size);
cout << "除第一个和最后一个之外反转数组:\n";
Reverse_array_2(x, size);
}
else if (size == 1)
{
cout << "数组大小为1,反转结果相同\n";
}
else
{
cout << "数组大小为0\n";
}
return 0;
}
int Fill_array(double arr[], int n)
{
double x;
int i = 0;
while (cin >> x && i < Max)
{
arr[i++] = x;
}
return i;
}
void Show_array(const double arr[], int n)
{
for (int i=0;i<n;i++)
{
cout << (i+1) << ": ";
cout << arr[i] << endl;
}
}
void Reverse_array(double * arr, int n)
{
double x;
for (int i=0, j=n-1;i<j;i++, j--)
{
x = arr[i];
arr[i] = arr[j];
arr[j] = x;
}
Show_array(arr, n);
}
void Reverse_array_2(double * arr, int n)
{
double x;
for (int i=1, j=n-2;i<j;i++, j--)
{
x = arr[i];
arr[i] = arr[j];
arr[j] = x;
}
Show_array(arr, n);
}
运行结果:
1 2 3 4 5 q
1: 1
2: 2
3: 3
4: 4
5: 5
完全反转数组:
1: 5
2: 4
3: 3
4: 2
5: 1
除第一个和最后一个之外反转数组:
1: 5
2: 2
3: 3
4: 4
5: 1
- 第七题
#include <iostream>
using namespace std;
const int Max = 5;
double * fill_array(double begin[], int limit);
void show_array(const double * begin, const double * end);
void revalue(double r, double * begin, const double * end);
int main() {
double properties[Max];
double * end = fill_array(properties, Max);
show_array(properties, end);
if (properties != end)
{
cout << "Enter revaluation factor:";
double factor;
while (!(cin >> factor))
{
cin.clear();
while (cin.get() != '\n')
continue;
cout << "Bad input; input process terminated.\n";
}
revalue(factor, properties, end);
show_array(properties, end);
}
cout << "Done.\n";
cin.get();
cin.get();
return 0;
}
double * fill_array(double begin[], int limit)
{
double temp;
int i;
for (i = 0; i < limit; ++i)
{
cout << "Enter value #" << (i+1) << ":";
cin >> temp;
if (!cin)
{
cin.clear();
while (cin.get() != '\n')
continue;
cout << "Bad input; input process terminated.\n";
break;
}
else if (temp < 0)
break;
begin[i] = temp;
}
return &begin[i];
}
void show_array(const double * begin, const double * end)
{
const double * pt;
int i = 0;
for (pt = begin;pt != end; pt ++)
{
cout << "Property #" << (i+1) << ": $";
cout << *pt << endl;
i += 1;
}
}
void revalue(double r, double * begin, const double * end)
{
double * pt;
for (pt = begin;pt != end; pt ++)
{
*pt *= r;
}
}
运行结果:(列举了两种情况)
Enter value #1:100000
Enter value #2:80000
Enter value #3:222000
Enter value #4:240000
Enter value #5:118000
Property #1: $100000
Property #2: $80000
Property #3: $222000
Property #4: $240000
Property #5: $118000
Enter revaluation factor:0.8
Property #1: $80000
Property #2: $64000
Property #3: $177600
Property #4: $192000
Property #5: $94400
Done.
Enter value #1:200000
Enter value #2:84000
Enter value #3:160000
Enter value #4:-2
Property #1: $200000
Property #2: $84000
Property #3: $160000
Enter revaluation factor:1.20
Property #1: $240000
Property #2: $100800
Property #3: $192000
Done.
- 第八题
a
#include <iostream>
using namespace std;
const int Seasons = 4;
const char * Snames[Seasons] = {
"Spring", "Summer", "Fall", "Winter"
};
void fill(double * pa);
void show(double * da);
int main() {
double expenses[Seasons];
fill(&expenses[0]);
show(expenses);
return 0;
}
void fill(double * pa)
{
for (int i = 0; i < Seasons; ++i)
{
cout << "Enter " << Snames[i] << " expenses:";
cin >> pa[i];
}
}
void show(double * da)
{
double total = 0.0;
cout << "\nEXPENSES\n";
for (int i = 0; i < Seasons; ++i)
{
cout << Snames[i] << ": $" << da[i] << endl;
total += da[i];
}
cout << "Total Expenses: $" << total << endl;
}
运行结果:
Enter Spring expenses:212
Enter Summer expenses:256
Enter Fall expenses:208
Enter Winter expenses:244
EXPENSES
Spring: $212
Summer: $256
Fall: $208
Winter: $244
Total Expenses: $920
b
#include <iostream>
using namespace std;
const int Seasons = 4;
const char * Snames[Seasons] = {
"Spring", "Summer", "Fall", "Winter"
};
struct money
{
double expenses[Seasons];
};
void fill(money * pa);
void show(money da);
int main() {
money out{};
fill(&out);
show(out);
return 0;
}
void fill(money * pa)
{
for (int i = 0; i < Seasons; ++i)
{
cout << "Enter " << Snames[i] << " expenses:";
cin >> pa->expenses[i];
}
}
void show(money da)
{
double total = 0.0;
cout << "\nEXPENSES\n";
for (int i = 0; i < Seasons; ++i)
{
cout << Snames[i] << ": $" << da.expenses[i] << endl;
total += da.expenses[i];
}
cout << "Total Expenses: $" << total << endl;
}
运行结果:
Enter Spring expenses:212
Enter Summer expenses:256
Enter Fall expenses:208
Enter Winter expenses:244
EXPENSES
Spring: $212
Summer: $256
Fall: $208
Winter: $244
Total Expenses: $920
- 第九题
#include <iostream>
#include <cstring>
using namespace std;
const int SLEN = 30;
struct student
{
char fullname[SLEN];
char hobby[SLEN];
int ooplevel;
};
int getinfo(student pa[], int n);
void display1(student st);
void display2(const student * ps);
void display3(const student pa[], int n);
int main() {
cout << "Enter class size:";
int class_size;
cin >> class_size;
while (cin.get() != '\n')
continue;
auto * ptr_stu = new student[class_size];
int entered = getinfo(ptr_stu, class_size);
for (int i = 0; i < entered; ++i)
{
display1(ptr_stu[i]);
display2(&ptr_stu[i]);
}
display3(ptr_stu, entered);
delete [] ptr_stu;
cout << "Done\n";
return 0;
}
int getinfo(student pa[], int n)
{
char name[SLEN], bo[SLEN];
int oop;
int i = 0;
while (i < n && cin >> name >> bo >> oop && strcmp(name, "") != 0)
{
strcpy(pa[i].fullname, name);
strcpy(pa[i].hobby, bo);
pa[i].ooplevel = oop;
i += 1;
}
return i;
}
void display1(student st)
{
cout << st.fullname << " " << st.hobby << " " << st.ooplevel << endl;
}
void display2(const student * ps)
{
cout << ps->fullname << " " << ps->hobby << " " << ps->ooplevel << endl;
}
void display3(const student pa[], int n)
{
for (int i = 0; i < n; ++i)
{
cout << pa[i].fullname << " " << pa[i].hobby << " " << pa[i].ooplevel << endl;
}
}
运行结果:
Enter class size:4
zxc 123 1
asd 456 2
qwe 789 3
rty 741 4
zxc 123 1
zxc 123 1
asd 456 2
asd 456 2
qwe 789 3
qwe 789 3
rty 741 4
rty 741 4
zxc 123 1
asd 456 2
qwe 789 3
rty 741 4
Done
- 第十题
#include <iostream>
using namespace std;
double calculate(double x, double y, double (*pf)(double x, double y));
double add(double x, double y);
double subtract(double x, double y);
double multiply(double x, double y);
double divide(double x, double y);
int main() {
int x, y;
double number[4];
double (*pf[4])(double x, double y) = {add, subtract, multiply, divide};
while (cin >> x >> y)
{
for (int i = 0;i<4;i++)
{
number[i] = calculate(x, y, pf[i]);
}
cout << "加减乘除结果分别为:\n";
for (double i : number)
cout << i << endl;
}
return 0;
}
double calculate(double x, double y, double (*pf)(double x, double y))
{
return pf(x, y);
}
double add(double x, double y)
{
return x + y;
}
double subtract(double x, double y)
{
return x - y;
}
double multiply(double x, double y)
{
return x * y;
}
double divide(double x, double y)
{
return x / y;
}
运行结果:
2 4
加减乘除结果分别为:
6
-2
8
0.5
1 1
加减乘除结果分别为:
2
0
1
1
q
上面只是提到了指向函数指针的指针,下面我增加了指向该数组指针的指针,看代码:
#include <iostream>
using namespace std;
double calculate(double x, double y, double (*pf)(double x, double y));
double add(double x, double y);
double subtract(double x, double y);
double multiply(double x, double y);
double divide(double x, double y);
int main() {
int x, y;
double number[4];
double (*pf[4])(double x, double y) = {add, subtract, multiply, divide};
// 1.使用指向函数指针的指针
while (cin >> x >> y)
{
for (int i = 0;i<4;i++)
{
number[i] = calculate(x, y, pf[i]);
}
cout << "加减乘除结果分别为:\n";
for (double i : number)
cout << i << endl;
cout << endl;
}
// 上面使用非double型数字跳出后会导致输入流关闭,需要重新打开才可以输入
if (!cin)
{
cin.clear();
while (cin.get() != '\n')
continue;
}
cout << "扩展:\n";
// 2.应用指向数组指针的指针,两种表示方法,pc和pd都是指向同一个数组指针的指针
auto pc = &pf;
double (*(*pd)[4])(double x, double y) = &pf;
while (cin >> x >> y)
{
for (int i = 0;i<4;i++)
{
//number[i] = calculate(x, y, (*pc)[i]);
// 使用pc和pd结果相同,很简单,有定义pc = &pf,那么两边都加上*,*pc = *&pf = pf,和上面一样调用
// 至于*(*pd)其实和(*pd)效果是一样的,这涉及到了两种学派的使用方法。
number[i] = calculate(x, y, *(*pd)[i]);
}
cout << "加减乘除结果分别为:\n";
for (double i : number)
cout << i << endl;
cout << endl;
}
return 0;
}
double calculate(double x, double y, double (*pf)(double x, double y))
{
return pf(x, y);
}
double add(double x, double y)
{
return x + y;
}
double subtract(double x, double y)
{
return x - y;
}
double multiply(double x, double y)
{
return x * y;
}
double divide(double x, double y)
{
return x / y;
}
运行结果:
2 4
加减乘除结果分别为:
6
-2
8
0.5
q
扩展:
2 4
加减乘除结果分别为:
6
-2
8
0.5
q
标签:练习,return,cout,7.13,int,double,void,编程,Enter 来源: https://blog.csdn.net/qq_41542989/article/details/113865098