C语⾔学习——if、swich、while和for的⽤法
C语⾔学习——if、swich、while和for的⽤法
顺序结构程序不能满⾜实际问题的要求。有时需要在满⾜某⼀条件的情况下才去执⾏⼀些语句,如果条件不满⾜的时候,程序会执⾏另⼀些语句;有时会在满⾜某⼀条件的情况下反复执⾏⼀些语句。C 语⾔提供了if~else 语句实现条件选择结构,switch~case 语句实现等值选择结构,while、do~while 和for语句实现重复执⾏循环体。
⼀、if语句
1、if~else 结构
语法:
if~else 结构的执⾏过程: ⾸先要对给定的条件表达式进⾏计算,如果计算结果是 1,则执⾏语句 1,语句 1 通常被称为 if分⽀(真分⽀) ;否则执⾏语句2,语句2 通常被称为 else 分⽀(假分⽀)。
其中,条件表达式既可以是逻辑表达式、关系表达式,也可以是任何合法的 C 语⾔表达式。
/* Description: 输⼊⼀个五位正整数, 要求顺序打印出各位数字。 */
#include <stdio.h>
void main(void)
{
int num;
int a, b, c, d, e;
printf("Input a integer number (10000-99999):");
scanf("%d",&num);
if( num >99999|| num <10000)
printf("Error input!\n");
else
{
e = num %10;  num /=10;
d = num %10;  num /=10;
c = num %10;  num /=10;
b = num %10;  num /=10;
a = num;
printf("Each digit is %2d%2d%2d%2d%2d\n",a, b, c, d, e);
}
}
/* Description: 从键盘输⼊⼀个年份, 要求判断出它是否是平年 */
#include <stdio.h>
void main(void)
{
int year;
printf("请输⼊⼀个年份:");
scanf("%d",&year );
if((( year %100!=0)&&( year %4!=0))||
(( year %100==0)&&( year %400!=0)))
printf("%d 年是平年。\n", year );
else
printf("%d 年是闰年。\n", year );
}
判断闰年:年份能被4整除但不能被100整除;或者能被400整除。
((year %100!=0)&&(year%4==0))||(year%400==0)
或者:
((year %100!=0)&&(!(year%4))||(!(year%400))
判断平年:年份不能被4整除;或者能被100整除但不能被400整除。
(year%4!=0)||(( year%100==0)&&( year%400!=0))
或者
(year%4)||!( year%100)&&(year%400)
2、if嵌套
语法:
if(条件表达式1)
if(条件表达式2)
语句1;
else
语句2;
else
if(条件表达式3)
语句3;
else
语句4;
C 语⾔规定:else 总是与它前⾯最近的且⽆ else 配对的 if 配对。
例如:⽤ C 语⾔的选择结构实现符号函数 sign(x):从键盘输⼊⼀个浮点数 x,要求输出它的符号。 sign(x)是⼀个分段函数:
#include <stdio.h>
void main(void)
{
double x;
short sign;
printf("Input x:");
scanf("%lf",&x);
if( x>=0)
if( x>0)
sign =1;
else
sign =0;
else
sign =-1;
printf("sign(%lf)=%d\n", x, sign);
}
例如:⽤ else 分⽀嵌套 if-else 结构实现下述功能,从键盘输⼊⼀个⼀元⼆次⽅程ax2+bx+c=0的三个系数a、b、c,要求计算并打印出⽅程的实数根:
#include <stdio.h>
#include <math.h>  //需要调⽤到sqrt( )函数
void main(void)
{
double a, b, c, deta, deta2, root1, root2;
printf("请输⼊⼀元⼆次⽅程的三个系数a, b, c:");
scanf("%lf,%lf,%lf",&a,&b,&c );
deta = b*b-4*a*c;
if(deta<0)
printf("⽅程没有实数根。\n");
else if(deta==0)
printf("⽅程有两个相等的根: %lf\n",-b/2/a );
else
{
deta2 =sqrt( deta );
root1 =(- b + deta2 )/2/ a;
root2 =(- b - deta2 )/2/ a;
printf("Root1= %lf Root2=%lf\n", root1, root2 );
}
}
⼆、switch~case 结构
语法:
switch(整型表达式)
{
case常量表达式1:
[语句组1;
[break;]]
case常量表达式2:
[语句组2;
[break;]]
case常量表达式 n:
[语句组 n;
[break;]]
default:
[语句组 n;]
}
switch~case 结构的执⾏过程:
计算整型数值表达式的值,并逐个与其后的各常量表达式的值进⾏⽐较,当表达式的值与某个常量表
达式的值相等时,先执⾏其后的语句组,若该 case 分⽀最后有 break 语句,则中⽌ switch~case 结构,转到switch~case 结构后的程序顺序执⾏;
若该case 分⽀没有break语句,则继续执⾏下⼀个case 分⽀。若整型数值表达式的值与所有case 后的常量表达式的值均不相等,则执⾏default分⽀。
其中各常量表达式的值必须是整型,字符型或者枚举类型。
各语句组允许有多条语句,不需要加“{}” 。若语句组 i为空,该case 分⽀⼜没有break 语句,则直接执⾏下⼀个case 分⽀。
例如:⽤ switch~case 结构编写⼀个能进⾏四则运算的计算器程序:⽤户输⼊运算数和四则运算符,程序计算并输出结果:
#include <stdio.h>
void main(void)
{
float a, b;char op;
printf("请输⼊⼀个四则运算表达式(eg:1.5/2.5):");
scanf("%f%c%f",&a,&op,&b );
switch(op)
{
case'+':
printf("%f + %f =%f\n", a, b, a + b);break;
case'-':
printf("%f - %f =%f\n", a, b, a - b);break;
case'*':
printf("%f * %f =%f\n", a, b, a * b);break;
case'/':
switch函数用法举例
if(b)//相当于if(b!=0)
printf("%f / %f =%f\n", a, b, a / b);
else
printf("除数不能为0\n");break;
default:
printf("错误的运算符!\n");
}
}
例如:⽤ switch~case 结构编程实现输⼊⼀个百分制成绩,将其转换成五级记分制成绩并输出结果。具体转换标准为:100~90 分→等级A,80~89 分→等级B,70~79 分→等级C,60~69 分→等级D,60 分以下→等级E。
#include <stdio.h>
void main(void)
{
int score;
printf("请输⼊⼀个百分制成绩:");
scanf("%d",&score );
switch(score /10)
{
case10:
case9:
printf("A\n");
break;
case8:
printf("B\n");
break;
case7:
printf("C\n");
break;
case6:
printf("D\n");
break;
case5:
case4:
case3:
case2:
case1:
case0:
printf("E\n");
break;
default:
printf("输⼊的成绩错误!\n");
}
}
三、while语句
while 语句先判断给定的条件是否成⽴,在条件成⽴的前提下重复执⾏循环体,所以被称为“当型”循环控制语句。
while 语句的⼀般形式为:
while(条件表达式)
语句;
其中被称为循环体的语句部分是⼀条语句。如果需要在循环体内执⾏多条
语句,可使⽤复合语句:
while(条件表达式)
{
语句;
}
while 语句的执⾏过程: 先计算while 后⾯的条件表达式,如果其值为真,则执⾏⼀次循环体;再次计算 while 后⾯的条件表达式,如果其值仍然为真,则再执⾏⼀次循环体;如此反复,直到while 后⾯的条件表达式的值为假,结束while 语句,程序开始顺序执⾏循环结构后⾯的语句。
while 语句的特点是: 先判断,后执⾏,若⼀开始条件表达式就不成⽴,则循环体⼀次也不执⾏。
【例 】 ⽤while 循环结构编程求 1+2+…+100 的和。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。