前言

在本节课中,根据书上我们了关于条件判断语句if()的用法,if语句我们之前已经提前写过了,就不再写了,详情请见:

【C语言学习之路】第二节课——C 基本语法

根据书本介绍,我们这一期就讲getchar()、putchar()、ctype.h类型的字符函数、逻辑运算符(与或非)、条件运算符(?:)。


字符输入输出

到目前为止, 学过的大多数程序示例都要求输入数值,我们已经知道了用scanf()和printf()根据%c转换说明读写字符,那我们继续看其他的对字符输入/输出函数: getchar() 和putchar()。

getchar()函数不带任何参数, 它从输入队列中返回下一个字符。例如, 下面的语句读取下一个字符
输入, 并把该字符的值赋给变量ch:

ch = getchar();

该语句与下面的语句效果相同:

scanf("%c", &ch);

而putchar()函数打印它的参数。例如, 下面的语句把之前赋给ch的值作为字符打印出来:

putchar (ch) ;

该语句与下面的语句效果相同:

printf("%c", ch);

 由于这些函数只处理字符, 所以它们比更通用的scanf()和printf()函数更快、更简洁。而且, 注意getchar()和putchar()不需要转换说明, 因为它们只处理字符。它们被定义在stdio.h里。

值得注意的是,字符实际上是作为整数ASCII码值进行存储的,所以其实我们可以这么写:

char ch;
ch=getchar();
putchar(ch+1);

当我们输入a时,输出即为b。因为字符是以ASCII码值储存的,ch+1相当于ch的ASCII码+1,a的下一位就是b,putchar只能输出字符,所以输出是b。


ctype.h系列的字符函数

C中有一系列专门处理字符的函数, ctype.h 头文件包含了这些函数的原型。

例如下表:

我们可以用这些函数来便捷的判断特殊的符号。


多重选择

现实生活中我们经常有多种选择。 在程序中也可以用 else if 扩展 if else 结构模拟这种情况。 

我们有两种情况,这两种是等价的:

例如:

if(st1)
    case1;
    else if(st2)
           case2;
           else if()...

这是一种阶梯样的,还有一种是并排样的。

if(st1)
  case1;
else if(st2)
  case2;
else if()...

 只是写法不同而已,实际并无区别。


逻辑运算符

if 语句和 while 语句通常使用关系表达式作为测试条件, 有时, 把多个关系表达式组合起来会很有用。

常见的逻辑运算符有:

若调用iso646.h头文件下,我们可以直接用英文代表这些符号,即:

而在优先级方面:!运算符的优先级很高, 比乘法运算符还高,与递增运算符的优先级相同, 只比圆括号的优先级低。&& 运算符的优先级比II运算符高,但是两者的优先级都比关系运算符低,比赋值运算符高。 


条件运算符(?:)

C提供条件表达式(conditional expression) 作为表达if else 语句的一种便捷方式, 该表达式使用?:条件运算符。该运算符分为两部分,需要3个运算对象。带一个运算对象的运算符称为一元运算符, 带两个运算对象的运算符称为二元运算符。以此类推, 带3个运算对象的运算符称为三元运算符。条件运算符是C语言中唯一的三元运算符

例如:

x = (y < 0) ? -y : y;

在=和;之间的内容就是条件表达式, 该语句的意思是“ 如果y小于0, 那么x=-y;否则x=y,
用if else 可以这样表达:

if (y < 0)
    x = -y;
else
    x = y;

故:条件表达式的通用形式如下:

expression1? expression2 : expression3

如果expression1 为真(非0), 那么整个条件表达式的值与expression2 的值相同; 如果expression1 为假(O), 那么整个条件表达式的值与expression3 的值相同。

小结:


后记

看了下其他学校,我们上得还真是慢啊,不过这也有利于我们全面的吸收知识吧,这本书讲得还是挺透彻的。

这里的一切都有始有终,却能容纳所有的不期而遇和久别重逢。
最后更新于 2024-01-14