1.不好的表達式的例子
1 a=5; 2 c = (b=a+2) - (a=2);
c = (b = a+2) - (a=2);執行前和執行后有兩個時間點p1和p2(用C語言標准來說叫做Sequence Point)。本例中,子表達式(a=2)的副作用在p1和p2之間是不確定的(不確定該副作用已經發生,也就是說a的值變為2)。然后,標准有這么一段,
第二條規則說時間點p1前的值(舊值)只能被用作計算新值。本例中,子表達式(b=a+2)中b的新值是由a來確定的(2是常量,在此不考慮),而a所指定的值是p1前的值還是新值是不確定的(參見第一>段文字)。所以就有問題了。比如,clang編譯器會報警告。
如果非要寫成一行,可以寫做 c = (b = a+2, a=2, b-a); 因為操作符",", "||"和"&&"都對應一個序列點(Sequence Point)。
2.寫出以下代碼執行后,t1和t2的值,以空格隔開:
1 int a=14; 2 int t1 = a++; 3 int t2 = ++a;
正確答案:14 16
3.寫出以下表達式的結果,一個結果一行:
3.逆序的三位數:
程序每次讀入一個正三位數,然后輸出逆序的數字。注意,當輸入的數字含有結尾的0時,輸出不應帶有前導的0。比如輸入700,輸出應該是7。
提示:用%10可以得到個位數,用/100可以得到百位數...。將這樣得到的三個數字合起來:百位*100+十位*10+個位,就得到了結果。
注意:除了題目要求的輸出,不能輸出任何其他內容,比如輸入時的提示,輸出時的說明等等都不能。這道題目要求輸出逆序的數字,程序就只能輸出這個數字,除此之外任何內容都不能輸出。
輸入格式:
每個測試是一個3位的正整數。
輸出格式:
輸出逆序的數。
輸入樣例:
123
輸出樣例:
321
1 #include<stdio.h> 2 int main() 3 { 4 int a; 5 scanf("%d",&a); 6 printf("%d",a%10*100+a/10%10*10+a/100); 7 return 0; 8 }
4.厘米換算英尺英寸
如果已知英制長度的英尺foot和英寸inch的值,那么對應的米是(foot+inch/12)×0.3048。現在,如果用戶輸入的是厘米數,那么對應英制長度的英尺和英寸是多少呢?別忘了1英尺等於12英寸。
輸入格式:
輸入在一行中給出1個正整數,單位是厘米。
輸出格式:
在一行中輸出這個厘米數對應英制長度的英尺和英寸的整數值,中間用空格分開。
輸入樣例:
170
輸出樣例:
5 6
1 #include<stdio.h> 2 int main() 3 { 4 int cm=0; 5 scanf("%d",&cm); 6 int foot = cm / 30.48; 7 int inch = ((cm / 30.48) - foot)*12; 8 printf("%d %d",foot,inch); 9 return 0; 10 }
5.計算攝氏溫度
給定一個華氏溫度F,本題要求編寫程序,計算對應的攝氏溫度C。計算公式:C=5×(F−32)/9。題目保證輸入與輸出均在整型范圍內。
輸入格式:
輸入在一行中給出一個華氏溫度。
輸出格式:
在一行中按照格式“Celsius = C”輸出對應的攝氏溫度C的整數值。
輸入樣例:
150
輸出樣例:
Celsius = 65
1 #include<stdio.h> 2 int main() 3 { 4 int F; 5 int C=0; 6 scanf("%d",&F); 7 C=5*(F-32)/9; 8 printf("Celsius = %d",C); 9 return 0; 10 }
6.是不是太胖了
據說一個人的標准體重應該是其身高(單位:厘米)減去100、再乘以0.9所得到的公斤數。已知市斤的數值是公斤數值的兩倍。現給定某人身高,請你計算其標准體重應該是多少?(順便也悄悄給自己算一下吧……)
輸入格式:
輸入第一行給出一個正整數H
(100 < H ≤ 300),為某人身高。
輸出格式:
在一行中輸出對應的標准體重,單位為市斤,保留小數點后1位。
輸入樣例:
169
輸出樣例:
124.2
1 #include<stdio.h> 2 int main() 3 { 4 int H; 5 double W; 6 scanf("%d",&H); 7 W=(H-100)*0.9*2; 8 printf("%.1f",W); 9 return 0; 10 }
7.求整數均值
本題要求編寫程序,計算4個整數的和與平均值。題目保證輸入與輸出均在整型范圍內。
輸入格式:
輸入在一行中給出4個整數,其間以空格分隔。
輸出格式:
在一行中按照格式“Sum = 和; Average = 平均值”順序輸出和與平均值,其中平均值精確到小數點后一位。
輸入樣例:
1 2 3 4
輸出樣例:
Sum = 10; Average = 2.5
1 #include<stdio.h> 2 int main() 3 { 4 int a,b,c,d; 5 int Sum=0; 6 double Average; 7 scanf("%d %d %d %d",&a,&b,&c,&d); 8 Sum = a+b+c+d; 9 Average = Sum / 4.0; 10 printf("Sum = %d; Average = %.1f",Sum,Average); 11 return 0; 12 }
8.算術入門之加減乘除
對於輸入的兩個整數,按照要求輸出其和差積商。
輸入格式:
在一行內輸入兩個不超過100的非負整數a和b,中間以一個空格間隔,且保證b不為0。
輸出格式:
共四行,格式是:
[a] + [b] = [a+b] [a] - [b] = [a-b] [a] * [b] = [a*b] [a] / [b] = [a/b]
其中,帶有方括號的內容(如[a]
、[b]
、[a+b]
等)表示相應整數或運算結果的值,在輸出時要用實際的值代替。
並且:如果a能夠被b整除,那么a/b應輸出為整數格式,否則a/b輸出為帶兩位小數的格式。
提示:注意表達式中的空格。
輸入樣例1:
6 3
輸出樣例1:
6 + 3 = 9
6 - 3 = 3
6 * 3 = 18
6 / 3 = 2
輸入樣例2:
8 6
輸出樣例2:
8 + 6 = 14 8 - 6 = 2 8 * 6 = 48 8 / 6 = 1.33
1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 scanf("%d%d",&a,&b); 6 if(a>100||b>100||b==0) 7 return 0; 8 printf("%d + %d = %d\n",a,b,a+b); 9 printf("%d - %d = %d\n",a,b,a-b); 10 printf("%d * %d = %d\n",a,b,a*b); 11 if(a%b==0) 12 printf("%d / %d = %d\n",a,b,a/b); 13 else 14 { 15 float a1=a;//float是四個字節和int一樣 float和int可以進行強制類型轉換 16 float b1=b;//double是八個字節 17 printf("%.0f / %.0f = %0.2f\n",a1,b1,a1/b1); 18 } 19 return 0; 20 }
9.計算時間差
輸入兩個時間,每個時間分別輸入小時和分鍾的值,然后輸出兩個時間之間的差,也可以幾小時幾分表示
1 #include<stdio.h> 2 int main() 3 { 4 int hour1; 5 int hour2; 6 int minute1; 7 int minute2; 8 scanf("%d %d",&hour1,&minute1); 9 scanf("%d %d",&hour2,&minute2); 10 int ih = hour2-hour1; 11 int im = minute2-minute1; 12 if(im <0) 13 { 14 im = 60 + im; 15 ih --; 16 } 17 printf("時間差是%d小時%d分",ih,im); 18 }