实验一:C++简单程序设计
这次的实验主要是四个问题,在解决问题的基础上要求使用不同的循环结构和分支结构。在复习C语言的同时了解C++不同于C语言的地方。
2-28 /*问题描述:实现一个简单的菜单程序,运行时现实“Menu: A(dd) D(elete) S(ort) Q(uit) , Select one:”提示用户输入。A表示增加,D表示删除,S表示排序,Q表示退出,输入A、D、S时分别提示“数据已经增加、删除、排序。”,输入为Q时程序结束。*/
# if选择结构源码:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int judge=1; 6 while(judge!=0) 7 { 8 9 cout<<"Menu:A(dd) D(elete) S(ort) Q(uit), Select one:"<<endl; 10 char s; 11 cin>>s; 12 13 if(s!='A'&&s!='D'&&s!='S'&&s!='Q') 14 cout<<"Wrong directive, please try agine"<<endl; 15 16 else if(s=='A') 17 cout<<"Date has added"<<endl; 18 19 else if(s=='D') 20 cout<<"Date has deleted"<<endl; 21 22 else if(s=='S') 23 cout<<"Date has sorted"<<endl; 24 25 else if(s=='Q') 26 judge=0; 27 } 28 return 0; 29 }
# switch选择结构源码:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int judge=1; 6 while (judge != 0) 7 { 8 9 cout << "Menu:A(dd) D(elete) S(ort) Q(uit), Select one:" << endl; 10 char s; 11 cin >> s; 12 switch (s) 13 { 14 15 case 'A': 16 { 17 cout << "Date has added" << endl; break; } 18 19 case 'D': 20 { 21 cout << "Date has deleted" << endl; break; } 22 23 case 'S': 24 { 25 cout << "Date has sorted" << endl; break; } 26 27 case 'Q': 28 { 29 judge = 0; break; } 30 31 default:cout << "Wrong directive, please try agine" << endl; 32 } 33 } 34 return 0; 35 }
运行结果截图:
2-29 /*问题描述:用穷举法找出1--100间的质数并显示出来。分别使用while,do...while,for循环结构语句实现*/
# while循环结构:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i=2,k=0; 6 while(i<=100) 7 { 8 int j=2; 9 while(j<i) 10 { 11 if(i%j==0) 12 break; 13 else 14 j++; 15 } 16 if(i<=j) 17 { 18 cout<<i<<" "; 19 k++; 20 if(k%6==0) 21 cout<<endl; 22 } 23 i++; 24 } 25 return 0; 26 }
#do...white循环结构:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i=2,k=0; 6 do 7 { 8 int j=2; 9 do 10 { 11 if(i%j==0) 12 break; 13 else 14 j++; 15 }while(j<=i); 16 if(i==j) 17 { 18 cout<<i<<" "; 19 k++; 20 if(k%6==0) 21 cout<<endl; 22 23 } 24 i++; 25 26 }while(i<=100); 27 return 0; 28 }
#for循环结构:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int i=2,j,k=0; 6 for(i;i<=100;i++) 7 { 8 for(j=2;j<=i;j++) 9 if(i%j==0) 10 break; 11 12 if(i==j) 13 { 14 cout<<i<<" "; 15 k++; 16 if(k%6==0) 17 cout<<endl; 18 } 19 } 20 return 0; 21 }
运行结果截图:
2-32 /*问题描述:在一个程序中定义一个整形变量,赋予1--100的值。要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。分别使用while,do...while语句实现循环*/
#while循环结构:
1 /*程序每次生成的数字和当前的时间有关, 2 而时间是变化的,所以每次的数字也不同*/ 3 #include<cstdlib> 4 #include<iostream> 5 #include<ctime>/*引用time*/ 6 using namespace std; 7 int main() 8 { 9 srand ( time(0));/*使用当前时间作为随机生成器的种子*/ 10 int random = rand(); 11 int a=1+rand()%100;/*可随机取得0-100之间的任意数*/ 12 int gu_num; 13 cout<<"please input you guess number(between 1-100):"<<endl; 14 cin>>gu_num; 15 if(a==gu_num) 16 cout<<"Conguratulations,you get it right"<<endl; 17 else 18 while(a!=gu_num) 19 { 20 if(a>gu_num) 21 cout<<"Bigger than you guessed, please guess again"<<endl; 22 else 23 cout<<"Lower than you guessed, please guess again"<<endl; 24 cin>>gu_num; 25 } 26 cout<<"Conguratulations,you get it right"<<endl; 27 return 0; 28 }
#do...while循环结构:
1 #include<iostream> 2 #include<cstdlib> 3 #include<ctime> 4 using namespace std; 5 6 int main() 7 { 8 srand ( time(0)); 9 int random = rand(); 10 int a=1+rand()%100; 11 int gu_num; 12 cout<<"please input you guess number(between 1-100):"; 13 cin>>gu_num; 14 15 if(a==gu_num) 16 cout<<"Conguratulations,you get it right"<<endl; 17 18 else 19 do 20 { 21 if(a>gu_num) 22 cout<<"Bigger than you guessed, please guess again"<<endl; 23 24 else 25 cout<<"Lower than you guessed, please guess again"<<endl; 26 cin>>gu_num; 27 }while(a!=gu_num); 28 29 cout<<"Conguratulations,you get it right"<<endl; 30 return 0; 31 }
运行结果截图:
2-34/*问题描述:口袋中有红黄蓝白黑5种颜色的球若干个。每次从口袋中取出3个不同颜色的球,问有多少种取法?*/
分析问题是组合数型问题,采用组合数公式Cnm=n!/m!/(n-m)!来计算方法总数,为了提高代码重用性,这里引入新的变量来表示总数与取数。
代码展示:
1 /*分析问题本质是一个组合数,可以采用简单的 2 组合数计算公式 n!/(m!*(n-m)!) ,如此,可以 3 定义一个阶乘函数*/ 4 #include<iostream> 5 using namespace std; 6 7 long factorial(long );//阶乘函数声明 8 9 int main() 10 { 11 int m,n; 12 cout<<"请输入不同球的种类数与每次取出的球数:"; 13 cin>>n>>m; 14 cout<<factorial(n)/(factorial(m)*factorial(n-m))<<endl; 15 return 0; 16 } 17 18 long factorial(long x)//阶乘函数定义 19 { 20 int num=1; 21 for(int i=1;i<=x;i++) 22 num*=i; 23 return num; 24 }
运行结果截图:
实验小结:
1、通过这四个实验,较好的复习了C语言的基础的选择,循环结构。同时掌握了C++基本的输入,输出的方式。
2、自主学习所得:本次实验收获较大的是学会了引入随机数,并且在过程中了解了伪随机数及如何避免重复得到同一个随机数。对比书本上提供的种子方法,我更倾向于引入time()。
此处粘贴关于time()用法的链接 /*https://en.cppreference.com/w/cpp/numeric/random/srand*/。
作者:爱因斯坦PLUS。