实验一:C++简单程序设计
【实验结论】
#2-28
实现一个简单的菜单程序,运行时显示“Menu:A(dd) D(elete) S(ort) Q(uit),Selete one:”提示用户输入。A表示增加,D表示删除,S表示排序,Q表示退出。输入为A、D、S时分别提示“数据已经增加、删除、排序。”,输入Q时程序结束。
(1)if...else...语句,break,continue控制
#include<iostream> using namespace std; int main() { char n; for(int i=1;;) //循环输入 { cout<<"Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"; cin>>n; if(n=='A') { cout<<"数据已经增加。\n"; continue; } else if(n=='D') { cout<<"数据已经删除。\n"; continue; } else if(n=='S') { cout<<"数据已经排序。\n"; continue; } else if (n=='Q') break; //退出 else { cout<<"Input error.\n"; continue; //判断输入是否正确 } } return 0; }
(2)switch语句
#include<iostream> using namespace std; int main() { char n; lab:cout<<"Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"; //goto语句跳到再往下运行 cin>>n; switch(n) { case 'A':cout<<"数据已经增加。\n";goto lab; //“goto lab”为跳到“lab:”后语句开始循环 case 'D':cout<<"数据已经删除。\n";goto lab; case 'S':cout<<"数据已经排序。\n";goto lab; case 'Q':break; default:cout<<"Input error.\n";goto lab; } return 0; }
[运行截图]
#2-29
用穷举法找出1~100间的质数并显示出来。
(1)while语句
#include<iostream> using namespace std; #include<cmath> #include<iomanip> int main() { int n=1,m,i=1,j; while(n<=100) { m=sqrt((double)n); //判断质数 for(j=2;j<=m;j++) { if(n%j==0) break; } if(j>m&&n!=1) { cout<<setw(5)<<n; //右对齐输出,域宽为5 if(i%5==0) //输出时每行5个质数 cout<<endl; else cout<<ends; ++i; } ++n; } return 0; }
(2)do...while语句
#include<iostream> using namespace std; #include<cmath> #include<iomanip> int main() { int n=1,m,i=1,j; do { m=sqrt((double)n); //判断质数 for(j=2;j<=m;j++) { if(n%j==0) break; } if(j>m&&n!=1) { cout<<setw(5)<<n; //右对齐输出,域宽为5 if(i%5==0) //每行输出5个质数 cout<<endl; else cout<<ends; ++i; } ++n; }while(n<=100); return 0; }
(3)for语句
#include<iostream> using namespace std; #include<cmath> #include<iomanip> int main() { int n,m,i=1,j; for(n=1;n<=100;n++) { m=sqrt((double)n); //判断质数 for(j=2;j<=m;j++) { if(n%j==0) break; } if(j>m&&n!=1) { cout<<setw(5)<<n; //右对齐输出,域宽为5 if(i%5==0) //每行输出5个质数 cout<<endl; else cout<<ends; ++i; } } return 0; }
[运行结果]
#2-32
在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。
(1)while语句
#include<iostream> using namespace std; #include<ctime> #include<cstdlib> int main() { srand((unsigned)time(NULL)); int n=rand()%100+1,m; //随机取值 cout<<"输入你所猜测测的数:"; cin>>m; while(m!=n) { if(m<1||m>100) cout<<"Input error.\n"; //判断所输数字是否在【1,100】 else { if(m<n) cout<<"Please enter a larger number.\n"; else cout<<"Please enter a smaller number.\n"; //猜数字 } cout<<"输入你所猜测测的数:"; cin>>m; } cout<<"Congratulations on your correct answer!\n"; return 0; }
(2)do...while语句
#include<iostream> using namespace std; #include<ctime> #include<cstdlib> int main() { srand((unsigned)time(NULL)); int n=rand()%100+1,m; //随机取值 cout<<"输入你所猜测测的数:"; cin>>m; do { if(m<1||m>100) cout<<"Input error.\n"; //判断所输数字是否在【1,100】 else { if(m<n) cout<<"Please enter a larger number.\n"; else cout<<"Please enter a smaller number.\n"; //猜数字 } cout<<"输入你所猜测测的数:"; cin>>m; }while(m!=n); cout<<"Congratulations on your correct answer!\n"; return 0; }
[运行结果]
#2-34
口袋中有红黄蓝白黑5种颜色的球若干个。每次从口袋中取出3个颜色不同的球,问有多少种取法。
(1)无顺序取法(10种)
#include<iostream> #include<iomanip> using namespace std; enum Packet{Red,Yellow,Blue,White,Black}; //枚举元素 void shift(int n) { switch(n) //将枚举元素的值转化成对应元素输出 { case 0:cout<<setw(7)<<"Red";break; case 1:cout<<setw(7)<<"Yellow";break; case 2:cout<<setw(7)<<"Blue";break; case 3:cout<<setw(7)<<"White";break; case 4:cout<<setw(7)<<"Black";break; } } int main() { int i,j,k,total=0; cout<<"The type:\n"; for(i=Red;i<=Black;i++) //不重复的取法 { for(j=Red+i+1;j<=Black;j++) { for(k=Red+j+1;k<=Black;k++) { shift(i); shift(j); shift(k); cout<<endl; ++total; //计算满足要求的取法种类 } } } cout<<"The count:"<<total<<endl; return 0; }
[运行结果]
(2)有顺序取法(60种)
#include<iostream> #include<iomanip> using namespace std; enum Packet{Red,Yellow,Blue,White,Black}; //枚举元素 void shift(int n) { switch(n) //将枚举元素的值转化成对应元素输出 { case 0:cout<<setw(7)<<"Red";break; case 1:cout<<setw(7)<<"Yellow";break; case 2:cout<<setw(7)<<"Blue";break; case 3:cout<<setw(7)<<"White";break; case 4:cout<<setw(7)<<"Black";break; } } int main() { int i,j,k,total=0; cout<<"The type:\n"; for(i=Red;i<=Black;i++) //按顺序的取法 { for(j=Red;j<=Black;j++) { for(k=Red;k<=Black;k++) { if(i!=j&&i!=k&&j!=k) //控制不出现相同颜色的球 { shift(i); shift(j); shift(k); cout<<endl; ++total; //计算满足要求的取法 } } } } cout<<"The count:"<<total<<endl; return 0; }
[运行结果]
【实验总结与体会】
1. 关于2-32的rand()函数以及生成不同的随机数字的方法,和2-34中的关于枚举元素输出为枚举类型和整型的相关方法(ps:我个人认为用switch输出不是严格的枚举类型),可见下图:
2. 2-34本是想着以随机取值的方式写的,但是因着无法写出怎么判断每次形成的种类与之前形成的不同的代码,所以写下去的话,试了一下是无限循环的,想着可以用插函数的方法或者借鉴点名的方法实现判断,但是在查了CSDN和博客园的相关帖子之后无果,便搁置在边上,换了另一种方法,用人为枚举的方式写出来了。
【评论地址】
https://www.cnblogs.com/AliceMaestra/p/10561811.html
https://www.cnblogs.com/cjj1/p/10561472.html
https://www.cnblogs.com/wsggwsc/p/10561281.html