06年1月高級語言程式設計考試題目

 

一、單項選擇題(本大題共 20 小題,每小題 1 分,共 20 分)
在每小題列出的四個備選項中只有一個是符合題目要求的,請將其代碼填寫在題後的括弧內。錯選、多選或未選均無分。
1. 可以用作 c 程式標識符的一組是( )
a.print b.i\am
oodb one-half
abc 3pai
c.pxq d.cpp
line# pow
his.age while
2. 以下敘述正確的是( )
a. 宏名必須用大寫的英文字母表示
b. 宏定義不僅是符號替換,也可以賦值
c. 宏替換是在程式編譯時完成的,不占用程式運行時 間
d. 引用帶參數的宏時,實際參數與宏定義中的形式參數類型應一致
3. 設 char a= ' \70 ' ; 則變數 a 中( )
a. 包含 1 個字元 b. 包含 2 個字元
c. 包含 3 個字元 d. 是非法表示
4. 設 long i=65539;, 執行語句 printf( " %d " ,i) ;後的輸出結果是( )
a.-3 b.3
c.65539 d. 數據不確定
5. 設 float c,f;, 將數學表達式 c= (f-32) 能正確表示成 c 語言賦值表達式的是( )
a.c=5*(f-32)/9 b.c=5/9(f-32)
c.c=5/9*(f-32) d.c=5/(9*(f-32))
6. 設 int i=10;, 表達式 30-i<=i<=9 的值是( )
a.0 b.1
c.9 d.20
7. 以下不能看作一條 c 語句的是( )
a.{;} b.a=5,b=5,c=5;
c.if(x>=0&&y=0); d.if(x= =0)a=5;b=10;
8. 在函式調用時,以下說法正確的是( )
a. 函式調用後必須帶回返回值
b. 實際參數和形式參數可以同名
c. 函式間的數據傳遞不可以使用全局變數
d. 主調函式和被調函式總是在同一個檔案里
9. 設 int x=7;, 執行語句 x=x <<2; 後,變數 x 的值是( )
a.1 b.3
c.14 d.28
10. 執行語句 printf( " |%9.4f|\n " ,12345.67); 後的輸出結果是( )
a.|2345.6700| b.|12345.6700|
c.|12345.670| d.|12345.67|
11. 以下說法中正確的是( )
a. 字元型變數可以存放字元串
b. 遞歸調用是指函式調用自己
c. 所有的外部函式只能在本檔案中被調用
d. 在循環體中 break 語句和 continue 語句的作用都是結束循環
12. 設 char s[6],*ps=s;, 則正確的賦值語句是( )
a.s= " 12345 " ; b.*s= " 12345 " ;
c.ps= " 12345 " ; d.*ps= " 12345 " ;
13. 設 int a[ ]={1,2,3,4,5},*p=a;
則數組元素的正確表示是( )
a.a[2] b.&(a 1)
c.a[5] d.&p
14. 對二維數組的正確定義是( )
a.int a[ ] [ ]={1,2,3,4,5,6}; b.int a[2] [ ]={1,2,3,4,5,6};
c.int a[ ] [3]={1,2,3,4,5,6}; d.int a[2,3]={1,2,3,4,5,6};
15. 字元數組 s 不能作為字元串使用的是( )
a.char s[ ]= " happy " ;
b.char s[ ]={ " happy " };
c.char s[6]={ ' h ' , ' a ' , ' p ' , ' p ' , ' y ' };
d.char s[4]={ ' h ' , ' a ' , ' p ' , ' p ' , ' y ' };
16. 若定義函式:
fun(int a,float b)
{return a b;
}
則該函式的數據類型是( )
a.int b.void
c.float d. 不確定


17. 設
struct st
{ int a;
float b;
}s, *p=&s;
則正確的引用是( )
a.(*).s.a b.(*p).a
c.p->s.a d.p.s.a
18. 設 enum color {red,yellow=2,blue,white,black}r=white;, 執行 printf( " %d " ,r) ;後的輸出結果是( )
a.0 b.1
c.3 d.4
19. 以下說法中錯誤的是( )
a. 共用型數據中所有成員的首地址都是同一個
b. 可以用已定義的共用型來定義數組或指針變數的類型
c. 共用型數據中的成員可以是結構型,但不可以是共用型
d. 用 typedef 定義新類型取代原有類型後,原類型仍可有效使用
20. 設 #define l(x) 2*3.14*x
則 l(x) 是( )
a. 函式名 b. 函式調用
c. 無參的宏名 d. 帶參的宏名 二、填空題(本大題共 10 小題,每小題 2 分,共 20 分)
請在每小題的空格中填上正確答案。錯填、不填均無分。
21. 設 int a[10]; 則數組 a 的首元素是 __________________ 。
22. 設 int a=0,b=0,c;, 則執行 c=(a-=b-5),(a=b,b=3); 後變數 c 的值是 __________________ 。
23. 設 int a=0,b=0,c=2,d=4;, 則執行 (c=a= =b)||(d=b= =a); 後變數 d 的值是 __________________ 。
24. 設 int a[ ]={1,2,3,4,5,6,7,8},*s=a ;
則 *(s 1) 的值是 __________________ 。
25. 設 char s[ ]= " apple " ;, 則數組 s 的長度是 __________________ 。
26. 被調用函式執行結束時,此函式中定義的 __________________ 類型的變數不被釋放。
27. 表達式的運算對象可以是常量、函式調用和 __________________ 。
28. 設 int x;, 則將 x 強制轉換為雙精度類型應寫成 __________________ 。
29. 語句 if(!k)a=3; 中 !k 與 __________________ 等價。
30. 函式調用時,若形參是一個指針變數,而對應的實參是一個數組名,則函式參數的傳遞方式是 __________________ 傳遞。

三、程式分析題(本大題共 5 小題,每小題 5 分,共 25 分)
閱讀下列程式,將輸出結果寫到各題右側的空白處。
31.main( )
{
int a[3][3]={{1},{2},{3}};
int b[3][3]={1,2,3};
printf( " ] " ,a[1][0] b[0][1]);
printf( " ]\n " ,a[0][1] b[1][0]);
}
32.int a=10;
struct data {int a, b;} s;
main ( )
{ int c;
s.a=20 ; s.b=30;
c=f (s.a s.b);
printf( " %d,%d,%d\n " , s.a, s.b, c);
}
f (int b)
{
printf ( " %d,%d\n " ,a, b);
return (a b);
}
33.#include <stdio. h>
fun ( )
{ int y=1;
static int z=4;
z ; y;
return (y*z);
}
main ( )
{ int i;
for (i=1; i<3; i )
printf ( " ]\n " ,fun ( ));
}
34.main ( )
{ char *p,s[ ]= " 6543210 " ;
for (p=s; *p!= ' \0 ' ;)
{ printf ( " %s\n " ,p);
p ;
if (*p!= ' \0 ' ) p ;
else break;
}
}
35.main( )
{
long f( );
printf( " %5ld\n " ,f(5));
}
long f(int b)
{
if(b= =1| |b==2)return 1;
else return f(b-1) f(b-2);
}

四、程式填充題(本大題共 3 小題,每小題 6 分,共 18 分)
給出下列程式,將橫線處缺少的部分補上,使其能正確運行。
36. 鍵入 10 個整數,統計其中正數 (neg) 、負數 (pos) 和零( zero )的個數並將三者輸出。
int neg=0,pos=0,zero=0;
void sele(int num)
{
if(num>0)neg ;
else if(num<0)pos ;
else ______________ ;/ * 第一空 */
}
main ( )
{
int i,a[10];
for(i=0;i<10;i )
{
scanf( " %d " ,&a[i]);
printf( " ] " ,a[i]);
self(_________________); / * 第二空 */
}
printf( " \nneg=%d,pos=%d,zero=%d\n " ,_______________); / * 第三空 */
}
37. 輸入一個學生的成績(在 0~100 分之間,超出此範圍顯示錯),進行五級評分並顯示。
main ( )
{
int score;
scanf ( " %d " ,&score); printf ( " %d-> " ,score);
if(__________________) / * 第一空 * /
switch (___________________) / * 第二空 */
{
case 9:
case 10: printf ( " excellent \ n " );break;
case 8: printf ( " good \ n " );break;
case 7: printf ( " middle \ n " ); break;
case 6: printf ( " pass \ n " );_______________;/* 第三空 */
default: printf ( " no pass \ n " );
}
else printf ( " input error! \ n " );
}
38. 鍵入一個字元串(換行作為結束標誌),將該字元串分別寫到文本檔案( te.dat )和二進制檔案( bi.dat )中。
#include<stdio.h>
main ( )
{
_______________ ; /* 第一空 */
char str [80];
gets (str); puts (str);
te=fopen ( " te.dat " _______________); / * 第二空 */
bi=fopen ( " bi.dat " ,_______________); / * 第三空 */
fputs (str, te); fwrite (str, sizeof (str), 1, bi);
fclose (te); fclose (bi);
}
五、程式設計題(第 39 小題 5 分,第 40 、 41 小題各 6 分,共 17 分)。
39. 輸入一個圓半徑( r ),計算並輸出圓的面積( s )和周長( l ) .
40. 計算當 sum=1 時,輸出 n 的值。
41. 用循環語句輸出下列字母編排的三角形。
a
ab
abc
abcd
………
abcde………xyz