本科時期學過一些c++,現在自學資料結構演算法的時候感覺需要重新補一下c語言。
所用ide: dev-c++ 5.11
#include
int main()
//在學習函式之前,**均在此框架,往後省略框架。
printf("hello world!\n")
//雙引號內為字串。
//\n 表示換行。
printf("23+43=%d\n",23+43)
// %d 說明有乙個整數要在此位置上輸出。
c語言意義+
加法-減法*
乘法/除法%
取餘數
int a=0;
//定義變數並初始化,a為名字,即識別符號,可由數字、字母、下劃線組成,第乙個位置不能出現數字。定義a=0的過程為初始化,即給a賦值
int b=0;
constant int amount=100;// 定義乙個常量,不能修改。
printf("請輸入兩個整數:");
scanf("%d
%d", &a, &b);
// 讀取輸入的兩個整數,並賦值給a和b,如果讀取到的不是整數,則取整(使用捨去小數部分)。
printf("%d + %d = %d\n", a, b, a + b);
e.g. 計算時間差
int hour1, minute1;
int hour2, minute2;
scanf("%d
%d", &hour1, &minute1);
scanf("%d
%d", &hour2, &minute2);
int t1 = hour1 * 60 + minute1;
int t2 = hour2 * 60 + minute2;
int t = t2-t1;
printf("時間差是%d小時%d分。", t/60, t%60);
// 將小時全部轉化為分鐘來計算, t/60為小時,t%60為分鐘。
e.g. 求平均值
int a,b;
scanf("%d
%d", &a, &b);
double c = (a+b)/2.0;
//2.0的意義在於,整數與整數之間的運算只會產生整數,因此需要2.0,乙個浮點數來精確平均數。 如果使用2,則會平均後取整再將其變成浮點數。例如:(10+11)/2=10.000000
printf("%d和%d的平均值=%f\n", a, b, c);
優先順序
運算子運算
結合關係舉例1
+單目不變
自右向左
a*+b1-
單目取負
自右向左
a*-b2*
乘自左向右
a*b2/除
自左向右
a/b2%取餘
自左向右
a%b3+加
自左向右
a+b3_減
自左向右
a-b4=賦值
自右向左
a=b
在c語言中,賦值也是一種運算,也有結果
a=b=6
// a= (b=6),其中b=6為賦值,但其也有結果為6,故a=6。
total*=sum+12
// 等同於 total=total*(sum+12)。
「++」,」–」為單目運算子,且配合運算的運算元必須為變數。作用即為給這個變數加1或者減1,等同於
a++;
a+=1;
a=a+1;
字首與字尾
表示式運算
表示式a的值
a=count++
給count加1
count的原值
a=++count
給count加1
count+1後的值
a=count——
給count減1
count的原值
a=–count
給count減1
count-1後的值
第1周課後練習
輸入乙個三位數,倒序輸出這個數。
#include
int main()
if(條件成立)
else
條件
運算子意義
== 相等!=
不相等>
大於>=
大於等於
<
小於<=
小於等於
關係運算的結果
printf("the answer is %d",5>3)
//關係符合運算子的期望時,輸出1,否則輸出0。
-關係運算子的優先順序比算術運算的優先順序低,但比賦值運算的優先順序高。
-判斷==和!=的優先順序比其他關係運算子低,而且關係運算是從左向右的。
另一種形式
if(total>amount)
total+=amount+10;
//if語句後面沒有分號,後面的賦值語句縮排並帶有分號,這表明它是if語句中的一部分。
巢狀的判斷
if(code==ready)
if(count<20)
printf("everything is ok\n");
else
printf("keep waiting\n")
if(code==ready)
else
printf("keep waiting\n")
// else總是會和最近的那個if匹配,所以有特殊需要時候,需要括弧,只靠縮排是不能暗示else與哪個if匹配的。
if(n<1)
if(n==0)
printf("hello\n");
//雖然輸出語句沒有縮排,但仍然為巢狀的判斷的一部分,只有同時滿足兩個條件才會輸出。
在每乙個if與else後面都使用括弧以確保不出錯
if(exp1)
else
if(exp2)
else
if語句中容易出錯的點
有多個語句執行的時候忘了大括號
if(age>60)
salary=salary*1.2;
bonus=bonus*2;
//缺少括弧的話,bonus運算語句則在條件結束後執行。
switch ( month )
\\switch 括號內的為控制表示式,只能為整數
int i=1;
switch ( i%3 )
//答案為onetwo,因為沒有break語句,則一直執行到尋找乙個break語句,或者switch結束。
while迴圈語句while(x>0)
// 迴圈來計位。
測試程式常使用特殊的資料個位數,0,負數,有效範圍內的邊界數
x=x/10;
n++;
while(x>0)
// 改進:針對x=0的情況。
do
while(n>0)
// 與while的區別:至少會做一次迴圈再判斷。
random()%n
//給出乙個在0~n-1之間的隨機數。
程式設計入門 C語言 翁愷 第3周程式設計練習
你的程式要讀入一系列正整數資料,輸入 1表示輸入結束,1本身不是輸入的資料。程式輸出讀到的資料中的奇數和偶數的個數。一系列正整數,整數的範圍是 0,100000 如果輸入 1則表示輸入結束。兩個整數,第乙個整數表示讀入資料中的奇數的個數,第二個整數表示讀入資料中的偶數的個數。兩個整數之間以空格分隔。...
第3周程式設計作業
13 1列印3個相鄰字母 20分 題目內容 當使用者輸入乙個英文本母後,程式能夠按照字母表的順序列印出3個相鄰的字母,其中使用者輸入的字母在中間。程式執行結果如下 dcde 這裡假設字母表首尾兩個字母是相連的。若輸入字母z,則程式輸出yza。輸入格式 乙個字母字元,可能為大寫,也可能為小寫。輸出格式...
程式設計入門 C語言 翁愷 第2周程式設計練習
乙個整數,表示bjt的時和分。整數的個位和十位表示分,百位和千位表示小時。如果小時小於10,則沒有千位部分 如果小時是0,則沒有百位部分 如果小時不是0而分小於10分,需要保留十位上的0 如果小時是0而分小於10分的,則不需要保留十位上的0。乙個整數,表示utc的時和分。整數的個位和十位表示分,百位...