郭炜-C语言程序设计-程序设计与算法(一)-第三周

郭炜-C语言程序设计-程序设计与算法(一)-第三周,第1张

第三周

条件分支结构:有时,并非所有的程序语句都要被顺序执行到,会希望满足某种条件就执行这部分语句,满足另一条件就执行另一部分语句。这就需要“条件分支结构”。

1.条件分支结构之if 语句
//第一种
if(表达式){语句}
//第二种
if(表达式){语句}
else{语句}
//第三种
if(表达式){语句}
else if(表达式){语句}
......
else{}
  • If语句为依次执行表达式,只要有1个为真,后面就不会执行。
  • if语句,可以没有else if,可以没有else,也可以两者都没有。
  • 如果语句组中只有一条语句,则可以不用{}
  • 表达式以0为假,其余为真。
  • 在if语句嵌套中,else总是和离它最近的if配对,如果要改变,可以用大括号进行分割。
  • 在互相矛盾的多个条件中,如果确实只希望执行其中的一个分支,应用if和多个else if,而不要写多个if。
2.条件分支结构之switch语句
switch(表达式){
        case 常量表达式1:
            语句组1
            break;
        case 常量表达式2:
            语句组2
            break;
        ......
        case 常量表达式n:
        	语句组n
            break;
        default:
        	语句组n+1
}
  • switch语句可避免表达式的重复计算,表达式的值必须为整数类型。
  • 常量表达式必须是整数类型的常量。
  • 表达式的值等于哪个常量表达式的值就执行哪个语句组,都不等于就执行default语句。
  • case穿透现象:switch语句在进入某个case分支后,会一直执行到第一个碰到的“break;”,即使这个“break;”是在后面的case分支里面。如果没有碰到“break;”,则会向下一直执行到switch语句末尾的“}”,包括“default:”部分的语组也会被执行。
3.循环结构之for循环
for( 表达式1 ;表达式2;表达式3) {
语句组
}
  1. 计算“表达式1”。
  2. 计算“表达式2”,若其值为true,则执行“{ }”中的语句组,然后转到3);若为false,则不再执行“{}”中的语句组,for语句结束,转到5)。
  3. 计算“表达式3”。
  4. 转到2)。
  5. 从for语句后面继续往下执行程序。
  • 循环控制变量若定义在“表达式1”中,只在for内部起作用,则不必担心控制变量重名。
  • for循环结构里的“表达式1”和“表达式3”都可以是用逗号连接的若干个表达式。
  • for循环可以嵌套,形成多重for循环,循环次数等于每层循环次数之积。
4.循环结构之while循环
while(表达式){
    语句组
}
  1. 判断“表达式”是否为真,如果不为真,则转4)
  2. 执行“语句组”
  3. 转1)
  4. while语句结束,继续执行while语句后面的语句。
  • 并非到达指定次数,而是满足某条件时即停止
    循环,则适合用while语句来实现循环。
5.循环结构之do…while循环
do{
    语句组
}while(表达式)
  • 如果希望循环至少执行一次,就可以使用do…while语句。
  • 每执行一次循环后,都要判断“表达式”的值是否为真,如果真就继续循环,如果为假,就停止循环。
附程序题: 1.if嵌套

例题:请写一个程序,该程序输入一个年份,根据该年份是否是建国整十周年、建党整十周年以及是否是闰年给出不同的输出。

#include
using namespace std;
int main() 
{
	int year;
	cin >> year;
	if (year<=0)
	{
		cout<<"illegal year."< 1949) && (year - 1949) % 10 == 0)
		{
			cout << "luck year." << endl;
		}
		else if (year > 1921 && !(year - 1921) % 10)
		{
			cout << "good year" << endl;
		}
		else if (year % 4 == 0 && year % 100 || year % 400 == 0) 
		{
			cout << "leap year." << endl;
		}
		else
		{
			cout << "common year." << endl;
		}
    }
     return 0;
}
2.switch星期
#include 
using namespace std;
int main()
{
int n;
cin>>n;
switch(n) {
case 1:
cout<<"Monday";
break;
case 2:
cout<<"Tuesday";
break;
case 3:
cout<<"Wednesday";
break;
case 4:
cout<<"Thursday";
break;
case 5:
cout<<"Friday";
break;
case 6:
cout<<"Saturday";
break;
case 7:
cout<<"Sunday";
break;
default:
cout<<"Illegal";
}
return 0;
}
3.for二重循环

例题: 给定正整数n和m,在1至n这n个数中,取出两个不同的数,
使得其和是m的因子,问有多少种不同的取法。

#include
using namespace std;
int main() 
{
	int sum=0,m, n;
	cin >> m >> n;
	for (int i = 1; i < n; i++)
	{
		for ( j=i+1; j< n; j++)
		{
			if (m % (i + j)==0) sum += 1;
		}

	}
	cout<
4.while

例题:输入若干个(至少1个)不超过100的正整数,输出其中的最大值、最小值以及所有数的和。输入的最后一个数是0,标志着输入结束。

#include
using namespace std;
int main(){
    int Max=0,Min=200,sum=0,number;
    cin>>number;
    while(number){
        if(number>Max) Max=number;
        if(number>number;
    }
    cout<

例题:用牛顿迭代法求输入的数的平方根。
欲求a的平方根,首先猜测一个值x 1 =a/2(也可以是随便什么其他值)作为其平方根,然后根据下面的迭代公式算出x 2 ,再将x 2 代入公式右边算出x 3 ……直到连续两次算出的x n 和x n+1 的差的绝对值小于某个值ε,即认为找到了足够精确的平方根。这个ε值取得越小,计算出来的平方根就越精确。(EPS:epsillon表示精度或者绝对误差)
迭代公式: xn+1= (x n + a / x n ) / 2

#include
using namespace std;
double EPS 0.001
int main(){
double a;
cin>>a;
if(a>=0){
double x=a/2,lastX=x+1+EPS;
while(x-lastX>EPS||lastX-x>EPS){
    lastX=x;
    x=(x+a/x)/2;
}
cout<
5.do…while

输出1到10000以内所有2的整数次幂:

#include
using namespace std;
int main(){
int n=1;
do{
cout<

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1324376.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)