首页 > 代码库 > c++ primer plus(第6版)中文版 第七章编程练习答案
c++ primer plus(第6版)中文版 第七章编程练习答案
第七章编程练习答案
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) { unsigned x, 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) { double tmp; unsigned num = 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) { double sum = 0; for (unsigned i = 0; i < size; ++i) sum += scores[i]; return (sum / size); } int main (void) { const unsigned size = 10; double scores[size]; cout << "输入" << size << "个高尔夫成绩,-1可提前结束:"; unsigned num = 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 { char Maker[40]; float height; float width; float length; float volume; }; 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) { Box box = {"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 double pro = 1.0; while (picks > 0) { pro *= 1.0 * numbers / picks; --numbers; --picks; } return (pro); } int main () { long double pro = 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 { double arr[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() { TData expenses; 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; char tmp[SLEN]; for (int i = 0; i < n; ++i) { cout << "输入姓名:"; cin.getline(tmp, SLEN); bool blank_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 contents void 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 contents void 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 structures void 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 () { TPfun fun[] = {add, sub}; while (true) { cout << "输入两个数:"; double x, y; cin >> x >> y; if (!cin) break; calculate(x, y, fun, sizeof(fun)/sizeof(fun[0])); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。