【前記】
大一時,貪玩,沒有認真地跟着忠孝教授好好學習C語言。後來雖然又花了些時間查閱,但總歸沒有花一段連續的時間來研讀這本教材《高級語言程序設計》(廈門大學出版社·黃翠蘭主編),趁着實習前的這段空閒時間,重新拿起學習,並認真做好課後的習題,做到每題都弄懂,打好基礎!有閒暇了,數據結構和C++也每題必做!發到自己的博客上監督自己完成!
【第二章】
1.思考題
(1)用#define定義符號常量有什麼好處?
答:a.含義清楚;b.能做到“一改全改”。
(2)用何種辦法可以迅速找出回車換行符“\n”的ASCII碼?
答:printf("%d",'\n');
(3)從整數在機內的表示方式的角度舉例說明整形溢出的問題。
答:整數在機內是用補碼錶示的,由於不同整形變量所佔用的內存大小不同,所以,所能表示的數的範圍也不同。例如,unsigned short 佔用2字節,表示範圍0~65535,用它來表示負數或者大於65535的整數時就溢出。
(4)寫出4個不同的表達式,分別將整型變量n減去1。
答:n--,--n,n=n-1,n-=1。
(5)試運行下面的代碼,猜想其結果是如何得到的,並查資料驗證你的想法。
void main (void)
{
int a,b,c;
c = scanf("%d%d",&a,&b);
printf("\n%d",c);
}
答:2,scanf()函數返回成功賦值的數據項數,讀到文件末尾出錯時則返回EOF。
(6)(略)
#include <stdio.h>
void main(){
int a;
char c;
scanf("%d",&a);
scanf("%c",&c);
printf("a = %d,c=%d\n",a,c);
getch();
}
2.分析下列程序的運行結果。
(1)
#include <stdio.h>
void main(){
printf("ab c\t de\rf\tg\n");
printf("h\ti\b\bj k");
getch();
}
關於轉義字符!
(2)
#include <stdio.h>
void main(){
unsigned int a = 65535;
printf("a=%d,%o,%x,%u\n",a,a,a,a);
getch();
}
格式化輸出!%d 十進制整數;%o 八進制整數; %x十六進制整數; %u十進制形式輸出無符號數,例如地址值。
(3)#include <stdio.h>
void main(){
int x,y,z,a,b,c;
x=3;
y=3;
z=3;
y+=++x;
z+=x++;
a=(x++)+(++x);
b=-x++;
c=-++x;
printf("x=%d,y=%d,z=%d,a=%d,b=%d,c=%d",x,y,z,a,b,c);
getch();
}
我只能說,哪天,我遇到這樣的前輩遺碼,我一定折服於他寫出了這樣的代碼!
(4)略
3.略
4.略
5.用下面的scanf函數輸入數據,使a=10,b=20,c1='a',c2='A',x=1.5,y=-1.5,請問該如何輸入數據?
scanf("%5d%5d%c%*3c%dx%fy%f",&a,&b,&c1,&c2,&x,&y);
不至於叫用戶一口氣格式化輸入這麼多數據吧?
6.編程題
(1)輸入直角三角形的兩直角邊的邊長,求斜邊的長度和三角形的面積。
#include <stdio.h>
#include <math.h>
void main(){
float a,b,c,p,area;
printf("請輸入直角邊a:\n");
scanf("%f",&a);
printf("請輸入直角邊b:\n");
scanf("%f",&b);
c = sqrt(a*a+b*b);
if(a+b<=c||a+c<=b||b+c<=a)
printf("輸入的三邊不能組成三角形!\n");
p = (a+b+c)/2;
area = p*(p-a)*(p-b)*(p-c);
printf("斜邊長:%f 面積:%f \n",c,area);
getch();
}