学习笔记之07-基本语句和运算

一、基本语句

C语言的基本语句跟Java中的差不多,所以,这里只是简单地提一下

  • 循环语句(do while、while、for)
  • 条件语句(if 、if-else、switch)
  • goto语句

二、基本运算

计算机的基本能力就是计算,所以一门语言的计算能力十分重要。C语言之所以无所不能,很大原因在于它有强大的计算能力。C语言一共有34种运算符,其中的大多数运算符跟在Java中的用法是一样的。下面做一个简单介绍。

1.算术运算符

  • +  加法运算符
  • -  减法运算符,或负值运算符
  • *  乘法运算符
  • /  除法运算符
  • %  模运算符,或称取余运算符,要求%两侧均为整型

2.关系运算符

  • <   小于运算符
  • <=  小于等于运算符
  • >   大于运算符
  • >=  大于等于运算符
  • ==  等于运算符
  • !=  不等于运算符

* 关系运算的结果成立就为"真"(比如5>=4),不成立则为"假"(比如5<4)

* 在Java中,关系运算的结果为"真"就返回true,"假"则返回false,用boolean类型的变量来接收

boolean b1 = 5 > 4; // true

boolean b2 = 5 < 4; // false

C语言中没有boolean类型

* 在C语言中,关系运算的结果为"真"就返回1,"假"就返回0

int a1 = 5 > 4; // 1

int a2 = 5 < 4; // 0

* 还需注意的是,在C语言中,任何非0值都为"真",只有0值才为"假"

所以下面的做法是对的:

1 int a = 10;
2
3 if (a) {
4     printf("条件成立");
5 } else {
6     printf("条件不成立");
7 }

因为a不为0,所以为"真",输出结果是:

若是在Java中,编译器直接报错了,因为if的括号()中只能放boolean类型的值。

以此类推,下面的写法也是对的:

int a = 10;

if (a = 0) {
    printf("条件成立");
} else {
    printf("条件不成立");
}

上述代码是完全合理的,编译器不会报错,只是个警告而已。因为a为0,所以为"假",输出结果是:

这样看来,C语言似乎比Java方便很多,其实有很大的陷阱在这里:

假设你本来是想判断a是否为0,那么本应该写if (a == 0),若你误写成了if (a = 0),那将是一件非常可怕的事情,因为编译器又不报错,这样的BUG就难找了。因此,像a==0这样的表达式,最好写成0==a,若你误写成0=a,编译器会直接报错的。

// 不推荐
if (a == 0) {
}

// 推荐
if (0 == a) {
}

* 在C语言中,可以不保存关系运算的结果

因此,下面的写法是合法的:

1 int a = 10;
2 a > 10;
3 a == 0;

如果是在Java中,第2、3行编译器会直接报错,但在C编译器看来是合法的,只是个警告。

所以,这里又是一个陷阱,假设你的本意是想给 a赋值为0,那么本应该写a = 0; ,若你误写成a == 0; ,那将又是一个非常难找的BUG,因为编译器根本不会报错。在1993年的时候,这个BUG差点让一桩价值2000万美元的硬件产品生意告吹,因为如果这 个BUG不解决,这个产品就没办法正常使用。

3.逻辑运算符

  • &&  逻辑与运算符
  • ||  逻辑或运算符
  • !   逻辑非运算符

逻辑运算的结果也只有两个:成立就为"真",返回1;不成立就为"假",返回0

4.赋值运算符

1.简单的赋值运算符 = :int a = 5;

2.复合赋值运算符

  • +=  加赋值运算符。如a += 3+1,等价于 a = a +(3+1)
  • -=  减赋值运算符。如a -= 3+1,等价于 a = a -(3+1)
  • *=  乘赋值运算符。如a *= 3+1,等价于 a = a *(3+1)
  • /=  除赋值运算符。如a /= 3+1,等价于 a = a /(3+1)
  • %=  取余赋值运算符。如a %= 3+1,等价于 a = a %(3+1)

5.自增运算符和自减运算符

  • ++  自增运算符。如a++,++a,都等价于a = a+1
  • --  自减运算符。如a--,--a,都等价于a = a-1

6.逗号运算符和逗号表达式

* 逗号运算符主要用于连接表达式,例如:

1 int a = 9;
2 int b = 10;
3
4 a = a+1 , b = 3*4;

* 用逗号运算符连接起来的表达式称为逗号表达式,它的一般形式为:

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

逗号表达式的运算过程是:从左到右的顺序,先计算表达式1,接着计算表达式2,...,最后计算表达式n

* 整个逗号表达式的值是最后一个表达式的值

1 int a = 2;
2 int b = 0;
3 int c;
4
5 c = (++a, a *= 2, b = a * 5);
6
7 printf("c = %d", c);

++a的结果为3,a *= 2的结果为6,b = a * 5的结果为30。因此,输出结果为:

这里要注意的是,右边的表达式是有用括号()包住的,如果不用括号包住,也就是:

1 c = ++a, a *= 2, b = a * 5;

2 printf("c = %d", c);

输出结果将为:,因为c = ++a也属于逗号表达式的一部分,跟后面的a *= 2以及b = a * 5是相互独立的

7.条件运算符和条件表达式

其实就是三目运算符,一般形式为:表达式1 ? 表达式2 : 表达式3

int a = (b > 5) ? 10 : 9;

8.sizeof

* sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。

int size = sizeof(10);
printf("10所占的字节数:%d", size);

输出结果:,10是int类型的数据,在64bit编译器环境下,int类型需要占用4个字节

* sizeof一共有3种形式

  • sizeof( 变量\常量 )
sizeof(10);

char c = ‘a‘;
sizeof(c);
  • sizeof  变量\常量
sizeof 10;

char c = ‘a‘;
sizeof c;
  • sizeof( 数据类型 )


sizeof(float);

注意,不可以写成sizeof float;

 
时间: 2024-10-12 17:07:56

学习笔记之07-基本语句和运算的相关文章

Javascript 学习笔记 2: 标识语句

可以在任何语句声明之前使用唯一标识(identifier)和冒号(:)用来标记该语句: identifier: statement 这样,你可以在程序的任何其他地方通过标识来使用这个语句.即使在语句内部也可以使用该语句的标识(例如:循环语句和条件语句).当在一个循环语句前添加一个标识,你可以在语句内部通过break 标识来退出当前循环,也可以通过continue标识来继续执行该语句.例如: mainloop: while(token != null) { // Code omitted... c

《深入Java虚拟机学习笔记》- 第12章 整数运算

Java虚拟机提供几种进行整数算术运算的操作码,他们执行基于int和long类型的运算.当byte.short和char类型值参与算术运算时,首先会将它们转换为int类型.这些操作码都不会抛出异常,溢出在这里通常可以被忽略. 整数加法 操作码 操作数 说明 iadd (无) 从栈中弹出两个int类型数,相加,然后将所得int类型结果压回栈 ladd (无) 从栈中弹出两个long类型数,相加,然后将所得long类型结果压回栈 将一个常量与局部变量相加 操作码 操作数 说明 iinc vindex

【Ext.Net学习笔记】07:后续

程序员必看书籍(转载) C++: Prata<C++ Primer Plus>:基础,第一本书.(之前的版本也可,不过推荐最新的) Lippman<Inside C++ Object Model>:初级,加深语言层次上的理解.不过有点小老了.里面的cfront编译器早退出江湖好久了.思想值得学习 侯捷<STL源码剖析>:第三本书,中级,深入STL Vandevoorde<C++ Template>:第四本,中级,范式编程 罗剑锋<Boost>两本

[原创]java WEB学习笔记39:EL中的运算符号(算术运算符,关系运算符,逻辑运算符,empty运算符,条件运算符,括号运算符)

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

ython 学习笔记(一)语句,变量,函数

今天抽时间看了一下python.感觉很好,它与编译性语言不同.c,c++,java,c# 等都是编译性语言,也就是需要先进行编译,然后 在链接,才生成二进制可运行文件(java,C#除外,需要虚拟机才可以运行),但是也需要编译. python 是一种典型的解释性语言.他的最大的特点就是类似于脚本语言,例如:Shell编程,js,等,不需要编译. 今天学得知识为python的基本语法:包括:语句,定义变量,定义函数.下面进行对所学习的内容进行一下总结,以便以后能够温故 而知新 . 语句: 首先介绍

Python 学习笔记(一)语句,变量,函数

今天抽时间看了一下python.感觉很好,它与编译性语言不同.c,c++,java,c# 等都是编译性语言,也就是需要先进行编译,然后 在链接,才生成二进制可运行文件(java,C#除外,需要虚拟机才可以运行),但是也需要编译. python 是一种典型的解释性语言.他的最大的特点就是类似于脚本语言,例如:Shell编程,js,等,不需要编译. 今天学得知识为python的基本语法:包括:语句,定义变量,定义函数.下面进行对所学习的内容进行一下总结,以便以后能够温故 而知新 . 语句: 首先介绍

python学习笔记二:if语句及循环语句,断点,模块,pyc

if语句 注意:语句块中的内容要强制缩进,否则出错.IndentationError,缩进错误 所有代码,如果是顶级的,必须顶格写,前面不能有空格 if - : - elif - : - else: - while语句 while -: - else: - for语句 for i in range(10)--i默认0,步长默认1,最大为9 for i in range (0,2,10)--从0开始,步长为2,最大为8 for  i   in range(-): - else: - break--

【JAVAWEB学习笔记】07

今天主要学习了BootStrap,viewport的介绍和最后对网站进行了重构 今天晨读单词: Compatible:兼容性viewport:视口device:设备initial:初始化(缩写init)Template:模板scale:缩放container:容器fluid:液体,流navbar:导航条icon:图标dropdown:向下separator:分割group:组current:当前inverse:相反的active:激活default:默认的item:项 Viewport介绍 一.

Python基础学习笔记(四)语句

参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-chinese-encoding.html 3. http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000 ? 条件语句 条件语句的使用实例如下: #!/usr/bin/python # -*- coding: UTF-8 -*- # 例2:elif用法 num =