我擦擦,竟然都开始写看语句了。
一个程序都没有写呢呢。不用着急,语句里面的程序基本写不完啊,写不完。
做这个之前,我先说,写程序的时候缩进和注释一点都不能少。于是乎开始吧。
空语句
c最简单的语句就是空语句,它本身仅仅包含一个分号。空语句本身并不执行任何任务。但是有时候哪怕是空语句也要写一条。
表达式语句
c中并不存在专门的赋值语句。c中的赋值就是一种操作。好比是加减乘除。在表达式后面加上分号就是表达式语句。并不一定要有等号才是表达式语句。这样也可以,而且挺常用的。Y+3;getchar();
代码块
代码块就是对于一对花括号之内的可选声明和语句列表。
If语句
if语句的语法
if(expression){
staement
}else statement
解释:expression就是一个逻辑判断。他的值是真的就会执行花括号中间的代码块,为假会执行else后面的代码块。
由于c不存在bool类型(布尔类型,这个类型的值有两个,真和假)而是用整型来代替。这样expression可以是任何能够产生整型结果的表达式——0是假,1是真。
来个例子
这个例子中if中的判断好像是一样的。都是x<3的值,实际上却是一个陷阱。下一章说。
if可以嵌套。比如说
if(){}else if(){}else if(){}else{}.(没有缩进很蛋疼吧~~)
然后就是else靠近与离他最近的不完整的if语句。如果你按照正常的缩进敲代码的话,应该能够看出来else是那一个if的。
While语句
c的while语句的语法。
while(expression){statement}
这个里面的expression和if一样。 如果expression为假,会跳过statemen,如果expression是真会执行statement。会循环的说。
Break和continue语句
在while中可以使用break语句用来中止循环。执行完之后,会执行while整个语句之后的语句。
continue语句用来中止当前循环,然后执行下次循环。当前在执行下次循环之前,会检测下次循环是否会执行。
这两个只对内层循环起作用,你没有办法使用break和continue语句影响外层的循环。
While语句的执行过程
来个图:
Switch
语法:switch (expression) statement
具体写法是这样的:
switch(expression){
case constant_exptession :statement
case constant_exptession :statement
}
每个case的标签必须具有一个唯一的值。常量表达式(constant-exptession)是指在编译器渐进性的求值的表达式的,他不能使任何变量。
执行过程中先计算expression的值然后匹配到case中cosntant-exptession的值,这个之后的语句都会被执行。也就是说case仅仅是语句执行的切入点。所以它经常和break连用。
所以一般是这样写的
switch(command){
case “a”:add_entry();break;
case “b”:add_entry();break;
case “c”:add_entry();break;
case “b”:add_entry();break;
case “e”:add_entry();break;
}
break语句的实际效果就是把语句列表划分为不同的部分,这样switch语句就能够看到更加传统的方式工作。
当然多个case可以连用。(最后给出例子。)
default子句
如果所有的值和exptession都不匹配这个时候就绪要default子句。(当你可以确定exptession个数的时候你可以将某一中情况断定为default,然后少写一个case。这种方法是偷懒了,看着方便。但是我不推荐。因为这样程序报错的时候不容易划分。Default子句设定的目的是为了检测非法值的。)
switch语句的执行过程(不要认为所有的switch都要break)
计算程序输入中字符,单词和行的个数。每个字符都比需技术,但是字符和制表符号同时也做为单词的终止符号使用。也就是说,但出现换行时三个计数器都必须增加。
switch(ch){
case '\n':lines+=1;
case '\t' :
case ' ':words+=1;
default: char+=1;
}这个例子的bug就是连续的空格没有办法识别。
Goto
语法什么的:goto 语句标签
要使用goto先要在希望跳转的语句前面加上标签。语句标签就是标识符后面加个冒号。包含这些标签的goto语句可以出现在统一个函数中的人位置。
goto是一个恨危险的语句,在学习过程中,很容易产生对于它的依赖。(基本上没有什么用的语句,一定不要用就是了。它可以做的其他都可以做到,而且简单。)
在使用循环嵌套的时候有时候需要使用goto跳出整个循环体,这个时候就需要使用goto。
Eg:while(){
while(){
while(){
while(){
if(){}
goto quit;
}
}
}
}
quit: 终于出来了;
其实这个东西完全不用这样。这么长的语句一般都需要做成一个独立的函数,然后在goto的位置写个return就可以了。
个人认为:
不使用goto的原因:
1、将整个程序的逻辑结构摧毁的很彻底。
2、goto容易将编程是的顺序搞得很混乱。
3、起变量名字、函数名字和文件名字就已经很蛋疼了,现在你告诉我还有个标签名字?
总结1
c中的很多语句的行为和其他语言中的类似语句很想相似。(作为一只从java过来的孩子表示这个东西很淡疼。)if和while语句并不具有布尔类型,所以他们的测试值都是整型表达式。(新手可以直接用数值,入门可以在开始写个define,高手可以写个结构体,牛人貌似会自己定义个bool类型。)for语句是while循环的一种常用组合方式。dowhile和while很类似,不过dowhile会先执行一次之后在判断。尽量不要使用goto语句。
switch、case和break以及continue。
当需要出现一条语句但并不需要执行任何任务的时候,可以使用空语句。
然后就是c不存在任何的输入输出语句,以及异常处理语句。
总结 2
编写不会产生任何结果的表达式。
确信在if语句中的语句列表前后加上大括号。
在switch语句中,执行流意外的从一个case顺延到下一个case。
总结 3
在一个没有循环体的循环中,用一个分号表示空语句,并让它独占一行。
for循环的可读性比while循环强,因为它把控制循环的表达式收集起来放在一个地方。
在每个switch语句中都是用default语句。