第四章总结

4.1引例
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
float area;
double s;
printf(“输入三角形的边长:”);
scanf("%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);
}
return 0;
}在这里插入图片描述在这里插入图片描述#include<stdio.h>
int main(){ int x; float y; printf(“输入x的值:”); scanf("%d",&x); if(x!=0) { y=1.0/x; } else{y=0; } printf("%d,%f",x,y); return 0;}在这里插入图片描述在这里插入图片描述
4.2关系运算符,逻辑运算符,条件运算符

在这里插入图片描述

  1. 关系运算符都是双目运算符,其结合方向是左结合
  2. 关系运算符的优先级低于算数运算符,但是高于赋值运算符
  3. 关系运算符中,>,<,<=,>=的优先级相同,==,!=的优先级相同,前者的优先级高于后者,即>=的优先级高于==。
    关系表达式
    用关系运算符将两个表达式连接起来的式子称为关系表达式。关系表达式的一般形式为:表达式1关系运算符表达式2
    功能:比较两个表达式的大小,返回一个逻辑值。
    关系表达式中允许出现嵌套的情况,例如:a>(b>c),a!=(c==d)等
    注意区分运算符=和==。=是赋值运算符,==是关系运算符。
    对实数进行相等判断可能得不到正确的结果。
    关系表达式中可以出现赋值运算符,如a>(b=0),但不能写成a>b=0的形式。因为关系运算符的优先级高于赋值运算符。
    关系表达式主要用于分支结构中的条件判断。关系表达式的结果是一个逻辑值真或假,由于c语言中没有逻辑类型的数据,因此用1表示真,0表示假。
    在这里插入图片描述
    #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;}
    在这里插入图片描述

逻辑运算符和逻辑表达式
在这里插入图片描述
注意:与运算符&&和或运算符‖都是双目运算符,非运算符!为单目运算符。
逻辑表达式
用逻辑运算符将两个表达式连接起来的式子称为逻辑表达式。逻辑表达式为:表达式1逻辑运算符表达式2逻辑运算符表达式1。在这里插入图片描述(1)参与逻辑运算的数据可以是1和0,也可以是非零值和0,还可以是任何类型的数据,但最终都是以非0和0来判断他们是“真”或“假”。
(2)在逻辑表达式中也可以使用赋值运算符,如“a&&(b=0)”,但是不能写成“a&&b=0”的形式。因为逻辑运算符的优先级高于赋值运算符,表达式“a&&b=0”相当于“(a&&b)=0”,赋值运算符左边不是变量,会出现编译错误。(3)C语言规定,只对决定整个表达式值所需的最少数目的子表达式进行运算。即在由若干个子表达式组成的逻辑表达式中,从左向右计算,当计算出一个子表达式的值就确定了整个逻辑表达式的值时,此后就不再计算右边剩下的子表达式的值,这种情况称为“短路”。
1对于逻辑与(&&)运算,若“&&.”左边的表达式的值为假,则可以得出整个表达式的值为假,那么“&&”右边的表达式将不再进行计算;只有当“&&”左边的表达式值为真时才计算右边表达式的值。
2对于逻辑或(|1)运算,若“‖”左边的表达式的值为真,则可以得出整个表达式的值为真,那么“|1”右边的表达式将不再进行计算;只有当“1|”左边的表达式值为假时才计算右边的表达式。在这里插入图片描述]#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;}在这里插入图片描述
使用if-else实现分支结构
双分支if语句其形式一般如下:
if(表达式)
语句1;
else
语句2;
在这里插入图片描述#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;}在这里插入图片描述在这里插入图片描述在这里插入图片描述#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;在这里插入图片描述
单分支if语句其一般形式如下:
if(表达式)
语句;
在这里插入图片描述#include<stdio.h>
int main(){ float x; scanf_s("%f", &x); if (x < 0) x = -x; printf("%f", x); return 0;}在这里插入图片描述在这里插入图片描述#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;}在这里插入图片描述在这里插入图片描述#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;}在这里插入图片描述
在这里插入图片描述#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;}在这里插入图片描述
多分支语句
多分支语句是最常用的实现多路分支的方法,其一般形式如下:
if(表达式1)
语句1;
else if(表达式2)
语句2;

else if(表达式n-1)
语句n-1;
else
语句n;在这里插入图片描述#include<stdio.h>
#include<math.h>int main(){ 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;}在这里插入图片描述#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;}
使用switch语句实现分支结构
在c语言中还提供了一种switch语句也可以实现多分支的选择。switch语句的一般形式如下:
switch(表达式)
{case常量表达式1:语句1;break;
case常量表达式2:语句2;break;

case常量表达式n:语句n;break;
default:语句n+1;break;

关于switch语句的几点说明:
(1)switch后的表达式可以是任何表达式,共值只能为整型,字符型、枚举型之一
()2)每个 case后面的常量表达式的值互不相同,否则就会出现互相矛盾的现象。
(3)各个case和default的出现次序不影响执行结果。
(4)可以让多个case共用一组执行语句
(5)switch语句允许嵌套使用
在这里插入图片描述#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”); } return 0;}在这里插入图片描述#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月的天数是%d天\n", year, month, days); return 0;}在这里插入图片描述#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;}在这里插入图片描述#include<stdio.h>
#include<math.h>int main() {float x, y;scanf_s("%f", &x);if (x >= 0)y = sqrt(x);elsey = pow(x, 5) + 2 * x + 1 / x;printf(“x=%.2f,y=%.2f\n”, x, y); return 0;}
在这里插入图片描述#include<stdio.h>
int main(){ int year, leap; printf(“输入年份:”); scanf_s("%d", &year); if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) leap = 1; else leap = 0; if (leap) printf("%d是闰年\n", year); else printf("%d不是闰年\n", year); return 0;}在这里插入图片描述#include<stdio.h>
int main(){ int year, leap; printf(“输入年份:”); scanf_s("%d", &year); if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) leap = 1; else leap = 0; } else leap = 1; } else leap = 0; if (leap) printf("%d是闰年\n", year); else printf("%d不是闰年\n", year); return 0;}在这里插入图片描述#include<stdio.h>
int main(){ int year, leap; printf(“输入年份:”); scanf_s("%d", &year); if (year % 4 != 0)leap = 0; else if (year % 100 != 0) leap = 1; else if (year % 400 != 0) leap = 0; else leap = 1; if (leap) printf("%d是闰年\n", year); else printf("%d不是闰年\n", year); return 0;}在这里插入图片描述#include<stdio.h>
int main(){ int n, a, b, c; printf(“输入一个三位整数:”); scanf_s("%d", &n); if (n < 100 || n>999) printf(“输入错误!\n”); else { a = n / 100; b = n / 10 % 10; c = n % 10; if (a < b && b < c) printf("%d是升序数\n", n); else printf("%d不是升序数\n", n); } return 0;}在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值