亚欧洲精品在线观看,窝窝影院午夜看片,久久国产成人午夜av影院宅,午夜91,免费国产人成网站,ts在线视频,欧美激情在线一区

C語言

c語言經(jīng)典筆試題

時間:2025-05-24 07:08:49 C語言 我要投稿
  • 相關(guān)推薦

c語言經(jīng)典筆試題

  引導(dǎo)語:C語言是一種計算機程序設(shè)計語言,它既具有高級語言的特點,又具有匯編語言的特點。以下是小編整理的c語言經(jīng)典筆試題,歡迎參考閱讀!

c語言經(jīng)典筆試題

  1.用預(yù)處理指令#define聲明一個常數(shù),用以;#defineSECONDS_PER_YEAR(;2.寫一個“標(biāo)準(zhǔn)”宏MIN,這個宏輸入兩個參數(shù)并;#defineMIN(A,B)((A)<=;4.嵌入式系統(tǒng)中經(jīng)常要用到無限循環(huán),你怎么樣用C;這個問題用幾個解決方案;while(1);一些程序員更喜歡如下方案:;for(;;);第三個方案是用goto;

  1. 用預(yù)處理指令#define 聲明一個常數(shù),用以表明1年中有多少秒(忽略閏年問題)

  #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL

  2. 寫一個“標(biāo)準(zhǔn)”宏MIN,這個宏輸入兩個參數(shù)并返回較小的一個。

  #define MIN(A,B) ((A) <= (B) (A) : (B))

  4. 嵌入式系統(tǒng)中經(jīng)常要用到無限循環(huán),你怎么樣用C編寫死循環(huán)呢?

  這個問題用幾個解決方案。我首選的方案是:

  while(1)

  {

  }

  一些程序員更喜歡如下方案:

  for(;;)

  {

  }

  第三個方案是用 goto

  Loop:

  ...

  goto Loop;

  5. 用變量a給出下面的定義

  a) 一個整型數(shù)(An integer)

  b) 一個指向整型數(shù)的指針(A pointer to an integer)

  c) 一個指向指針的的指針,它指向的指針是指向一個整型數(shù)(A pointer to a pointer to an integer) d) 一個有10個整型數(shù)的數(shù)組(An array of 10 integers)

  e) 一個有10個指針的數(shù)組,該指針是指向一個整型數(shù)的(An array of 10 pointers to integers)

  f) 一個指向有10個整型數(shù)數(shù)組的指針(A pointer to an array of 10 integers)

  g) 一個指向函數(shù)的指針,該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)(A pointer to a function that takes an integer as an argument and returns an integer)

  h) 一個有10個指針的數(shù)組,該指針指向一個函數(shù),該函數(shù)有一個整型參數(shù)并返回一個整型數(shù)( 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 argument and returns an integer

  h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

  6. 關(guān)鍵字static的作用是什么?

  這個簡單的問題很少有人能回答完全。在C語言中,關(guān)鍵字static有三個明顯的作用:

  1). 在函數(shù)體,一個被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變。

  2). 在模塊內(nèi)(但在函數(shù)體外),一個被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。它是一個本地的全局變量。

  3). 在模塊內(nèi),一個被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。

  7.關(guān)鍵字const是什么含意?

  const int a;

  int const a;

  const int *a;

  int * const a;

  int const * a const;

  前兩個的作用是一樣,a是一個常整型數(shù)。第三個意味著a是一個指向常整型數(shù)的指針(也就是,整型數(shù)是不可修改的,但指針可以)。第四個意思a是一個指向整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是可以修改的,但指針是不可修改的)。最后一個意味著a是一個指向常整型數(shù)的常指針(也就是說,指針指向的整型數(shù)是不可修改的,同時指針也是不可修改的)。如果應(yīng)試者能正確回答這些問題,那么他就給我留下了一個好印象。

  8. 關(guān)鍵字volatile有什么含意 并給出三個不同的例子。

  一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設(shè)這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:

  1). 并行設(shè)備的硬件寄存器(如:狀態(tài)寄存器)

  2). 一個中斷服務(wù)子程序中會訪問到的非自動變量(Non-automatic variables)

  3). 多線程應(yīng)用中被幾個任務(wù)共享的變量

  1). 一個參數(shù)既可以是const還可以是volatile嗎?解釋為什么。

  2). 一個指針可以是volatile 嗎?解釋為什么。

  3). 下面的函數(shù)有什么錯誤:

  int square(volatile int *ptr)

  {

  return *ptr * *ptr;

  }

  Ptr內(nèi)容可能被修改,無法保證兩次取得同一個值,應(yīng)該先取出值放入一個變量中,然后通過這個變量來計算

  9. 嵌入式系統(tǒng)總是要用戶對變量或寄存器進(jìn)行位操作。給定一個整型變量a,寫兩段代碼,第一個設(shè)置a的bit 3,第二個清除a 的bit 3。在以上兩個操作中,要保持其它位不變。

  #define BIT3 (0x1<<3)

  static int a;

  void set_bit3(void)

  {

  }

  void clear_bit3(void)

  {

  a &= ~BIT3;

  }

  10. 嵌入式系統(tǒng)經(jīng)常具有要求程序員去訪問某特定的內(nèi)存位置的特點。在某工程中,要求設(shè)置一絕對地址為0x67a9的整型變量的值為0xaa66。編譯器是一個純粹的ANSI編譯器。寫代碼去完成這一任務(wù)。 Int *p;

  P=(int*)0x67a9;

  *p=0xaa66;

  11. 中斷是嵌入式系統(tǒng)中重要的組成部分,這導(dǎo)致了很多編譯開發(fā)商提供一種擴展—讓標(biāo)準(zhǔn)C支持中斷。具代表事實是,產(chǎn)生了一個新的關(guān)鍵字__interrupt。下面的代碼就使用了__interrupt關(guān)鍵字去定義了一個中斷服務(wù)子程序(ISR),請評論一下這段代碼的。

  __interrupt double compute_area (double radius)

  {

  double area = PI * radius * radius;

  printf(" Area = %f", area);

  return area;

  }

  12 . 下面的代碼輸出是什么,為什么?

  void foo(void)

  {

  unsigned int a = 6;

  int b = -20;

  (a+b > 6) puts("> 6") : puts("<= 6");

  }

  >6

  13. 評價下面的代碼片斷:

  unsigned int zero = 0;

  unsigned int compzero = 0xFFFF;

  /*1's complement of zero */

  14. 盡管不像非嵌入式計算機那么常見,嵌入式系統(tǒng)還是有從堆(heap)中動態(tài)分配內(nèi)存的過程的。那么嵌入式系統(tǒng)中,動態(tài)分配內(nèi)存可能發(fā)生的問題是什么?

  主要有三種類型:內(nèi)存泄露、內(nèi)存碎片和內(nèi)存崩潰 內(nèi)存崩潰是內(nèi)存使用最嚴(yán)重的結(jié)果,主要原因有數(shù)組訪問越界、寫已經(jīng)釋放的內(nèi)存、指針計算錯誤、訪問堆棧地址越界等等。碎片收集的問題,變量的持行時間等等

  下面的代碼片段的輸出是什么,為什么?

  if ((ptr = (char *)malloc(0)) == NULL)

  puts("Got a null pointer");

  else

  puts("Got a valid pointer");

  該代碼的輸出是“Got a valid pointer”。

  15. Typedef 在C語言中頻繁用以聲明一個已經(jīng)存在的數(shù)據(jù)類型的同義字。也可以用預(yù)處理器做類似的事。例如,思考一下下面的例子:

  #define dPS struct s *

  typedef struct s * tPS;

  答案是:typedef更好。思考下面的例子:

  dPS p1,p2;

  tPS p3,p4;

  第一個擴展為

  struct s * p1, p2;

  上面的代碼定義p1為一個指向結(jié)構(gòu)的指,p2為一個實際的結(jié)構(gòu),這也許不是你想要的。第二個例子正確地定義了p3 和p4 兩個指針。

  16. C語言同意一些令人震驚的結(jié)構(gòu),下面的結(jié)構(gòu)是合法的嗎,如果是它做些什么?

  int a = 5, b = 7, c;

  c = a+++b;

  上面的代碼被處理成:

  c = a++ + b;

  因此, 這段代碼持行后a = 6, b = 7, c = 12。

  17.找錯題

  試題1:

  void test1()

  {

  char string[10];

  char* str1 = "0123456789";

  strcpy( string, str1 );

  }

  試題2:

  void test2()

  {

  char string[10], str1[10];

  int i;

  for(i=0; i<10; i++)

  {

  str1[i] = 'a';

  }

  strcpy( string, str1 );

  }

  試題3:

  void test3(char* str1)

  {

  char string[10];

  if( strlen( str1 ) <= 10 )

  {

  strcpy( string, str1 );

  }

  }

  解答:

  試題1字符串str1需要11個字節(jié)才能存放下(包括末尾的?