例题 | 顺序结构的实践
输入一个三位整数,求各位、十位、百位相加之和
解析
算法的设计
- scanf函数的应用
- 算术运算符的应用(/、%)
- printf函数的应用
答案
#include<stdio.h>
int main()
{
int a,b,c,d,s;
scanf("%d",&a);
b = a/100;
c = a/10%10;
d = a%10;
s = b+c+d;
printf("%d",s);
return 0;
}
更标准的写法如下,对照参考
计算C语言表达式
关系运算符
关系运算、关系运算符
在程序中经常需要比较两个量的大小关系(关系运算),以决定程序下一步的工作。
比较两个量的运算符称为关系运算符。
6种关系运算符
<(小于) a<b a小于b时返回真;否则返回假
<=(小于等于) a<=b a小于等于b时返回真;否则返回假
(大于) a>b 2a大于b时返回真;否则返回假
>=(大于等于) a>=b a大于等于b时返回真;否则返回假
==(等于) a==b a等丁b时返回真:否则返回假
L=(不等于) al=b a不等于b时返回真;否则返回假
关系表达式
什么是关系表达式
用关系运算符将两个运算对象连接起来的式子称为关系表达式:运算对象可以是常量、变量、表达式。
如:3>2 x==y a%b!=0 a+b>c
各运算符的优先级(从高到低的顺序)
算术运算符:加、减、乘、除、加加、减减
关系运算符:本节课的 ≥ 这些
赋值运算符:=、+=、-=
关系表达式的值是一个逻辑值,即“真”或“假”。“真”用“1”表示,“假”用“0”表示.
例:
int a = 5,b = 3,c = 0;
a>b => 真(1)
a == c => 假(0)
例题
计算下列表达式的值:(优先级、结合性)
定义:int a = 2,b = 3,c = 1;
求:
c > a + b => ? c > (a + b)
a > b != c => ? (a > b) != c
a == b < c => ? a == (b < c)
a = b > c => ? a = (b > c)
c = a == b => ? c = (a == b)
f = a > b > c => ? f = (a > b > c)
逻辑运算符
含义
逻辑运算符的左右结合性
| 1 / x + 1 / a 当x≠0,a≠0时
y = | x != 0 && a != 0
| 10000 其他
分类
三种逻辑运算符
! (逻辑非) 操作位真(假),!运算结果为假(真)。(单目运算符,取反计算)
&& (逻辑与) 两个操作数都为真时,&&运算结果为真。
|| (逻辑或) 两个操作数之一为真时,||运算结果为真。
逻辑表达式
含义
用逻辑运算符将关系表达式或逻辑量连接起来的表达式。
a < b && b < c a < b || b < c ! (a < b)
优先级
逻辑表达式的重点
计算
逻辑表达式的求解中,并不是所有的逻辑运算符都被执行。
例:int m=1,n=1,a=1,b=2,c=3,d=4;
执行(m=a>b)&&(n=c>d)后,n的值?
构造
用C语言构送下面逻辑表达式:
- a ≥ b ≥ c
a >= b >= c
a >= b && b >= c - a和b之一为0,但不同时为0
a == 0 && b != 0 || a != 0 && b == 0;
a * b == 0 && a + b != 0
if语句的格式一
if(表达式) //表达式 相当于 条件
{
执行语句 1 ......
}
表达式的值只能是0或非0,若表达式的值为0,按“假”处理,若表达式的值为非0,按“真”处理,执行{}中的语句。
if语句格式一的应用
分析程序:
int main()
{
int a,b,max;
printf("\n input two numbers.");
scanf("%d%d",&a,&b);//输入a和b两个数字
max=a;
if (max<b);
{
max=b;
}
printf("max=%d",max);
return 0;
}
练习
编写一个简单程序,输入你的分数,如果分数大于90分,则输出“verygood!"。
if语句的格式二
if(表达式)
{
执行语句1 .......
}
else
{
执行语句2 ......
}
if语句格式二的应用
int main()
{
int a, b;
printf("input two numbers: ");
scanf("%d%d",&a,&b);
if(a>b) //没有逗号
{
printf("max=%d\n",a);
}
else //没有逗号,没有条件
{
printf("max=%d\n",b);
}
return 0;
}
练习
根据下列公式编写程序实现输入x和a的值,输出y的值。
答案
if语句的格式三
if(表达式1)
{
语句1
}
else if(表达式2) //else if:否则另一个
{
语句2
}
else if(表达式3)
{
语句3
}...
else if(表达式m)
{
语句m
}
else
{
语句n
}
if语句的嵌套
if语句可以嵌套,即一个i语句中又可以包含一个或多个i语句。一般
形式(形式之一):
if(表达式1)
{
if(表达式2)
{
语句1
}
else
{
语句2
}
}
else
{
if(表达式3)语句3
else 语句4
}
缺省花括号的情况下,else总是与最邻近的if配对。要注意if、else的层级关系,可提高程序可读性,但改变不了配对属性。
例题
输入:输入游览月份存储到变量month中,输入游客年龄存储到变量age中,景点门票单价存储到变量price中。输出:游客应付门票金额money
判断条件:先判断是淡季还是旺季,再在淡季或旺季条件内判断游客年龄
处理:根据淡季或旺季、游客年龄计算票价并输出
参数:我们设定老人0元,儿童半价,设票价200。旺季4-10月,淡季:11-3月。老年人:70以上(不包括70)。儿童:15以下(不包括15)
处理过程
答案
也可以只在结尾输出一个printf,中间的几个可以省略
Switch语句
switch语句的格式
switch语句的格式(多分支)
在switch语句中使用break语句:
break语句也称间断语句。可以在各个case之后的语句最后加break语句,每当执行到break语句时,立即跳出switch语句体。switch语句通常总是和break语句联合使用,使得switch语句真正起到多个分支的作用。
适用于根据一个表达式的值就可以确定走哪个分支的情况
switch(表达式)
{
case 目标值1:
执行语句1
break;
case 目标值2:
执行语句2
break;
......
case 目标值n:
执行语句n
break;
default:
执行语句n+1
break;
}
有break时,执行完跳出switch,没有时,继续执行下一个case,直到遇到break ↓
switch语句的应用
int main()
{
int score;
printf("\n input your score: ");
scanf("%d",&score);
switch(score/10)
{
case 10: printf("A");break;
case 9: printf("B");break;
case 8: printf("c”);break;
case 7: printf("D");break;
case 6: printf("E");break;
default: printf("F”);
}
return 0;
}