📄 selection.cpp
字号:
#include <iostream.h>
//【例2.1】输出两个数中较大者
void main2()
{
int x=3, y=2;
cout<<"x与y中的最大者为:";
if (x>y) //A
cout<<x<<endl; //B
if(x<=y)
cout<<y<<endl; //C
}
//【例2.2】嵌套条件语句的应用
void main2_2()
{
int x, y;
cout<<"输入x:";
cin>>x;
if(x>800) y=500;
else if(x>700) y=600;
else if(x>600) y=700;
else if(x>500) y=800;
else y=0;
cout<<"相应的y为:"<<y<<endl; //A
}
//【例2.3】读入3个数a、b、c,输出其中绝对值最大者。
#include<math.h>
void main2_3()
{
float a,b,c,max;
cin>>a>>b>>c;
cout<<"a="<<a<<", b="<<b<<", c="<<c<<endl;
if (fabs(a)>=fabs(b)&&fabs(a)>=fabs(c))
max=a;
else if(fabs(b)>=fabs(a)&&fabs(b)>=fabs(c))
max=b;
else
max=c;
cout<< "a, b, c中绝对值最大的数为"<<max <<endl;
}
//【例2.4】设有如下形式的函数:
// x<0 y=-1
// x=0 y=0
// x>0 y=1
// 编写一个程序,根据输入的x值,输出相应的y值。
//用两种方法实现
void main2_4_1()
{
int x,y;
cin>>x;
if(x<0) //A
y=-1;
else if(x==0)
y=0;
else
y=1; //B
cout<<"x=" <<x<<", y=" <<y<<endl;
}
void main2_4_2()
{
int x,y;
cin>>x;
if(x>=0)
if(x>0)
y=1;
else
y=0;
else
y=-1;
cout<<"x=" <<x<<", y=" <<y<<endl;
}
//【例2.5】输入一个字符,判别它是否小写字母,如果是,将它转换成大写字母;否则不转换。
void main2_5()
{
char ch;
cin>>ch;
ch=(ch>='a'&&ch<='z')?(ch-32):ch;
cout<<ch;
}
//【例2.6】switch语句的应用
// 对学生成绩进行如下分类:
// 'A'或'a'等:90-100分;
// 'B'或'a'等:80-89分;
// 'C'或'a'等:70-79分;
// 'D'或'a'等:60-69分;
// 'E'或'a'等:60分以下。
//则可以用如下程序 对等级和分数范围进行转换:
void main2_6()
{
char grade;
cin>>grade;
switch(grade)
{
case 'a':
case 'A': cout<<"成绩在90~100之间!" <<endl; break;
case 'b': //M
case 'B': cout<<"成绩在80~89之间!" <<endl; break; //N
case 'c':
case 'C': cout<<"成绩在70~79之间!" <<endl; break;
case 'd':
case 'D': cout<<"成绩在60~69之间!" <<endl; break;
case 'e':
case 'E': cout<<"成绩低于60!" <<endl; break;
default: cout<<"成绩输入错误!" <<endl;
}
}
//【例2.7】根据输入的年、月,判断该月的天数。
// 分析:根据历法,闰年2月的天数为29天,其它年份2月为28天。闰年是指:年份能被4且不能被100整除,
//或者年份能被400整除
void main2_7()
{
int year,month,days,flag;
cout<<"输入年,月:";
cin>>year>>month;
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: days=31;break;
case 4:
case 6:
case 9:
case 11: days=30;break;
case 2:
if(!(year%400))
flag=1;
else if(!(year%4)&&year%100)
flag=1;
else flag=0;
if(flag) days=29;
else days=28;
}
cout<<year<<"年"<<month<<"月的天数为:"<<days<<endl;
}
//【例2.8】求自然数1~100总和:
void main2_8()
{
int i=0, sum=0;
while(i++<100)
{
sum+=i;
}
cout<<"sum="<<sum<<endl;
}
//【例2.9】键入一个整数,然后按相反顺序输出各位数字。
//分析:要将一个整数按相反的次序输出各位数字,必须获得该整数的各位数字,由于n%10为n的个位数,
//因此可以考虑用循环语句来解决该问题。
void main2_9()
{
int n, r;
cout<<"输入一个整数:\n";
cin>>n;
cout<<"n为:" <<n<<endl;
cout<<"将n的各位数的次序颠倒后为:";
while(n!=0)
{
r=n%10; //求n的个位数
cout<<r;
n=n/10; //截去n的个位数
}
cout<<endl;
}
//【例2.10】输入数据(包括空格和换行符),并将这些数据按输入的顺序输出,直到输入数字0时停止输入,
//用两种方法实现。
void main2_10_1()
{
char ch;
cout<<"请输入(输入0时停止):"<<'\n';
cin.get(ch);
do
{
cout<<ch;
cin.get(ch);
}while(ch!='0');
cout<<endl;
}
void main2_10_2()
{
char ch;
cout<<"请输入(输入0时停止):"<<'\n';
cin.get(ch);
while(ch!='0')
{
cout<<ch;
cin.get(ch);
}
cout<<endl;
}
//【例2.11】输入整数n,计算1!+2!+ … +n!的值(n!表示n的阶乘)
void main2_11()
{
int n;
long fac,sum=0;
cout<<"请输入一个整数:";
cin>>n;
for(int i=1;i<=n;i++) //A
{
fac=1;
for(int j=1;j<=i;j++) //嵌套循环,计算i的阶乘
fac*=j;
sum+=fac;
}
cout<<"1!+2!+...+"<<n<<"!="<<sum;
}
//【例2.12】从键盘上输入若干个整数,若输入0则终止输入,输出输入整数的个数以及它们的总和。
// 分析:要输入多个整数,可用循环语句实现,但由于输入整数的个数不确定,即循环的次数不确定,
//对这类情况可用if语句和break语句来决定何时退出循环。
void main2_12()
{
int num;
cout<<"请输入一个整数(若输入0,则结束输入):"<<endl;
for(int sum=0, counter=0; ;counter++)
{
cin>>num;
if(num==0)
break; //当输入0时,退出循环
sum+=num;
}
cout<<"输入整数(非0)的个数为:"<<counter<<'\t'
<<"输入整数的总和为:"<<sum<<endl;
}
//【例2.13】把1~100之间不能被3整除的数输出。
//分析:用循环语句实现。循环变量i的范围为1~100,对i进行判断,当不能被3整除时输出i,否则不输出。
void main2_13()
{
int outCounter=0;
for(int n=1;n<=100;n++)
{
if(n%3==0)
continue; //A 若n能被3整除,则退出本次循环
cout<<n<<'\t';
if(!(++outCounter%6) ) //该if语句的作用是使每行输出6个数
cout<<'\n';
}
cout<<'\n';
}
//【例2.14】设计一个菜单程序,即根据输入特定的值,决定采取何种操作。
//分析:可用exit()或abort()函数实现功能"当输入某个值时退出程序"。
#include<stdlib.h>
void main2_14()
{
char ch;
do {
cout<<"1. 拼音检查\n";
cout<<"2. 改正拼音错误\n";
cout<<"3. 显示拼音错误\n";
cout<<"Q. 结束"<<endl;
cout<<"请选择:";
cin>>ch;
switch(ch)
{
case '1': cout<<"进行拼音检查…\n\n"; //当输入1时,调用相应的函数
break;
case '2': cout<<"改正拼音错误…\n\n"; break;
case '3': cout<<"显示拼音错误…\n\n"; break;
case 'q':
case 'Q': cout<<"退出程序\n"; exit(0); //当输入'q'或'Q'时,退出程序
default: cout<<"输入错误!\n\n" ;
}
}while (1);
}
//【例2.15】设计一个程序,求下列数列的前20项:
// y(n)=0 n=0
// y(n)=1 n=1
// y(n)=2 n=2
// y(n)=y(n-1)+2y(n-2)+y(n-3) n>2
#include <iomanip.h>
void main2_15()
{
long int y1=0,y2=1,y3=2,y;
cout<<setw(12)<<y1<<setw(12)<<y2<<setw(12)<<y3;
for(int i=3;i<20;i++)
{
y=y1+2*y2+y3; //A 递推公式
y1=y2; //B
y2=y3; //C
y3=y; //D
cout<<setw(12)<<y;
if((i+1)%6==0) //每行输出6个数
cout<<'\n';
}
cout<<'\n';
}
//【例2.16】 编写一个程序,打印n阶杨辉三角形,要求n由用户输入,且不大于12。
//分析:杨辉三角形为如下形式(n=5):
// 1
// 1 1
// 1 2 1
// 1 3 3 1
// 1 4 6 4 1
//在杨辉三角形中,第i行第j列的元素的值为组合 ,设为com(i,j)。则com(i,j)具有如下的迭代关系:
// com(i,j)=i!/(j!*(i-j)!)
// com(i,0)=1 (i=0,1,…)
// com(i, j)=com(i, j-1)*(i-j+1)/j (j=1,2,…,i)
//可见,这也是一个递推问题,
void main()
{
int com,n,k;
cout<<"输入一个整数:\n";
cin>>n;
if(n>12)
cout<<"输入的数太大!";
else
{
cout<<setw(26)<<n<<"阶杨辉三角形为:\n";
for(int i=0;i<n;i++)
{
for(k=1;k<18-i;k++)
cout<<" "; //输出2个空格
com=1;
cout<<com<<" "; //输出3个空格
for(k=1;k<=i;k++)
{
com=com*(i-k+1)/k;
if(com<10)
cout<<com<<" "; //输出3个空格
else if(com<100)
cout<<com<<" "; //输出2个空格
else
cout<<com<<" "; //输出1个空格
}
cout<<'\n';
}
}
}
//【例2.17】 验证歌德巴赫猜想:任何一个大于6的偶数都可以表示为两个奇素数之和。
//要求输入一个整数,验证小于这个整数且大于6的所有的偶数都满足歌德巴赫猜想。
//分析:对一个偶数,要验证它是否满足歌德巴赫猜想,首先将它分解为两个整数之和,
//然后验证这两个整数是否为素数。
void main2_17()
{
long int m,n;
int k;
cout<<"输入一个大于6的整数:";
cin>>n;
for(int i=6;i<n;i+=2) //对小于n的每一个偶数进行验证
{
for(m=2;m<=i/2;m++) //循环A,将i分解成m和i-m之和
{
for(k=2;k<=sqrt(m);k++) //循环B,判断m是不是素数
if(m%k==0)
break; //如果m不是素数,则退出循环B
if(k<=sqrt(m))
continue; //如果m不是素数,则结束循环A的本次循环
for(k=2;k<=sqrt(i-m);k++) //循环C,判断i-m是不是素数
if((i-m)%k==0)break; //如果i-m不是素数,则退出循环C
if(k>sqrt(i-m))break; //如果i-m是素数,则退出循环A
}
if(m==i/2+1) //如果对任何m<i/2,m、i-m不都是素数,则歌德巴赫猜想不成立
{
cout<<"偶数i不能表示为两个素数之和!\n";
break;
}
else
cout<<i<<"="<<m<<"+"<<i-m<<'\t';
if((i-4)%10==0) //一行输出5个等式
cout<<'\n';
}
cout<<'\n';
}
//【例2.18】 模拟出题、改题系统。要求自动给出100以内的整数的加、减、乘运算题,
//并根据给出的答案进行打分,做完10题后给出总分。
#include<time.h>
void main2_18(void)
{
int i,left,right,sum=0;
int op,c,d;
srand(time(NULL));
for(i=0;i<10;i++)
{
cout<<"第"<<i+1<<"题:";
left=rand()%100; //随机产生0~99之间的整数
right=rand()%100;
op=rand()%3; //随机产生0~2之间的整数
switch(op) // 出题
{
case 0:
cout<<left<<'+'<<right<<'=';
c=left+right;
break;
case 1:
cout<<left<<'-'<<right<<'=';
c=left-right;
break;
case 2:
cout<<left<<'*'<<right<<'=';
c=left*right;
}
cin>>d; //给出答案
if(d==c) //判断答案是否正确
{
cout<<"正确,得10分!\n";
sum+=10;
}
else cout<<"不正确,不得分!\n";
}
cout<<"共答对:"<<sum/10<<"题\t"<<"总分:"<<sum<<'\n';
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -