逻辑运算符
逻辑运算符 | 含义 |
&& | 与 |
|| | 或 |
! | 非 |
expe1和expe2是两个简单的关系表达式(如car>rat或debt==1000),那么:
- 当且仅当expe1和expe2都为真时,exp1 && exp2才为真;
- 如果exp1或exp2为真,则exp1||exp2为真;
- 如果exp1为假,则!expe1为真;如果exp1为真,则!exp1为假
备选拼写:iso646.h
C99标准新增了可代替逻辑运算符的拼写,他们被定义在ios646.h头文件中。如果在程序中含有该头文件,便可用and代替&&,or代替||,not代替!
优先级:运算级别由高到低 括号 ( !与递增运算符同级)乘法运算符;关系运算符 && || 赋值运算符;例如
a>b&&b>c||b>d相当于((a>b)&&(b>c))||(b>d)。
一个统计单词的程序
//wordcnt.c--统计字符数、单词、行数
#include <stdio.h>
#include<ctype.h> //为isspace()函数提供原型
#include <stdbool.h> //为bool ture false提供定义
#define STOP'|'
int main(void)
{
char c; //读入字符
char prev; //读入的前一个字符
long n_chars = 0L; //字符数
int n_lines = 0; //行数
int n_words = 0; //单词数
int p_lines = 0; //不完整的行数
bool inword = false; //如果c在单词中,inword等于ture
printf("enter text to be analyzed(| to terminate):\n");
prev = '\n'; //用于识别完整的行
while ((c = getchar()) != STOP)
{
n_chars++; //统计字符
if (!isspace(c) && !inword)
{
inword = true; //开始一个新的单词
n_words++; //统计单词
}
if (isspace(c) && inword)
inword = false; //达到单词的末尾
prev = c;//保存字符的值
}
if (prev != '\n')
p_lines = 1;
printf("characters=%1d,words=%d,lines=%d",
n_chars, n_words, n_lines);
printf("partial lines=%d\n", p_lines);
return 0;
}
如果c不是空白字符,且inword 为假,翻译成代码为:if(! isspace(c) &&inword)
!inwordsyu inword==false等价
条件运算符:?:
C提供条件表达式(conditional expression )作为表达 if else语句的一种便捷方式,该表达氏使用?:条件运算符。该运算符分为两部分,需要3个运算对象。带一个对象的运算符为一元运算符,带两个运算对象的为二元运算符,带三个对象的运算符为三元运算符。
x=(y<0)? -y:y;在=和;之间的内容就是条件表达式氏,该语句的意思是“如果y小于0,那么x=-y;否则x=y。
用if else表达为
if(y<0)
x=-y;
else
x=y;
条件表达式通用如下
expression1 ? expression2;expression3
程序跳转: break continue goto
这三种语句都能使程序流从一处跳转至另一处。
continue:3中循环都可以使用continue ,执行该语句时会跳过本次迭代的剩余部分,并开始下一轮的迭代。如果continue语句在嵌套循环内,则只影响包含该语句的内层循环。除了switch语句,其他的循环都可以使用continue语句。continue语句使程序控制跳出循环的剩余部分,对于while或for循环,程序执行到continue语句后开始进入下一轮的迭代。
break:程序执行到break语句是,会终止包含他的循环,并继续执行下一个阶段。所有的循环和switch语句都可以使用break语句,他使程序跳出当前循环或switch语句的剩余部分,并继续执行跟在后面的额switch语句。
关键概念:智能