Via http://www.matrix67.com/blog/archives/218 by Matrix67
目录:
C语言速成手册(一):基本数据类型、标准输出、函数
C语言速成手册(二):布尔值、条件判断、循环
C语言速成手册(三):数组、字符串、结构
C语言速成手册(四):指针、动态内存分配、标准输入
C语言速成手册(五):其它运算符、文件操作、其它函数
C语言速成手册(六):其它问题、后记
逻辑运算符
作用 | C | Pascal
———+—–+———–
等于 | == | =
不等于 | != | <>
小于 | < | <
大于 | > | >
小于等于 | <= | <=
大于等于 | >= | >=
且 | && | and
或 | || | or
非 | ! | not
C语言的if语句
C语言中if语句的写法如下:
1 2 3 4 |
if (表达式) { 表达式为真时执行的内容 } |
之前说过,如果执行的内容只有一句话,花括号可以省略。
下面的语句将返回整数a的绝对值:
1 2 |
if ( a<0 ) a= -a; |
下面的语句用于实现排序网络中的比较算子:
1 2 3 4 5 6 |
if ( a>b ) { int c=a; a=b; b=c; } |
C语言中也有else if和else的用法,但和Pascal不同的是else的前一条语句末要保留分号。下面的语句用于判断三边长分别为a, b, c的三角形是什么三角形:
1 2 3 4 5 6 7 8 9 10 11 12 |
; ] if ( a+b>c && b+c>a && a+c>b ) { if ( a==b && b==c ) printf("Regular Triangle"); else if ( a==b || b==c || a==c ) printf("Isosceles Triangle"); else printf("Scalene Triangle"); } else printf("Triangle Doesn't Exist."); |
C语言的bool类型
C语言中没有布尔类型。任何一个整型的变量都可以充当布尔变量,用0表示False,其它数(默认为1)表示True。
观察下列代码片断。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
printf("%d \n", 3+5 == 8); int a; a = 3+5==9; printf("%d \n" , a); a = 100 <= 100; printf("%d \n" , a); a = 1; if(a) printf("a is 1\n"); a = 2; if(a) printf("a is 2\n"); a = -1; if(a) printf("a is -1\n"); a = 0; if(a) printf("a is 0\n"); if(!a) printf("a is not 0\n"); |
这段程序的输出为:
1 2 3 4 5 6 7 |
1 0 1 a is 1 a is 2 a is -1 a is not 0 |
如果觉得别扭,你可以使用_Bool类型。你可以把_Bool看作整型,但它只能储存0和1两个值。
下面三句话将输出数字1,这是因为_Bool类型把所有非0数都当做是1。
1 2 3 |
_Bool a; a = 100; printf("%d", a); |
如果你想像Pascal一样使用true和false,那么你可以包含头文件stdbool.h。这样你可以定义变量为bool类型并赋值为true或false。例如:
1 2 |
bool a = true; if (a) printf("a is true"); |
下面是两个完整的程序。第一个程序中_Bool可以替换成int。三种写法都正确,你可以选择一种自己喜欢的写法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <stdio.h> _Bool isNegative ( int a ) { if (a<0) return 1; else return 0; } int main() { if ( isNegative(-100) ) printf("-100 is Negative"); return 0; } #include <stdio.h> #include <stdbool.h> bool isNegative ( int a ) { if (a<0) return true; else return false; } int main() { if ( isNegative(-100) ) printf("-100 is Negative"); return 0; } |
C语言的for循环
for循环使用下面的语句:
1 2 3 4 |
for ( 语句1; 语句2; 语句3 ) { 循环内容 } |
其中语句1用于初始化,若语句2为真(非0)则进入循环;每次循环后将执行语句3,此时若仍然满足语句2则继续循环,否则退出。语句123中,某一种语句可能为空,也可能由多条语句组成(多条语句用逗号隔开)。
下面的语句打印1到10这10个数。以下所有写法都是正确的。通常用第一种写法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
; ] int i; for (i=1; i<=10; i=i+1) printf("%d\n", i ); int i=1; for ( ; i<=10; i=i+1) printf("%d\n", i ); int i; for (i=1; i<=10; ) { printf("%d\n", i ); i=i+1; } int i; for (i=1; i<=10; printf("%d\n", i ), i=i+1 ); |
巧妙地应用for循环可以使某些操作非常简单。下面的函数可以计算n的质因子个数:
1 2 3 4 5 6 7 |
long countPrimeFactor( long n ) { long d, count; for (d=2, count=0; n>1; d=d+1 ) for ( ; n%d==0; count=count+1, n=n/d ); return count; } |
下面的语句将产生死循环:
1 |
for ( ; ; ) ; |
C语言的while循环
while循环格式如下:
1 2 3 4 |
while ( 循环条件 ) { 循环内容 } |
下面的代码计算1394和6150的最大公约数:
1 2 3 4 5 6 7 8 |
int a=1394, b=6150; while ( b ) { int tmp = a % b; a = b; b = tmp; } printf("The gcd is %d", a); |
do..while循环
do..while循环的格式如下:
1 2 3 4 5 |
do { 循环内容 } while ( 循环条件 ); |
将条件放在循环内容的后面,使程序至少执行循环内容一次。
循环控制
C语言中使用break语句和continue语句来控制循环,其使用方法与Pascal完全一样。
switch语句
switch语句相当于Pascal中的case语句。
下面代码的输出为2 3 default done! , 因为switch语句只负责把程序运行的位置跳转到相应的地方。
1 2 3 4 5 6 7 8 9 |
int n=2; switch (n) { case 1: printf("1 "); case 2: printf("2 "); case 3: printf("3 "); default: printf("default "); } printf("done!"); |
你可以用break语句实现Pascal的case,例如下面的写法就可以让程序输出2 done! :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int n=2; switch (n) { case 1: printf("1 "); break; case 2: printf("2 "); break; case 3: printf("3 "); break; default: printf("default "); } printf("done!"); |
goto语句
你可以在程序的任何位置插入一个标签:
标签名:
并在同一函数里使用下面的语句实现无条件跳转:
goto 标签名;
例如,下面的代码将产生死循环,并输出满屏幕的求爱信息。
1 2 |
a: printf(" I Love You !!!!!!! "); goto a; |
C语言速成手册(二):布尔值、条件判断、循环 by Liqueur Librazy is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
Pingback: C语言速成手册(一):基本数据类型、标准输出、函数 - Dr.Lib - Dr.Librazy
Pingback: C语言速成手册(三):数组、字符串、结构 - Dr.Lib - Dr.Librazy
Pingback: C语言速成手册(四):指针、动态内存分配、标准输入 - Dr.Lib - Dr.Librazy