簡介:流程控制語句
1.分支語句(條件語句)
if/else(重點)
switch/case
2.循環語句
for(重點)
while
do while
分支語句
1> if/else
按照一定的條件執行不同的代碼,可以使用分支語句。
if(邏輯表達式條件1){ //如果 必須出現1次
滿足條件1時執行的語句;
}
else if(邏輯表達式條件2){ //或者 出現0-n次
滿足條件2時執行的語句;
}
else{ //否則 出現0-1次
以上條件都不滿足時執行的語句
}
練習:輸入一個整數,判斷 是正數、負數、零。
int a;
if(a>0){
printf("%d是正數\n",a);
}else if(a==0){
printf("%d是零\n",a);
}else{
printf("%d是負數\n",a);
}注:
a> if/else 只會執行一個分支,因此,如果第一個分支滿足條件了,不再執行後面的分支。-> 如果執行到了第n個分支,前面n-1個分支一定不成立。
b> 有else的分支語句必選其一執行,沒有else的分支語句可選其一執行。
c> 如果分支內部只有一條語句,{}可以省略。一般執行:break/continue/return 語句時,{}通常省略。
d> 流程控制語句 需要 注意臨界點的處理。
e> 經常 用於 處理 業務的需求。
#include <stdio.h>
/*
使用if語句來判斷輸入輸入 某年某月 有幾天
*/
int main()
{
printf("請輸入年月\n");
int y,m,maxDay=31;
scanf("%d%d",&y,&m);
if(m<1 || m>12){
printf("輸入非法\n");
return -1;
}
if(m==4||m==6||m==9||m==11){
maxDay = 30;
}
else if(m==2){
maxDay=28+
(y%4==0 && y%100!=0 || y%400==0);
/*if((y%4==0 && y%100!=0)||y%400==0)
maxDay = 29;
else
maxDay = 28;*/
}
printf("%d\n",maxDay);
return 0;
}注:
a> if/else 只會執行一個分支,因此,如果第一個分支滿足條件了,不再執行後面的分支。-> 如果執行到了第n個分支,前面n-1個分支一定不成立。
b> 有else的分支語句必選其一執行,沒有else的分支語句可選其一執行。
c> 如果分支內部只有一條語句,{}可以省略。一般執行:break/continue/return 語句時,{}通常省略。
d> 流程控制語句 需要 注意臨界點的處理。
e> 經常 用於 處理 業務的需求。
#include <stdio.h>
/*
使用if語句來判斷輸入輸入 某年某月 有幾天
*/
int main()
{
printf("請輸入年月\n");
int y,m,maxDay=31;
scanf("%d%d",&y,&m);
if(m<1 || m>12){
printf("輸入非法\n");
return -1;
}
if(m==4||m==6||m==9||m==11){
maxDay = 30;
}
else if(m==2){
maxDay=28+
(y%4==0 && y%100!=0 || y%400==0);
/*if((y%4==0 && y%100!=0)||y%400==0)
maxDay = 29;
else
maxDay = 28;*/
}
printf("%d\n",maxDay);
return 0;
}2> switch/case
格式:
switch(控制表達式){
case 常量表達式 :語句; break;
…
default: 語句;
}
控制表達式被當做整數處理,可以是字符,不能是浮點數或字符串
常量表達式必須是常量,如: 3 ‘A’ 2+5
語句 可以是 零到多條
不允許重復分支(值不能相同)
default不一定在最後但一般都在最後)
switch的執行機制,語句只有遇到break或者結束才能退出,否則會一直向下執行下去。
switch(a){
case 1:
printf("1\n");
break;
case 2:
printf("2\n");
break;
case 3:
printf("3\n");
break;
default:
printf("d\n");
}2. 循環語句
1> for循環
循環語句 用於 反復執行某段代碼,直到滿足某些條件(退出條件而非循環條件)後退出。
for 循環的語法結構:
for(循環變量的初始化1;循環條件2;步進語句3){
需要反復執行的代碼段 //循環體4
}
int i;
for(i=0;i<10;i++){
printf("%d\n",i);
}如果退出條件永遠不能滿足,叫 死循環(無限循環),ctrl+c可以退出死循環。
無限循環最簡單寫法: for(;;){ }
在C99中,支持:for(int i=0;i<10;i++){ },但是編譯時要使用std=c99
#include <stdio.h>
/*
練習:計算某班學生的總分、平均分和最高分。
分數需要輸入,無需保存分數。
人數的問題:
1 先輸入人數,在輸入分數。(用這個)
2 可以用 -1 做退出的條件。
*/
int main()
{
int sum=0,max=0x80000000;//表示最小的int型整數1000...0000
double avg;
int i,num=0;
/*printf("請輸入人數\n");
scanf("%d",&num);
if(num<1){
printf("非法人數\n");
return -1;
}
for(i=0;i<num;i++){
int temp;
scanf("%d",&temp);
sum = sum+temp;
if(max<temp) max = temp;
}*///次數在循環前確定
for(;;){//循環次數不能確定,輸入-1表示輸入結束
int temp;
scanf("%d",&temp);
if(temp == -1) break;//退出循環
sum = sum+temp;
if(max<temp) max = temp;
num++;
}
printf("sum=%d,avg=%lf,max=%d\n",
sum,1.0*sum/num,max);
return 0;
}break 可以退出 循環/switch,退出函數用return。
循環可以分為:次數確定、次數不確定、無限循環。
次數確定的: int i; for(i=0;i<num;i++){...}
次數不確定: for(;;){...if(條件) break; ...}
無限循環: for(;;){...}
循環中經常嵌套另外的循環,叫多重循環,最常用的是二重循環
二重循環的難點在於內層循環次數的控制,具體公式如下:
i如果遞增1,那麼
j< m*i + n ;j++
m 是 內層循環遞增的次數,如果遞減取負數
n 是 內層循環第一次循環的次數
前提:i和j的初始值保持一致,最好都為0。
#include <stdio.h>
/*
使用雙重for循環打印
*
***
*****
*******
*********
*/
int main()
{
int i,j;//i控制行,j控制列
for(i=0;i<5;i++){
for(j=0;j<2*i+1;j++){
printf("*");
}
printf("\n");
}
return 0;
}#include <stdio.h>
/*
使用雙重for循環
打印9*9乘法表
j*i
1*1=1
1*2=2 2*2=4
......
*/
int main()
{
int i,j;
for(i=1;i<10;i++){
for(j=1;j<i+1;j++){
printf("%d*%d=%d ",j,i,j*i);
}
printf("\n");
}
return 0;
}2> while循環
while循環和for循環 除了語法不同,其他都可以互通。
語法:
循環變量的聲明和初始化;
while(條件){
循環體;
步進語句;
}
#include <stdio.h>
int main()
{
int sum=0;
while(1){
int temp;
printf("請輸入數字(0退出)\n");
scanf("%d",&temp);
if(temp == 0) break;
sum += temp;
}
printf("sum = %d\n",sum);
return 0;
}int i=0;
while(i<10){
printf("%d\n",i);
i++;
}while(1){} // 死循環
3> do-while循環
do while循環
語法:
循環變量的聲明和初始化;
do{
循環體;
步進語句;
}while(條件);
do-while 循環 先do 後判斷條件,所以 至少執行一次。
int i=10,j=10;
do{
printf("%d\n",i);
i++;
}while(i<10);
while(j<10){
printf("%d\n",j);
j++;
}
// 當i,j 初始 不滿足條件時,do循環打印i,while不打印j。
// 當i,j 初始 滿足條件時,無區別。
// 很多情況下,do循環和while(1){ ...if() break; }可以互通。#include <stdio.h>
/*
使用do-while來計算輸入數字的位數
注意:do-while();分號結束
*/
int main()
{
int num,count=0;
printf("請輸入一個整數\n");
scanf("%d",&num);
do{
num = num/10;
count++;
if(num==0) break;
}while(1/*num!=0*/);
printf("%d\n",count);
return 0;
}注:
break和continue
continue用於循環內部,結束本次循環,繼續下一次循環,如果下一次循環條件不成立,也會退出。
break 用於循環內部,中斷所有循環,結束整個循環如果是嵌套循環,break只是退出本層循環)。
本文出自 “雪狼” 博客,請務必保留此出處http://wolfzhxp.blog.51cto.com/2409990/1285967