Linux及C语言高级[4](C语言条件判断和循环语句)

384 阅读4分钟

“这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战

一.控制语句

1.1选择语句之if

if只控制一条语句

if(判断条件)
    语句1;  ==>如果不写{},if只作用于就近的语句话。
    语句2;
if(判断条件){  //如果判断条件为真,执行{}内的内容
    语句;
}
if(判断条件){ //如果条件为真,执行语句1,否则执行语句2;
	语句1;
}else{
	语句2;
	}
if(判断条件1){  ===>对应的条件成立,{}内的内容就会执行
		
}else if(判断条件2){
		
}else if(判断条件3){
		
}else{
			
}

1.2控制语句之switch/case

  • switch后必须用小括号将表达式括起来;
  • case后面为常量整型或字符型,不能有变量和逗号运算符;
  • 各case后常量不能出现相同的值;
  • case和default只是一个入口标号,不起中断作用,顺序可以任意颠倒; 执行过程:
  • 该值与某个case相同则执行case后的语句,
  • 该值与某个case不相同,直接跳到default,往后执行
  • 该值与某个case不相同,没有default,跳出switch。

📑上例题

char grade
scanf ("%c",grade)
switch(grade)
{
    case 'a': printf("good");break;⑴
    case 'b': printf("better");break;⑵
    default: printf("bad");
}
  1. 没有break(⑴⑵都没有)
  • 键盘输入a回车,输出:goodbetterbad
  • 键盘输入b回车,输出:betterbad
  • 键盘输入c回车,输出:bad
  1. 只有break⑴
  • 键盘输入a回车,输出:good
  • 键盘输入b回车,输出:betterbad
  • 键盘输入c回车,输出:bad
  1. 有break⑴⑵
  • 键盘输入a回车,输出:good
  • 键盘输入b回车,输出:better
  • 键盘输入c回车,输出:bad
  1. 只有break⑵
  • 键盘输入a回车,输出:goodbetter
  • 键盘输入b回车,输出:better
  • 键盘输入c回车,输出:bad

语法格式:

switch(变量)
{
    case 常量1:
    { 
        语句1;
        语句1;
        语句1;
	}break; //这里的break是结束switch/case
    case 常量2: 语句2; break;
    case 常量3: 语句3; break;
    case 常量4: 语句4; break;
    case 常量5: 语句5; break;
}
switch(变量){
    case 常量1: 语句1;      //如果变量和常量相等,执行语句1
                           //📢由于没有break,会执行语句2		
    case 常量2: 语句2; break;  //这里的break是结束switch/case
    case 常量3: 语句3; break;
    case 常量4: 语句4; break;
    case 常量5: 语句5; break;		
	}
switch(变量){
    case 常量1: 语句1;      //如果变量和常量相等,执行语句1
                           //由于没有break,会执行语句2		
    case 常量2: 语句2; break;  //这里的break是结束switch/case
    case 常量3: 语句3; break;
    case 常量4: 语句4; break;
    case 常量5: 语句5; break;
    default: 语句n; //不论default位置在前还是在后,都是先执行case,
                   //如果变量和前面常量都不相等,就会执行语句n
	}

二.循环语句

2.1do while

do{
    循环体;
}while(循环条件);

先执行一次循环体,判断循环条件是否为真,如果循环条件为真,再次执行循环体。直到循环条件为假,循环才会退出。

2.2while

while(循环条件){
    循环体;
}

判断循环条件是否为真,如果循环条件为真,执行循环体。直到循环条件为假,循环才会退出。

2.3循环语句for循环

for循环的语法格式

for(/* initialize */; /* condition */; /* loop */){   
     //  初始条件         循环条件      变量的加/减
     循环体;  	  
    }
例如:求1-100的和
for(i=1;i<=100;i++){
    sum+=i;
}
	
for(i=1,sum=0;i<=100;i++){
    sum+=i;
}
	
i=1;
sum=0;
for(;i<=100;i++){
    sum+=i;
}
	
i=1;
sum=0;
for(;i<=100;){
sum+=i++;
}
	
i=1;
sum=0;
for(;;){  //--->while(1)
    if(i>100)break;  //结束就近的一层循环
    sum+=i++;
}

2.4for循环的嵌套问题

for(i=0;i<100;i++){ for(j=0;j<10;j++){ 循环体2; } 循环体1; }

使用循环嵌套实现如下内容:
******   i=0   j=0   k=line
*****    i=1   j=1   k=line-1
****     i=2   j=2
***
**
*        i<line j<line-1 k=1
分析:1.通过i的变量代表第多少行
	line;
	i=0 i<line;
      2.通过j的变量代表这个行内的空格
	j=0 j<line-1
      3.通过k的变量代码代表*的个数
	k=line   k>=1				
    *     i=0  4空格 1个*
   ***    i=1  3空格 3个*
  *****   i=2  2空格 5个*
 *******  i=3  1空格 7个*
********* i=4  1空格 9个*
分析:
1.通过i的变量代表第多少行
line;
i=0 i<line;
2.通过j的变量代表这个行内的空格
for(j=0;j<line-1-i;j++){
    printf(" ");
}
3.通过k的变量代码代表*的个数
for(k=0;k<2*i+1;k++){
    printf("*");
}

2.5goto语句

goto是一个跳转语句,用法如下:

goto tt; //tt或aa就是一个标签(字符串)

aa:
    语句1;
    语句2;
tt:
    语句3goto aa;

📢注:goto语句不能跨函数使用,goto语句会破坏代码的逻辑结构,另外goto语句会让代码的执行效率变低。在很多公司goto语句禁止使用。在linux内核中使用goto语句作用统一出错处理。

2.6continue/break/return;

  • continue:跳过本次循环,执行下一次循环。
  • break:退出就近的一层循环,或者结束switch语句。
  • return:退出一个函数,将函数使用的内存释放掉,并返回一个结果。