2018年8月

if语句

if语句被称为分支语句选择语句,因为它相当于一个交叉点,程序要在两条分支中选择一条执行。
if语句(单分支)的通用形式如下:

if( expression )
    statement

如果对expression求值为真,则执行statement;否则,跳过statement。statement可以是一条简单语句或复合语句。

if else语句

C还提供了if else形式,可以在两条语句之间作选择。
if else(双分支)语句的通用形式如下:

if( expression )
    statement1
else
    statement2

如果对expression求值为真,则执行statement1;否则,执行statement2。statement1和statement2可以是一条简单语句或复合语句。

  1. 另一个示例:介绍getchar()和putchar()
    下面讲解一对字符输入/输出函数:getchar()putchar()

    • getchar()函数不带任何参数,它从输入队列中返回下一个字符。

      如:`ch = getchar();` 等价于 `scanf("%c", &ch);`
    • putchar()函数打印它的参数。

      如:`ch = putchar(ch);` 等价于 `printf("%c", ch);`

      由于这些函数只处理字符,所以它们比更通用的scanf()printf()函数更快、更简洁。




- 阅读剩余部分 -

一门语言应提供以下3种形式的程序流:

  1. 执行语句的序列;
  2. 如果满足某些条件就重复执行语句序列(循环);
  3. 通过测试选择执行哪一个语句序列(分支)。

while语句

while语句的通用形式如下:

while( expression ) //测试表达式(都为关系表达式)
    statement //可以是以分号结尾的简单语句,也可以是花括号括起来的复合语句

如果expression为真(或者非0),执行statement部分一次,然后再次判断expression。在expression为假(0)之前,循环的执行一直重复进行。每次循环称为一次迭代

  1. 终止while循环
    注意:在构建while循环时,必须让测试表达式的值有变化,表达式最终要为假。否则,循环就不会终止(当然可以使用breakif语句来终止循环)。
  2. 何时终止循环
    要明确一点:只有在对测试条件求值时,才决定是终止还是继续循环。
  3. while:入口条件循环
    while循环是使用入口条件的有条件循环。所谓“有条件”指的是语句部分的执行取决于测试表达式描述的条件。
  4. 语法要点
    牢记:

    • 只有在测试条件后面的单独语句(简单语句或复合语句)才是循环部分。
    • 即使while语句本身使用复合语句,在语句构成上,它也是一条单独的语句。该语句从while开始执行,到第一个分号结束。在使用了复合语句的情况下,到右花括号结束。
    • 空语句(即循环体什么都不做,就一个分号)多用于所有任务都在测试条件中完成了的情况。




- 阅读剩余部分 -

基本运算符

  1. 赋值运算符:=

    • =并不意味(数学中的)相等,而是一个赋值运算符。
    • 几个术语:数据对象左值右值运算符

      1. 左值必须是一个变量名,不能给常量赋值,即可修改的左值
      2. 赋值表达式语句的目的是把值存储到内存位置上。用于存储值的数据存储区域统称为数据对象
      3. 左值用于标识特定数据对象的名称或表达式。因此,对象指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。
      4. 右值指的是能赋值给可修改左值的量,且本身不是左值。
  2. 加法运算符:+

    • 加法运算符用于加法运算,使其两侧的值相加。
  3. 加法运算符:-

    • 减法运算符用于减法运算,使其左侧的数减去右侧的数。

    +-都称为二元运算符,即这些运算符需要两个运算对象才能完成操作。

  4. 符号运算符:-+

    • 减号和加号还可以用于标明或改变一个值的代数符号。即正负号,以这种方式使用的正负号被称为一元运算符,一元运算符只有一个运算对象。
  5. 乘法运算符:*

    • 符号*表示乘法。C没有平方函数,可以使用乘法来计算平方。
    • 乘法的应用:指数增长
  6. 乘法运算符:/

    • C使用符号/来表示除法。左侧的值是被除数,右侧的值是除数。
    • 整数除法与浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数,在C中整数除法结果的小数部分被丢弃(不会四舍五入),这一过程被称为截断
    • 混合整数和浮点数计算的结果是浮点数。编译器会把两个运算对象转换成相同类型,从较小类型转换为较大类型。

- 阅读剩余部分 -

字符串简介

字符串是一个或多个字符的序列。

  1. char类型数组和null字符
    字符串都被存储在char类型的数组中,数组末尾位置有一个字符\0,这是空(null)字符,C语言用它标记字符串的结束。C中的字符串一定是以空字符结束的,这意味着数组的容量必至少比待存储字符串中的字符多1。
  2. 使用字符串

    • printf():使用%s打印一个字符串。
    • scanf():使用%s读取一个字符串,你不用亲自把空字符放入字符串末尾,scanf()在读取输入时就已经完成这项工作,字符串常量同样。注意,scanf()的%s遇到第一个空白(空格、制表符或换行符)时就不再读取输入
    • 字符串和字符:字符串常量"x"和字符常量'x'不同。区别在于:

      1. 'x'是基本类型(char),而"x"是派生类型(char数组);
      2. "x"实际上由两个字符组成:'x'和空字符\0
  3. strlen()函数

    sizeof运算符以字节为单位给出对象大小,strlen()函数给出字符串中的字符长度。

虽然一字节存储一个字符,但sizeof和strlen()得出的结果并不相同,它们的主要区别是:
sizeof侧重该字符串所占用的存储空间,即即使字符串并没有占用满该char数组的空间,sizeof也给出所有空间大小;
strlen()则侧重字符串的实际长度,即字符串没有占用满char数组的空间,只给出实际字符串的长度。




- 阅读剩余部分 -

变量与常量


  • 常量:有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量。
  • 变量:其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量

数据:数据类型关键字


最初K&R标准C90标准C99标准
intsigned_Bool
longvoid_Complex
short _Imaginary
unsigned
char
float
double
  • 按计算机的存储方式,可分为两大基本类型:整数类型浮点数类型
  • 整数和浮点数:计算机以二进制数字存储整数;而把浮点数分成小数部分和指数部分来表示,并分开存储这两部分。
  • 位、字节和字:位是计算机的最小存储单位,可以存储0或1,即二进制数字,或者说位用于设置“开”或“关”;字节是是能表示一个完整数据的基本单位,1字节均为8位;字是设计计算机时给定的自然存储单位,即常说的字长,比如目前的64位字长计算机,计算机的字长越大,其数据转移越快,允许的内存访问页更多。

- 阅读剩余部分 -