实验一: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控制
//2_28.cpp #include<iostream> using namespace std; int main(){ char x; int i; char A,D,S,Q; cout<<"Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"; for(;i=1;i++){ cout<<"Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"; cin>>x; if(x=='A'){ cout<<"数据已增加"<<endl; continue; } else if(x=='D'){ cout<<"数据已删除"<<endl; continue; } else if(x=='S'){ cout<<"数据已排序"<<endl; continue; } else if(x!='A'&&x!='Q'&&x!='S'&&x!='D'){ cout<<"输入有误"<<endl; continue; } else if (x=='Q') break; } return 0; }
(2)switch语句
//2_28.cpp #include<iostream> using namespace std; int main(){ char x; char A,D,S,Q; cout<<"Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"; cin>>x; for(;x!='Q';){ switch (x){ case 'A': cout<<"数据已增加"<<endl; break; case 'D': cout<<"数据已删除"<<endl; break; case 'S': cout<<"数据已排序"<<endl; break; default: cout<<"输入错误"<<endl; break; } cout<<"Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"; cin>>x; } return 0; }
#2-29
用穷举法找出1~100间的质数并显示出来。
(1)while语句
//2_29.cpp #include<iostream> #include<cmath> #include<iomanip> using namespace std; int main(){ int i=1,n,j,k=1; while(i<=100){ n=sqrt(i); for(j=2;j<=n;j++){ if(i%j==0)break; } if(j>n&&i!=1){ cout<<setw(5)<<i; k++; if(k>5){ cout<<setw(5)<<endl; k=1; } } i++; } return 0; }
(2)do...while语句
//2_29.cpp #include<iostream> #include<cmath> #include<iomanip> using namespace std; int main(){ int i=1,n,j,k=1; do{ n=sqrt(i); for(j=2;j<=n;j++){ if(i%j==0)break; } if(j>n&&i!=1){ cout<<setw(5)<<i; k++; if(k>5){ cout<<setw(5)<<endl; k=1; } } i++; }while(i<=100); return 0; }
(3)for语句
//2_29.cpp #include<iostream> #include<cmath> #include<iomanip> using namespace std; int main(){ int i=1,n,j,k=1; for(i=1;i<=100;i++){ n=sqrt(i); for(j=2;j<=n;j++){ if(i%j==0)break; } if(j>n&&i!=1){ cout<<setw(5)<<i; k++; if(k>5){ cout<<setw(5)<<endl; k=1; } } } return 0; }
#2-32
在程序中定义一个整型变量,赋以1~100的值,要求用户猜这个数,比较两个数的大小,把结果提示给用户,直到猜对为止。
(1)while语句
//2-32.cpp
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main(){
int x,n;
srand( (unsigned)time( NULL ) );
n=rand()%100+1;
cout<<"Enter a number please:";
cin>>x;
while(x!=n){
if(x>n){
cout<<"smaller than the number"<<endl;
}
if(x<n){
cout<<"bigger than the number"<<endl;
}
cout<<"Enter a number please:";
cin>>x;
if(x==n){
cout<<"congratulation you guess the number!"<<endl;
exit(0);
}
}
return 0;
}
(2)do-while语句
//2-32.cpp #include<iostream> #include<cstdlib> #include<ctime> using namespace std; int main(){ int x,n; srand( (unsigned)time( NULL ) ); n=rand()%100+1; cout<<"Enter a number please:"; cin>>x; do{ if(x>n){ cout<<"smaller than the number"<<endl; } if(x<n){ cout<<"bigger than the number"<<endl; } cout<<"Enter a number please:"; cin>>x;}while(x!=n); if(x==n){ cout<<"congratulation you guess the number!"<<endl; } return 0; }
#2-34
口袋中有红黄蓝白黑5种颜色的球若干个。没词葱口袋中取出3个颜色不同的球,问有多少种取法。
(1)无顺序取法(10种)
//2-34.cpp #include<iostream> using namespace std; int main(){ enum num{red,yellow,blue,white,black}; int i,j,k,n=0,h; for(i=red;i<=black;i++){ for(j=red+i+1;j<=black;j++){ for(k=red+j+1;k<=black;k++){ n++; switch(i){ case 0:cout<<"red"<<ends;break; case 1:cout<<"yellow"<<ends;break; case 2:cout<<"blue"<<ends;break; case 3:cout<<"white"<<ends;break; case 4:cout<<"black"<<ends;break; } switch(j){ case 0:cout<<"red"<<ends;break; case 1:cout<<"yellow"<<ends;break; case 2:cout<<"blue"<<ends;break; case 3:cout<<"white"<<ends;break; case 4:cout<<"black"<<ends;break; } switch(k){ case 0:cout<<"red"<<endl;break; case 1:cout<<"yellow"<<endl;break; case 2:cout<<"blue"<<endl;break; case 3:cout<<"white"<<endl;break; case 4:cout<<"black"<<endl;break; } } } } cout<<"一共有"<<n<<"种方法"<<endl; return 0; }
(2)有顺序取法(60种)
//2-34.cpp #include<iostream> using namespace std; int main(){ enum num{red,yellow,blue,white,black}; int i,j,k,n=0,h; for(i=red;i<=black;i++){ for(j=red;j<=black;j++){ if(i!=j){ for(k=red;k<=black;k++){ if(k!=j&&k!=i){ n++; switch(i){ case 0:cout<<"red"<<ends;break; case 1:cout<<"yellow"<<ends;break; case 2:cout<<"blue"<<ends;break; case 3:cout<<"white"<<ends;break; case 4:cout<<"black"<<ends;break; } switch(j){ case 0:cout<<"red"<<ends;break; case 1:cout<<"yellow"<<ends;break; case 2:cout<<"blue"<<ends;break; case 3:cout<<"white"<<ends;break; case 4:cout<<"black"<<ends;break; } switch(k){ case 0:cout<<"red"<<endl;break; case 1:cout<<"yellow"<<endl;break; case 2:cout<<"blue"<<endl;break; case 3:cout<<"white"<<endl;break; case 4:cout<<"black"<<endl;break; } } } } } } cout<<"一共有"<<n<<"种方法"<<endl; return 0; }
【实验总结与体会】
对于此实验一中的各类题使用while do-while switch for 等不同循环结构的使用有了更加清晰的认识,和区别认知。并且掌握了域宽的使用方式。
域宽的头文件为#include<iomanip>,在输出时添加入setw()语句,在括号中填入自己程序的域宽。
实验一中的2-34的枚举类型属于第一次接触,以及实验一中的2-32中的随机数的生成有了系统的认知,并且能运用其在程序中。
随机数使用的是srand rand函数,头文件为#include<ctime>,并且使用srand((unsigned)time(0))或srand((unsigned)time(NULL))srand函数产生一个随机种子运用rand()%max+min进行生成一个随机数,max为最大数,min为最小数。并且当生成double类型的随机数,要声明例如rand()/double(RAND-MAX)。
枚举类型:枚举类型()enum枚举类型名{变量值类型}例如enum colour{red black blue white.......};枚举类型具有默认值,默认按照顺序0,1,2,3........,因此如此题中如果要输出变量值red black等等,需要对其进行强制转型,例如static-cast<int>(x)对x进行转型,本题中我并没有使用此方法,因为我还不太会用。我是用switch函数对其输出为枚举类型。枚举类型的元素是常量,不能对其进行赋值。
评论:https://www.cnblogs.com/1499978329f/p/10540143.html#4210744
https://www.cnblogs.com/AliceMaestra/p/10561811.html#4210748
https://www.cnblogs.com/shy0825/p/10561610.html#4210750