4.1引例
#include<stdio.h>
#include<math.h>
int main()
{
int a, b, c;
float area;
double s;
printf("请输入三角形的三条边长:");
scanf_s("%d,%d,%d", &a, &b, &c);
s = (a + b + c) / 2.0;
if (a + b <= c || b + c <= a || a + c <= b)
printf("不构成三角形\n");
else
{
area = sqrt(s * (s - a) * (s - b) * (s - c));
printf("三角形的面积是:%f\n", area);
}
}
流程图
例4.2
#include<stdio.h>
int main()
{
int x; float y;
printf("输入x的值:");
scanf_s("%d", &x);
if (x != 0)
y = 1.0 / x;
else
y = 0;
printf("%d,%f", x, y);
return 0;
}
流程图
4.2关系运算符、逻辑运算符、条件运算符
4.2.1关系运算符和关系表达式
1.关系运算符
注意:
(1)关系运算符都是双目运算符,其结合方向是左结合。
(2)关系运算符的优先级低于算术运算符,但是高于赋值运算符。
(3)关系运算符中,>、<、>=、<=、的优先级相同,==、!=的优先级相同,前者的优先级高于后者,即“>="的优先级高于”==“。
2.关系表达式
注意:
(1)区分运算符”=“和”==“。”=“是赋值运算符,”==“是关系运算符。
(2)关系表达式主要用于分支结构中的条件判断。因此用”1“表示”真“,”0“表示”假“。
表4.1 关系运算符
例4.3
#include<stdio.h>
int main()
{ char c='m';
int i=10,j=20,k=30;
float x=13e+5,y=10.85;
printf("%d,%d,",'a'+5<c,-i-2*j>=k+1);
printf("%d,%d,",1<j<5,x-5.25<=x+y);
printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);
return 0;
}
流程图
4.2.2 逻辑运算符和逻辑表达式
1.逻辑运算符
注意:与运算符&&或运算符||都是双目运算符,非运算符!为单目运算符。
2.逻辑表达式
用逻辑运算符将两个表达式连接起来的式子称为逻辑表达式。
例4.5
#include<stdio.h>
int main()
{
int a = 3, b = 3, c = 2, d;
printf("%d,", !a && !b && c);
printf("%d,", !a || !b || c);
printf("%d\n", a >= b && b > c);
d = c-- || (b = 6) && a++;
printf("a+%d,b=%d,c=%d,d=%d\n", a, b, c, d);
return 0;
}
流程图
4.2.3 条件运算符和条件表达式
1.条件运算符
2.条件表达式
例4.6
#include<stdio.h>
int main()
{
int x, y;
printf("请输入两个整数:");
scanf_s("%d,%d", &x, &y);
printf("两个整数中的最大数为:%d\n", x > y ? x : y);
return 0;
}
流程图
4.3 使用if-else实现分支结构
4.3.1 if-else语句
例4.7
#include<stdio.h>
int main()
{
int a, b;
printf("请输入两个整数:");
scanf_s("%d%d", &a, &b);
if (a > b)
printf("两个整数中的最大数为:%d\n", a);
else
printf("两个整数中的最大数为:%d\n", b);
return 0;
}
流程图
例4.8
#include<stdio.h>
#include<math.h>
int main()
{
double x, y;
printf("输入x的值:");
scanf_s("%lf", &x);
if (x <= 1)
y = exp(x);
else
y = pow(x, 2) - 1;
printf("f(%f)=%.2f\n", x, y);
return 0;
}
流程图
2.单分支if语句
例4. 9
#include<stdio.h>
int main()
{
float x;
scanf_s("%f", &x);
if (x < 0)
x = -x;
printf("%f", x);
return 0;
}
流程图
例4.10
#include<stdio.h>
int main()
{
int x, y;
printf("x=");
scanf_s("%d", &x);
if (x)
y = 1;
else
y = -1;
printf("y=%d", y);
return 0;
}
流程图
例4.11
#include<stdio.h>
int main()
{
float a, b, c, t;
scanf_s("%f,%f,%f", &a, &b, &c);
if (a > b)
{
t = a; a = b; b = t;
}
if (a > c)
{
t = a; a = c; c = t;
}
if (b > c)
{
t = b; b = c; c = t;
}
printf("%5.2f,%5.2f,%5.2f\n", a, b, c);
return 0;
}
流程图
4.3.2 if语句的嵌套
例4.12
#include<stdio.h>
int main()
{
int a, b, c, max;
scanf_s("%d%d%d", &a, &b, &c);
if (a > b)
if (a > c)
max = a;
else
max = c;
else
if (b > c)
max = b;
else
max = c;
printf("max=%d\n", max);
return 0;
}
流程图
例4.13
#include<stdio.h>
int main()
{
int x, y;
scanf_s("%d", &x);
if (x > 0)
y = 1;
else
if(x==0)
y = 0;
else
y = -1;
printf("y=%d\n", y);
return 0;
}
流程图
4.3.3多分支if语句
例4.14
int main()
{
#include<stdio.h>
#include<math.h>
float x, y;
printf("输入x的值:");
scanf_s("%f", &x);
if (x < 2)
y = 2 * x;
else if (x <= 10)
y = 7 - 3 * x;
else
y = 1 - cos(x);
printf("y=%0.6f\n", y);
return 0;
}
流程图
例4.15
#include<stdio.h>
int main()
{
char c1, c2;
printf("请输入一个字符:");
c1 = getchar();
if (c1 >= 'a' && c1 <= 'z')
c2 = c1 - 32;
else if (c1 >= 'A' && c1 <= 'Z')
c2 = c1 + 32;
else
c2 = c1 + 1;
putchar(c2);
return 0;
}
流程图
4.4 使用switch语句实现分支结构
例4.16
#include<stdio.h>
int main()
{
int month;
printf("输入月份:");
scanf_s("%d", &month);
switch ((month - 1 / 3))
{
case 0:
printf("%d月是第1季度\n", month);
break;
case 1:
printf("%d月是第2季度\n", month);
break;
case 2:
printf("%d月是第3季度\n", month);
break;
case 3:
printf("%d月是第4季度\n", month);
break;
default:
printf("输入错误\n");
break;
}
return 0;
}
流程图
例4.17
#include<stdio.h>
int main()
{
int year, month, days;
printf("请输入年,月:");
scanf_s("%d,%d", &year, &month);
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
days = 29;
else
days = 28;
break;
}
printf("%d月的天数是%d天\n", year, month, days);
return 0;
}
流程图
例4.18
#include<stdio.h>
#include<math.h>
int main()
{
int expression;
float x, y;
printf("输入x的值:");
scanf_s("%f", &x);
expression = (int)(1 * (x < 2) + 2 * (x >= 2 && x <= 10) + 3 * (x > 10));
switch (expression)
{
case 1:
y = 2 * x;
break;
case 2:
y = 7 - 3 * x;
break;
case 3:
y = 1 - cos(x);
break;
}
printf("y=%0.5f\n", y);
return 0;
}
流程图
3.在switch语句格式中不使用break语句