逻辑语句和函数
一、printf函数
1.在使用peintf函数前必须加入#include <stdio.h>,使用它可以向标准输出设备(比如屏幕)输出数据,其中使用格式是 printf(“字符串”) ;或者 printf(“字符串”, 格式符参数);
2.常用的格式符及其含义如图所示
3.格式符还可以添加输出宽度
二、scanf函数
1.在使用scanf函数前必须加入#include <stdio.h>。调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量。
2.使用格式:scanf("<格式化字符串>",<地址表>);
三、基本语句
C语言的基本语句有循环语句(do while、while、for),条件语句(if 、if-else、switch),goto语句。
四、基本运算
1.算术运算符
- + 加法运算符
- - 减法运算符,或负值运算符
- * 乘法运算符
- / 除法运算符
- % 模运算符,或称取余运算符,要求%两侧均为整型
2.关系运算符
- < 小于运算符
- <= 小于等于运算符
- > 大于运算符
- >= 大于等于运算符
- == 等于运算符
- != 不等于运算符
逻辑运算的结果只有两个:成立就为"真",返回1;不成立就为"假",返回0
注意:C语言中没有boolean类型
3.逻辑运算符有:
- && 逻辑与运算符
- || 逻辑或运算符
- ! 逻辑非运算符
逻辑运算的结果也只有两个:成立就为"真",返回1;不成立就为"假",返回0
4.赋值运算符有简单的赋值运算符 = ;以及复合赋值运算符
- += 加赋值运算符。如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, 表达式2, … …, 表达式n
7.条件运算符和条件表达式,其实就是三目运算符,一般形式为:表达式1 ? 表达式2 : 表达式3
8.sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
五、流程结构
C语言提供3种流程结构,不同的流程结构可以实现不同的运行流程。这3种流程结构分别是:
- 顺序结构:默认的流程结构。按照书写顺序执行每一条语句。
- 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码。
- 循环结构:在给定条件成立的情况下,反复执行某一段代码。
六、顺序结构
顺序结构是3种结构中最简单的,也是默认的流程结构:程序中的语句是按照书写顺序执行的。
七、选择结构-if语句
1.结构形式1
1 if ( 条件 ) 2 { 3 语句1; 4 语句2; 5 .... 6 }
如果if右边小括号()中的条件成立,也就是为“真”时,就会执行第2~6行大括号{}中的语句;如果条件为假,就不执行大括号{}中的语句。这里的if是关键字。
2.结构形式2
if还可以跟关键字else一起使用
1 if ( 条件 ) 2 { 3 语句1; 4 } 5 else 6 { 7 语句2; 8 }
如果条件成立,就会执行if后面大括号{}中的语句;如果条件不成立,就会执行else后面大括号{}中的语句。
3.结构形式3
if和else还有一种比较复杂的用法
1 if ( 条件1 ) 2 { 3 语句1; 4 } 5 else if ( 条件2 ) 6 { 7 语句2; 8 } 9 else if ( 条件3 ) 10 { 11 语句3; 12 } 13 ... 14 else 15 { 16 其他语句; 17 }
- 如果条件1成立,就执行条件1后面大括号{}中的内容:第2~4行
- 如果条件1不成立,条件2成立,就执行条件2后面大括号{}中的内容:第6~8行
- 如果条件1、条件2都不成立,条件3成立,就执行条件3后面大括号{}中的内容:第10~12行
- 第13行的...表示可以有无限个else if
- 如果所有的条件都不成立,就会执行else后面大括号{}中的内容:第15~17行
八、选择结构-switch语句
1.结构形式
1 switch(整型表达式) 2 { 3 case 数值1: 4 语句1; 5 break; 6 case 数值2: 7 语句2; 8 break; 9 ... ... 10 case 数值n: 11 语句n; 12 break; 13 default : 14 语句n+1; 15 break; 16 }
- 当整型表达式的值等于“数值1”时,就会执行“语句1”,后面的break表示退出整个switch语句,也就是直接跳到第16行代码;
- 当整形表达式的值等于“数值2”时,就会执行“语句2”;后面的以此类推。如果在数值1~数值n中,没有一个值等于整型表达式的值,那么就会执行default中的语句n+1。
- 由于所有的case后面都有个break,因此执行完任意一个case中的语句后,都会直接退出switch语句
2.break关键字的作用是退出整个switch语句。默认的格式中,每个case后面都有个break,因此执行完case中的语句后,就会退出switch语句。
九、循环结构-while循环
1.结构形式
1 while ( 条件 ) 2 { 3 语句1; 4 语句2; 5 .... 6 }
- 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容)。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
- while循环的特点:如果while中的条件一开始就不成立,那么循环体中的语句永远不会被执行
3.注意如果写成下面这样,也会让程序进入“死循环”
1 int count = 0; 2 3 while ( count < 10 ); 4 { 5 printf("Hello World\n"); 6 7 count++; 8 }
- 注意第3行,while后面不小心加了个分号; ,一个分号表示一条空语句。
- 可以看出:while循环只会影响到第3行的空语句,而第4~8行的代码块是不受while循环影响的
- 由于count是0,那么count<10一直都是成立的,程序将会一直重复执行第3行的空语句,陷入死循环。
十、循环结构-do while循环
结构形式如下:
1 do { 2 语句1; 3 语句2; 4 ... 5 } while (条件);
- 注意第5行,后面是加上一个分号;的
- 当执行到do-while循环时,首先会执行一遍循环体中的语句(“循环体”就是do后面大括号{}中的内容)。接着判断while中的条件,如果条件成立,就执行循环体中的语句。然后再次判断条件,重复上述过程,直到条件不成立就结束while循环
- do-while循环的特点:不管while中的条件是否成立,循环体中的语句至少会被执行一遍
- 其实do while循环的用法跟while循环是差不多的,这里就不举例子了。
十一、循环结构-for循环
结构形式
1 for (语句1; 条件; 语句2) { 2 语句3; 3 语句4; 4 ... 5 }
- for循环开始时,会先执行语句1,而且在整个循环过程中只执行一次语句1
- 接着判断条件,如果条件成立,就会执行循环体中的语句(“循环体”就是for后面大括号{}中的内容)
- 循环体执行完毕后,接下来会执行语句2,然后再次判断条件,重复上述过程,直到条件不成立就结束for循环
十二、break和continue
1.break,它的作用是跳出switch语句。它也可以用在循环结构中,这时候它的作用是跳出整个循环语句。
2.continue,它的作用是跳过这一次循环,直接进入下一次循环。
十三、函数基本概念
1.任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”。能。
2.为了方便调用和区分这些函数,我们需要为每一个函数都起一个唯一的名称,函数的命名必须按照标识符命名规则。利用函数名就可以调用到对应的函数。
十四、函数的定义
1.任何一个函数在使用之前都必须进行定义
2.函数的定义格式如下:
1 返回值类型 函数名(形式参数列表) 2 { 3 函数体 4 }
十五、形式参数和实际参数
1.基本概念
1> 形式参数:在定义函数时,函数名后面的小括号()中定义的变量称为形式参数,简称形参
2> 实际参数:在调用函数时传入的值称为实际参数,简称实参
2.调用函数时传递的实参个数 必须和 函数的形参个数必须保持一致
3.当使用基本数据类型(char、int、float等)作为实参时,实参和形参之间只是值传递,修改形参的值并不影响到实参
4.函数可以没有形参
十六、返回值类型
1.返回值就是函数调用完后,返回给函数调用者的结果,用return关键字进行返回。定义函数时,要指明函数的返回值类型
2.一个函数可以没有返回值,如果没有返回值,应该用void表示返回值类型
3.如果一个函数没有返回值,最后面的return语句可以省略
4.如果一个函数没有明确写出返回值类型,那么代表这个函数的返回值类型是int
十七、return
1.return语句可以在函数内部返回一个值给函数调用者
2.一个函数内部可以多次使用return语句,使用了return语句后,函数就会马上停止执行,return语句后面的代码就不再被执行
十八、函数定义的注意
1.函数名不能重复
2.每一个函数都应该独立定义,不能嵌套定义
十九、一维数组
1.一维数组的定义的形式为:类型 数组名[元素个数];
2.一维数组的初始化形式是:类型 数组名[元素个数] = {元素1, 元素2, ...};
十九、二维数组
1.二维数组的定义形式:类型 数组名[行数][列数];
2.二维数组的初始化:数据类型 数组名[行数][列数]= {{一维元素}, {一维元素}, {...}};
二十、字符串简介
字符串可以看做是一个特殊的字符数组,为了跟普通的字符数组区分开来,应该在字符串的尾部添加了一个结束标志'\0'。'\0'是一个ASCII码值为0的字符,是一个空操作符,表示什么也不干。所以采用字符数组存放字符串,赋值时应包含结束标志'\0',如图所示。