復習:
1、數據類型:signed char 1 %hhd -128~127signed short 2 %hd -32768~32767signed int 4 %d 正負20億signed long 4 %ldsigned long long 8 %lld 9天開頭的19位數unsigned char 1 %hhu 0~255unsigned short 2 %hu 0~65535unsigned int 4 %u 0~40億unsigned long 4 %lu unsigned long long 8 %llu 1開頭的20位數float 4 %fdouble 8 %lflong double 12 %LF
2、變量取名規則1、由數字 字母 下劃線組成2、不能以數字開頭3、不能與關鍵字重名4、見名知義
3、變量的輸入輸出printf 提示信息+占位符+變量名scanf 占位符+變量地址%nd %0nd %-nd %n.mf
3、運算符/ % 除數不能0,否則會產生浮點數例外,核心已轉儲錯誤== 變量盡量放在右邊++/-- 一行代碼中不要過多使用&& || 具有短路特性A?B:C 不能出現流程控制語句
4、類型轉換自動類型轉換:不同類型的數據會先轉換成相同類型的數據才能進行運算。轉換規則(以不丟失數據為基礎,適當犧牲一些空間):1、字節少向字節多轉2、相同字節數有符向無符轉3、整型向浮點型轉強制類型轉換:(目標類型)數據 , 可能會造成數據丟失,慎重使用。
一、開關語句
switch
switch(n)//運算結果必須是整型
{case val: // val必須是整常量 ,如果val等于n,則打開執行開關... break; // 關閉執行開關注意:如果每個cast后都有break,就形成了分支結構。default:// 如果所有的case都沒有匹配成功則打開執行開關
}
case a ... b: 判斷一個范圍,此為GNU編譯器獨有的語法,不建議使用。
練習1:輸入一個月份,判斷季節。
123 春天
456 夏天
789 秋天
10 11 12 冬天
other 輸入的月份有誤
#include <stdio.h>int main()
{unsigned int month = 0;printf("請輸入一個月份:");scanf("%u",&month);switch(month){case 1 ... 3: printf("春天"); break;case 4 ... 6: printf("夏天"); break;case 7 ... 9: printf("秋天"); break;case 10 ... 12: printf("冬天"); break;default: printf("輸入的月份有誤!\n"); break;}
}
練習2:輸入一個月份,判斷該月有多少天,忽略閏年問題。
#include <stdio.h>
#include <stdint.h>int main(int argc,const char* argv[])
{uint8_t month = 0;printf("請輸入一個月份:");scanf("%hhu",&month);if(month < 1 || month > 12){printf("輸入的月份有誤!\n");return 0;}switch(month){case 2: printf("28天\n"); break;case 4: case 6:case 9:case 11: printf("30天\n"); break;default: printf("31天\n"); break;}
}
for循環語句:
循環就是讓一段代碼反復執行,達到你想要的結果。
for一種比較靈活且危險(與其它循環相比)的一種循環。
一般使用一個變量來引導它的運行,這個變量就叫作循環變量。
for([1];[2];[3])
{[4];
}1、給循環變量賦初值,C99標準才可以定義循環變量。此處定義的循環變量,只能for循環內使用。
2、判斷循環變量的是否到達邊界。
4、被反復執行的代碼,也叫循環體。
3、改變循環變量,防止變成死循環,一般對循環變量自加或自減。大括號問題:1、建議上下對齊2、循環體如果只有一行代碼,大括號可以省略但不利于擴展,一般商業代碼要求大括號不能省略。for循環的多種寫法:
for(;;)
{// 死循環
}int i = 0;
for(;i<10; i++)
{}for(int i=0; i<10;)
{printf("----");i++;
}
while語句:
while(條件) // 當條件為真執行循環體,為假時結束
{// 循環體
}while循環相當于for循環的精簡版本。
for循環負責解決明確知道循環次數的問題。
while負責解決只知道結束條件而不確定循環次數的問題。
do while語句:
do{循環體
}while(條件);
先執行循環體,再判斷循環條件,該循環至少執行一次。
循環嵌套:
循環語句中包含循環語句。
外層循環執行一次,內存循環執行遍。
練習3:計算出所有的水仙花數。
#include <stdio.h>int main(int argc,const char* argv[])
{for(int i=100; i<1000; i++){int g = i%10;int s = i/10%10;int b = i/100;if(g*g*g+s*s*s+b*b*b == i){printf("%d\n",i);}}
}
練習4:輸入一個正整數,判斷是否是素數。
#include <stdio.h>int main(int argc,const char* argv[])
{int num = 0;printf("請輸入一個整數:");scanf("%d",&num);if(num < 2){printf("輸入的數據有誤!\n");return 0;}int cnt = 0;for(int i=1; i<=num; i++){if(0 == num%i){cnt++;}}if(2 == cnt){printf("是素數\n");}else{printf("不是素數\n");}
}
#include <stdio.h>int main(int argc,const char* argv[])
{int num = 0;printf("請輸入一個整數:");scanf("%d",&num);if(num < 2){printf("輸入的數據有誤!\n");return 0;}int i = 2;for(; i<num; i++){if(0 == num%i){printf("不是素數\n");return 0;}}printf("是素數!\n");}
練習5:輸入一個整數,分解顯示。
-1234
-1 2 3 4
#include <stdio.h>
#include <math.h>
#include <stdlib.h>int main(int argc,const char* argv[])
{int num = 0;printf("請輸入一個整數:");scanf("%d",&num);if(num < 0 ){printf("-");num = abs(num);}int copy = num , cnt = 0;while(copy){copy /= 10;cnt++;}for(int i=cnt; i>0; i--){printf("%.0lf ",num/pow(10,i-1));num = num % (int)pow(10,i-1);}
}
練習6:輸入一個正整數,判斷是否是回文數。
1234
4321
#include <stdio.h>int main(int argc,const char* argv[])
{int num = 0 , new = 0;printf("請輸入一個正整數:");scanf("%d",&num);if(num < 0){printf("輸入的數據有誤\n");return 0;}int copy = num;while(copy){new = (new*10)+(copy%10);copy /= 10;}printf("%d %d\n",num,new);if(num == new){printf("是回文數\n");}else{printf("不是回文數\n");}
}
跳轉語句:
goto 可以在函數內任意跳轉。
它可能會破壞已經設計好的分支或循環語句,因此絕大多數公司禁止使用。
但它在驅動編程時特別適合處理異常。標簽: // 位置
goto 標簽;
練習7:不使用循環計算前N項的斐波那切數列。
1 1 2 3 5 8 13 21 …
#include <stdio.h>int main(int argc,const char* argv[])
{// 1 0 1 1 2 3int n = 0;printf("輸入n的值:");scanf("%d",&n);int f1 = 1 , f2 = 0 , t = 0;loop:t = f1 + f2;f1 = f2;f2 = t;printf("%d ",t);if(--n) goto loop;
}
該系列持續更新
希望喜歡的小伙伴可以一鍵三連~~