C 語言模擬測試



本節為您提供各種與C 程式設計框架相關的模擬測試。您可以將這些示例模擬測試下載到本地機器上,並在方便時離線解決。每個模擬測試都附帶一個模擬測試答案,讓您驗證最終分數並給自己評分。

問答

C 語言模擬測試一

第 1 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{ 
   int const a = 5; 
   
   a++; 
   printf(“%d”,a); 
} 

A - 5

B - 6

C - 執行時錯誤

D - 編譯錯誤

答案:D

解析

編譯錯誤 - 常量變數不能被修改。

main() 
{ 
   int const a = 5; 
   
   a++; 
   printf(“%d”,a); 
} 

第 2 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{ 
   const int a = 5; 
   
   a++; 
   printf("%d", a); 
}

A - 5

B - 6

C - 執行時錯誤

D - 編譯錯誤

答案:D

解析

編譯錯誤 - 常量變數不能被修改。

main() 
{ 
   const int a = 5; 
   
   a++; 
   printf("%d", a); 
}

第 3 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{ 
   char s[]="hello", t[]="hello";
   
   if(s==t){
	   printf("eqaul strings");
	}
}

A - 字串相等

B - 字串不相等

C - 無輸出

D - 編譯錯誤

答案:C

解析

無輸出,因為我們比較的是兩個基地址,它們並不相同。

第 4 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{ 
   int a = 5, b = 3, c = 4; 
   
   printf("a = %d, b = %d\n", a, b, c);
}

A - a=5, b=3

B - a=5, b=3, c=0

C - a=5, b=3, 0

D - 編譯錯誤

答案:A

解析

a=5,b=3,因為只有兩個格式說明符用於列印。

第 5 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{ 
   int a = 1; 
   float b = 1.3; 
   double c;
   
   c = a + b; 
   printf("%.2lf", c);
}

A - 2.30

B - 2.3

C - 編譯錯誤

D - 2.0

答案:A

解析

2.30,加法有效,並且指定了小數點後兩位。

第 6 題 - 以下程式的輸出是什麼?

#include<stdio.h>

main() 
{
      enum { india, is=7, GREAT };

      printf("%d %d", india, GREAT);
}

A - 0 1.

B - 0 2

C - 0 8

D - 編譯錯誤

答案:C

解析

0 8,列舉從 0 開始順序排列。如果分配了一個值,則序列從分配的值繼續。

第 7 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
    char c = 'A'+255;
   
    printf("%c", c);
}

A - A

B - B

C - 執行時溢位錯誤

D - 編譯錯誤

答案:A

解析

A,ASCII 字元的 ASCII 值範圍為 0-255。因此,加法運算迴圈回 'A'。

第 8 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   short unsigned int i = 0; 
   
   printf("%u\n", i--);
}

A - 0

B - 編譯錯誤

C - 65535

D - 32767

答案:A

解析

0,使用後減減運算子,變數的值將被視為表示式的值,然後被遞減。

第 9 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   unsigned x = 5, y=&x, *p = y+0; 

   printf("%u",*p);
}

A - x 的地址

B - y 的地址

C - p 的地址

D - 5

答案:D

解析

5,因為 p 儲存了 x 的地址,即 y+0。

第 10 題 - 您對以下 C 語句有什麼評論?

   signed int *p=(int*)malloc(sizeof(unsigned int));

A - 型別強制轉換不當

B - 會引發執行時錯誤

C - 記憶體將被分配,但無法在記憶體中儲存 int 值

D - 語句沒有問題

答案:D

解析

選項 (d),因為 int 和 unsigned 的大小相同,分配記憶體沒有問題。

第 11 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   int x = 5;
   
   if(x==5)
   {	
       if(x==5) break;
       printf("Hello");
   } 
   printf("Hi");
}

A - 編譯錯誤

B - Hi

C - HelloHi

D - Hello

答案:A

解析

編譯錯誤,關鍵字 break 只能出現在迴圈/switch 語句中。

第 12 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   int x = 5;
   
   if(x=5)
   {	
       if(x=5) break;
       printf("Hello");
   } 
   printf("Hi");
}

A - 編譯錯誤

B - Hi

C - HelloHi

D - 編譯器警告

答案:A

解析

編譯錯誤,關鍵字 break 只能出現在迴圈/switch 語句中。

第 13 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   int x = 5;
   
   if(x=5)
   {	
      if(x=5) printf("Hello");
   } 
   printf("Hi");
}

A - HelloHi

B - Hi

C - Hello

D - 編譯錯誤

答案:A

解析

HelloHi,兩個 if 語句的表示式都計算為真。

第 14 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   for(;;)printf("Hello");
}

A - 無限迴圈

B - 列印“Hello”一次。

C - 無輸出

D - 編譯錯誤

答案:A

解析

無限迴圈,當 'for' 的第二個表示式不存在時,它預設被視為真。

第 15 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   for()printf("Hello");
}

A - 無限迴圈

B - 列印“Hello”一次。

C - 無輸出

D - 編譯錯誤

答案:D

解析

編譯錯誤,雖然表示式對於 'for' 迴圈是可選的,但分號需要出現。

第 16 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main() 
{
   for(1;2;3)
      printf("Hello");
}

A - 無限迴圈

B - 列印“Hello”一次。

C - 無輸出

D - 編譯錯誤

答案:A

解析

無限迴圈,因為第二個表示式非 0,因此條件始終為真。

第 17 題 - int x=~1; 'x' 的值是多少?

A - 1

B - -1

C - 2

D - -2

答案:D

解析

-2,1 的反碼是 1110(二進位制),它等價於 2 的反碼,即 -2。

第 18 題 - 以下程式的輸出是什麼?

#include<stdio.h>

void f() 
{ 
   static int i;
   
   ++i; 
   printf("%d", i); 
}

main()
{ 
   f(); 
   f(); 
   f(); 
}

A - 1 1 1

B - 0 0 0

C - 3 2 1

D - 1 2 3

答案:D

解析

1 2 3,靜態區域性變數在函式呼叫之間保留其值,預設值為 0。

第 19 題 - 以下程式碼片段的輸出是什麼?

#include<stdio.h>

main()
{ 
   int *p = 15; 
   printf("%d",*p);
}

A - 15

B - 垃圾值

C - 執行時錯誤

D - 編譯錯誤

答案:C

解析

執行時錯誤,因為指標變數沒有儲存正確的地址,從同一地址讀寫資料會引發執行時錯誤。

第 20 題 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{	
    register int x = 5;

    int *p;
    p=&x;
    x++;
    printf("%d",*p);
}

A - 編譯錯誤

B - 5

C - 6

D - 垃圾值

答案:A

解析

編譯錯誤,我們不能獲取暫存器變數的地址。

第 21 題 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   int x = 65, *p = &x;
   
   void *q=p;
   char *r=q;
   printf("%c",*r);
}

A - 垃圾字元。

B - A

C - 65

D - 編譯錯誤

答案:B

解析

A,空型別指標是一個通用指標,可以儲存任何變數的地址。值為 65 的 ASCII 字元是 'A'。

第 22 題 - 以下程式的輸出是什麼?

#include<stdio.h>

void f() 
{
    printf(“Hello\n”);
}
main() 
{
 ;
}

A - 無輸出

B - 錯誤,因為函式沒有被呼叫。

C - 錯誤,因為函式在沒有宣告的情況下被定義

D - 錯誤,因為 main() 函式為空

答案:A

解析

無輸出,除了選項 (a) 之外,針對其他選項的註釋都是無效的。

第 23 題 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   printf("\");
}

A - \

B - \"

C - "

D - 編譯錯誤

答案:D

解析

編譯錯誤,printf 的格式字串沒有終止。

第 24 題 - 以下程式的輸出是什麼?

#include<stdio.h>

{ 
   int x = 1;
   switch(x) 
   {
      default: printf("Hello");
      case 1: printf("hi"); break;
   }
}

A - Hello

B - Hi

C - HelloHi

D - 編譯錯誤

答案:B

解析

Hi,在比較完其他 case 常量後,控制權到達 default-case。

第 25 題 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{ 
   struct { int x;} var = {5}, *p = &var;
   
   printf("%d %d %d",var.x,p->x,(*p).x); 
}

A - 5 5 5

B - 5 5 垃圾值

C - 5 5 0

D - 編譯錯誤

答案:A

解析

5 5 5,使用指標訪問結構體元素的兩種可能方式是使用 ->(箭頭運算子)或 *。

第 26 題 - 以下程式的輸出是什麼?

#include<stdio.h>

void swap(int m, int n)
{
   int x = m;
   
   m = n;
   n = x;
}
main()
{
   int x=5, y=3;

   swap(x,y);
   printf("%d %d", x, y);
}

A - 3 5

B - 5 3

C - 5 5

D - 編譯錯誤

答案:B

解析

5 3,按值傳遞機制無法改變實際引數。

#include <stdio.h>
void swap(int m, int n)
{
   int x = m;
   
   m = n;
   n = x;
}
main()
{
   int x=5, y=3;

   swap(x,y);
   printf("%d %d", x, y);
}

第 27 題 - 以下語句將列印什麼?

#include<stdio.h>

main()
{
   printf("%d",strcmp("strcmp()","strcmp()"));
}

A - 0

B - 1

C - -1

D - strcmp() 函式的用法無效

答案:A

解析

0,如果兩個字串相等,strcmp 返回 0。

第 28 題 - 以下程式在做什麼?

#include<stdio.h>

main()
{
   FILE *stream=fopen("a.txt",'r');
}

A - 嘗試以讀取模式開啟“a.txt”

B - 嘗試以寫入模式開啟“a.txt”。

C - “stream” 是一個無效的識別符號

D - 編譯錯誤

答案:D

解析

編譯錯誤,fopen 的第二個引數無效,應該是字串。

第 29 題 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{   
   int r, x = 2;
   float y = 5;

   r = y%x;
   printf("%d", r); 
}

A - 1

B - 0

C - 2

D - 編譯錯誤

答案:D

解析

編譯錯誤,模運算子 (%) 的任何一個運算元為實數都是無效的。

Q 30 - 使用哪個運算子在下一行繼續宏的定義?

A - #

B - ##

C - $

D - \

答案:D

解析

\, 前兩個分別是字串化和令牌貼上運算子。沒有名為 $ 的運算子。

Q 31 - 以下聯合體定義的大小是多少?

#include<stdio.h>

union abc { 
    char a,b,c,d,e,f,g,h; 
    int i;
}abc;

main()
{
   printf( "%d", sizeof( abc ));
}

A - 1

B - 2

C - 4

D - 8

答案:C

解析

聯合體的大小是其最大元素的大小。聯合體的所有元素共享公共記憶體。

Q 32 - ‘int’ 的大小是多少?

A - 2

B - 4

C - 8

D - 依賴於編譯器

答案:D

解析

‘int’ 的大小取決於編譯器,即它是 16 位還是 32 位。

Q 33 - 型別名稱/保留字 ‘short’ 是 ___

A - short long

B - short char

C - short float

D - short int

答案:D

解析

short 用作 short int 的替代。

Q 34 - 對於以下程式碼段,‘y’ 的值是多少?

#include<stdio.h>

main()
{
   int x = 1;
   
   float y = x>>2;
   
   printf( "%f", y );
}

A - 4

B - 0.5

C - 0

D - 1

答案:C

解析

0,由於上述移位操作導致資料位丟失,因此值為 0。

Q 35 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{  
   float t = 2;

   switch(t)
   {
       case 2: printf("Hi");
       default: printf("Hello");
   }
}

A - Hi

B - HiHello

C - Hello

D - 錯誤

答案:D

解析

錯誤,switch 表示式不能是浮點值。

Q 36 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   int i = 1;
   
   while(++i <= 5)
      printf("%d ",i++);
}

A - 1 3 5

B - 2 4

C - 2 4 6

D - 2

答案:B

解析

2 4,在 while 迴圈中,先自增後比較,在 printf 中先列印後自增。

Q 37 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   int i = 1;
   
   while( i++<=5 )
      printf("%d ",i++);
}

A - 1 3 5

B - 2 4

C - 2 4 6

D - 2

答案:C

解析

2 4 6,在 while 迴圈中,先比較後自增,在 printf 中先列印後自增。

Q 38 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   int i = 1;
   
   while(i++<=5);
       printf("%d ",i++);
}

A - 4

B - 6

C - 2 6

D - 2 4

答案:B

解析

6,在 ‘while’ 之後有一個空語句。

Q 39 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   int x = 1;
   
   do
      printf("%d ", x);
   while(x++<=1);
}

A - 1

B - 1 2

C - 無輸出

D - 編譯錯誤

答案:B

解析

1 2,do..while 是一個入口控制迴圈。由於表示式 x++ 是字尾形式,因此迴圈還會繼續第二次。

Q 40 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{ 
   int a[] = {1,2}, *p = a;
   
   printf("%d", p[1]); 
}

A - 1

B - 2

C - 編譯錯誤

D - 執行時錯誤

答案:B

解析

2,由於 ‘p’ 儲存基地址,因此我們可以像使用 ‘a’ 一樣使用 ‘p’ 訪問陣列。

Q 41 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{ 
   int a[3] = {2,1};
   
   printf("%d", a[a[1]]); 
}

A - 0

B - 1

C - 2

D - 3

答案:B

解析

1,內部間接定址計算結果為 1,外部間接定址索引 1 處的值為 1。

Q 42 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{ 
   int a[3] = {2,,1};
   
   printf("%d", a[a[0]]); 
}

A - 0

B - 1

C - 2

D - 編譯錯誤

答案:D

解析

編譯錯誤,初始化陣列的語法無效。

Q 43 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{ 
   int a[] = {2,1};
   
   printf("%d", *a); 
}

A - 0

B - 1

C - 2

D - 編譯錯誤。

答案:C

解析

2,因為 ‘a’ 指向基地址。

Q 44 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{
   int i = 1;
   
   Charminar:
   printf("%d ",i++);
   if(i==3) break;
   if(i<=5) goto Charminar;
}

A - 1 2

B - 1 2 3

C - 1 2 4 5

D - 編譯錯誤

答案:D

解析

編譯錯誤,‘break’ 出現在錯誤的位置。

Q 45 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{ 
   int i = 13, j = 60;
   
   i ^= j;
   j ^= i;
   i ^= j;
   
   printf("%d %d", i, j);
}

A - 73 73

B - 60 13

C - 13 60

D - 60 60

答案:B

解析

60 13,它在進行交換。

Q 46 - 以下程式的輸出是什麼?

#include<stdio.h>

main()
{	
   union abc {
      int x;
      char ch;
   }var;

   var.ch = 'A';
   printf("%d", var.x);
}

A - A

B - 垃圾值

C - 65

D - 97

答案:C

解析

65,因為聯合體變數為所有元素共享公共記憶體,x 獲取 ‘A’(其 ASCII 值為 65)並列印。

Q 47 - 從以下選項中識別錯誤的檔案開啟模式。

A - r

B - w

C - x

D - a

答案:C

解析

x,沒有名為“x”的模式。

Q 48 - 使用模式“r+”的函式 fopen() 嘗試以 __ 模式開啟檔案

A - 讀取和寫入

B - 讀取和新增新內容

C - 只讀

D - 它僅適用於目錄

答案:A

解析

選項 (a),檔案應該存在並以讀寫模式開啟。

Q 49 - 識別 fseek() 函式中用作 ‘whence’ 參考的無效常量。

A - SEEK_SET

B - SEEK_CUR

C - SEEK_BEG

D - SEEK_END

答案:C

解析

SEEK_BEG,其餘都是 ‘stdio.h’ 中定義的有效常量。

Q 50 - 第一個使用 C 程式語言設計的作業系統。

A - DOS

B - Windows

C - UNIX

D - Mac

答案:C

解析

UNIX。C 實際上是為了編寫一個名為 UNIX 的作業系統而發明的。到 1973 年,整個 UNIX OS 都是使用 C 設計的。

答案表

題號 答案
1 D
2 D
3 C
4 A
5 A
6 C
7 A
8 A
9 D
10 D
11 A
12 A
13 A
14 A
15 D
16 A
17 D
18 D
19 C
20 A
21 B
22 A
23 D
24 B
25 A
26 B
27 A
28 D
29 D
30 D
31 C
32 D
33 D
34 C
35 D
36 B
37 C
38 B
39 B
40 B
41 B
42 D
43 C
44 D
45 B
46 C
47 C
48 A
49 C
50 C
cprogramming_questions_answers.htm
廣告