c語言高級試題
㈠ c語言程序設計試題
c語言程序設計試題
闡述編程語言的概念,學習進制轉換以及程序的基本運行原理,讓大家先有一個整體上的認識。下面是我整理的關於c語言程序設計基礎知識,希望大家認真閱讀!
【程序1】
題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少?
1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去
掉不滿足條件的排列。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,k;
printf(" ");
for(i=1;i<5;i++) /*以下為三重循環*/
for(j=1;j<5;j++)
for (k=1;k<5;k++)
{
if (i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/
printf("%d,%d,%d ",i,j,k);
}
getch();
}
【程序2】
題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高
於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提
成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於
40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於
100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0. 1;
bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i<=100000)
bonus=i*0.1;
else if(i<=200000)
bonus=bonus1+(i-100000)*0.075;
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf("bonus=%d",bonus);
getch();
}
【程序3】
題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
1.程序分析:在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後
的結果滿足如下條件,即是結果。請看具體分析:
2.程序源代碼:
代碼如下:
#include "math.h"
#include "stdio.h"
#include "conio.h"
main()
{
long int i,x,y,z;
for (i=1;i<100000;i++)
{
x=sqrt(i+100); /*x為加上100後開方後的結果*/
y=sqrt(i+268); /*y為再加上168後開方後的結果*/
if(x*x==i+100&&y*y==i+268) /*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/
printf(" %ld ",i);
}
getch();
}
【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天?
1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的.第幾天,特殊
情況,閏年且輸入月份大於3時需考慮多加一天。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
int day,month,year,sum,leap;
printf(" please input year,month,day ");
scanf("%d,%d,%d",&year,&month,&day);
switch(month) /*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判斷是不是閏年*/
leap=1;
else
leap=0;
if(leap==1&&month>2) /*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("It is the %dth day.",sum);
getch();
}
【程序5】
題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。
1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,
然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if (x>y)
{t=x;x=y;y=t;} /*交換x,y的值*/
if(x>z)
{t=z;z=x;x=t;} /*交換x,z的值*/
if(y>z)
{t=y;y=z;z=t;} /*交換z,y的值*/
printf("small to big: %d %d %d ",x,y,z);
getch();
}
【程序6】
題目:用*號輸出字母C的圖案。
1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
printf("Hello C-world! ");
printf(" **** ");
printf(" * ");
printf(" * ");
printf(" **** ");
getch();
}
【程序7】
題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
1.程序分析:字元共有256個。不同字元,圖形不一樣。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
char a=176,b=219;
printf("%c%c%c%c%c ",b,a,a,a,b);
printf("%c%c%c%c%c ",a,b,a,b,a);
printf("%c%c%c%c%c ",a,a,b,a,a);
printf("%c%c%c%c%c ",a,b,a,b,a);
printf("%c%c%c%c%c ",b,a,a,a,b);
getch();
}
【程序8】
題目:輸出9*9口訣。
1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,result;
printf(" ");
for (i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result); /*-3d表示左對齊,佔3位*/
}
printf(" "); /*每一行後換行*/
}
getch();
}
【程序9】
題目:要求輸出國際象棋棋盤。
1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
2.程序源代碼:
代碼如下:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if((i+j)%2==0)
printf("%c%c",219,219);
else
printf(" ");
printf(" ");
}
getch();
}
;㈡ 有關C語言試題
你看這行嗎? C語言試題(10)選擇題(50×2=100)1.以下敘述正確的是( )。A)在C程序中,main函數必須位於程序的最前面B)C程序的每行中只能寫一條語句C)C語言本身沒有輸入輸出語句D)在對一個C程序進行編譯的過程中,可發現注釋中的拼寫錯誤2.C語言規定:在一個源程序中,main函數的位置( )。A)必須在最開始 B)必須在系統調用的庫函數的後面C)可以任意 D)必須在最後3.在C語言中(以16位PC機為例),5種基本數據類型的存儲空間長度的排列順序為( )。A)char<int <1ong int<=float<doubleB)char=int<1ong int<=float<doubleC)char< int <1ong int=float=doubleD)char=int =1ong int<=float<double4.假設所有變數均為整型,則表達式(a=2,b=5,b++,a+b)的值是( )。 A)7 B)8 C)6 D)25.下面四個選項中,均是C語言關鍵字的選項是( )。A)auto B)switch C)signed D)if enum typedef union struct include continue scanf type6.C語言中的標識符只能由字母、數字和下劃線三種字元組成,且第一個字元( )。 A)必須為字母 B)必須為下劃線 C)必須為字母或下劃線 D)可以是字母,數字和下劃線中任一種字元7.下面四個選項中,均是不合法的轉義字元的選項是( )。 A)'\'' B)'\1011' C)'\011' D)'\abc' '\\' '\' '\f' '\101'8.若有代數式3ae/bc,則不正確的C語言表達式是( )。 A) a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*39.已知各變數的類型說明如下: int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2;則以下符合C語言語法的表達式是( )。A) a+=a-=(b= 4)*(a=3) B)a=a*3=2C) x%(-3) D)y=f1oat(i)10.以下正確的敘述是( )。A)在C程序中,每行中只能寫一條語句B)若a是實型變數,C程序中允許賦值a=10,因此實型變數中允許存放整型數C)在C程序中,無論是整數還是實數,都能被准確無誤地表示D)在C程序中,%是只能用於整數運算的運算符11.已知字母A的ASCII碼為十進制數65,且c2為字元型,則執行語句c2='A'+'6'-'3';後,c2中的值為( )。A)D B)68 C)不確定的值 D)C12.若以下變數均是整型,且num=sum=7;則執行表達式sum=num++,sum++,++num後sum的值為( )。 A) 7 B) 8 C) 9 D) 1013.若有說明語句:char c='\72'則變數c( )。A)包含1個字元 B)包含2個字元C)包含3個字元 D)說明不合法,c的值不確定14.下面四個選項中,均是非法常量的選項是( )。A)'as' B)'\\' c)-0xl8 D)0xabc -0fff '\01' 01177 '\0' '\0xa' 12,456 0xf "a"15.設變數n為f1oat類型,m為int類型,則以下能實現將n中的數值保留小數點後兩位,第三位進行四舍五人運算的表達式是( )。A) n=(n*100+0.5)/100.0 B)m=n*100+0.5 ,n= m/100.0C) n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.016.設C語言中,一個int型數據在內存中佔2個位元組,則unsigned int型數據的取值范圍為( )。A) 0~255 B) 0~32767 C) 0~65535 D) 0~214748364717.若有以下定義,則能使值為3的表達式是( )。int k= 7,x =12;A) x%=(k%= 5) B) x%=(k一k%5)C) x%=k- k%5 D) (x%=k)一(k%=5)18.putchar函數可以向終端輸出一個( )。A)整型變數表達式值B)實型變數值C)字元串D)字元或字元型變數值19.printf函數中用到格式符%5s ,其中數字5表示輸出的字元串佔用5列。如果字元串長度小於5,則輸出按方式( )。A)從左起輸出該字串,右補空格B)按原字元長從左向右全部輸出C)右對齊輸出該字串,左補空格D)輸出錯誤信息20.若x ,y均定義為int型,z定義為double型,以下不合法的scanf函數調用語句是( )。A) scanf(" %d%lx,%le",&x,&y,&z);B) scanf("%2d * %d%lf"&x,&y,&z ); C) scanf("%x %* d%o",&x,&y);D) scanf("%x%o%6.2f",&x,&y,&z); 21.已有定義int x; f1oat y;且執行scanf("%3d%f",&x,&y);語句,若從第一列開始輸入數據12345 678(回車),則x 的值為( )。A)12345 B)123 C) 45 D) 345 22.已有如下定義和輸入語句,若要求a1,a2,c1,c2的值分別為10,20,A,B,當從第一列開始輸入數據時,正確的數據輸入方式是( )。int a1,a2; char c1,c2;scanf("%d%d",&a1,&a2);scanf("%c%c",&c1,&c2); A) 1020AB<CR> B)10 20<CR>AB<CR> C)10 20 AB<CR> D)10 20AB<CR>23.以下能正確地定義整型變數a,b和c 並為其賦初值5的語句是( )。 A)int a=b= c= 5; B) int a,b, c= 5; C)a= 5,b=5,c=5; D) a= b= c=5;24.已知ch是字元型變數,下面正確的賦值語句是( )。A) ch= '123'; B) ch= '\xff'; C) ch= '\08'; D) ch="\";25.設x 、y均為f1oat型變數,則以下不合法的賦值語句是( )。A)++x; B)y=(x%2)/10; C) x*=y+8; D)x=y=0;26.邏輯運算符兩側運算對象的數據類型( )。 A)只能是0或1 B)只能是0或非0正數 C)只能是整型或字元型數據 D)可以是任何類型的數據27.下列運算符中優先順序最高的是( )。 A)< B)十 C)&& D)!=28.設x,y 和z是int型變數,且x = 3,y= 4,z= 5,則下面表達式中值為0的是( )。 A)'y'&&'y' B)x < =y C) x||y+z&&y-z D) !(x<y)&&!z||1)29.判斷char型變數c1是否為小寫字母 正確表達式為( )。 A)' a' <=cl<=' z' B) (cl> = a)&&(cl<=z) C)(' a' >=cl)||(' z' < = cl) D)(c1>='a')&&(cl<='z')30.執行以下語句後a的值為( )。int a,b,c;a= b= c= 1;++a||++b&&++c A)錯誤 B) 0 C) 2 D) 131.以下符合c語言語法的賦值表達式是( )。A)d=9+e+f=d+9 B)J=9+e,f=d+9C)d=9+e,e++,d+9 D)d=9+e++=d+732.若有代數式3ae/bc,則不正確的c語言表達式是( )。A)a/b/c*e*3 B)3*a*e/b/cC)3*a*e/b*c D)a*e/c/b*e33.已知各變數的類型說明如下int k,a,b; unsigned long w=5double x=1.422;則以下不符合c語言語法的表達式是( )。A)x%(-3) B)w+=-2C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)x(a=3)34.已知字母A的ASCII碼為+進制數65,且c2為字元型,則執行語句c2='A'+'6'-'3';後,c2中的值為( )。A)D B) 68C)不確定的值 D)C35.若有以下定義:int a,b ;float x;,則正確的賦值語句是( )。A)a=1,b=2, B)b++;C)a=b=5 D)b=int(x)36.c語言中的標識符只能由字母、數字和下劃線三種字元組成,且第一個字元( )。A)必須為字母B)必須為下劃線C)必須為字母或下劃線D)可以是字母、數字和下劃線中任-種字元37.在c語言中,char型數據在內存中的存儲形式是( )。A)補碼 B)反碼 C)原碼 D)ASCII碼38.若有說明語句:char c='72';則變數c( )。A)包含1個字元 B)2個字元C)包含3個字元 D)說明不合法,c的值不確定39.己知各變數的類型說明如下:int i=8,k,a,b;unsigned long w=55double x=1.42,y=5.2則以下符合c語言語法的表達式是( )。A)+=a-=(b=4)*(a=3) B)a=a*3=2C)x%(-3) D)y=float(i)40.若以下變數均是整型,且num=sum=7;則執行表達式sum=num++, sum++,++num後sum的值為( )。A)7 B)8 C)9 D)1041.若有定義:int a=7;folat x=2.5,y=4.7;則表達式x+a%3*(int)(x+y)%2/4的值是( )。A)2.500000 B)2.750000 C)3.500000 D)0.00000042.設有說明:char w;int x,float y;double z; 則表達式w*x+z-y值的數據類型為( )。A)float B)char C) int D)double43.設變數n為float類型,m為int 類型,則以下能實現將n中的數值保留小數點後兩位,第三位進行四捨五入運算的表達式是( )。A)n=(n*100+0.5)/100.0 B)m=n*100+0.5,n=m/100.0C)n=n*100+0.5/100.0 D)n=(n/100+0.5)*100.044.以下關於運算符優先順序的描述中正確的是( )。A)關系運算符<算術運算符<賦值運算符<邏輯與運算符B)邏輯與運算符<關系運算符<算術運算符<賦值運算符C)賦值運算符<遲輯與運算符<關系運算符<算術運算符D)算術運算符<關系運算符<賦值運算符<邏輯與運算符45.判斷char型變數ch是否為大寫字母的正確表達式是( )。A) 'A'<=ch<='Z' B)(ch>='A')&(ch<='Z')C)(ch>='A')&&(ch<+'Z') D)('A'<=ch)AND('Z'>=ch46.下列運算符中優先順序最高的是( )。A)< B)+ C)&& D)!=47.執行以下語句後a的值為( )。int a=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);A)5 B)0 C)2 D)148.已知 x=43,ch='A',y=0;則表達式(x>=y&&ch<'B'&&!y)的值是( )。A)0 B)語法錯 C)1 D) "假"49.設x、y和s是int型變數,且x=3,y=4,z=5,則下面表達式中值為0的是( )。A)'x'&&'y'B)x<=yC)x||y+z&&y-zD)!((x<y)&&!z50.以下不正確的if語句形式是( )。A) if(x>y&&x!=y)B)if(x==y)x+=y;C)if(x!=y) scanf("%d",&x) else scanf("%d",&y);D) if(x<y){x++;y++;}
㈢ 計算機程序c語言面試常見問題
計算機程序c語言面試常見問題
c語言作為計算機程序設計語言,是考察軟體工程師應聘者技術能力的關鍵。計算機程序c語言面試常見問題,我們來看看。
c語言 面試題 精選(筆試)
單選題部分
1、C語言程序的基本單位是____
A.語句
B.函數
C.程序行
D.字元
答案:B
2、C語言程序由()組成
A.子程序
B.過程
C.函數
D.主程序段程序
答案:C
3、演算法的表示方法有______
A.自然語言,傳統流程圖,N-S流程圖,偽代碼,計算機語言
B.高級語言,匯編語言,機器語言
C.C語言,QBASIC語言,InterDev
D.圖形圖像法,描述法,編程法
E.計算機語言
答案:A
4、下列變數定義中合法的是
A.short_a=1-.le-1;
B.doubleb=1+5e2.5;
C.longdo=0xfdaL;
D.float2_and=1-e-3;
答案:A
5、下面說法中正確的是()
A.int型和long型運算先將int型轉換成unsigned型,再轉換
B.兩個float型運算結果為double型
C.只要表達式中存在double型,所有其他類型數據都必須轉
D.表達式中的'類型轉換與運算順序有關
答案:C
6、以下不正確的敘述是
A.在C程序中,逗號運算符的優先順序最低
B.在C程序中,APH和aph是兩個不同的變數
C.若a和b類型相同,在計算了賦值表達式a=b後b中的值將放入a中,而b中的值不變
D.當從鍵盤輸入數據時,對於整型變數只能輸入整型數值,對於實型變數只能輸入實型數值
答案:D
7、以下說法中正確的是
A.#define和printf都是C語句
B.#define是C語句,而printf不是
C.printf是C語句,但#define不是
D.#define和printf都不是C語句
答案:D
8、若有條件表達式(exp)?a++:b–,則以下表達式中能完全等價於表達式(exp)的是
A.(exp==0
B.(exp!=0)
C.(exp==1)
D.(exp!=1)
答案:B
9、若有說明:inta[3][4]={0};則下面正確的敘述是
A.只有元素a[0][0]可得到初值0
B.此說明語句不正確
C.數組a中各元素都可得到初值,但其值不一定為0
D.數組a中每個元素均可得到初值0
答案:D
c語言面試問答題
1、局部變數能否和全局變數重名?
答:能,局部會屏蔽全局。要用全局變數,需要使用"::"
局部變數可以與全局變數同名,在函數內引用這個變數時,會用到同名的局部變數,而不會用到全局變數。對於有些編譯器而言,在同一個函數內可以定義多個同名的局部變數,比如在兩個循環體內都定義一個同名的局部變數,而那個局部變數的作用域就在那個循環體內。
2、如何引用一個已經定義過的全局變數?
答:extern
可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那麼在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那麼在編譯期間不會報錯,而在連接期間報錯
3、全局變數可不可以定義在可被多個.C文件包含的頭文件中?為什麼?
答:可以,在不同的C文件中以static形式來聲明同名全局變數。
可以在不同的C文件中聲明同名的全局變數,前提是其中只能有一個C文件中對此變數賦初值,此時連接不會出錯。
;㈣ C語言程序設計試題
1.請編程序列印出一張乘法「九九表」。表的樣式如下:
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
2.編程序把從鍵盤輸入的英文短文作為一個字元串(長度不超過30),把短文
中每個單詞的首字母改成大寫,(原輸入可以是大寫),輸出轉換後的字元串。
3.查找長度為10的整型數組,列印其中整數5出現的次數,及每個整數5對應的數組元下標,列印的結果用逗號隔開。若數組中沒有5,也要報告「ther is not number 5」。(數組各元從鍵盤輸入)
4.請用循環結構編程列印出如下字元矩陣
A B C D E Z
Z A B C D E
E Z A B C D
D E Z A B C
C D E Z A B
B C D E Z A
5.請編程計算並輸出整數矩陣周邊各元之和,矩陣的維數為7×4。(矩陣各元從
鍵盤輸入)
6.編一個函數void merger(int a[], int b[], int c[]), 其功能是歸並。把兩個遞增的整型數組a和b, 歸並成遞增數組c。再編一個主函數,輸入兩個遞增數組(一個長度為5,另一個長度為9),調用merger函數,列印歸並後的結果。
7.編程列印所有各位數的立方和等於該整數的三位數。
8.編程從鍵盤輸入一字元串存放在字元型數組s中,將s中的子字元串」shu」都找到,並輸出各子串起始的下標位置。若s中不存在」shu」,也要報告「there is not string shu」。設字元串s有效長度小於40。
9.編程將一個正整數(小於1000)表示成1和質因子的連乘積。如:輸入45,輸出45=1*3*3*5。
10.編程計算方程 的正整數解,並輸出。
11.中國有句俗語「三天打魚兩天曬網」,某人從03年1月1日起三天打魚兩天曬網,編程計算某月某日,他在打魚還是在曬網。某月某日從鍵盤輸入,打魚則輸出1,曬網則輸出0。
12.從鍵盤輸入10名學生的成績,顯示與平均成績最接近的三個成績。
程序設計基礎(C語言)水平測試考核(參考答案)
1.
/*multiply-table */
main()
{ int i,j;
for(i=1;i<10;i++)
{ for(j=1;j<10;j++) printf("%4d",i*j);
printf("\n");
}
}
2.
/*capitalization of prefix*/
main()
{ char a[80];
int i;
gets(a);
for(i=0;a[i];i++)
if((i==0||a[i-1]==' ')&&(a[i]>='a'&&a[i]<='z')) a[i]=a[i]-32;
puts(a);
}
3.
/*search number 10*/
main()
{ int a[10],i,c=0;
for(i=0;i<10;i++) scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(a[i]==5)
{ c++; printf("%d,",i);
}
if(c==0) printf("\nThere is not number 5.\n");
else printf("%d\n",c);
}
4.
/*characters matrix*/
#define N 6
void gosub(char a[],int n)
{ char t;
int i;
t=a[n];
for(i=n;i>0;i--)
a[i]=a[i-1];
a[0]=t;
}
㈤ C語言6個有趣的面試題
C語言6個有趣的面試題
1、gets()函數
問: 請找出下面代碼里的問題。
答:上面代碼里的問題在於函數gets()的使用,這個函數從stdin接收一個字元串而不檢查它所復制的緩存的容積,這可能會導致緩存溢出。這里推薦使用標准函數fgets()代替。
2、main()的返回類型
問:下面的代碼能編譯通過嗎? 如果能,它有什麼潛在的問題嗎?
答:因為main()方法的返回類型,這段代碼的錯誤在大多數編譯器里會被當作警告。main()的返回類型應該是「int」而不是「void」。因為「int」返回類型會讓程序返回狀態值。這點非常重要,特別當程序是作為依賴於程序成功運行的腳本的一部分運行時。
3、內存泄露
問:下面的代碼會導致內存泄漏嗎?
答:盡管上面的代碼並沒有釋放分配給「ptr」的內存,但並不會在程序退出後導致內存泄漏。在程序結束後,所有這個程序分配的內存都會自動被處理掉。但如果上面的代碼處於一個改派仿「while循環」中,那將會導致嚴重的內存泄漏問題!
4、使用_exit退出
問: 在下面的代碼中,atexit()並沒有被調用,為什麼?
答:這是因為_exit()函數的使用,該函數並沒有調用atexit()等函數清理。如果使用atexit()就應當使用exit()或者羨族「return」與之相配合。
5、*和++操作
問:下面的操作會輸出什麼? 為什麼?
答:輸出結果應該是這樣:[L] [i]。因為「++」和「」的優先權一樣,所以「ptr++」相當於「(ptr++)」。即應該先執行ptr++,然後才是ptr,所以操作結果是「L」。第二個結果是「i」。
6、問: 修改代碼片段(或者只讀代碼)
問:下面的代碼段有錯,你能指出來嗎?
答:這是因為,通過*ptr =「T』,會改變內存中代碼段(只讀代碼)「Linux」的第一個字母。這個操作是無效的,因此會造成seg-fault或者崩潰。核纖