嵌入式Linux C语言程序设计五
程序结构和控制语句
5.1C语言程序结构
- 顺序结构
- 分支结构
- 循环结构
5.2 C语言控制语句
5.2.1条件判断语句
- if 语句的形式
(1) if(表达式)语句2
#include<stdio.h>
int main()
{int a = 1,b = 20;if(a){printf("a true\n");}if(b){ printf("b true\n"); }if(a == b){print("a b equal\n");}
}
(2)if(表达式) 语句1 else 语句2
if(x>y)
{y = x;printf("x is bigger\n");
}
else
{ printf("x is not bigger\n");
}
(3) if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else if(表达式m) 语句m
else(语句n)
#include<stdio.h>
int main()
{float score;printf("input score:");scanf("%f",&score);if(score < 0|| score>100){printf("socre is invalid\n");return 0;}if(score>=90){printf("A\n");}else if(score >=80){printf("B\n");}else if(score >=70){printf("C\n");}else if(score >=60){printf("D\n");}else{printf("E\n"); }return 0;
}
- if语句的嵌套使用
#include <stdio.h>
int main()
{int i = 2000,n=0;while(i<2501){if(i%4!=0){i++;continue;}if(i%100!=0 && i%4==0){n++;i++;continue;}if(i%100 == 0 && i%400 == 0){n++;}i++;}printf("total:%d\n",n);return 0;
}
#include<stdio.h>
int main()
{int i = 2000,n=0;while(i<2501){if(i%4!=0){printf("%d is not a leap year\n",i);}else{ if(i%100!=0){printf("%d is a leap year\n",i);n++;}else {if(i%400 == 0){n++;}} }i++;}printf("total:%d\n",n);return 0;
}
#include<stdio.h>
int main()
{int i = 2000,n=0;while(i<2501){if(i%4 == 0 &&(i%100!=0)||i%400 == 0) {n++;}i++;}printf("total:%d\n",n);
}
- switch 语句
switch(表达式)
case 常量表达式1: 语句序列1;
case 常量表达式2: 语句序列2;
.....
case 常量表达式n:语句n;
default: 语句n+1;
switch 关键字后面的表达式必须是整型值或字符型值。
switch 语句比较特殊,这里的case标签并没有把语句列表划分为几个部分,它只是确定语句执行的入口点。
如果没有跳转指令的话会一直执行到switch语句的最后。
#include <stdio.h>
int main()
{float score;int grade;printf("input score:");scanf("%f",&score);if(score < 0 || score >100){printf("score is invalid\n");return 0;}grade = score/10;switch(grade){case 9:printf("A\n");case 8:printf("B\n");case 7:printf("C\n");case 6:printf("D\n");default:printf("E\n");}return 0;
}
#include<stdio.h>
int main()
{float score;int grade;printf("input score:");scanf("%f",&score);if(score < 0||score >100){printf("score is invalid\n");return 0;}grade = score/10;switch(grade){case 9:printf("A\n");break;case 8:printf("B\n");break;case 7:printf("C\n");break;case 6:printf("D\n");break;default:printf("E\n");break;}return 0;
}
5.2.2 循环语句
- while 和 do-while语句
while(表达式)
{循环体语句
}
do
{循环体语句
}witch(表达式);
#include <stdio.h>
int main()
{int sum = 0;int i = 0;while(i<=100){sum+=1;i++;}printf("the sum of 100 is %d\n",sum);return 0;
}
#include <stdio.h>
int main()
{int sum = 0;int i = 0;do{sum+ = i;i++;}while(i<=100);printf("the sum of 100 is %d\n",sum);return 0;
}
- for循环语句
for(表达式1;表达式2;表达式3)
语句
#include<stdio.h>
int main()
{int i,sum = 0;for(i = 1;i<=100;i++) {sum +=i;}printf("The sum of 100 is %d\n",sum);return 0;
}
- for语句中的表达式1可以省略,但在for循环之前应给循环变量赋值
int i = 1,sum = 0;
for(;i<=100;i++)
{sum = sum+i;
}
- 表达式2也可以省略,循环将陷入死循。
int i ,sum = 0;
for(i = 1;;i++)
{sum = sum + i;
}
- 表达式3也可以省略,但应在循环体中增加循环变量改变语句
int i ;
for(i = 1;i<100;)
{sum = sum +i;i++;
}
- 表达式1和表达式3也允许同时省略
int i = 1,sum = 0;
for(;i<=100;){sum = sum+i;i++;
}
- 三个表达式都可以省略,但";"不能省略
for(;;)
{sum = sum+1;i++;
}
- 循环体可以是空语句。
- for语句也可与for ,while, do-while语句相互嵌套,构成多重循环。
#include <stdio.h>int main()
{char let = 'F';int i,j;for(i = 0;i<let-'A';i++) {for(j = 0;j<i;j++){printf("_");}for(j = 0;j<=i;j++) {printf("%c",let-j);}printf("\n");}return 0;
}
- goto 语句构成循环
标号与goto必须在同一函数内
#include<stdio.h>
int main()
{int i = 1,sum = 0;loop:if(i<=100){sum +=i;i++;goto loop;}printf("The sum of 100 is %d\n",sum);
}
5.2.3转向语句
- break语句
注意brek语句只能跳出一层循环.
for( r =1 ;r <=10;r++)
{area = pi*r*r;if(area >100){break; }printf("%f\n",area)
}
- continue 语句
continue 只能用在循环体中
#include<stdio.h>
int main()
{int n;for(n=1;n<=100;n++){if(n%7!=0) {continue;}printf("%d",n);}
}
- goto语句
goto 条件转移,跳出循环体
#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define N 300int main()
{char clean[N];int n;while(1){printf("*******************************************\n");printf("*1:register 2:login 3:quit*\n");printf("********************************************\n");printf("please choose:");if(scanf("%d",&n)==0){fgets(clean,N,stdin);printf("\n");continue;}switch(n){case 1://....break;case 2:if(do_login(sockfd,&buf)==0){continue;} else{goto next;}case 3:exit(0);}}next:while(1){printf("****************************************************************\n");printf("*1:query 2:history 3 quit*\n");printf("*****************************************************************\n");printf("please choose:"); if(canf("%d",&n)==0){fgets(clean,N,stdin);printf("\n");continue;} switch(n){//......}}exit(0);
}
上面的代码改用循环
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define N 300int main(int argc,char *argv[])
{char clean[N];int n;while(1){printf("*********************************************\n");printf("*1:register 2:login 3:quit*\n");printf("**********************************************\n");printf("please choose:");if(scanf("%d,&n")==0){fgets(clean,N,stdin);printf("\n");continue;}switch(n){case 1://...break;case 2:if(do_login(sockfd,&buf)){while(1){printf("***************************************************\n");printf("*1: query 2:history 3:quit *\n");printf("****************************************************\n");printf("please choose:");if(scanf("%d",&n)==0){fgets(clean,N,stdin);printf("\n");continue;}switch(n){//...}}}elsecontinue;case 3:exit(0);}}exit(0);
}
