黑马程序员----C 语言学习笔记之程序的结构及分类

------Java培训、Android培训、iOS培训、.Net培训--------

程序的结构及分类



1.什么是程序结构
  结构化程序设计思想
 荷兰学者Dijkstra提出了“结构化程序设计”的思想,它规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性,这种方法要求程序设计者不能随心所欲的编写程序,而要按照一定的结构形式来设计和编写程序,它的一个重要的目的是使程序具有良好的结构,使程序易于设计,易于理解,易于调试修改,以提高设计和维护程序工作的效率
  理想状态:笔直的大道 


2.分支语句结构 if

	1) if
		格式:if(表达式/常量/变量){
			语句块1;
		}
		原理:
			先计算小括号中的表达式的值
			结果为真时,会执行大括号里的语句块1
			结果位假时,不会执行语句块1
	2)if else语句的使用与嵌套


		格式:if(表达式/常量/变量){
				语句块1;
			 } else {
			 	语句块2;
			 }
		原理:
			先计算小括号中的表达式的值
			结果为真时,会执行大括号里的语句块1
			结果位假时,不会执行语句块2




	3)if 嵌套,即if else中再嵌套if else
		原理同1)和2)


		例如 if(1 > 0 ){
				if(1 > 2){
					语句块1;
				}else{
					语句块2;
				}
			}
	4)if语句的高级用法
		if(表达式1){
			语句块1;
		} else if(表达式2){
			语句块2;
		}else if(表达式3){
			语句块3;
		}else if(表达式4){
			语句块4;
		}else{
			语句块5;
		}


原理:表达式1为真时,执行语句块1,为假时开始执行表达式2.如果表达式2为真时,执行语句块2.否则开始执行表达式3,,,依次类推
5)举例
	    int score = 0;
	    printf("Input your score:");
	    scanf("%d",&score);
	    
	    if (score >= 0 && score <= 59) {
	        printf("Your level is E");
	    }
	    else if(score <= 69){
	        printf("Your level is D");
	    }
	    else if(score <= 79){
	        printf("Your level is C");
	    }
	    else if(score <= 89){
	        printf("Your level is B");
	    }
	    else{
	        printf("Your level is A");
	    }


   输入:78
   结果:Your level is C


6)if语句使用注意事项
a.f(age > 3);//表示空语句,什么都不干,在语法上是没有错误的
b.如果大括号里只有一条语句,那么可以省略大括号
例如if(1) printf("Hello");
c.永真式:if(1),永假式:if(0)
d.if语句结合return 语句
例如:if(a == 1) 
return 0;//在一个函数中,return语句之后的语句都不会执行了
e.尽量不要省略大括号


3.分支语句结构 switch

1)格式:

			switch(表达式)//必须是整数
			{
				case 常量表达式1:语句1;
				case 常量表达式2:语句2;
				case 常量表达式3:语句4;
				default:语句5;
			}

原理:如果括号内的表达式的结果等于对应的常量表达式,则执行对应的语句块。如果没有对应的,则执行default
2)举例:
    int a= 2;
    switch (a) {
        case 1:
            printf("A");break;
        case 2:
            printf("B");break;
        case 3:
            printf("C");break;
        case 4:
            printf("D");break;
        default:
            break;
    }


    结果:打印B


    3)case穿透
    a.指,某个case语句执行完成后并没有结束,而直接向下执行其他的case语句
    b.如何防止case穿透?
     在每个case语句结束后,加上一个break,其作用是结束switch语句块
    4)if 语句转换成 switch语句
    例子(if例子参见2.9)
   
    int score = 70;
    score = score / 10;
    switch (score) {
        case 0:
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("E");break;
        case 6:
            printf("D");break;
        case 7:
            printf("C");break;
        case 8:
            printf("B");break;
        case 9:
        case 10:
            printf("A");break;
        default:
            break;
    }


5)if语句与switch语句的选择
a. if语句跟switch语句之间完全可以互相转换
b. 分支比较多而且无法穷尽或进行大量的列举时,最好用if
c.如果分支数量不是那么多,但是使用if代码量比较大的时候,可以选用switch


6)switch语句使用注意事项
a.表达式的类型(switch后括号内的内容)必须是整型或者是可以转换成整型的值。 可以
放一个整型的变量(int a = 1; switch(a))或者常量(2),
也可以放一个返回值是整型的表达式(如 switch(4+5)),或者可以转换为整型的表达式switch('a' + 'a')


b.case 语句可以有多行语句,可以加括号,也可以不加大括号
例如
case 1: a = 1;
b = 2;
c = 3;
break;


c.break语句是可选的


7)case 后值的要求
a.可以是常量表达式 如 3+4
b.可以使常量 如10
c.case 语句格式 case 常量表达式://空格和冒号必须有
d.default语句的位置可以任意
e.case语句的穿透问题,如果没有break的话,会向下穿透
f.如果default放在switch语句的最后可以不加break,否则必须加break
g.case 语句后,默认的第一句话,不能是定义变量.如果非要在第一句定义,那要加个大括号,把case后的语句块包含在内
8)练习,实现一个计算器
    int a, b, result = 0;
    char op;//操作符,
    
    printf("input the expression:");
    scanf("%d%c%d",&a,&op,&b);//中间不要输入空格了
    
    switch (op) {
        case '+':
            result = a + b;
            break;
        case '-':
            result = a - b;
            break;
        case '*':
            result = a * b;
            break;
        default:
            result = a / b;
            break;
    }
    printf("result : %d", result);




    

你可能感兴趣的:(c语言基础)