一、C++语言的控制语句分为三类: 顺序控制语句 选择控制语句 循环控制语句
1.顺序语句
1)赋值号“=”,与逻辑等号“==”区别。
例题1:求 2x2 + 8x + 6 = 0的根
根据求根公式x1,2 =−b±√b^2−4ac/2a,先对常量a、b、c赋值,然后再计算x1和x2
#include<iostream>
using namespace std;
int main()
{
double a = 2, b = 8, c = 6;
double x1, x2;
x1 = ( -b + sqrt(b * b – 4 * a * c )) / ( 2 * a );
x2 = ( -b - sqrt( b * b – 4 * a * c )) / ( 2 * a );
cout << "x1 =" << x1 << "\t x2 =" << x2 <<endl; r
eturn 0;
}
例题2:交换两个变量的值
注:需要一个中间变量temp;
#include<iostream>
using namespace std;
int main()
{
int a = 3, b = 5, temp;
temp = a;
a = b;
b = temp;
cout << "a = " << a << "\tb = " << b <<endl;
return 0;
}
//使用库函数实现交换
#include<iostream>
using namespace std;
int main()
{
int a = 3, b = 5;
swap(a, b);
cout << "a = " << a << "\tb = " << b <<endl;
return 0;
}
例题3:提取一个整数n的百位a、十位b和个位c
#include<iostream>
using namespace std;
int main()
{
int n;
cout << "输入一个整数:";
cin >> n;
int a = (n / 100) % 10;
int b = (n / 10) % 10;
int c = n)% 10;
cout << "百位数是" << a << endl;
cout << "十位数是" << b << endl;
cout << "个位数是" << c << endl;
return 0;
}
2.选择语句
选择控制语句——单分支选择结构 双分支选择结构 多分支的if-else-if结构 switch语句
例题1:单分支选择结构——给定的三个数,求最大数的平方
if(条件表达式)
{ 若干语句1;
}
若干语句2
#include<iostream>
using namespace std;
int main()
{
int a = 5, b = 9, c = 7, max;
max = a;
if (b>max)
{
max = b;
}
if (c>max)
{
max = c;
}
cout << "最大数的平方为:" << max * max <<endl;
return 0;
}
2.双分支选择结构
if(条件表达式)
{ 语句块1; }
else
{ 语句块2; }
语句块3;
例题:计算: y =
#include<iostream>
using namespace std;
int main()
{
double x, y;
cin >> x;
if( x < 5 && x > -5 )
y = sqrt(25 - x * x);
else
y = sqrt(x * x - 25);
cout << "y = " << y << endl;
return 0;
}
3.多分支的if-else-if结构
if (条件表达式1)
{程序段1;}
else if (条件表达式2)
{程序段2;}
…
…
else if (条件表达式n)
{程序段n;}
else
{程序段n+1;}
例题:根据月份判断季节
#include<iostream>
using namespace std;
int main()
{
int month ;
cin>>month;
if(month == 12 || month == 1 || month == 2)
cout << month << "月是冬天" << endl;
else if(month == 3 || month == 4 || month == 5)
cout << month << "月是春天" << endl;
else if(month == 6 || month == 7 || month == 8)
cout << month << "月是夏天" << endl;
else if(month == 9 || month == 10 || month == 11)
cout << month << "月是秋天" << endl;
else
cout << "不合法的月份";
return 0;
}
4.switch语句
定义:switch语句是一个多分支选择语句,也叫开关语句。它可以根据一个整型表达式有条件地选择一个语句执行。
switch(变量名称或表达式)
{
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
default:
语句N;
break;
}
- switch小括号中的控制表达式结果必须是整型或字符
- case后面可以为常数,也可以是常数计算的表达式。但不能是变量, 整形变量也不可以!
- break表示跳出整个switch语句,不要把它丢了!!!
三、循环语句
- for循环语句
- while循环语句
- 循环嵌套
1.for循环语句
for(表达式1; 表达式2; 表达式3)
{
循环体语句块;
}
表达式1:循环变量赋初值 表达式2:循环条件 表达式3:增量表达式
例题1:计算从1加到100的和
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i = 1; i <= 100; i++)
{
sum = sum + i;
}
cout << "1 + 2 + 3 + ... + 100 = " << sum << endl;
return 0;
}
例题:输入10个整数,统计偶数个数
#include<iostream>
using namespace std;
int main()
{
int x, cnt = 0;
for (int i=0; i<=9; i++)
{
cin>>x;
if ( x % 2 == 0 )
{
cout << x << "是偶数" << endl;
cnt++;
}
}
cout << "共有" << cnt << "个偶数" << endl;
return 0;
}
while循环语句
1)while语句
2)do-while语句
1)例题:老汉卖瓜
老汉卖西瓜,第一天卖西瓜总数的一半多一个,第二天卖剩下的一半多一个
以后每天都是卖前一天剩下的一半多一个,到第10天只剩下一个。求西瓜总数是多少?
算法分析:
设共有x个西瓜,卖一半多一个后,还剩下x/2 - 1个
每天的西瓜数可以用迭代表示: xn = (xn+1 + 1) * 2
卖了9天之后(第10天),x = 1
这是可以用循环来处理的迭代问题
#include<iostream>
using namespace std;
int main()
{
//第10天的西瓜是1个,x代表前一天的西瓜数,y代表今天的西瓜数,
//由y=x-x/2-1得x=2*(y+1)
int i=1, x=1;
//循环9次,每次都求出前一天的西瓜数
while(i<=9)
{
x=(x+1)*2; //求出前一天的西瓜数
i++;
}
cout << " x = " << x << endl;
return 0;
}
转向语句
1)break语句
跳出switch结构,继续执行后续语句
终止整个循环,继续执行后续语句
2)continue语句
终止单次循环,继续执行下一次循环
———————————————————————————————————————————
例题练习:
求3位数所有的“水仙花数”
水仙花数是指一个 3 位数 ( n≥3 )
它的每个位上的数字的 3 次幂之和等于它本身
(例如:1^3 + 5^3 + 3^3 = 153)
#include<iostream>
using namespace std;
int main()
{
for(int i=100;i<=999;i++)
{
int a=i/100;
int b=(i/10)%10;
int c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
cout<<i<<endl;
}
return 0;
}
用*打印三角形
int main()
{
for (int i = 1; i <= 6; i++) //6次循环输出6行
{
//每次循环,输出6-i个空格
for (int j = 1; j <= 6 - i; j++)
cout << " ";
//每次循环,输出2*i-1个*
for (int j = 1; j <= 2 * i - 1; j++)
cout << "*";
cout << endl;
}
return 0;
}
【例】求2~100之间的素数
算法分析:判断数字n是否为素数
只需检验n是否能被2、3、4、…、n1/2整除。
n % k == 0 (k = 2,3,4,……,sqrt(n))
#include<iostream>
using namespace std;
int main()
{
for (int i = 2; i <= 100; i++) //依次判断2~100是否为素数
{
bool isPrime = true;
for (int j = 2; j <= sqrt(i); j++) //判断i是否能被某个因数整除
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime) //如果isPrime仍为真,说明i是素数
cout << i << '\t';
}
cout << endl;
return 0;
}