C基础系列教程2——逻辑表达式和判断语句

该系列文章内容可能来源我本人或者zhrmoe(他的主页:http://zhrmoe.iflab.org/)的编写。文章如果有错误欢迎批评指正,谢谢!转载请注明来自本站,另外,本系列教程中的代码建议初学者自己手打一遍,不要直接复制(由于某些奇怪的原因可能会导致你复制的代码出现错误!相信自己的双手吧=-=

//逻辑表达式以及判断语句(第一种分支结构)

//在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 = 1