该系列文章内容可能来源我本人或者zhrmoe(他的主页:https://zhr.moe)的编写。文章如果有错误欢迎批评指正,谢谢!转载请注明来自本站,另外,本系列教程中的代码建议初学者自己手打一遍,不要直接复制(由于某些奇怪的原因可能会导致你复制的代码出现错误!相信自己的双手吧=-=
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
//逻辑表达式以及判断语句(第一种分支结构) //在C语言中,逻辑表达式主要表达逻辑关系 //相等,不等,大于,小于之类的 #include <stdio.h> int main() { /* 比如下面这些都是C语言中的逻辑表达式 C语言中的逻辑值用数字来代表, 0代表假,非0都代表真(通常用1) 请尝试计算以下逻辑表达式的计算结果(这个结果叫做真值) 1 == 1 1 == 2 1 != 2 3 < 4 3 > 4 3 <= 4 3 >= 4 2 <= 1 <= 3 你可以用下面的代码来验证你的结果 如果发现不一样,请思考为什么 */ printf("1 == 1 -> %d\n", 1 == 1); printf("1 == 2 -> %d\n", 1 == 2); printf("1 != 2 -> %d\n", 1 != 2); printf("3 < 4 -> %d\n", 3 < 4); printf("3 > 4 -> %d\n", 3 > 4); printf("3 <= 4 -> %d\n", 3 <= 4); printf("3 >= 4 -> %d\n", 3 >= 4); printf("2 <= 1 <= 3 -> %d\n", 2 <= 1 <= 3); system("pause"); return 0; } //把上面的这些简单逻辑表达式组合就可以组合出复合逻辑表达式 //两个简单表达式之间用这这两种符号进行连接 与&& 或|| //与运算结果为真当且仅当两个表达式同时为真 //或运算结果为真当且仅当两个表达式至少一个为真 // 另外,还有一个非运算:! 效果是取反,例如 //!1 == 0 //!0 == 1 //有了逻辑表达式我们就可以进行一些简单的判断了 //基本语法是这样的 /* if (逻辑表达式) { 语句1; 语句2; 语句3; } else { 语句4; 语句5; 语句6; } */ //如果括号中的逻辑表达式真值为真 //那么将执行依次执行语句123,否则执行456 //阅读下面的2段代码,预测输出结果,并验证你的猜想是否正确 //如果不一样,请思考原因 //第一段 /* int x = 1; if (x = 2) { printf("hello1"); } else { printf("hello2"); } */ //第二段 /* int x = -1; if (x > 0); printf("x > 0"); */ //另外,if还有偷懒的写法 //比如 /* if (1 < 5) printf("1"); else printf("2"); */ //这样使用有一个条件, //就是只有if后面只有一条语句的情况下才可以 //也就是说当你不写大括号的时候只会执行一条语句 //下面的代码格式是不建议使用的 //因为你无法清晰的知道逻辑的层次结构 /* if (1 < 5) if (2 >= 1) printf("1"); else printf("2"); */ //如果你不写大括号,那么else会与和它最近的一个if组合在一起 //另外,如果有多个if else的逻辑结构是这样的 /* if (逻辑表达式1) { 语句块1; } else { if (逻辑表达式2) { 语句块2; } else { 语句块3; } } */ //那么就可以简写成这样 /* if (逻辑表达式1) { 语句块1; } else if (逻辑表达式2) { 语句块2; } else { 语句块3; } */ //这称为if else的级联 /* 练习题:时间的转换 要求: 输入一个24小时制的时间,转换为12小时进制输出 输入格式: 两个数字,冒号隔开,第一个数字不会大于23 第二个数字不会大于59 输出格式: 如果是上午,输出时间加AM 如果是下午,输出时间加PM 规定中午12点整是下午 示例输入: 13:00 示例输出: 1:00 PM 答案在最后 */ /*/ 总结 1.注意数学表达式和 C语言表达式的区别, 尤其是“==”和“=”的区别。不要少打或多打等号。 2.连续不等式的表示问题0<=x<=10在C语言中应表达为 0 <= x && x <= 10, 不要想当然沿用数学的习惯写法 3.复杂逻辑表达式的运算问题,计算机会按照优先级从高 到底依次运算,逐层运算后输出结果,除了逻辑非都是双目 运算,电脑只会根据运算优先级从左往右运算。 4.注意if语句简写带来的逻辑歧义问题,细节决定成败,有 时候只差一个分号。当没有大括号并且满足条件时,if和else 执行到它后面第条语句为止 逻辑的基础:与&& 或|| 非! 与运算要求两个表达式同时 为真,或运算要求两个表达式至少一个是真的,非运算是取反 。在C语言中,非零的值都被认为真 if的语句除非必要,否则不要轻易省略大括号 //*/ //答案 /* int hour, minute; scanf("%d:%d", &hour, &minute); if (hour >= 12) { printf("%d:%02d PM", hour - 12, minute); } else { printf("%d:%02d AM", hour, minute); } */ |
课后习题:HDOJ 2001 2003
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2001
http://acm.hdu.edu.cn/showproblem.php?pid=2003
2 Comments
if语句的本质是判断逻辑值,为1则… 为0则…
int a = 0;
int i = 1;
if(i = a) printf(“1\n”);
else printf(“2\n”);
则会输出’2’。
总之,if()语句判断的是这个表达式逻辑值是否为0;是,则else,否则执行第一条。
逻辑表达式写错了,应该是== 不是=