循环结构和分支结构复习

一、循环结构

1、while语句:
适用范围比for广,其一般形式为:
while(表达式){
    循环体语句
}
表达式为while循环为真的情况,循环终止并执行while的下一条语句。
使用方法:
1)while语句的表达式可以是任意合法的表达式,循环体语句只能是一条语句。
2)while语句构成简单,只有一个表达式和一条循环语句
补充:for语句可与while语句相互转化。

例1:用格雷戈里公式求给定精度的Π值。使用格雷戈里公式求Π的近似值,要求精确到
最后一项的绝对值小于给定精度eps。
Π/4=1-1/3+1/5-1/7+……

#include <stdio.h>
int main(void)
{
	int denominater = 1,flag = 1;
	double thelastone = 1,sum = 0,eps;
	scanf("%lf",&eps);
	while(thelastone >= eps){
		sum = sum + thelastone * flag;
		denominater = denominater + 2;
		flag = flag * (-1);
		thelastone = 1.0 / denominater;
	}
	printf("%f",sum*4);
	
	return 0;
}

执行结果如下:

2、break和continue语句的比较使用:
1)break语句强制循环结束,一但执行break语句,循环提前结束,不再执行循环体中位于其后的其它语句。
break语句应与if语句一起使用,否则永远执行不了其后的语句。
2)continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环。
continue语句一般也与if语句配套使用。(continue语句和while语句一起使用可能会导致死循环)
continue和break语句的区别:
1)break结束循环,而continue只是跳过后面的语句继续循环。
2)break除了用于循环,还可用于switch语句,而continue只能用于循环。

 


3、嵌套循环:
嵌套循环中,由于循环一般为多个,所以一般用flag赋值来跳出循环,而break只能跳出一个循环。
内外层循环的循环变量不能相同。


4、循环结构的选择:
1)循环次数已知:for语句
2)循环次数未知,循环条件在进入循环时明确:while语句
3)循环次数未知,循环条件需要在循环体中明确:do-while语句

二、分支结构

1、字符型数据的输入和输出:
1)定义时:
类型名为char
例如:char op (其中op的值为字符型数据)
2)输入输出:scanf( )、getchar( )、printf( )、putchar( )
其中getchar( )和putchar( )一次只能输入输出一个字符,所以一般在需要输入或输出多个字符的时候,一般用循环结构或使用scanf( )和printf( )
getchar( )的使用:ch = getchar( );
putchar( )的使用:putchar(输出参数);
!!!一般情况下,需要用getchar( )形式对第一个输入的换行符字符进行舍弃(清除缓冲区)!!!


2、switch语句:
switch语句可以处理多分支选择问题,根据break语句的使用方法,分为三种情况:
1)在switch语句的每个语句段都使用break语句(主要使用方法):
一般形式为:
switch(表达式){
    case 常量表达式1: 语句段1;break;
    case 常量表达式2: 语句段2;break;
    ……
    case 常量表达式n: 语句段n;break;
    default:                语句段n+1;break;
}
在其中,表达式和常量表达式的值一般是整型或字符型,所有的常量表达式的值都不能相等。
每个语句段可以包括一条或多条语句,也可以是空语句。
2)在switch语句中不使用break语句:
switch(表达式){
    case 常量表达式1: 语句段1;
    case 常量表达式2: 语句段2;
    ……
    case 常量表达式n: 语句段n;
    default:                语句段n+1;
}
在求解表达式后,如果表达式的值与某个常量表达式的值相等,则执行该常量表达式后的所有语句段;
如果表达式的值与任何一个常量表达式的值都不相等,则执行default后的所有语句段。
3)在switch语句的某些语句段中使用break语句。

例1:查询自动售货机中商品的价格。假设自动售货机出售4种商品:薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和
可乐(cola),售价分别是每份3.0、2.5、4.0和3.5。在屏幕上显示以下菜单(编号和选项),用户可以连续查询商品的价格,当查询
次数超过5次时,自动退出查询;不到5次时,用户可以连续查询商品的价格。当用户输入编号1-4,显示对应商品的价格(保留一位小数);
输入0,退出查询;输入其他编号,显示价格为0。要求使用switch语句编写。
【1】Select crisps
【2】Select popcorn
【3】Select chocolate
【4】Select cola
【0】Exit

代码如下:

#include <stdio.h>
int main(void)
{
	int i,num;
	printf("[1] Select crisps\n");
	printf("[2] Select popcorn\n");
	printf("[3] Select chocolate\n");
	printf("[4] Select cola\n");
	printf("[0] Exit\n");
	for(i = 1;i <= 5;i++){
		printf("Enter choice:");
		scanf("%d",&num);
		if(num == 0){
			break;
		}
		switch(num){
			case 1:printf("The price is 3.0\n");break;
			case 2:printf("The price is 2.5\n");break;
			case 3:printf("The price is 4.0\n");break;
			case 4:printf("The price is 3.5\n");break;
			default:printf("The price is 0\n");break; 
		}
	}
	printf("Thanks\n");
	
	return 0;
}

执行结果如下:

 


例2:两个数的简单计算器。编写一个简单的计算器程序,可根据输入的运算符,对两个整数进行加、减、
乘、除和求余运算,请对除数为0的情况作特别处理。要求使用switch语句编写。

#include <stdio.h>
int main(void)
{
	int x1,x2;
	char op;
	printf("Type in an expression:");
	scanf("%d %c %d",&x1,&op,&x2);
	switch(op){
		case '+': printf("%d + %d = %d",x1,x2,x1+x2);break;
		case '-': printf("%d - %d = %d",x1,x2,x1-x2);break;
		case '*': printf("%d * %d = %d",x1,x2,x1*x2);break;
		case '/': 
			if(x2 == 0){
				printf("Divisor can not be 0!\n");
			}else{
				printf("%d / %d = %d",x1,x2,x1/x2);
			}
			break;
		case '%': 
			if(x2 == 0){
				printf("Divisor can not be 0!\n");
			}else{
				printf("%d % %d = %d",x1,x2,x1%x2);
			}
			break;
		default: printf("Unknown operator\n");break;
	}
	return 0;
}

执行结果如下:

 


例3:输入一个正整数n,再输入n个字符,分别统计出其中的空格或回车、数字字符和其他字符的个数。要
求用switch语句编写。

#include <stdio.h>
int main(void)
{
	int n,i,blank = 0,digit = 0,other = 0;
	char op;
	scanf("%d",&n);
	getchar(); //记得舍弃换行符 
	for(i = 1;i <= n;i++){
		scanf("%c",&op);
		switch(op){
			case ' ':
			case '\n':
				blank++;
				break;
			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				digit++;
				break;
			default:
				other++;
				break;
		}
	}
	printf("blank=%d,digit=%d,other=%d\n",blank,digit,other);
	return 0;
}

执行结果如下:

 

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值