❶ c語言筆試題 面試專用 求題目
> 預處理器(Preprocessor)
1. 用預處理指令#define 聲明一個常數,用以表明1年中有多少秒(忽略閏年問題)
#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
我在這想看到幾件事情:
1). #define 語法的基本知識(例如:不能以分號結束,括弧的使用,等等)
2). 懂得預處理器將為你計算常數表達式的值,因此,直接寫出你是如何計算一年中有多少秒而不是計算出實際的值,是更清晰而沒有代價的。
3). 意識到這個表達式將使一個16位機的整型數溢出-因此要用到長整型符號L,告訴編譯器這個常數是的長整型數。
4). 如果你在你的表達式中用到UL(表示無符號長整型),那麼你有了一個好的起點。記住,第一印象很重要。
2. 寫一個「標准」宏MIN,這個宏輸入兩個參數並返回較小的一個。
#define MIN(A,B) ((A) <= (B) (A) : (B))
這個測試是為下面的目的而設的:
1). 標識#define在宏中應用的基本知識。這是很重要的,因為直到嵌入(inline)操作符變為標准C的一部分,宏是方便產生嵌入代碼的唯一方法,對於嵌入式系統來說,為了能達到要求的性能,嵌入代碼經常是必須的方法。
2). 三重條件操作符的知識。這個操作符存在C語言中的原因是它使得編譯器能產生比if-then-else更優化的代碼,了解這個用法是很重要的。
3). 懂得在宏中小心地把參數用括弧括起來
4). 我也用這個問題開始討論宏的副作用,例如:當你寫下面的代碼時會發生什麼事?
least = MIN(*p++, b);
3. 預處理器標識#error的目的是什麼?
如果你不知道答案,請看參考文獻1。這問題對區分一個正常的伙計和一個書獃子是很有用的。只有書獃子才會讀C語言課本的附錄去找出象這種問題的答案。當然如果你不是在找一個書獃子,那麼應試者最好希望自己不要知道答案。
死循環(Infinite loops)
4. 嵌入式系統中經常要用到無限循環,你怎麼樣用C編寫死循環呢?
這個問題用幾個解決方案。我首選的方案是:
while(1)
{
}
一些程序員更喜歡如下方案:
for(;;)
{
}
這個實現方式讓我為難,因為這個語法沒有確切表達到底怎麼回事。如果一個應試者給出這個作為方案,我將用這個作為一個機會去探究他們這樣做的
基本原理。如果他們的基本答案是:「我被教著這樣做,但從沒有想到過為什麼。」這會給我留下一個壞印象。
第三個方案是用 goto
Loop:
...
goto Loop;
應試者如給出上面的方案,這說明或者他是一個匯編語言程序員(這也許是好事)或者他是一個想進入新領域的BASIC/FORTRAN程序員。
數據聲明(Data declarations)
5. 用變數a給出下面的定義
a) 一個整型數(An integer)
b) 一個指向整型數的指針(A pointer to an integer)
c) 一個指向指針的的指針,它指向的指針是指向一個整型數(A pointer to a pointerto an integer)
d) 一個有10個整型數的數組(An array of 10 integers)
e) 一個有10個指針的數組,該指針是指向一個整型數的(An array of 10 pointers tointegers)
f) 一個指向有10個整型數數組的指針(A pointer to an array of 10 integers)
g) 一個指向函數的指針,該函數有一個整型參數並返回一個整型數(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一個有10個指針的數組,該指針指向一個函數,該函數有一個整型參數並返回一個整型數( An array of ten pointers to functions that take an integer argument and return an integer )
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argumentand returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
人們經常聲稱這里有幾個問題是那種要翻一下書才能回答的問題,我同意這種說法。當我寫這篇文章時,為了確定語法的正確性,我的確查了一下書。但是當我被面試的時候,我期望被問到這個問題(或者相近的問題)。因為在被面試的這段時間里,我確定我知道這個問題的答案。應試者如果不知道所有的答案(或至少大部分答案),那麼也就沒有為這次面試做准備,如果該面試者沒有為這次面試做准備,那麼他又能為什麼出准備呢?
Static
6. 關鍵字static的作用是什麼?
這個簡單的問題很少有人能回答完全。在C語言中,關鍵字static有三個明顯的作用:
1). 在函數體,一個被聲明為靜態的變數在這一函數被調用過程中維持其值不變。
2). 在模塊內(但在函數體外),一個被聲明為靜態的變數可以被模塊內所用函數訪問,但不能被模塊外其它函數訪問。它是一個本地的全局變數。
3). 在模塊內,一個被聲明為靜態的函數只可被這一模塊內的其它函數調用。那就是,這個函數被限制在聲明它的模塊的本地范圍內使用。
大多數應試者能正確回答第一部分,一部分能正確回答第二部分,同是很少的人能懂得第三部分。這是一個應試者的嚴重的缺點,因為他顯然不懂得本地化數據和代碼范圍的好處和重要性。
Const
7.關鍵字const是什麼含意?
我只要一聽到被面試者說:「const意味著常數」,我就知道我正在和一個業余者打交道。去年Dan Saks已經在他的文章里完全概括了const的所有用法,因此ESP(譯者:EmbeddedSystems Programming)的每一位讀者應該非常熟悉const能做什麼和不能做什麼.如果你從沒有讀到那篇文章,只要能說出const意味著「只讀」就可以了。盡管這個答案不是完全的答案,但我接受它作為一個正確的答案。(如果你想知道更詳細的答案,仔細讀一下Saks的文章吧。)如果應試者能正確回答這個問題,我將問他一個附加的問題:下面的聲明都是什麼意思?
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
前兩個的作用是一樣,a是一個常整型數。第三個意味著a是一個指向常整型數的指針(也就是,整型數是不可修改的,但指針可以)。第四個意思a是一個指向整型數的常指針(也就是說,指針指向的整型數是可以修改的,但指針是不可修改的)。最後一個意味著a是一個指向常整型數的常指針(也就是說,指針指向的整型數是不可修改的,同時指針也是不可修改的)。如果應試者能正確回答這些問題,那麼他就給我留下了一個好印象。順帶提一句,也許你可能會問,即使不用關鍵字const,也還是能很容易寫出功能正確的程序,那麼我為什麼還要如此看重關鍵字const呢?我也如下的幾下理由:
1). 關鍵字const的作用是為給讀你代碼的人傳達非常有用的信息,實際上,聲明一個參數為常量是為了告訴了用戶這個參數的應用目的。如果你曾花很多時間清理其它人留下的垃圾,你就會很快學會感謝這點多餘的信息。(當然,懂得用const的程序員很少會留下的垃圾讓別人來清理的。)
2). 通過給優化器一些附加的信息,使用關鍵字const也許能產生更緊湊的代碼。
3). 合理地使用關鍵字const可以使編譯器很自然地保護那些不希望被改變的參數,防止其被無意的代碼修改。簡而言之,這樣可以減少bug的出現。
Volatile
8. 關鍵字volatile有什麼含意 並給出三個不同的例子。
一個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用保存在寄存器里的備份。下面是volatile變數的幾個例子:
1). 並行設備的硬體寄存器(如:狀態寄存器)
2). 一個中斷服務子程序中會訪問到的非自動變數(Non-automatic variables)
3). 多線程應用中被幾個任務共享的變數回答不出這個問題的人是不會被僱傭的。我認為這是區分C程序員和嵌入式系統程序員的最基本的問題。嵌入式系統程序員經常同硬體、中斷、RTOS等等打交道,所用這些都要求volatile變數。不懂得volatile內容將會帶來災難。假設被面試者正確地回答了這是問題(嗯,懷疑這否會是這樣),我將稍微深究一下,看一下這傢伙是不是直正懂得volatile完全的重要性。
1). 一個參數既可以是const還可以是volatile嗎?解釋為什麼。
2). 一個指針可以是volatile 嗎?解釋為什麼。
3). 下面的函數有什麼錯誤:
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
下面是答案:
1). 是的。一個例子是只讀的狀態寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它。
2). 是的。盡管這並不很常見。一個例子是當一個中服務子程序修該一個指向一個buffer的指針時。
3). 這段代碼的有個惡作劇。這段代碼的目的是用來返指針*ptr指向值的平方,但是,由於*ptr指向一個volatile型參數,編譯器將產生類似下面的代碼:
int square(volatile int *ptr)
{
int a,b;
a = *ptr;
b = *ptr;
return a * b;
}
由於*ptr的值可能被意想不到地該變,因此a和b可能是不同的。結果,這段代碼可能返不是你所期望的平方值!正確的代碼如下:
long square(volatile int *ptr)
{
int a;
a = *ptr;
return a * a;
}
位操作(Bit manipulation)
9. 嵌入式系統總是要用戶對變數或寄存器進行位操作。給定一個整型變數a,寫兩段代碼
,第一個設置a的bit 3,第二個清除a 的bit 3。在以上兩個操作中,要保持其它位不變。
對這個問題有三種基本的反應
1). 不知道如何下手。該被面者從沒做過任何嵌入式系統的工作。
2). 用bit fields。Bit fields是被扔到C語言死角的東西,它保證你的代碼在不同編譯器之間是不可移植的,同時也保證了的你的代碼是不可重用的。我最近不幸看到Infineon為其較復雜的通信晶元寫的驅動程序,它用到了bit fields因此完全對我無用,因為我的編譯器用其它的方式來實現bit fields的。從道德講:永遠不要讓一個非嵌入式的傢伙粘實際硬體的邊。
3). 用 #defines 和 bit masks 操作。這是一個有極高可移植性的方法,是應該被用到的
方法。最佳的解決方案如下:
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{
a |= BIT3;
}
void clear_bit3(void)
{
a &= ~BIT3;
}
一些人喜歡為設置和清除值而定義一個掩碼同時定義一些說明常數,這也是可以接受的。
我希望看到幾個要點:說明常數、|=和&=~操作。
訪問固定的內存位置(Accessing fixed memory locations)
10. 嵌入式系統經常具有要求程序員去訪問某特定的內存位置的特點。在某工程中,要求設置一絕對地址為0x67a9的整型變數的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫代碼去完成這一任務。
這一問題測試你是否知道為了訪問一絕對地址把一個整型數強制轉換(typecast)為一指
針是合法的。這一問題的實現方式隨著個人風格不同而不同。典型的類似代碼如下:
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa55;
一個較晦澀的方法是:
*(int * const)(0x67a9) = 0xaa55;
即使你的品味更接近第二種方案,但我建議你在面試時使用第一種方案。
中斷(Interrupts)
11. 中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴展—讓標准C支持中斷。具代表事實是,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一個中斷服務子程序(ISR),請評論一下這段代碼的。
__interrupt double compute_area (double radius)
{
double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
這個函數有太多的錯誤了,以至讓人不知從何說起了:
1). ISR 不能返回一個值。如果你不懂這個,那麼你不會被僱用的。
2). ISR 不能傳遞參數。如果你沒有看到這一點,你被僱用的機會等同第一項。
3). 在許多的處理器/編譯器中,浮點一般都是不可重入的。有些處理器/編譯器需要讓額
處的寄存器入棧,有些處理器/編譯器就是不允許在ISR中做浮點運算。此外,ISR應該是短而有效率的,在ISR中做浮點運算是不明智的。
4). 與第三點一脈相承,printf()經常有重入和性能上的問題。如果你丟掉了第三和第四點,我不會太為難你的。不用說,如果你能得到後兩點,那麼你的被僱用前景越來越光明了。
代碼例子(Code examples)
12 . 下面的代碼輸出是什麼,為什麼?
void foo(void)
{
unsigned int a = 6;
int b = -20;
(a+b > 6) puts("> 6") : puts("<= 6");
}
這個問題測試你是否懂得C語言中的整數自動轉換原則,我發現有些開發者懂得極少這些東西。不管如何,這無符號整型問題的答案是輸出是「>6」。原因是當表達式中存在有符號類型和無符號類型時所有的操作數都自動轉換為無符號類型。因此-20變成了一個非常大的正整數,所以該表達式計算出的結果大於6。這一點對於應當頻繁用到無符號數據類型的嵌入式系統來說是豐常重要的。如果你答錯了這個問題,你也就到了得不到這份工作的邊緣。
13. 評價下面的代碼片斷:
unsigned int zero = 0;
unsigned int compzero = 0xFFFF;
/*1's complement of zero */
對於一個int型不是16位的處理器為說,上面的代碼是不正確的。應編寫如下:
unsigned int compzero = ~0;
這一問題真正能揭露出應試者是否懂得處理器字長的重要性。在我的經驗里,好的嵌入式程序員非常准確地明白硬體的細節和它的局限,然而PC機程序往往把硬體作為一個無法避免的煩惱。
到了這個階段,應試者或者完全垂頭喪氣了或者信心滿滿志在必得。如果顯然應試者不是很好,那麼這個測試就在這里結束了。但如果顯然應試者做得不錯,那麼我就扔出下面的追加問題,這些問題是比較難的,我想僅僅非常優秀的應試者能做得不錯。提出這些問題,我希望更多看到應試者應付問題的方法,而不是答案。不管如何,你就當是這個娛樂吧
…
動態內存分配(Dynamic memory allocation)
14. 盡管不像非嵌入式計算機那麼常見,嵌入式系統還是有從堆(heap)中動態分配內存的過程的。那麼嵌入式系統中,動態分配內存可能發生的問題是什麼?
這里,我期望應試者能提到內存碎片,碎片收集的問題,變數的持行時間等等。這個主題已經在ESP雜志中被廣泛地討論過了(主要是 P.J. Plauger, 他的解釋遠遠超過我這里能提到的任何解釋),所有回過頭看一下這些雜志吧!讓應試者進入一種虛假的安全感覺後,我拿出這么一個小節目:下面的代碼片段的輸出是什麼,為什麼?
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts("Got a null pointer");
else
puts("Got a valid pointer");
這是一個有趣的問題。最近在我的一個同事不經意把0值傳給了函數malloc,得到了一個合法的指針之後,我才想到這個問題。這就是上面的代碼,該代碼的輸出是「Got a validpointer」。我用這個來開始討論這樣的一問題,看看被面試者是否想到庫常式這樣做是正確。得到正確的答案固然重要,但解決問題的方法和你做決定的基本原理更重要些。
Typedef
15. Typedef 在C語言中頻繁用以聲明一個已經存在的數據類型的同義字。也可以用預處理
器做類似的事。例如,思考一下下面的例子:
#define dPS struct s *
typedef struct s * tPS;
以上兩種情況的意圖都是要定義dPS 和 tPS 作為一個指向結構s指針。哪種方法更好呢?(如果有的話)為什麼?
這是一個非常微妙的問題,任何人答對這個問題(正當的原因)是應當被恭喜的。答案是
:typedef更好。思考下面的例子:
dPS p1,p2;
tPS p3,p4;
第一個擴展為
struct s * p1, p2;
上面的代碼定義p1為一個指向結構的指,p2為一個實際的結構,這也許不是你想要的。第二個例子正確地定義了p3 和p4 兩個指針。
晦澀的語法
16. C語言同意一些令人震驚的結構,下面的結構是合法的嗎,如果是它做些什麼?
int a = 5, b = 7, c;
c = a+++b;
這個問題將做為這個測驗的一個愉快的結尾。不管你相不相信,上面的例子是完全合乎語法的。問題是編譯器如何處理它?水平不高的編譯作者實際上會爭論這個問題,根據最處理原則,編譯器應當能處理盡可能所有合法的用法。因此,上面的代碼被處理成:
c = a++ + b;
因此, 這段代碼持行後a = 6, b = 7, c = 12。
如果你知道答案,或猜出正確答案,做得好。如果你不知道答案,我也不把這個當作問題。我發現這個問題的最大好處是:這是一個關於代碼編寫風格,代碼的可讀性,代碼的可修改性的好的話題
❷ C語言 考試題
1、一個C語言程序的語句至少應包含一個___main函數___。
2、C語言源程序文件的擴展名是__ .C ____,經過編譯、連接後,生成文件的擴展名是__ .h ____。
3、結構化程序由順序結構、___選擇___和___循環___三種基本結構組成。
4、C語言的執行是從____main函數__開始執行的。
5、C源程序的語句分隔符是___分號___。
6、在C語言中,用關鍵字_____float_定義單精度實型變數。
7、表達式S=12應當讀做「___把12賦值給S___」。
8、C語言源程序的基本單位是___函數___。
9、設int x=9,y=8;表達式x-=y+1的結果是___0___。
10、若a為整型變數,a=12,則表達式:a * =2+3的值___60__。
11、調用C語言對輸入輸出處理的庫函數時,在# include命令行中應包含的頭文件是___stdio.h___。
12、表達式9%5的結果是__4____。
13、若a為整型變數,a=12,則表達式:a+=4的值_16_____。
14、 在C語言中,要求運算數必須是整型的運算符是__%____。
15、在C語言中,用____非零整數__表示邏輯「真」值。
16、表達式10/3的結果是__3____。
17、通常一個位元組包含__8____個二進制位。
18、 假設所有變數均為整型,a=2,b=5,b++則表達式a+b的值是_8_____。
19、在C語言中,最基本的數據類型只有四種,它們分別是:_int_____、___float___、__char____和double。
20、一個C程序有且僅有一個____main__函數。
21、若a為整型變數,a=12,則表達式:a-=2的值_10____。
22、在C語言中,有三種邏輯運算符,它們分別是:__與____、___或___、__非____。
23、在C語言中,字元輸入函數和字元輸出函數分別是:__getchar____和___putchar___。
24、C程序開發的四個步驟是___輸入與編輯源程序___、__編譯____、__連接____和執行。
25、C程序的結構分別是:順序結構、__選擇結構____、__循環結構____。
26、if語句中的表達式可以是關系表達式、__算術表達式____、__賦值表達式____。
27、__x>y_?x:y___是C語言中惟一一個三元運算符。
28、C語言提供的預處理命令主要包括如下三種:宏定義、__文件包含____、___條件編譯___。
二、閱讀程序,寫出下列程序運行結果。
1、2
2、K
3、a 97
4、無結果
三、編寫程序
1、編寫一個C程序,輸入a、b、c 3個數,輸出其中最大的數。
#include<stdio.h>
Void main()
{
Int a,b,c;
Printf("請輸入三個數");
Scanf(%d%d%d,&a,&b,&c);
If(a<b)
A=b;
If(a<c)
A=c;
Printf("最大的數:%d",a);
}
求1—50的之和。
#include<stdio.h>
Void mian()
{
Int sum=0,i;
For(i=1;i<=50;i++)
Sum+=i;
Printf("1-50之和為:%d",sum);
}
從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。
#include<stdio.h>
Void mian()
{
Char c;
Printf("請輸入一個字母");
Scanf("%c".&c);
Printf("它的小寫字母為%c",c+32);
}
利用while語句,計算1+1/2+1/4+…+1/100的值,並顯示出來。
#include<stdio.h>
Void mian()
{
Float sum=0,temp;
Int i =1;
While(i<=100)
{
Temp=1/i;
Sum+=temp;
I++
}
Printf("結果為%d",sum);
}
輸入兩個整數,輸出其中的大數。
#include<stdio.h>
Void mian()
{
Int a,b;
Printf("請輸入兩個數");
Scanf("%d%d".&a,&b);
Printf("大數是:%d"a>b?a:b);
}
6、利用while語句,計算1+1/3+1/5+…+1/99的值,並顯示出來。
#include<stdio.h>
Void mian()
{
Int i =1;
Float sum=0,temp=0;
While(i<=99)
{
Temp =1/i;
Sum+=temp;
I=i+2;
}
Printf("結果為: %f",sum),
}
打字不易,如滿意,望採納。
❸ 求二級C語言筆試題庫
2006年4月二級C語言筆試試題
一選擇題((1)-(10)每題2分,(11)-(50)每題1分,共60分)
下列各題A)、B)、C)、D)四個選項中,只有一個選項是正確的,請將正確選項塗寫在答題卡相應位置上,答在試卷上不得分。
1)下列選項中不屬於結構化程序設計方法的是
A) 自頂向下
B)逐步求精
C)模塊化
D)可復用
2)兩個或兩個以上模塊之間關聯的緊密程度稱為
A)耦合度
B)內聚度
C)復雜度
D)數據傳輸特性
3)下列敘述中正確的是
A)軟體測試應該由程序開發者來完成
B)程序經調試後一般不需要再測試
C)軟體維護只包括對程序代碼的維護
D)以上三種說法都不對
4)按照「後進先出」原則組織數據的數據結構是
A)隊列
B)棧
C)雙向鏈表
D)二叉樹
5)下列敘述中正確的是
A)線性鏈表是線性表的鏈式存儲結構
B)棧與隊列是非線性結構
C)雙向鏈表是非線性結構
D)只有根結點的二叉樹是線性結構
6)對如下二叉樹
進行後序遍歷的結果為
A) ABCDEF
B) DBEAFC
C) ABDECF
D) DEBFCA
7)在深度為7的滿二叉樹中,葉子結點的個數為
A)32
B)31
C)64
D)63
8)「商品」與「顧客」兩個實體集之間的聯系一般是
A)一對一
B)一對多
C)多對一
D)多對多
9)在E-R圖中,用來表示實體的圖形是
A)矩形
B)橢圓形
C)菱形
D)三角形
10)資料庫DB,資料庫系統DBS,資料庫管理系統DBMS之間的關系是
A)DB包含DBS和DBMS
B)DBMS包含DB和DBS
C)DBS包含DB和DBMS
D)沒有任何關系
11)以下不合法的用戶標識符是
A)j2_KEY
B)Double
C) 4d
D) _8_
12)以下不合法的數值常量是
A)011
B)lel
C) 8.0 E0.5
D) 0xabcd
13)以下不合法的字元常量是
A)'\018'
B '\」'
C) '\\'
D) 『\xcc'
14)表達式3.6-5/2+1.2+5%2的值是
A)4.3
B) 4.8
C) 3.3
D) 3.8
15)以下能正確定義字元串的語句是
A)char str[]={『\064'};
B) char str=」\x43」;
C) char str=」;
D) char str[]=」\0」;
16)以下數組定義中錯誤的是
A) int x[][3]={0};
B) int x[2][3]={{1,2},{3,4},{5,6}};
C) nt x[][3]={{1,2,3},{4,5,6}};
D)int x[2][3]={1,2,3,4,5,6};
17)若要求從鍵盤讀入含有空格字元的字元串,應使用函數
A)getc()
B) gets()
C) getchar()
D) scanf()
18) 下四個程序中,完全正確的是
A)#include B)#include
main(); main()
{/*programming*/ {/*/programming/*/
printf(「programming!\n」); } printf(「programming!\n」);}
C) #include D) include
main() main()
{/*/*programming*/*/ {/*programming*/
printf(「programming!\n」);} printf(「programming!\n」);}
19)若有定義:float x=1.5; int a=1,b=3,c=2;則正確的switch語句是
A)switch(x) B) switch((int)x);
{case 1.0: printf(「*\n」); {case 1: printf(「*\n」);
Case 2.0: printf(「**\n」); } case 2: printf(「**\n」);}
C) switch(a+b) D) switch(a+b)
{ case 1: printf(「*\n」); {case 1: printf(*\n」);
case 2+1: printf(「**\n」);} case c: printf(「**\n」);}
20)若各選項中所用變數已正確定義,函數fun中通過return語句返回一個函數值,以下選項中錯誤的程序是
A)main() B) float fun(int a,int b){……}
{……x=fun(2,10);……} main()
float fun(int a,int b){……} {……x=fun(i,j);……}
C)float fun(int,int); D) main()
main() { float fun(int i,int j);
{……x=fun(2,10);……} ……x=fun(i,j);……}
float fun(int a,int b){……} float fun(int a,int b){……}
21)在以下給出的表達式中,與while(E)中的(E)不等價的表達式是
A)(!E=0)
B) (E>0||E<0)
C) (E==0)
D) (E!=0)
22)要求通過while循環不斷讀入字元,當讀入字母N時結束循環。若變數已正確定義,以下正確的程序段是
A) while((ch=getchar())!='N') printf(「%c」,ch);
B) while(ch=getchar()!='N') printf(「%c」,ch);
C) while(ch=getchar()==N') printf(「%c」,ch);
D) while((ch=getchar())=='N') printf(「%c」,ch);
23)已定義以下函數
int fun(int *p)
{return *p;}
fun 函數返回值是
A)不確定的值
B)一個整數
C)形參p中存放的值
D)形參p的地址值
24)若有說明語句:double *p,a;則能通過scanf語句正確給輸入項讀入數據的程序段是
A)*p=&a; scanf(「%lf」,p);
B)*p=&a; scanf(「%f」,p);
C) p=&a; scanf(「%lf」,*p);
D)p=&a; scanf(「%lf」,p);
25)現有以下結構體說明和變數定義,如圖所示,指針p,q,r分別指向一個鏈表中連續的三個結點。
struct node
{
char data;
struct node *next;
}*p,*q,*r;
現要將q和r所指結點交換前後位置,同時要保持鏈表的連續,以下不能完成此操作的語句是
A)q->next=r->next; p->next=r; r->next=q;
B) p->next=r; q->next=r->next; r-.next=q;
C) q->next=r->next; r->next=q; p->next=r;
D) r->next=q; p-next=r; q-next=r->next;
26)有以下程序段
struct st
{ int x; int *y;}*pt:
int a[]={1,2},b[]={3,4};
struct st c[2]={10,a,20,b};
pt=c;
以下選項中表達式的值為11的是
A) *pt->y
B) pt->x
C) ++pt->x
D) (pt++)->x
27)設fp為指向某二進制文件的指針,且已讀到此文件末尾,則函數feof(fp)的返回值為
A)EOF
B)非0值
C) 0
D)NULL
28)設有以下語句
int a=1,b=2,c;
c=a^(b<<2);
執行後,c的值為
A)6
B) 7
C) 8
D) 9
29)有以下程序
#include
main()
{
char c1,c2,c3,c4,c5,c6;
scanf(「%c%c%c%c」,&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1); putchar(c2);
printf(「%c%c\n」,c5,c6);
}
程序運行後,若從鍵盤輸入(從第1列開始)
123<回車>
45678<回車>
則輸出結果是
A)1267
B)1256
C) 1278
D)1245
30)若有以下程序
main()
{int y=10;
while(y- -); printf(「y=%d\n」y);
}
程序運行後的輸出結果是
A)y=0
B)y=-1
C) y=1
D)while構成無限循環
31)有以下程序
main()
{
int a=0,b=0,c=0,d=0;
if(a=1) b=1;c=2;
else d=3;
printf(「%d,%d,%d,%d\n」,a,b,c,d);
}
程序輸出
A)0,1,2,0
B) 0,0,0,3
C)1,1,2,0
D)編譯有錯
32)有以下程序
main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<=3;j++)
{
if(j%2) continue;
x++;
}
x++;
}
printf(「x=%d\n」,x);
}
程序執行後的輸出結果是
A)x=4
B) x=8
C) x=6
D) x=12
33)有以下程序
int fun1(oble a){return a*=a;}
int fun2(dpuble x,double y)
{
double a=0,b=0;
a=fun1(x); b=fun1(y); return (int)(a+b);
}
main()
{double w; w=fun2(1.1,2.0);……}
程序執行後變數w中的值是
A)5.21
B) 5
C) 5.0
D) 0.0
34)有以下程序
main()
{
int i,t[][3]={9,8,7,6,5,4,3,2,1};
for(i=0;i<3;i++) printf(「%d」,t[2-i][i]);
}
程序的執行後的輸出結果是
A)7 5 3
B) 3 5 7
C)3 6 9
D)7 5 1
35)有以下程序
fun(char p[][10])
{int n=0,i;
for(i=0;i<7;i++)
if(p[i][0]=='T') n++;
return n;
}
main()
{
char str[][10]={「Mon」, 「Tue」, 「Wed」, 「Thu」,」Fri」,」Sat」,」Sun」};
printf(「%d\n」,fun(str));
}
程序執行後的輸出結果是
A)1
B) 2
C)3
D) 0
36有以下程序
main()
{
int i,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2) s+=*(t+i);
printf(「%d\n」,s);
}
程序執行後的輸出結果是
A)45
B)20
C)25
D)36
37)有以下程序
void fun1(char *p)
{
char *q;
q=p;
while(*q!='\0')
{ (*q)++; q++; }
}
main()
{ char a[]={「Program」},*p;
p=&a[3]; fun1(p); printf(「%s\n」,a);
}
程序執行後的輸出結果是
A)P rohsbn
B)Prphsbn
C)Progsbn
D)Program
38)有以下程序
void swap(char *x,char *y)
{
char t;
t=*x; *x=*y; *y=t;
}
main()
{
char *s1=」abc」,*s2=」123」;
swap(s1,s2); printf(「%s,%s\n」,s1,s2);
}
程序執行後的輸出結果是
A)123,abc
B) abc,123
C)1bc,a23
D) 321,cba
39)有以下程序
int fun(int n)
{
if(n==1) return 1;
else
return (n+fun(n-1));
}
main()
{
int x;
scanf(「%d」,&x); x=fun(x); printf(「%d\n」,x);
}
程序執行時,給變數x輸入10,程序的輸出結果是
A)55
B) 54
C) 65
D) 45
40)有以下程序
int fun(int x[],int n)
{static int sum=0,i;
for(i=0;i sum+=x[i];
return sum;
}
main()
{int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4); printf(「%d\n」,s);
}
程序執行後的輸出結果是
A)45
B)50
C)60
D)55
41)有以下程序
main()
{
union {
char ch[2];
int d;
}s;
s.d=0x4321;
printf(「%x,%x\n」,s.ch[0],s.ch[1]);
}
在16位編譯系統上,程序執行後的輸出結果是
A)21,43
B)43,21
C)43,00
D)21,00
42)有以下程序
main()
{
char *p[]={「3697」,」2584」};
int i,j; long num=0;
for(i=0;i<2;i++)
{j=0;
while(p[i][j]!='\0')
{ if((p[i][j]-『0')%2)num=10*num+p[i][j]-『0';
j+=2;
} }
printf(「%d\n」num);
}
程序執行後的輸出結果是
A)35
B)37
C)39
D)3975
43)執行以下程序後,test.txt文件的內容是(若文件能正常打開)
#include
main()
{
FILE *fp;
char *s1=」Fortran」,*s2=」Basic」;
if((fp=fopen(「test.txt」,」wb」))==NULL)
{ printf(「Can't open test.txt file\n」); exit(1);}
fwrite(s1,7,1,fp); /*把從地址s1開始的7個字元寫到fp所指文件中*/
fseek(fp,0L,SEEK_SET); /*文件位置指針移到文件開頭*/
fwrite(s2,5,1,fp);
fclose(fp);
}
A)Basican
B)BasicFortran
C)Basic
D)FortranBasic
44)以下敘述中錯誤的是
A)C語言源程序經編譯後生成後綴為.obj的目標程序
B)C語言經過編譯、連接步驟之後才能形成一個真正可執行的二進制機器指令文件
C)用C語言編寫的程序稱為源程序,它以ASCII代碼形式存放在一個文本文件中
D)C語言的每條可執行語句和非執行語句最終都將被轉換成二進制的機器指令
45)以下敘述中錯誤的是
A)演算法正確的程序最終一定會結束
B)演算法正確的程序可以有零個輸出
C)演算法正確的程序可以有零個輸入
D)演算法正確的程序對於相同的輸入一定有相同的結果
46)以下敘述中錯誤的是
A)C程序必須由一個或一個以上的函數組成
B)函數調用可以作為一個獨立的語句存在
C)若函數有返回值,必須通過return語句返回
D)函數形參的值也可以傳回對應的實參
47)設有以下定義和語句
char str[20]=」Program」,*p;
p=str;
則以下敘述中正確的是
A)*p與str[0]中的值相等
B)str與p的類型完全相同
C)str數組長度和p所指向的字元串長度相等
D)數組str中存放的內容和指針變數p中存放的內容相同
48)以下敘述中錯誤的是
A)C程序中的#include和#define行均不是C語句
B)除逗號運算符外,賦值運算符的優先順序最低
C)C程序中,j++;是賦值語句
D)C程序中,+、-、*、/、%號是算術運算符,可用於整型和實型數的運算
49)以下敘述中正確的是
A)預處理命令行必須位於C源程序的起始位置
B)在C語言中,預處理命令行都以「#」開頭
C)每個C程序必須在開頭包括預處理命令行:#include
D)C語言的預處理不能實現宏定義和條件編譯的功能
50)以下敘述中錯誤的是
A)可以通過typedef增加新的類型
B)可以用typedef將已存在的類型用一個新的名字來代表
C)用typedef定義新的類型名後,原有類型名仍有效
D)用typedef可以為各種類型起別名,但不能為變數起別名
二:填空題(每空2分,共40分)
請將每一個空的正確答案寫在答題卡[1]至[20]序號的橫線上,答在試卷上不得分
1)對長度為10的線性表進行冒泡排序,最壞情況下需要比較的次數為_______[1]________。
2)在面向對象方法中,_____[2]______描述的是具有相似屬性與操作的一組對象。
3)在關系模型中,把數據看成是二維表,每一個二維表稱為一個___[3]_____。
4)程序測試分為靜態分析和動態測試,其中__[4]______是指不執行程序,而只是對程序文本進行檢查,通過閱讀和討論,分析和發現程序中的錯誤。
5)數據獨立性分為邏輯獨立性與物理獨立性,當數據的存儲結構改變時,其邏輯結構可以不變,因此,基於邏輯結構的應用程序不必修改,稱為_[5]______。
6)若變數a,b已定義為int類型並賦值21和55,要求用printf函數以a=21,b=55的形式輸出,請寫出完整的輸出語句__[6]____。
7)以下程序用於判斷a,b,c能否構成三角形,若能輸出YES,若不能輸出NO。當a,b,c輸入三角形三條邊長時,確定a,b,c能構成三角形的條件是需要同時滿足三條件:a+b>c,a+c>b,b+c>a。 請填空。
main()
{
float a,b,c;
scanf(「%f%f%f」,&a,&b,&c);
if(__[7]__)printf(「YES\n」);/*a,b,c能構成三角形*/
else printf(「NO\n」);/*a,b,c不能構成三角形*/
}
8)以下程序的輸出結果是__[8]_____
main()
{ int a[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];
printf(「%d\n」,s);
}
9)當運行以下程序時,輸入abcd,程序的輸出結果是:_[9]____。
insert(char str[])
{ int i;
i=strlen(str);
while(i>0)
{ str[2*i]=str[i]; str[2*i-1]='*';i--;}
printf(「%s\n」,str);
}
main()
{char str[40];
scanf(「%s」,str ); insert(str);
}
10)以下程序的運行結果是:__[10]____
fun(int t[],int n)
{ int i,m;
if(n==1) return t[0];
else
if(n>=2) {m=fun(t,n-1); return m;}
}
main()
{
int a[]={11,4,6,3,8,2,3,5,9,2};
printf(「%d\n」,fun(a,10));
}
11)現有兩個C程序文件T18.c和myfun.c同時在TC系統目錄(文件夾)下,其中T18.c文件如下:
#include
#include」myfun.c」
main()
{ fun(); printf(「\n」); }
myfun.c文件如下:
void fun()
{ char s[80],c; int n=0;
while((c=getchar())!='\n') s[n++]=c;
n--;
while(n>=0) printf(「%c」,s[n--]);
}
當編譯連接通過後,運行程序T18時,輸入Thank!則輸出的結果是:___[11] 。
12)以下函數fun的功能是返回str所指字元串中以形參c中字元開頭的後續字元串的首地址,例如:str所指字元串為Hello!, c中的字元為e,則函數返回字元串:ello!的首地址。若str所指字元串為空串或不包含c中的字元,則函數返回NULL。請填空。
char *fun(char *str,char c)
{ int n=0;char *p=str;
if(p!=NULL)
while(p[n]!=c&&p[n]!='\0') n++;
if(p[n]=='\0' return NULL;
return (_[12]_);
}
13)以下程序的功能是:輸出100以內(不含100)能被3整除且個位數為6的所有整數,請填空。
main()
{ int i,j;
for(i=0;__[13]__;i++)
{ j=i*10+6;
if(_[14]____) continue;
printf(「%d 」,j);
}
}
14)以下isprime函數的功能是判斷形參a是否為素數,是素數,函數返回1,否則返回0,請填空
int isprime(int a)
{ int i;
for(i=2;i<=a/2;i++)
if(a%i==0) __[15]___;
__[16]___;
}
15)以下程序的功能是輸入任意整數給n後,輸出n行由大寫字母A開始構成的三角形字元陣列圖形,例如,輸入整數5時(注意:n不得大於10),程序運行結果如下:
A B C D E
F G H I
J K L
M N
O
請填空完成該程序。
main()
{ int i,j,n; char ch='A';
scanf(「%d」,&n);
if(n<11)
{
for(i=1;i<=n;i++)
{ for(j=1;j<=n-i+1;j++)
{ printf(「%2c」,ch);
___[17]____;
}
【18】
}
}
else printf(「n is too large!\n」);
printf(「\n」);
}
16)以下程序中函數fun的功能是:構成一個如圖所示的帶頭結點的單向鏈表,在結點數據域中放入了具有兩個字元的字元串。函數disp的功能是顯示輸出該單鏈表中所有結點中的字元串。請填空完成函數disp。
#include
typedef struct node /*鏈表結點結構*/
{ char sub[3];
Struct node *next;
}Node;
Node fun(char s) /*建立鏈表*/
{ …… }
void disp(Node *h)
{
Node *p;
p=h->next;
While(【19】)
{
printf(「%s\n」,p->sub); p=【20】;}
}
main()
{
Node *hd;
hd=fun(); disp(hd); printf(「\n」);
}
答案
一、選擇題
1-10 : DADBA DCDAC
11-20:CCADD BBBCA
21-30:CABDD CBDDD
31-40:DBCBB CACAC
41-50:ACADB DADBA
二、填空題
1、45
2、類
3、關系
4、靜態分析
5、物理獨立性
6、printf("a=%d,b=%d",a,b)
7、(a+b>c)&&(a+c>b)&&(b+c>a)
8、30
9、a*b*c*d*
10、11
11、!knahT
12、p+n 或 str+n
13、i<=9 或 i<10
14、j%3!=0
15、return 0
16、return 1
17、ch=ch+1
18、printf("\n")
19、p!=NULL
20、p->next
❹ c語言考試題
1、一個C語言程序的語句至少應包含一個___main函數___。
2、C語言源程序文件的擴展名是__ .C ____,經過編譯、連接後,生成文件的擴展名是__ .h ____。
3、結構化程序由順序結構、___選擇___和___循環___三種基本結構組成。
4、C語言的執行是從____main函數__開始執行的。
5、C源程序的語句分隔符是___分號___。
6、在C語言中,用關鍵字_____float_定義單精度實型變數。
7、表達式S=12應當讀做「___把12賦值給S___」。
8、C語言源程序的基本單位是___函數___。
9、設int x=9,y=8;表達式x-=y+1的結果是___0___。
10、若a為整型變數,a=12,則表達式:a * =2+3的值___60__。
11、調用C語言對輸入輸出處理的庫函數時,在# include命令行中應包含的頭文件是___stdio.h___。
12、表達式9%5的結果是__4____。
13、若a為整型變數,a=12,則表達式:a+=4的值_16_____。
14、 在C語言中,要求運算數必須是整型的運算符是__%____。
15、在C語言中,用____非零整數__表示邏輯「真」值。
16、表達式10/3的結果是__3____。
17、通常一個位元組包含__8____個二進制位。
18、 假設所有變數均為整型,a=2,b=5,b++則表達式a+b的值是_8_____。
19、在C語言中,最基本的數據類型只有四種,它們分別是:_int_____、___float___、__char____和double。
20、一個C程序有且僅有一個____main__函數。
21、若a為整型變數,a=12,則表達式:a-=2的值_10____。
22、在C語言中,有三種邏輯運算符,它們分別是:__與____、___或___、__非____。
23、在C語言中,字元輸入函數和字元輸出函數分別是:__getchar____和___putchar___。
24、C程序開發的四個步驟是___輸入與編輯源程序___、__編譯____、__連接____和執行。
25、C程序的結構分別是:順序結構、__選擇結構____、__循環結構____。
26、if語句中的表達式可以是關系表達式、__算術表達式____、__賦值表達式____。
27、__x>y_?x:y___是C語言中惟一一個三元運算符。
28、C語言提供的預處理命令主要包括如下三種:宏定義、__文件包含____、___條件編譯___。
二、閱讀程序,寫出下列程序運行結果。
1、2
2、K
3、a 97
4、無結果
三、編寫程序
1、編寫一個C程序,輸入a、b、c 3個數,輸出其中最大的數。
#include
Void main()
{
Int a,b,c;
Printf("請輸入三個數");
Scanf(%d%d%d,&a,&b,&c);
If(a<b)
A=b;
If(a<c)
A=c;
Printf("最大的數:%d",a);
}
求1—50的之和。
#include
Void mian()
{
Int sum=0,i;
For(i=1;i<=50;i++)
Sum+=i;
Printf("1-50之和為:%d",sum);
}
從鍵盤輸入一個大寫字母,要求改用小寫字母輸出。
#include
Void mian()
{
Char c;
Printf("請輸入一個字母");
Scanf("%c".&c);
Printf("它的小寫字母為%c",c+32);
}
利用while語句,計算1+1/2+1/4+…+1/100的值,並顯示出來。
#include
Void mian()
{
Float sum=0,temp;
Int i =1;
While(i<=100)
{
Temp=1/i;
Sum+=temp;
I++
}
Printf("結果為%d",sum);
}
輸入兩個整數,輸出其中的大數。
#include
Void mian()
{
Int a,b;
Printf("請輸入兩個數");
Scanf("%d%d".&a,&b);
Printf("大數是:%d"a>b?a:b);
}
6、利用while語句,計算1+1/3+1/5+…+1/99的值,並顯示出來。
#include
Void mian()
{
Int i =1;
Float sum=0,temp=0;
While(i<=99)
{
Temp =1/i;
Sum+=temp;
I=i+2;
}
Printf("結果為: %f",sum),
}
❺ 四川省計算機二級C語言考試 真題
一、是非判斷題(每小題1分,共10分) 1.數據元素是數據的基本單位,數據項是數據的最小單位。 ( 1 ) 2.棧是特殊的線性表,須用一組地址連續的存儲單元來存儲其元素。 ( 2 ) 3.引入虛擬存儲技術後,邏輯內存總容量是由地址匯流排的位數確定的。 ( 3 ) 4.編譯程序是一種常用的應用軟體。 ( 4 ) 5.順序文件和鏈接文件的長度都可以動態變化。 ( 5 ) 6.在文件系統中彩目錄管理文件。 ( 6 ) 7.允許多用戶在其終端上同時交互地使用計算機的操作系統稱為實時系統。 ( 7 ) 8.程序、數據、和程序控制塊是構成一個進程的三要素。 ( 8 ) 9.黑盒測試時,既要考慮程序的內部邏輯結構又要考慮其外部特性。 ( 9 ) 10.軟體的總體設計和詳細設計都要用PAD圖形工具。 ( 10 )二、單項選擇題(每小題1分,共5分) 1.允許用戶把若干作業提交計算機系統集中處理的操作系統稱為( 11 )。11(A)分時操作系統 (B)實時操作系統 (C)網路操作系統 (D)批處理操作系統 2.分配到必要資源並獲得了處理機時的進程的狀態稱為( 12 )。12(A)就緒狀態 (B)執行狀態 (C)等待狀態 (D)阻塞狀態 3.利用通道技術可以在( 13 )之間直接交換數據。13(A)內存與CPU (B)CPU與外設 (C)內存與外設 (D)內存、CPU和外設三者 4.以下的准則中哪個不是軟體設計的准則( 14 )。14(A)編程語言選擇准則 (B)信息屏蔽准則 (C)結構化和模塊化准則 (D)抽象准則 5.有一數列:97 65 76 13 29 49 58 經過一趟排序後得到:65 97 13 76 29 49 58 請問使用的是何種排序方法( 15 )。15(A)簡單插入排序 (B)冒泡排序 (C)2路歸並排序 (D)快速排序 C與C++語言程序設(共85分)一、單項選擇題(每小題1分,共10分) 1.定義如下枚舉類型:enum Day{Monday,Tuesday,Wednesday,Thursday,Friday=2};則下列語句正確的是 ( 16 )。16 (A) 表達式Wednesday==Friday的值是true(B) enum Day day; day=3;(C) enum Day day; day=Tuesday-3;(D) enum Day day; day=Monday+10; 2.下列程序片段的輸出結果是( 17 )。int m=4;do { printf("%d,",m-=3); }while(!(--m));17(A)1 (B)1,-3, (C)3,0 (D)死循環 3.執行下列程序片段時的輸出結果是( 18 )。int x,y;x=3;y=5;printf("%d",x%=(y/=2) );18(A)3 (B)2 (C)1 (D)0 4.對於下述程序,判斷正確的是( 19 )。# include <stdio.h>void f(int *p){ *p=10; }int *p;void main(){ f(p); printf("%d",(*p)++ );}19 (A) 輸出的值是隨機值 (B) 運行時出錯 (C) 輸出值為10 (D) 輸出值為11 5.下列程序運行的結果是( 20 )。# define FU(y) 2.8+y# define PR(a) printf("%d",(int)(a))# define PRINT(a) PR(a);# include <stdio.h>void main(){ int x=2; PRINT( FU(5) * x );}20(A)12 (B)14 (C)13 (D)15 6.下列程序運行的結果是( 21 )。# include <stdio.h>void main(){ int a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+4; printf("%d",*++p); printf("%d",++*p);}21 (A)4,3 (B)4,6 (C)5,5 (D)4,5 7.關於對類要領的描述中,錯誤的是( 22 )。22 (A) 類就是C語言中的結構類型(B) 類是創建對象的樣板 (C) 類是具有共同行為的若干對象的統一描述體(D) 類是抽象數據類型的實現 8.已知int a=9,b=4; 將a-b的值輸出顯示到屏幕上,下列各種實現方法中,正確的是( 23 )。23 (A) cout<<a<<'-'<<b<<endl (B) cout<<"a-b"<<endl (C) cout<<a-b<<endl (D) cout<<"%d\n",a-b 9.下列循環語句會進入死循環的是( 24 )。24 (A) i=0;do {i++; }while(i==100); (B) for(i=0;i<100;i+=3.14); (C) for(i=0;;i+=2); (D) k=1;do {k--; }while(k); 10.下面程序運行的結果是( 25 )。# include <stdio.h>int fun(char *str){ int n=0; while(*str>='0' && *str<='9') { n=n*10+*str-'1'; str++; } return n;}void main(){ printf("%d\n",fun("567.89")); }25 (A)89 (B)567.89 (C)567 (D)456 四川省計算機等級考試二級C語言筆試題(第二十次)二
2009-03-29 15:11:39 二、讀程序回答問題(每個選擇3分,共45分)。 1.有下列程序:# include <iostream.h>void main(){ int a,b,c,x; a=b=c=0; for(int i=0;i<10;i++) { cin>>x; switch(x%3) { case 0: a+=x; break; case 1: b+=x; break; case 2: c+=x; break; } } cout<<a<<','<<b<<','<<c<<endl;}程序運行時依次輸入x的值為:1 2 3 4 5 6 7 8 9 10①程序運行的結果是( 26 )。26 (A) 3,12,21 (B) 18,22,15 (C) 3,4,3 (D) 9,10,8②switch(x%3)與( 27 )相同。27 (A) switch(!(x%3)!=0) (B) switch(x%3==0) (C) switch(x%3!=0) (D) 他們都不相同 2.有下列程序:# include <stdio.h>void main(){
❻ 全國計算機二級c語言考試的編譯題目是不是要我們自己編譯全部東西來解決問題還是只是叫我們填空
答案選b啊
沒有匯編這個過程,匯編是一種語言,不是過程
高級程序語言有兩種:先編譯後執行,和邊邊解釋邊執行(當然還有半解釋半編譯的),無非就是解釋或邊以
比如:basic就是解釋的,兒c/c++
都是編譯的
❼ 誰有大一C語言考試題快考試了,跪求題庫··
單項選擇題(每小題2分,共50分)
1、一個C程序的執行是從___A__。
A、本程序的main函數開始,到main函數結束
B、本程序的main函數開始,到本程序文件的最後一個函數結束
C、本程序文件的第一個函數開始,到本程序文件的最後一個函數結束
D、本程序文件的第一個函數開始,到本程序main函數結束
2、C語言程序的基本單位是___C___。
A、程序行 B、語句
C、函數 D、字元
3、請選出可用作C語言用戶標識符的一組標識符___B___。
A、void B、a3_b3 C、For D、2a
define _123 -abc DO
WORD IF ase sizeof
主要特點
C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大,依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。
以上內容參考:網路-c語言
❽ c語言編程題目及答案
#include <stdio.h>
#include <math.h>
void main(void)
{
double a;
double b;
double c;/* 以上三個變數分別對應三邊 */
double sin_c;/* c邊對應角的正玄值 */
double cos_c;/*c邊對應角的余玄值*/
double cos_a;
double area; /* 三角形的面積 */
printf("輸入a,b,c:");
scanf("%lf, %lf, %lf", &a, &b, &c);
if(((a+b)>c) && (a-b)<c)
{
printf("三邊能夠成三角形\n.");
cos_c = (a*a + b*b -c*c)/(2*a*b);
cos_a = (b*b + c*c - a*a)/(2*b*c);
if ((cos_c > 0) && (cos_a >0))
{
printf("三角形是銳角三角形。\n");
}
else if ((cos_c < 0) || (cos_a < 0))
{
printf("三角形是鈍角三角形\n");
}
else
{
printf("三角形是直角三角形\n");
}
sin_c = sqrt(1- cos_c*cos_c);
area = a*b*sin_c/2;
printf("三角形的面積是%f.\n",area);
}
else
{
printf("三邊不能構成三角形\n");
}
}
❾ C語言筆試原題,題目在圖片里,求詳細解答
#include <stdio.h>
int main () {
char a = 'A';
int i, j;
//列印5行
for(i = 1; i <=5; i++) {
//每行列印相應行數的字母,第一行一個,第二行二個...
for(j = 0; j < i; j++) {
printf("%c", a);
//列印的字母遞增,也就是下一個要列印的字母.
a+=1;
}
printf("\n");
}
return 0;
}