实验结论:
2-28
实现一个简单的菜单程序,运行时显示"Menu: A(dd) D(elete) S(ort) Q(uit), Select one:"提示用户输入,A 表示增加,D 表示删除, S 表示排序,Q 表示退出,输入为 A、 D、S 时分别提示"数据已经增加、删除、排序。"输入为 Q 时程序结束。
1)if...else
#include<iostream> using namespace std; //if int main(){ char menu; while(1){//使用break语句可以跳出这个循环 cout<<"Menu:A(dd) D(elete) S(ort) Q(uit), Select one:"<<endl; cin>>menu; if(menu=='A') { cout<<"Data has benn added"<<endl; continue;}//结束本次循环,并判断决定是否执行下一次循环 else if(menu=='D') { cout<<"Data has been deleted"<<endl; continue;} else if(menu=='S') { cout<<"Data has been sorted"<<endl; continue;} else if(menu=='Q') break; } return 0; }
运行结果截图:
2) switch
#include<iostream> using namespace std; //switch int main(){ while(1){ cout<<"Menu:A(dd) D(elete) S(ort) Q(uit), Select one:"<<endl; char menu; cin>>menu; switch(menu){ case 'A': cout<<"Data has benn added"<<endl; break; case 'D': cout<<"Data has been deleted"<<endl; break; case 'S': cout<<"Data has been sorted"<<endl; break; case 'Q': exit(0); break; default://输入了上面没有提及的情况时,出来吆喝一声 cout<<"INPUT ERROR!"<<endl; break; } } return 0; }
运行结果截图:同上
2-29
用穷举法找出 1~100 间的质数,显示出来。分别使用 while,do-while,for 循环语 句实现。
1) while
#include<iostream> #include<cmath> using namespace std; //while int main(){ int n=2,flag; while(n<101){ int i=2; while(i<=sqrt(n)){ flag=1;//立一个flag,这里首先假设1~100内所有的数均为质数 if(n%i==0){ flag=0;//flag倒了,此次的n不是质数,跳出循环 break; } i++; } if(flag)//如果flag没有倒,即这个数跟我们假设的一样,是一个质数,就将它输出 cout<<n<<" is prime"<<endl;//在这一行之前,如果我加上“cout<<flag<<endl;”,就不能输出正确答案,为什么啊,求解。 n++; } return 0;}
运行结果截图:
2)do...while
#include<iostream> #include<cmath> using namespace std; //do while int main(){ int n=2,flag; do{ flag=1; int i=2; do{ if(n%i==0){ flag=0; break;} i++; }while(i<=sqrt(n)); if(flag) cout<<n<<" is prime"<<endl; n++; }while(n<101); return 0; }
运行结果截图:同上
3)for
#include<iostream> #include<cmath> using namespace std; //for int main(){ int n,flag; for(n=2;n<101;n++){ for(int i=2;i<=sqrt(n);i++){ flag=1; if(n%i==0){ flag=0; break; } } if(flag) cout<<n<<" is prime"<<endl; } return 0;}
运行结果截图:同上
2-32
在程序中定义一个整型变量,赋以 1~100 的值,要求用户猜这个数,比较两个数的大 小,把结果提示给用户,直到猜对为止。
1)while
#include<iostream>
#include<stdlib.h> using namespace std; //while int main(){ int n=68;
int i; cout<<"Guess a number(1~100)"<<endl; while(cin>>i){ if(i>n) cout<<"Need a little bit smaller"<<endl; else if(i<n) cout<<"Need a little bit bigger"<<endl; else{ cout<<"U did it"<<endl; break;} } return 0; }
运行结果截图:
2)do...while
#include<iostream>
#include<stdlib.h> using namespace std; //do while int main(){ int n=68;
int i; cout<<"Guess a number(1~100)"<<endl; do{ cin>>i; if(i>n) cout<<"Need a little bit smaller"<<endl; else if(i<n) cout<<"Need a little bit bigger"<<endl; }while(i!=n); cout<<"U did it"<<endl; return 0; }
运行结果截图:同上
2-34
口袋里有红、黄、蓝、白、黑5种颜色的球若干个,每次从口袋里取出3个不同颜色的球,问有多少种取法
(这个排列组合的我不会(19/3/12),所以去百度了,参考的是这篇博客https://blog.csdn.net/qikaihuting/article/details/70170469)【理不直气也壮??(不是
#include<iostream>
using namespace std; int fac(int n) { if(n<=1) return 1; else return n*fac(n-1); }//计算n的阶乘,见书p75 3-8 int com(int n,int m) { int temp; if(n<m) { temp=n; n=m; m=temp;} return fac(n)/(fac(m)*fac(n-m)); } /* 以上是排列组合C(n,m)的数学公式。 */ int main() { int a,b,ans; cout<<"Enter the number of the ball & the color u can choose:"<<endl;
/* cin>>a>>b;//一般情况下 ans=comb(a,b);//一般情况下
*/
ans=com(3,5);//对于此题 cout<<"The answer of 2-34 is "<<ans<<endl; return 0; }
运行结果截图:
书上3-9例题
#include<iostream> using namespace std; int comm(int n,int k){ if(k>n) return 0; else if(n==k||k==0) return 1; else return comm(n-1,k)+comm(n-1,k-1); } int main(){ int n,k; cout<<"Enter the number of the ball & the color u can choose:"<<endl; cin>>n>>k; cout<<"C("<<n<<","<<k<<")= "<<comm(n,k)<<endl; return 0; }
实验体会:
1.C++对C有兼容性,所以C学的不扎实的地方要重新看。C++的优势貌似要在比较大的地方才能显现出来。
2.cin>>n之后不能有endl
3.for的循环功能似乎比do while和while强一些