一、分支语句if分析
1.if语句用于根据条件选择执行语句
2.else不能独立存在,且总是与它最近的if相匹配。
注意:if语句中零值的比较
-------bool型变量应该直接出现于条件中,不要进行比较。因为在C语言中非0为真,0为假。
-------普通变量和0值比较时,0值应该出现在比较符号的左边。这样可以避免出错。例如,(i = 0)写成(0 = i)时就有效避免了错误。
-------float型变量不能直接进行0值比较,需要定义精度。便于代码移植。
Example:
#define EPSINON 0.0000001
float f = 0.0;
if((-EPSINON <= f) && (f <= EPSINON)){
//statement 1
}else{
//statement 2
}
二、分支语句switch分析
1.switch语句对应单个条件多个分值的情形。
2.每个case语句分支必须要有break,否则导致分支重叠。
3.default语句有必要加上,处理特殊情况。
4.case语句中的值只能是整型或字符型。case语句排列顺序分析:
-------按字母或数字顺序排列各条语句。
-------正常情况放前,异常情况靠后
-------default语句只用于处理真正的默认情况。
三、if和switch比较
1.if语句实用于需要“按片”进行判断的情形中。(范围判断)
2.switch语句实用于需要对各个离散值进行分别判断的情形中。
3.if语句可以安全从功能上代替switch语句,但switch语句无法替代if语句
4.switch语句优点:对于多分支判断的情形更加简洁。
三、循环语句分析
1.基本工作方式
-------通过条件表达式判定是否执行循环体,条件表达式遵循if语句表达式的原则
2.do,while,for的区别
-------do语句先执行后判断,循环体至少执行一次
-------while语句先判断后执行,循环体可能不执行
-------for语句先判断后执行,相比while更简洁
Example:
1 #include
2
3 int f1(int n)
4 {
5 int ret = 0;
6 int i = 0;
7 for(i = 1; i <= n; i++)
8 {
9 ret += i;
10 }
11 return ret;
12 }
13
14 int f2(int n)
15 {
16 int ret = 0;
17 while(n > 0 && (ret += n--)){};
18 return ret;
19 }
20 int f3(int n)
21 {
22 int ret = 0;
23
24 if(n > 0)//必须判断,否则会进入死循环
25 {
26 do{
27 ret += n--;
28 }while(n);
29 }
30 return ret;
31 }
32 int main()
33 {
34 printf("%d\n",f1(10));
35 printf("%d\n",f2(10));
36 printf("%d\n",f3(10));
37 }
四、一般函数设计思想
1.在函数中分配资源
2.执行函数语句
2.1判断是否执行
3.释放资源并退出函数
五、问题:do语句有存在的必要吗?为什么存在?在什么情况下最适合。
Example:
1 #include
2
3 int func(int n)
4 {
5 int i = 0;
6 int ret = 0;
7 int *p = (int*)malloc(sizeof(int) * n);
8
9 do{
10 if(NULL == p) break;
11 if(n < 0) break;//使用break跳出块,而不是使用return,使用return可能导致内存泄
12
13 for(i = 0; i < n; i++){
14 p[i] = i;
15 printf("%d\n",p[i]);
16 }
17 ret = 1;
18 }while(0);
19
20 free(p);
21 return ret;
22 }
六、void,extern,sizeof分析
1.void的意义
------void修饰的函数返回值和参数:如果函数没有返回值,声明为void。如果函数没有参数,应该声明为void。
2.不存在void变量
------C语言中没有定义void究竟是多大的内存的别名。
3.void指针的意义
------C语言规定只有相同类型的指针才可以相互赋值
------void*指针作为左值用于接收任意类型的指针
------void*指针作为右值赋值给其他指针时需要强制类型转换。malloc函数
Example:
1 #include
2
3 void *my_memset(void *p,char v,int size)
4 {
5 void *ret = p;
6 char *dest = (char*)p;
7 int i = 0;
8 for(i = 0; i < size; i++){
9 dest[i] = v;
10 }
11 return ret;
12 }
13
14 int main()
15 {
16 int a[5] = {1,2,3,4,5};
17 int i = 0;
18 my_memset(a,0,sizeof(a));
19 for(i = 0; i < 5; i++)
20 {
21 printf("%3d",a[i]);
22 }
23 printf("%\n");
24 return 0;
25 }
4.extern中隐藏的意义
1.extern用于声明外部定义的变量和函数。
2.extern用于告诉编译器用标准C方式进行编译,用法:
extern "C"
{
int f(int a,int b){
return a + b;
}
}
5.sizeof神秘面纱
-------sizeof是编译器的内置标识符,不是函数
-------sizeof用于计算相应实体所占的内存大小
-------sizeof的值在编译期就已经确定
阅读(1483) | 评论(0) | 转发(0) |