新手上路系列2:表达式与流程控制

新手上路系列2:表达式与流程控制

1、数据类型的转换: 
  主要就是强制类型转换与隐式转换,如a = (int)b的赋值运算中,将b作为整型使用,但并未改变b本身的值。另外一个就是隐式转换,它存在于运算中,在运算前进行转换,按照char,short->int,float->double这样的顺序进行转换

2、运算符与表达式: 
  赋值与关系运算表达式都比较通俗,相较而言自增自减就稍微需要一些变通:
  a++与++a的区别就在于a++是先使用这个变量再对其进行自增操作,而++a则相反,需要先自增再被使用;在这里就需要提到一个小细节,在win32操作系统下,++a这个操作是在整个表达式开始运算前全部计算好,而在我们学习的linux32系统下,++a这个操作却是在表达式运算开始后,遇到++a的操作时才进行,这样两边的答案会有所不同,例如这样一个程序:
    int x = 8;
    y = (++x) + (x++) + (++x);
    printf("%d",y);
在win32系统下,执行的是(10+10+10),结果是30;而在linux32下,执行的却是(9+9+10),结果为28,以上也是经过验证的,对此有兴趣的可以互相交流一下。
  贪婪法则:编译器从左至右扫描运算符,尽可能多的组合运算符。最简单的例子就是:c = i+++j,这边的结合方式就是:c = (i++)+j,而不是c = i+(++j)。

3、基本程序结构:
  C语言的基本程序结构就三种,顺序、选择和循环。顺序语句很容易理解,就是普通的自上而下的顺序逻辑;分支语句稍微复杂一点,经过if语句的判断进行不同的程序,注意else语句的用法以及条件语句的嵌套;接下来就是比较复杂的循环结构:
  比较常见的循环语句有,for,while以及do-while循环等,while循环与do-while类似,都是判断while内部条件是否成立,成立则执行接下来的语句,不成立则跳出循环,但这里要注意的一点是,while语句是先判断再执行,而do-while语句则是先执行语句再判断内部条件以决定是否继续运行,所以while语句可能不执行操作,但do-while语句至少要执行一次。比如以下2个程序:
int i = 1;
while (i != 1)
{
    printf("1\n");
    continue;
}
int i = 1;
do
{
    printf("1\n");
    break;
}while(1 != i);
执行结果中,while语句没有输出,而do-while语句是有的。
  循环结构中另外一个经常用到的语句就是continue与break。上述2个程序中就包含了这两个语句,达成的效果看似相同,但其实它们所表达的含义还是有区别的。break语句在循环中是指跳出当前循环(只能跳出一层循环),而continue语句所表达的意思则是使本次循环结束,即跳过循环体中没有执行的语句,转而判断下次循环是否执行。
  还有就是,一些前者的经验之谈,虽然有的不能称为法则,但有助于循环程序的编写:
1、较长的循环放在较内层。可以减少CPU跨切循环层的次数
2、尽量写n<10而不是n<=9。半开半闭区间更加直观
3、不能在循环内部改变循环变量
4、一般来说,循环代码不超过20行。可以将代码写成子函数,再调用
5、循环嵌套控制在3层以内。层数多了真的会看晕的
6控制表达式不能包含浮点型数据
  最后贴上一个挺有意思的程序。这个程序可以用来解决简单的逻辑问题:

某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。


    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值