C++ Primer Pluse_7_课后题

#include <iostream>

using namespace std;

double Sum2(double x, double y)
{
double sum = 0; if (x + y < 0.0000000001)
{
cout << "x, y 的调和数为无穷大;\n";
system("pause");
exit(0);
}
sum = 2.0*x*y / (x + y);
return sum;
} void test7_1()
{
double x;
double y;
double sum = 0; while ((cin>>x>>y) && x != 0 && y!=0)
{
sum = Sum2(x, y);
cout << "x,y的调和为: " << sum << endl;
}
} /************************************************************************/
/* 2 */
/************************************************************************/
const int SIZE = 10;
int GetScores(double scores [],int *size)
{
cout << "Enter the scores( press q to quit).\n";
int i = 0;
for (i = 0; i < 10 && cin >> scores[i]; i++)
{
if (scores[i]<0)
{
cout << "score below zero, bad input.\n";
cout << "Input terminated.\n";
return -1;
}
} *size = i;
return 0;
} void Show(const double * scores, int size)
{
int i = 0;
for (i = 0; i < size; i++)
{
cout << scores[i] << " ";
}
cout << endl;
} double Average(const double *scores, int size)
{
double sum = 0; if (size == 0)
{
return 0;
}
for (int i = 0; i < size; i ++)
{
sum += scores[i];
} return sum/size;
}
void test7_2()
{
int size = 0;
double scores[SIZE] = { 0 }; int ret = 0;
ret = GetScores(scores, &size);
while (ret != 0)
{
cout << "Please input again.\n";
ret = GetScores(scores, &size);
} Show(scores, size);
double avg = Average(scores, size);
cout << "平均成绩为:" << avg << endl; } /************************************************************************/
/* 3 */
/************************************************************************/
typedef struct Box
{
char maker[40];
float height;
float width;
float length;
float volume;
}box; void ShowBox(box b1)
{
cout << "Showing the box......\n";
cout << b1.maker << endl;
cout << b1.height << endl;
cout << b1.width << endl;
cout << b1.length << endl;
cout << b1.volume << endl;
} void GetVol(box * b1)
{
b1->volume = b1->height *b1->length*b1->width;
}
void test7_3()
{
box b1 = { "Cat", 10, 2, 3, 0 };
ShowBox(b1);
GetVol(&b1);
ShowBox(b1);
} /************************************************************************/
/* 4 */
/************************************************************************/ void test7_4()
{ }
/************************************************************************/
/* 5 */
/************************************************************************/
long GetFactorial(int n)
{
if (n == 0 || n == 1)
{
return 1;
}
else
return n*GetFactorial(n - 1); }
void test7_5()
{
int n = 0;
cin >> n;
if (n < 0)
{
cout << "bad input.\nprogram terminated.\n";
return;
} cout << n << "! = " << GetFactorial(n)<<endl; } void test7_6()
{ } /************************************************************************/
/* 7 */
/************************************************************************/
const int Max = 5;
double * full_array(double ar[], int limit)
{
double *ar_end = ar;
double tmp = 0;
for (int i = 0; i < limit; i++, ar_end++)
{
cout << "Enter value #" << (i + 1) << ": ";
cin >> tmp; if (!cin)
{
cin.clear();
while (cin.get()!='\n')
{
continue;
} cout << "Bad input;input process terminated.\n";
break;
}
else if (tmp < 0)
{
break;
}
*ar_end = tmp;
} return --ar_end;
} void show_array(double ar[], const double *ar_end)
{
double *pt = ar;
for (int i = 0; pt <= ar_end; pt++, i++)
{
cout << "Property #" << (i + 1) << ": $";
cout << *pt << endl;
}
} void revalue(double r, double *ar, double *ar_end)
{
double *pt = ar;
for (; pt <= ar_end ; pt++)
{
*pt *= r; }
} void test7_7()
{
double properties[Max];
double *ar_end = NULL;
ar_end = full_array(properties, Max);
show_array(properties,ar_end);
if (ar_end - properties > 0)
{
cout << "Enter revaluation factor: ";
double factor;
while (!(cin >> factor))
{
cin.clear();
while (cin.get()!= '\n')
{
continue;
}
cout << "Bad input. input process terminated.";
}
revalue(factor, properties, ar_end);
show_array(properties, ar_end);
}
cout << "Done.\n";
cin.get();
cin.get();
} /************************************************************************/
/* 8 */
/************************************************************************/
const int Seasons = 4;
const char * Snames[Seasons] = { "Spring", "Summer", "Fall", "Winter" };
void fill(double expenses[], int Seasons)
{
for (int i = 0; i < Seasons; i++)
{
cout << "Enter " << Snames[i] << " expense: ";
cin >> expenses[i];
}
} void show(double expense[], int Seasons)
{
double total = 0;
cout << "EXPENSE\n";
for (int i = 0; i < Seasons; i++)
{
cout << Snames[i] << ": $" << expense[i] << endl;
total += expense[i];
} cout << "Total Expense: $" << total << endl; }
void test7_8()
{
double expense[Seasons] = { 0 };
fill(expense, Seasons);
show(expense, Seasons);
} /************************************************************************/
/* 9 */
/************************************************************************/
const int Size = 30;
typedef struct Student{ char fullname[Size];
char hobby[Size];
int ooplevel; }student; int getInfo(student pa[], int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
cout << "Student #" << i + 1 << ":\n";
cout << "Enter name: ";
cin >> pa[i].fullname;
if (!cin)
{
cin.clear();
while (cin.get()!= '\n')
{
continue;
}
cout << "bad input. input process terminated.\n";
} cout << "Enter hobby:";
cin >> pa[i].hobby;
cout << "Enter ooplevel:";
cin >> pa[i].ooplevel;
} return i;
} void display1(student st)
{
cout << "Student info:\n";
cout << "name: " << st.fullname << endl;
cout << "hobby: " << st.hobby << endl;
cout << "ooplevel" << st.ooplevel << endl;
} void display2(student *ps)
{
cout << "Student info:\n";
cout << "name: " << ps->fullname << endl;
cout << "hobby: " << ps->hobby << endl;
cout << "ooplevel" << ps->ooplevel << endl;
} void display3(const student pa[], int n)
{
int i = 0;
for (; i < n; i++)
{
cout << "Student #" << i + 1<< "info:"<< endl;
cout << "name: " << pa[i].fullname << endl;
cout << "hobby: " << pa[i].hobby << endl;
cout << "ooplevel" << (pa+i)->ooplevel << endl;
}
} void test7_9()
{
cout << "Enter class size: ";
int class_size;
cin >> class_size; while (cin.get()!= '\n')
{
continue;
} student *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";
}
double add(double x, double y)
{
return x + y;
} double sub(double x, double y)
{
return x - y;
} double mul(double x, double y)
{
return x*y;
} void test7_10()
{
double(*calculate[3])(double, double); calculate[0] = add;
calculate[1] = sub;
calculate[2] = mul;
for (int i = 0; i < 3; i++)
{
cout << calculate[i] << ": "<<calculate[i](5, 2) << endl;
}
}
int main()
{
test7_10();
system("pause");
return 0;
}

  

上一篇:Linux vi编辑器使用技巧


下一篇:ABP文档 - 嵌入的资源文件