一、單項選擇題(在每小題的四個備選答案中,選出一個正確的答案,并將其號碼寫在答題紙上。請注意注明題號。每小題1分,共計6分)
1、‘\t’表示什么?
①字符串常數②標識符③變量④字符常量
答案:④
2、對宏定義不正確的描述是哪一個?
①在進行宏定義時,可以引用已經定義的宏名,可以層層置換
//可以引用已經定義了的宏名,可以層層置換
②宏名的有效范圍包括本文件的任何位置
//宏名的有效范圍定義命令之后到本源文件結束,可以用#define終止宏定義的作用域
③寵定義不是語句,不必在行末加分號
//是預處理定義語句
④對程序中雙引號括起來的字符串,即使與宏名相同,也不進行置換
3、若定義static char s[20]=”computer”;則執行語句x = strlen(s);之后,x的值為多少?
①20 ②9 ③8 ④19
//strlen函數計算char*型字符串的長度的時候,并不包含末尾的\0;
4、以下哪一個表達式取值是正確的?
①6>5結果為6 ②6&&5結果為7
③6||5結果為7 ④6<5結果為0
5、如定義
enum weekday {one, two, thr, fou, fiv};
enum weekday working;
以下哪個是不正確的枚舉變量的使用?
①working = thr; ②working =2;
③working = (enum weekday)2;
④working = (enum weekday) (5-3);
//不能對其賦值
6、下列說法中正確的是哪一個?
①sizeof (char)是結果為整型的表達式
②sizeof (char)是一個不合法的表示形式
③sizeof (char)是一種函數調用
④sizeof (char)是結果為實型的表達式
二、閱讀程序,并回答問題(共12分)
1、下列程序的輸出是什么?(3分)
# include
void main ()
﹛
char * aplha [6] =﹛“ABC”,“DEF”,“GHI”,“JKL”,“MNO”,“PQR”﹜;
char **p;
int i;
p = aplha;
for (i = 0; i<4; i++)
printf (“%s”, p[i]);
printf (“\n”);
﹜
//輸出結果
ABCDEFGHIJKL
剛好是字符串數組里面的前四個元素的內容連接起來
2、下列程序為什么無法將用戶輸入的三個整數按從小到大排序輸出?應該如何修改?(6分)
# include
void swap (int x, int y)
﹛
int t = x;
x = y;
y = t;
﹜
void main ()
﹛
int a, b, c;
scanf (“%d, %d, %d”, &a, &b, &c);
if (a>b) swap (a, b);
if (a>c) swap (a, c);
if (b>c) swap (b, c);
printf (“%d, %d, %d”, a, b, c);
﹜
//函數swap采用值傳遞,雖然將形參x和y交換了,但是并不影響到實參。將值傳遞改成指針傳遞就可以了。
C函數參數采用值傳遞方式,雖然swap函數將形式參數x和y的值進行了調換,但是影響不到相應的實在參數。所以在主函數中,通過調用sawp函數調換a和b(或a或c,或b和c)的值是根本達不到目的的。
修改:
(1)(2分)
void swap (int *x, int*y)
﹛
int t = *x;
*x = *y;
*y = t;
﹜
(2)(2分)主函數
if(a>b) swap(&a,&b);
if(a>c) swap(&a,&c);
if(b>c) swap(&b,&c);
3、假設系統為基本整型量分配2個字節,為字符型量分配1個字節。下列程序完成的功能是什么?(3分)
# include
union
﹛
int n;
char ch [2];
﹜u;
void main ()
﹛
int m;
scanf (“%d”,&m);
u.n = m;
printf (“\n%u, %u”,u.ch[0], u.ch[1]);
﹜
//該程序的功能,取用戶輸入的整數值的高字節和低字節,并按照任意整數的低字節和高字節分別輸出。
三、程序設計題(12分)
假設一個文本文件中保存著100個整數,請將這100個整數按從小到大的順序寫到另一個文本文件中去,并且在新文件中每10個整數占一行。源文件名和目標文件名通過命令行參數獲取。
分數分配:
變量定義2分
命令行參數處理1分
文件打開1分
文件讀2分
排序3分
文件寫2分
文件關閉1分
# include
void main(int argc, char *argv[])
﹛
FILE *fin, *fout;
Int a [100], i, j, t;
if(argc!=3)
﹛
printf (“ You forgot to enter a filename\n”);
return;
﹜
fin = fopen (argv[1], “r”);
fout = fopen (argv[2], “w”);
for (i = 0; i<100; i++)
fscanf (fin, “%d”, &a[i]);
for (i = 0; i<99; i++)
for (i = 0; i<99-i; i++)
if (a[j]>a[j+1])
﹛t = a[j]; a[j] = a[j+1]; a[j+1]=t;﹜
for (i = 0; i<100; i++)
﹛
if (i%10 = 0)
fprintf (fout, “%s”, “\n”);
fprintf (fout, “%d”, a[i]);
﹜
fclose (fin);
fclose (fout);
﹜