桓楠百科网

编程知识、经典语录与百科知识分享平台

C语言入门:表达式(2)_c语言表达式大全

我们介绍了算术表达式、赋值表达式、关系表达式、逻辑表达式。

现在介绍条件表达式和逗号表达式。

1、条件表达式

(1)语法格式:

表达式1 ? 表达式2 :表达式3

(2) 执行流程:

若表达式1的值为真,则返回表达式2,否则返回表达式3。

流程图如:

看起来有点不好理解,我用几个例子说明一下:

假设有定义int a, b, c;

而且有赋值:a=10;

那么下述表达式中,b的值为100:

b = ( a>0 ) ? 100 : 99 ;

上述表达式中a>0为真,所以b取问号后面那个值,即100。

下述表达式中,c的值为99:

c = ( a%2==1 ) ? 100 : 99 ;

上述表达式中a%2==1为假(a等于10是偶数,除以2的余数不是1),所以c取冒号后面那个值,即99。

程序1:

运行结果:

(3)条件表达式是if语句的简单写法

“表达式1 ? 表达式2 :表达式3”其实就是如下if语句:

if(表达式1)

表达式2;

else

表达式3;

如下if语句:

等价于:

同样,以下if语句:

等价于:

2、逗号表达式

(1)语法格式:

表达式1, 表达式2, ……, 表达式n

(2)执行流程:

先计算表达式1,然后计算表达式2,……,最后计算表达式n的值,并将表达式n的值作为逗号表达式的值。

例:

int a, b, c, n;

n = (a=2, b=3,c=a+b);

执行以后,a=2, b=3,c=5, n=5。

N取逗号表达式中最右边那个表达式的值。

(3)结合性:

逗号运算是左结合,从左算到右。

3、长度运算符 sizeof

sizeof是单目运算符,计算变量或数据类型的字节长度。

假设有定义:

int a;

则sizeof(a)是求整型变量 a 的长度,值为4,4个字节。

sizeof(int)则是求整型的长度,值为4字节。

sizeof(double)求双精度浮点型的长度,值为8字节。

4、算术运算、赋值运算、关系运算、逻辑运算、逗号表达式的优先级

在所有运算中逗号运算符的优先级最低。

一般来说,单目运算优先级最高,其次到算术运算,再到关系运算,再到逻辑运算,再到赋值运算,最后是逗号运算。

优先级:

最高:逻辑非(!)

第2: 算术运算符(单目运算优先于双目运算,双目运算中*、/由优先于+、-)

第3:关系运算符(其中优先于==、!=)

第4:逻辑与(&&)

第5:逻辑或(||)

第6:赋值运算符(=)

第7:逗号运算符

4、编程实例

我们来看一个例子:输入一串字符,以#结束,将其中的大写字母变成小写字母输出,小写字母变成大写字母输出,其他字符原样输出。

程序1:

运行结果:

程序1中输入字符用ch=getchar(),这句跟scannf(“%c”, &ch)是等价的。

输出字符用putchar(ch),这句跟printf(“%c”, ch)也是等价的。

再次强调:在程序中这些符号必须是英文状态。

所以程序1改成如下代码也是一样的。

程序2:

另外,去掉循环前那句输入字符和循环体内的输入字符,输入字符放在循环条件里,在修改while那行,将:

while( ch!=‘#’)

改为:

while( (ch=getchar( ) ) !=‘#’)

也得到一样的结果。

程序3:

程序1、2、3都是一样的。

我们以前讲过一次性输入一串字符,用scanf(“%s”,变量名)或者gets(变量名),但这个变量必须是字符数组变量而不是char型的变量,而且输入以回车结束。

用gets()输入字符串,回车时会自动在字符串末尾添加一个‘\0’作为字符串结束标志。

而我们的循环也可以这个结束标志作为循环结束条件。

所以这题也可以用字符数组编程。

程序4:

运行结果和程序1、2、3是一样的。

如果将程序4中的gets(ch)改成scanf(“%s”,ch)行不行呢?

程序5:

注意scanf(“%s”,ch),%s对应的变量名ch前面不要&。

另外,scanf(“%s”,ch)和gets(ch)不同的地方是什么还记得吗?

scanf(“%s”,ch)输入的字符串以空格结束,gets(ch)输入的字符串以回车结束。

程序5运行结果:

空格后面的输入字符被自动忽略了。

5、总结

今天讲了条件表达式、逗号表达式,还讲了长度运算符sizeof,给出各种运算的优先级,最后给出一个例子用各种方法输入字符串。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言