c++ primer plus(第6版)中文版 第七章编程练习答案

来源:互联网 发布:太湖云计算广州 编辑:程序博客网 时间:2024/06/09 14:19

第七章编程练习答案

7.1编写一个程序,用户不停输入两数,直到有0出现为止,计算调和平均数

//7.1编写一个程序,用户不停输入两数,直到有0出现为止,计算调和平均数#include <iostream>using namespace std;double average (unsigned x, unsigned y)  {return (2.0 * x * y / (x + y));} int main () {     while (true) {unsignedx, y;cout << "输入一对正整数,计算其调和平均数(0退出):";cin >> x >> y;if (0 == x || 0 == y) break;cout << "--> " << average(x, y) << endl;}} 

7.2要求用户输入10个高尔夫成绩到数组里(可提前输入),计算平均成绩,用3个函数分别输入,显示和计算。

//7.2要求用户输入10个高尔夫成绩到数组里(可提前输入),计算平均成绩,用3个函数分别输入,显示和计算。#include <iostream>using namespace std;unsigned input (double scores[], unsigned size){doubletmp;unsignednum = 0;while (num < size && cin >> tmp && -1 != tmp) {scores[num++] = tmp;}return num;}void show (double scores[], unsigned size) {for (unsigned i = 0; i < size; ++i) cout << scores[i] << ' ';}double average (double scores[], unsigned size){doublesum = 0;for (unsigned i = 0; i < size; ++i) sum += scores[i];return (sum / size);}int main (void) {     const unsignedsize = 10;doublescores[size];cout << "输入" << size << "个高尔夫成绩,-1可提前结束:";unsignednum = input(scores, size);cout << "高尔夫成绩如下:\n";show(scores,num);cout << endl;cout << "高尔夫成绩均值为:" << average(scores, num) << endl;} 

7.3如下结构体Box,编写一个主函数和两个函数:
//a.按值传递Box结构,并依次显示值
//b.传递Box的地址,将volume设计为其他三维的乘积

//7.3如下结构体Box,编写一个主函数和两个函数://a.按值传递Box结构,并依次显示值//b.传递Box的地址,将volume设计为其他三维的乘积#include <iostream>using namespace std;struct Box{charMaker[40];floatheight;floatwidth;floatlength;floatvolume;};void show (Box box) {cout << box.Maker << ' ' << box.height << ' ' << box.width << ' ' << box.length;}float volume (Box* box){return (box->volume = box->height * box->width * box->length);}int main (void) {     Boxbox = {"BigBro", 12, 8, 6, 0};show(box);cout << endl;cout << "体积为:" << volume(&box) << endl;} 

7.4编写彩票程序,中头奖为(1~47)选5个和(1~27)选1个,计算头奖几率

//7.4编写彩票程序,中头奖为(1~47)选5个和(1~27)选1个,计算头奖几率#include <iostream>using namespace std;long double probability (unsigned numbers, unsigned picks) {long doublepro = 1.0;while (picks > 0) {pro *= 1.0 * numbers / picks;--numbers;--picks;}return (pro);}int main () {     long doublepro = probability(47, 5) * probability(27, 1);cout << "你有" <<  (int)pro << "分之一的几率中奖" << endl;} 

7.5编写程序利用函数递归计算阶乘

//7.5编写程序利用函数递归计算阶乘#include <iostream>using namespace std;long double jiecheng(int n){if(n==1)  return n;else return n*jiecheng(n-1); }int main(){int n=0;cout << "input n=" ;cin >> n;cout << n << "!=" << jiecheng(n) << endl;}

7.6编写一个程序包含3个函数,插入,显示和逆序

//7.6编写一个程序包含3个函数,插入,显示和逆序#include <iostream>using namespace std;void Fill_array(double arr[],int arrSize){int i=0;for(i=0;i<arrSize;i++){cout<<"Please enter the "<<i+1<<" double values:";if(!(cin>>arr[i]))break;}cout<<"you had input "<<i<<"  values!"<<endl;}void const Show_array(const double arr[],int arrSize){cout<<"the array is:"<<endl;for(int i=0;i<arrSize;i++)cout<<arr[i]<<"  ";}void Reverse_array(double arr[],int arrSize){cout<<"now Reverse the array!"<<endl;for(int i=0;i<arrSize/2;i++){swap(arr[i],arr[arrSize-1-i]);}Show_array(arr,arrSize);}int main(){double arr[10] {0};Fill_array(arr,10);Show_array(arr,10);Reverse_array(arr,10);cout << endl;}

7.7对7.6,使用指针表示区间,编写程序

//7.7对7.6,使用指针表示区间,编写程序#include <iostream>using namespace std;void Fill_array(double arr[],int arrSize){int i=0;for(i=0;i<arrSize;i++){cout<<"Please enter the "<<i+1<<" double values:";if(!(cin>>arr[i]))break;}cout<<"you had input "<<i<<"  values!"<<endl;}void const Show_array(double* begin,double* end){cout<<"the array is:"<<endl;while(begin!=end)cout<<*begin++<<"  ";}void Reverse_array(double* begin,double* end){cout<<"now Reverse the array!"<<endl;while(end-begin>1)  //两地址相减,差值位一个指向的单位{swap(*begin,*end);++begin;--end;}}int main(){double arr[10] {0};Fill_array(arr,10);Show_array(arr,arr+10);Reverse_array(arr,arr+9);Show_array(arr,arr+10);cout << endl;}

7.8.a对程序清单7.15,使用const char*储存季度名,用double数组记录开支

//7.8.a对程序清单7.15,使用const char*储存季度名,用double数组记录开支#include <iostream>#include <string>using namespace std;const int Seasons = 4;const char* Snames[] = {"Spring", "Summer", "Fall", "Winter"};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;}int main(){double expenses[Seasons];fill(expenses);show(expenses);return 0;}

7.8.b对程序清单7.15,使用const char*储存季度名,包含一个double数组成员的结构体记录开支

//7.8.b对程序清单7.15,使用const char*储存季度名,包含一个double数组成员的结构体记录开支#include <iostream>#include <string>const int Seasons = 4;const char* Snames[] = {"Spring", "Summer", "Fall", "Winter"};struct TData{doublearr[Seasons];};void fill(TData* pData){using namespace std;for (int i = 0; i < Seasons; i++){cout << "Enter " << Snames[i] << " expenses: ";cin >> pData->arr[i];}}void show(TData data){using namespace std;double total = 0.0;cout << "\nEXPENSES\n";for (int i = 0; i < Seasons; i++){cout << Snames[i] << ": $" << data.arr[i] << endl;total += data.arr[i];}cout << "Total Expenses: $" << total << endl;}int main(){TDataexpenses;fill(&expenses);show(expenses);}

7.9根据已有代码和要求完成程序

//7.9根据已有代码和要求完成程序#include <iostream>#include <cctype>#include <cstring>using namespace std;const int SLEN = 30;struct student {char fullname[SLEN];char hobby[SLEN];int ooplevel;};// getinfo() has two arguments: a pointer to the first element of// an array of student structures and an int representing the// number of elements of the array. The function solicits and// stores data about students. It terminates input upon filling// the array or upon encountering a blank line for the student// name. The function returns the actual number of array elements// filled.int getinfo(student pa[], int n){int num_array_elem = n;chartmp[SLEN];for (int i = 0; i < n; ++i) {cout << "输入姓名:";cin.getline(tmp, SLEN);boolblank_line = true;for (unsigned j = 0; j < strlen(tmp); ++j) {if (!isspace(tmp[j])) {blank_line = false;break;}}if (blank_line) {num_array_elem = i;break;}strcpy(pa[i].fullname, tmp);cout << "输入兴趣:";cin.getline(pa[i].hobby, SLEN);cout << "输入面向对象程序设计能力的级别:";cin >> pa[i].ooplevel;cin.get();}return (num_array_elem);}// display1() takes a student structure as an argument// and displays its contentsvoid display1(student st){cout << st.fullname << '\t' << st.hobby << '\t' << st.ooplevel << endl;}// display2() takes the address of student structure as an// argument and displays the structure’s contentsvoid display2(const student * ps){cout << ps->fullname << '\t' << ps->hobby << '\t' << ps->ooplevel << endl;}// display3() takes the address of the first element of an array// of student structures and the number of array elements as// arguments and displays the contents of the structuresvoid display3(const student pa[], int n){for (int i = 0; i < n; ++i) {cout << pa[i].fullname << '\t' << pa[i].hobby << '\t' << pa[i].ooplevel << endl;}}int main(){cout << "输入班级人数:";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 << "完毕\n";return 0;}

7.10使用指向函数的指针,并定义一个数组储存2个函数地址,对输入的2个数进行+-运算

//7.10使用指向函数的指针,并定义一个数组储存2个函数地址,对输入的2个数进行+-运算#include <iostream>using namespace std;typedef double (*TPfun) (double x, double y);void calculate (double x, double y, TPfun fun[], unsigned num_of_funs){for (unsigned i = 0; i < num_of_funs; ++i)cout << fun[i](x, y) << endl;}double add (double x, double y){cout << "加法操作结果:";return (x + y);}double sub (double x, double y){cout << "减法操作结果:";return (x - y);}int main () {     TPfunfun[] = {add, sub};while (true) {cout << "输入两个数:";doublex, y;cin >> x >> y;if (!cin)break;calculate(x, y, fun, sizeof(fun)/sizeof(fun[0]));}} 


1 0
原创粉丝点击