实验结论
2-28 实现一个简单的菜单程序,运行时显示"Menu:A(dd) D(elete) S(ort) Q(uit),Select one: "提示用户输入。输入A、D、S时分别提示"数据已经增加、删除、排序",输入Q时程序结束。
(1)使用if...else语句进行判断。
#include <iostream>
using namespace std;
int main() {
char n;
cout << "Menu:A(dd) D(elete) S(ort) Q(uit),Select one:"<<endl;
cin>>n;
while(n!='Q'){
if (n=='A'){
cout<<"数据已经增加"<<endl;
cin>>n;
continue;}
else if (n=='D'){
cout<<"数据已经删除"<<endl;
cin>>n;
continue;}
else if (n=='S'){
cout<<"数据已经排序"<<endl;
cin>>n;
continue;}
else {
cout<<"请输入A、D、S、Q,输入Q时退出程序!"<<endl;
cin>>n;
continue;}
}
return 0;
}
运行结果:
(2)使用switch语句。
#include <iostream>
using namespace std;
int main() {
char n;
cout<< "Menu: A(dd) D(elete) S(ort) Q(uit),Select one:"<<endl;
cin>> n;
while(n!='Q'){
switch(n){
case 'A':
cout<<"数据已经添加"<<endl;
break;
case 'D':
cout<<"数据已经删除"<<endl;
break;
case 'S':
cout<<"数据已经排序"<<endl;
break;
default:
cout<<" 请输入A、D、S、Q,输入Q时退出程序!"<<endl;
}cin>> n;
}
return 0;
}
运行结果:
2-29 用穷举法找出1——100间的所有质数并显示出来。
(1)用for循环
#include <iostream>
using namespace std;
int main() {
int a,i;
for(a=2;a<=100;a++)
{
for(i=2;i<a;i++)
{
if(a%i==0)
break;
}
if (i==a)
cout << a <<" " ;
}
return 0;
}
(2)用while循环
#include <iostream>
using namespace std;
int main() {
int i,a=2;
while (a<=100)
{
i=2;
while(i<a)
{
if (a%i==0)
break;
i++;
}
if (a==i)
cout << a <<" " ;
a++;
}
return 0;
}
(3)用do...while循环。
#include <iostream>
using namespace std;
int main() {
int a=1,i;
do{
a++;
i=1;
do{
i++;
if (a%i==0)
break;
}while(i<a);
if (a==i)
cout << a <<" " ;
}while(a<100);
return 0;
}
运行结果:
- 判断一个数为质数:用该数除以1外的每一个比它小的正整数,如果能整除,则为合数;如果都不能整除,则为质数。
2-32在程序中定义一个整型变量,赋予1-100值。要求用户猜这个数,比较两数大小,把结果提示给用户,直到猜对为止。
(1)用while循环
#include <iostream>
using namespace std;
int main() {
int i=59,m;
cout << "猜猜这个数是多少?(在1——100之间)"<<endl;
cin>>m;
while (m){
if (i<m)
cout <<"您猜的值太大了"<<endl;
else if (i>m)
cout <<"您猜的值太小了"<<endl;
else
{
cout <<"恭喜您,猜对了!"<<endl;
break;
}
cin>>m;
}
return 0;
}
(2)用do...while循环
#include <iostream>
using namespace std;
int main() {
int i=59,m;
cout << "猜猜这个数是多少?(在1——100之间)"<<endl;
do {
cin>>m;
if (i<m)
cout <<"您猜的值太大了"<<endl;
else if (i>m)
cout <<"您猜的值太小了"<<endl;
else break;
}while (i!=m);
cout <<"恭喜您,猜对了!"<<endl;
return 0;
}
运行结果:
2-34 口袋中有红、黄、蓝、白、黑五种颜色的球若干,每次从口袋中取出3个球,问有多少种取法?
#include <iostream>
using namespace std;
int main() {
enum color {red,yellow,blue,white,black};
int i,j,k,n=0;
for (i=red;i<=black;i++)
{
for (j=red;j<=black;j++)
{
if(i!=j)
for(k=red;k<=black;k++)
{
if (k!=i&&k!=j)
n+=1;
}
}
}
cout << "total:"<<n<<endl;
return 0;
}
运行结果:
- 思路:按红、黄、蓝、白、黑的顺序取出第一个球,按红、黄、蓝、白、黑的顺序取出第二个球。判断与第一个球与第二个球颜色是否一致,如果不同,则按红、黄、蓝、白、黑的顺序取出第三个球,判断第三个球的颜色是否和第一个或者第二个相同。若都不同,则在总数上加1.
实验总结与体会
- 在实验2-29中,我将i++写在了while循环外,导致运行结果无限循环输出2.
- 在实验2-34中,我一开始写的代码如下,输出的结果是30,我一直没想明白错在哪里,求指教
#include <iostream>
using namespace std;
int main() {
enum color {red,yellow,blue,white,black};
int i,j,k,n=0;
for (i=red;i<=black;i++)
{
for (j=red;j<=black;j++)
{
if(i==j)
break;
else
for(k=red;k<=black;k++)
{
if (k!=i&&k!=j)
n+=1;
}
}
}
cout << "total:"<<n<<endl;
return 0;
}