07年4月等級(jí)考試二級(jí)C語(yǔ)言考前密卷(1)

字號(hào):

(1)棧和隊(duì)列的共同特點(diǎn)是
     A)都是先進(jìn)先出
     B)都是先進(jìn)后出
     C)只允許在端點(diǎn)處插入和刪除元素
     D)沒(méi)有共同點(diǎn)
    (2)已知二叉樹(shù)后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是
     A)acbed
     B)decab
     C)deabc
     D)cedba
    (3)鏈表不具有的特點(diǎn)是
     A)不必事先估計(jì)存儲(chǔ)空間
     B)可隨機(jī)訪(fǎng)問(wèn)任一元素
     C)插入刪除不需要移動(dòng)元素
     D)所需空間與線(xiàn)性表長(zhǎng)度成正比
    (4)結(jié)構(gòu)化程序設(shè)計(jì)的3種結(jié)構(gòu)是
     A)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、轉(zhuǎn)移結(jié)構(gòu)
     B)分支結(jié)構(gòu)、等價(jià)結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
     C)多分支結(jié)構(gòu)、賦值結(jié)構(gòu)、等價(jià)結(jié)構(gòu)
     D)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
    (5)為了提高測(cè)試的效率,應(yīng)該
     A)隨機(jī)選取測(cè)試數(shù)據(jù)
     B)取一切可能的輸入數(shù)據(jù)作為測(cè)試數(shù)據(jù)
     C)在完成編碼以后制定軟件的測(cè)試計(jì)劃
     D)集中對(duì)付那些錯(cuò)誤群集的程序
    (6)算法的時(shí)間復(fù)雜度是指
     A)執(zhí)行算法程序所需要的時(shí)間
     B)算法程序的長(zhǎng)度
     C)算法執(zhí)行過(guò)程中所需要的基本運(yùn)算次數(shù)
     D)算法程序中的指令條數(shù)
    (7)軟件生命周期中所花費(fèi)用最多的階段是
     A)詳細(xì)設(shè)計(jì)
     B)軟件編碼
     C)軟件測(cè)試
     D)軟件維護(hù)
    (8)數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS中用來(lái)定義模式、內(nèi)模式和外模式的語(yǔ)言為
     A)C
     B)Basic
     C)DDL
     D)DML
    (9)下列有關(guān)數(shù)據(jù)庫(kù)的描述,正確的是
     A)數(shù)據(jù)庫(kù)是一個(gè)DBF文件
     B)數(shù)據(jù)庫(kù)是一個(gè)關(guān)系
     C)數(shù)據(jù)庫(kù)是一個(gè)結(jié)構(gòu)化的數(shù)據(jù)集合
     D)數(shù)據(jù)庫(kù)是一組文件
    (10)下列有關(guān)數(shù)據(jù)庫(kù)的描述,正確的是
     A)數(shù)據(jù)處理是將信息轉(zhuǎn)化為數(shù)據(jù)的過(guò)程
     B)數(shù)據(jù)的物理獨(dú)立性是指當(dāng)數(shù)據(jù)的邏輯結(jié)構(gòu)改變時(shí),數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)不變
     C)關(guān)系中的每一列稱(chēng)為元組,一個(gè)元組就是一個(gè)字段
     D)如果一個(gè)關(guān)系中的屬性或?qū)傩越M并非該關(guān)系的關(guān)鍵字,但它是另一個(gè)關(guān)系的關(guān)鍵字,則稱(chēng)其為本關(guān)系的外關(guān)鍵字
    (11)以下敘述中正確的是
     A)C語(yǔ)言比其他語(yǔ)言高級(jí)
     B)C語(yǔ)言可以不用編譯就能被計(jì)算機(jī)識(shí)別執(zhí)行
     C)C語(yǔ)言以接近英語(yǔ)國(guó)家的自然語(yǔ)言和數(shù)學(xué)語(yǔ)言作為語(yǔ)言的表達(dá)形式
     D)C語(yǔ)言出現(xiàn)的最晚,具有其他語(yǔ)言的一切優(yōu)點(diǎn)
    (12)C語(yǔ)言中用于結(jié)構(gòu)化程序設(shè)計(jì)的3種基本結(jié)構(gòu)是
     A)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)
     B)if,switch,break
     C)for,while,do-while
     D)if,for,continue
    (13)C語(yǔ)言中最簡(jiǎn)單的數(shù)據(jù)類(lèi)型包括
     A)整型、實(shí)型、邏輯型
     B)整型、實(shí)型、字符型
     C)整型、字符型、邏輯型
     D)字符型、實(shí)型、邏輯型
    (14)若變量已正確定義并賦值,以下符合C語(yǔ)言語(yǔ)法的表達(dá)式是
     A)a:=b+1
     B)a=b=c+2
     C)int 18.5%3
     D)a=a+7=c+b
    (15)下列可用于C語(yǔ)言用戶(hù)標(biāo)識(shí)符的一組是
     A)void, define, WORD
     B)a3_b3, _123,Car
     C)For, -abc, IF Case
     D)2a, DO, sizeof
    (16)C語(yǔ)言中運(yùn)算對(duì)象必須是整型的運(yùn)算符是
     A)%=
     B)/
     C)=
     D)<=
    (17)若變量a,i已正確定義,且i已正確賦值,合法的語(yǔ)句是
     A)a= =1
     B)++i;
     C)a=a++=5;
     D)a=int(i);
    (18)已知
     int t=0;
     while (t=1)
     {...}
     則以下敘述正確的是
     A)循環(huán)控制表達(dá)式的值為0
     B)循環(huán)控制表達(dá)式的值為1
     C)循環(huán)控制表達(dá)式不合法
     D)以上說(shuō)法都不對(duì)
    (19)若變量已正確說(shuō)明為float型,要通過(guò)語(yǔ)句scanf("%f%f%f",&a,&b,&c);給a賦予10.0,b賦予22.0,c賦予33.0,下列不正確的輸入形式是
     A)10<回車(chē)>22<回車(chē)>33<回車(chē)>
     B)10.0,22.0,33.0<回車(chē)>
     C)10.0<回車(chē)>22.033.0<回車(chē)>
     D)10 22<回車(chē)>33<回車(chē)>
    (20)有如下程序:
     main()
     {
     int x=1,a=0,b=0;
     switch(x)
     {
     case 0: b++;
     case 1: a++;
     case 2: a++;b++;
     }
     printf("a=%d,b=%d\n",a,b);}
     該程序的輸出結(jié)果是
     A)a=2,b=1
     B)a=1,b=1
     C)a=1,b=0
     D)a=2,b=2
    (21)有以下程序
     main()
     {int i=1,j=1,k=2;
     if((j++||k++)&&i++)
     printf("%d,%d,%d\n",i,j,k);
     }
     執(zhí)行后輸出結(jié)果是
     A)1,1,2
     B)2,2,1
     C)2,2,2
     D)2,2,3
    (22)有如下程序
     main()
     {float x=2.0,y;
     if(x<0.0)y=0.0;
     else if(x<10.0)y=1.0/x;
     else y=1.0;
     printf("%f\n",y);}
     該程序的輸出結(jié)果是
     A)0.000000
     B)0.250000
     C)0.500000
     D)1.000000
     (23)有如下程序:
     main()
     {int n=9;
     while(n>6){n--; printf("%d",n);}
     }
     該程序的輸出結(jié)果是
     A)987
     B)876
     C)8765
     D)9876
    (24)在下列選項(xiàng)中,沒(méi)有構(gòu)成死循環(huán)的是
     A)int i=100;
     while(1)
     {i=i%100+1;
     if(i>100)break;
     }
     B)for(;;);
     C)int k=10000;
     do{k++;}while(k>10000);
     D)int s=36;
     while(s)--s;
    (25)設(shè)int x=1,y=1;表達(dá)式(!x||y--)的值是
     A)0
     B)1
     C)2
     D)-1
    (26)若已定義的函數(shù)有返回值,則以下關(guān)于該函數(shù)調(diào)用的敘述中錯(cuò)誤的是
     A)函數(shù)調(diào)用可以作為獨(dú)立的語(yǔ)句存在
     B)函數(shù)調(diào)用可以作為一個(gè)函數(shù)的實(shí)參
     C)函數(shù)調(diào)用可以出現(xiàn)在表達(dá)式中
     D)函數(shù)調(diào)用可以作為一個(gè)函數(shù)的形參
    (27)有以下程序
     float fun(int x,int y)
     {return(x+y);}
     main()
     {int a=2,b=5,c=8;
     printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
     }
     程序運(yùn)行后的輸出結(jié)果是
     A)編譯出錯(cuò)
     B)9
     C)21
     D)9.0
    (28)若有以下調(diào)用語(yǔ)句,則不正確的fun函數(shù)的首部是
     main()
     { …
     int a[50],n;
     …
     fun(n, &a[9]);
     …
     }
     A)void fun(int m, int x[])
     B)void fun(int s, int h[41])
     C)void fun(int p, int *s)
     D)void fun(int n, int a)
    (29)fseek函數(shù)的正確調(diào)用形式是
     A)fseek(文件指針,起始點(diǎn),位移量)
     B)fseek(文件指針,位移量,起始點(diǎn))
     C)fseek(位移量,起始點(diǎn),文件指針)
     D)fseek(起始點(diǎn),位移量,文件指針)
    (30)若fp是指向某文件的指針,且已讀到文件末尾,則函數(shù)feof(fp)的返回值是
     A)EOF
     B)-1
     C)1
     D)NULL
    (31)若有說(shuō)明語(yǔ)句:char c='\72';則變量c
     A)包含1個(gè)字符
     B)包含2個(gè)字符
     C)包含3個(gè)字符
     D)說(shuō)明不合法,c的值不確定
    (32)若有說(shuō)明 int a[3][4];則a數(shù)組元素的非法引用是
     A)a[0][2*1]
     B)a[1][3]
     C)a[4-2][0
     ]
     D)a[0][4](33)設(shè)有以下說(shuō)明語(yǔ)句
     struct stu
     {int a;
     float b;
     } stutype;
     則下面的敘述不正確的是
     A)struct是結(jié)構(gòu)體類(lèi)型的關(guān)鍵字
     B)struct stu是用戶(hù)定義的結(jié)構(gòu)體類(lèi)型
     C)stutype是用戶(hù)定義的結(jié)構(gòu)體類(lèi)型名
     D)a和b都是結(jié)構(gòu)體成員名
    (34)在C語(yǔ)言中,引用數(shù)組元素時(shí),其數(shù)組下標(biāo)的數(shù)據(jù)類(lèi)型允許是
     A)整型常量
     B)整型表達(dá)式
     C)整型常量或整型表達(dá)式
     D)任何類(lèi)型的表達(dá)式
    (35)若運(yùn)行時(shí)給變量x輸入12,則以下程序的運(yùn)行結(jié)果是
     main()
     {int x,y;
     scanf("%d",&x);
     y=x>12?x+10:x-12;
     printf("%d\n",y);
     }
     A)0
     B)22
     C)12
     D)10(
    (36)以下說(shuō)法正確的是
     A)C語(yǔ)言程序總是從第一個(gè)的函數(shù)開(kāi)始執(zhí)行
     B)在C語(yǔ)言程序中,要調(diào)用函數(shù)必須在main()函數(shù)中定義
     C)C語(yǔ)言程序總是從main()函數(shù)開(kāi)始執(zhí)行
     D)C語(yǔ)言程序中的main()函數(shù)必須放在程序的開(kāi)始部分
    (37)表達(dá)式0x13^0x17的值是
     A)0x04
     B)0x13
     C)0xE8
     D)0x17
    (38)有以下程序
     #define F(X,Y)(X)*(Y)
     main()
     {int a=3, b=4;
     printf("%d\n", F(a++, b++));
     }
     程序運(yùn)行后的輸出結(jié)果是
     A)12
     B)15
     C)16
     D)20
    (39)下列程序執(zhí)行后的輸出結(jié)果是
     void func(int *a,int b[])
     { b[0]=*a+6; }
     main()
     {int a,b[5];
     a=0; b[0]=3;
     func(&a,b); printf("%d\n",b[0]);
     }
     A)6
     B)7
     C)8
     D)9
    (40)若有下面的程序段:
     char s[]="china";char *p; p=s;
     則下列敘述正確的是
     A)s和p完全相同
     B)數(shù)組s中的內(nèi)容和指針變量p中的內(nèi)容相等
     C)s數(shù)組長(zhǎng)度和p所指向的字符串長(zhǎng)度相等
     D)*p與s[0]相等
    (41) 以下程序中函數(shù)sort的功能是對(duì)a數(shù)組中的數(shù)據(jù)進(jìn)行由大到小的排序
     void sort(int a[],int n)
     {int i,j,t;
     for(i=0;i     for(j=i+1;j     if(a[i] }
     main()
     {int aa[10]={1,2,3,4,5,6,7,8,9,10},i;
     sort(&aa[3],5);
     for(i=0;i<10;i++)printf("%d,",aa[i]);
     printf("\n");
     }
     程序運(yùn)行后的輸出結(jié)果是
     A)1,2,3,4,5,6,7,8,9,10,
     B)10,9,8,7,6,5,4,3,2,1,
     C)1,2,3,8,7,6,5,4,9,10,
     D)1,2,10,9,8,7,6,5,4,3,
    (42) 以下程序的運(yùn)行結(jié)果是
     #include "stdio.h"
     main()
     {struct date
     {int year,month,day;}today;
     printf("%d\n",sizeof(struct date));
     }
     A)6
     B)8
     C)10
     D)12
    (43)若有語(yǔ)句int *point,a=4;和 point=&a;下面均代表地址的一組選項(xiàng)是
     A)a,point,*&a
     B)&*a,&a,*point
     C)*&point,*point,&a
     D)&a,&*point,point
    (44)在調(diào)用函數(shù)時(shí),如果實(shí)參是簡(jiǎn)單的變量,它與對(duì)應(yīng)形參之間的數(shù)據(jù)傳遞方式是
     A)地址傳遞
     B)單向值傳遞
     C)由實(shí)參傳形參,再由形參傳實(shí)參
     D)傳遞方式由用戶(hù)指定
    (45)已定義以下函數(shù)
     fun(char *p2, char *p1)
     {
     while((*p2=*p1)!='\0'){p1++;p2++;}
     }
     函數(shù)的功能是
     A)將p1所指字符串復(fù)制到p2所指內(nèi)存空間
     B)將p1所指字符串的地址賦給指針p2
     C)對(duì)p1和p2兩個(gè)指針?biāo)缸址M(jìn)行比較
     D)檢查p1和p2兩個(gè)指針?biāo)缸址惺欠裼?\0'
    (46)若執(zhí)行下述程序時(shí),若從鍵盤(pán)輸入6和8時(shí),結(jié)果為
     main()
     {int a,b,s;
     scanf("%d%d",&a,&b);
     s=a
     if(a     s=b;
     s*=s;
     printf("%d",s);
     }
     A)36
     B)64
     C)48
     D)以上都不對(duì)
    (47)fscanf函數(shù)的正確調(diào)用形式是
     A)fscanf(fp,格式字符串,輸出表列);
     B)fscanf(格式字符串,輸出表列,fp);
     C)fscanf(格式字符串,文件指針,輸出表列);
     D)fscanf(文件指針,格式字符串,輸入表列);
    (48)下列關(guān)于C語(yǔ)言數(shù)據(jù)文件的敘述中正確的是
     A)文件由ASCII碼字符序列組成,C語(yǔ)言只能讀寫(xiě)文本文件
     B)文件由二進(jìn)制數(shù)據(jù)序列組成,C語(yǔ)言只能讀寫(xiě)二進(jìn)制文件
     C)文件由記錄序列組成,可按數(shù)據(jù)的存放形式分為二進(jìn)制文件和文本文件
     D)文件由數(shù)據(jù)流形式組成,可按數(shù)據(jù)的存放形式分為二進(jìn)制文件和文本文件
    (49)有以下程序
     void ss(char *s,char t)
     {while(*s)
     {if(*s= =t)*s=t-'a'+'A';
     s++;
     }
     }
     main()
     {char str1[100]="abcddfefdbd",c='d';
     ss(str1,c); printf("%s\n",str1);
     }
     程序運(yùn)行后的輸出結(jié)果是
     A)ABCDDEFEDBD
     B)abcDDfefDbD
     C)abcAAfefAbA
     D)Abcddfefdbd 二、填空題
    (1)算法的基本特征是可行性、確定性、 【1】 和擁有足夠的情報(bào)。
    解析: 算法是指解題方案的準(zhǔn)確而完整的描述。它有4個(gè)基本特征,分別是可行性、確定性、有窮性和擁有足夠的情報(bào)。
    (2)在長(zhǎng)度為n的有序線(xiàn)性表中進(jìn)行二分查找。最壞的情況下,需要的比較次數(shù)為 【2】 。
    解析: 對(duì)于長(zhǎng)度為n的有序線(xiàn)性表,在最壞情況下,二分查找只需要比較log2n次,而順序查找需要比較n次。
    (3)在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類(lèi)描述的是具有相似性質(zhì)的一組 【3】 。
    解析: 將屬性、操作相似的對(duì)象歸為類(lèi),也就是說(shuō),類(lèi)是具有共同屬性、共同方法的對(duì)象的集合。
    (4)通常,將軟件產(chǎn)品從提出、實(shí)現(xiàn)、使用維護(hù)到停止使用退役的過(guò)程稱(chēng)為 【4】 。
    解析: 軟件產(chǎn)品從考慮其概念開(kāi)始,到該軟件產(chǎn)品不能使用為止的整個(gè)時(shí)期都屬于軟件生命周期。一般包括可行性研究與需求分析、設(shè)計(jì)、實(shí)現(xiàn)、測(cè)試、交付使用以及維護(hù)等活動(dòng)。
    (5)數(shù)據(jù)庫(kù)管理系統(tǒng)常見(jiàn)的數(shù)據(jù)模型有層次模型、網(wǎng)狀模型和 【5】 3種。
    解析: 數(shù)據(jù)庫(kù)管理系統(tǒng)是位于用戶(hù)與操作系統(tǒng)之間的一層系統(tǒng)管理軟件,是一種系統(tǒng)軟件,是用戶(hù)與數(shù)據(jù)庫(kù)之間的一個(gè)標(biāo)準(zhǔn)接口。其總是基于某種數(shù)據(jù)模型,可以分為層次模型、網(wǎng)狀模型和關(guān)系模型。
    (6)設(shè)y是int型,請(qǐng)寫(xiě)出y為奇數(shù)的關(guān)系表達(dá)式 【6】 。
    答案(y%2)==1
    (7)設(shè)int a=5,b=6,表達(dá)式(++a==b--)?++a:--b的值是【7】 。
    解析: 此表達(dá)式為三目運(yùn)算符,++a的值為6,b--的值為6,則整個(gè)表達(dá)式的值為++a的值,++a的值為7。請(qǐng)注意前綴++,--和后綴++,--的區(qū)別。
    (8)下列程序的輸出結(jié)果是【8】。
    maim ()
    {char b []="Hello you";
    b[5]=0;
    printf ("%s\n",b);}
    解析: 語(yǔ)句b[5]=0;相當(dāng)于語(yǔ)句b[5]=′\0′,且′\0′為字符串結(jié)束標(biāo)志,輸出時(shí)遇到′\0′就停止輸出。
    (9)當(dāng)調(diào)用函數(shù)時(shí),實(shí)參是一個(gè)數(shù)組名,則向函數(shù)傳遞的是【9】。
    解析: 在函數(shù)中,可以通過(guò)指針變量來(lái)引用調(diào)用函數(shù)中對(duì)應(yīng)的數(shù)組元素,此操作是通過(guò)傳遞數(shù)組的首地址來(lái)實(shí)現(xiàn)。
    (10)以下程序的輸出結(jié)果是【10】。
    int a=1234;
    printf ("%2d\n",a);
    解析: 在%與格式符之間插入一個(gè)整形數(shù)來(lái)指這輸出寬度,并不影響數(shù)據(jù)的完整性,當(dāng)插入的寬度小于實(shí)際的寬度時(shí),則實(shí)際的寬度輸出。
    (11) 用高級(jí)語(yǔ)言編寫(xiě)的程序稱(chēng)為【11】程序,它可以通過(guò)解釋程序翻譯一句執(zhí)行一句的方式執(zhí)行,也可以通過(guò)編譯程序一次翻譯產(chǎn)生目標(biāo)程序,然后執(zhí)行。
    解析: 用高級(jí)語(yǔ)言編寫(xiě)的程序稱(chēng)為源程序,源程序不能在計(jì)算機(jī)上直接運(yùn)行,運(yùn)行源程序有兩種方式:一種是通過(guò)解釋程序,對(duì)源程序逐句解釋執(zhí)行;另一種是先讓編譯程序?qū)⒃闯绦蛞淮畏g產(chǎn)生目標(biāo)程序(目標(biāo)程序是計(jì)算機(jī)可直接執(zhí)行的機(jī)器語(yǔ)言程序,它是一種二進(jìn)制代碼程序),然后執(zhí)行目標(biāo)程序。
    (12) 以下程序的輸出結(jié)果是【12】。
    main()
    {int a=0;
    a+=(a=8);
    printf("%d\n",a);}
    解析: 賦值表達(dá)式的值就是所賦值變量的值,本題中a+=8相當(dāng)于a=a+8,對(duì)表達(dá)式逐步進(jìn)行求解:
    a+=(a=8)此時(shí),a的值由于賦值為8,而不是0
    a+=8
    a=a+8
    a=16
    【14】=s;}
    解析: C語(yǔ)言中實(shí)參變量和形參變量的數(shù)據(jù)傳遞是單向的“值傳遞”方式。指針變量作函數(shù)也要遵循這一規(guī)則。調(diào)用函數(shù)不可能改變實(shí)參指針變量的值,但可以改變實(shí)參指針變量所指變量的值。
    (14)函數(shù)fun的功能是:根據(jù)以下公式求p的值,結(jié)果由函數(shù)值返回。m與n為兩個(gè)正數(shù)且要求m>n。
    例如:m=12,n=8時(shí),運(yùn)行結(jié)果應(yīng)該是495.000000。請(qǐng)?jiān)陬}目的空白處填寫(xiě)適當(dāng)?shù)某绦蛘Z(yǔ)句,將該程序補(bǔ)充完整。
    #include
    #include
    float fun (int m, int n)
    { int i;
    double p=1.0;
    for(i=1;i<=m;i++)【15】;
    for(i=1;i<=n;i++)【16】;
    for(i=1;i<=m-n;i++)p=p/i;
    return p;}
    main ()
    { clrscr();
    printf ("p=%f\n",fun (12,8));}
    解析:本題中,欲求p的值,需要先求m,n,m-n的階乘值,可用循環(huán)語(yǔ)句實(shí)現(xiàn)。
    (15)該程序運(yùn)行的結(jié)果是【17】。
    #include
    #include
    #define M 100
    void fun(int m, int *a, int *n)
    { int i,j=0;
    for(i=1;i<=m;i++)
    if(i%7==0||i%11==0)
    a[j++]=i;
    *n=j;}
    main()
    { int aa[M],n,k;
    clrscr();
    fun(10,aa,&n);
    for(k=0;k    if((k+1)%20==0)printf("\n");
    else printf("%4d",aa[k]);
    printf("\n");}
    解析: 解答本題的關(guān)鍵是要讀懂程序,試題要找出能被7或11整除的所有整數(shù),注意數(shù)學(xué)中的“或”和C語(yǔ)言中的“或”的區(qū)別,但在此處,if條件語(yǔ)句中用了“||”運(yùn)算符,若要找能同時(shí)被7和11整除的所有整數(shù)則在if()中應(yīng)用“&&”運(yùn)算符。
    當(dāng)然,如果m的值輸入50,即表達(dá)式fun(10,aa,&n);為fun(50,aa,&n);時(shí)輸入結(jié)果為:7 11 14 21 22 28 33 35 42 44 49。
    (16)下列程序的功能是:求出ss所指字符串中指定字符的個(gè)數(shù),并返回此值。
    例如,若輸入字符串123412132,輸入字符1,則輸出3,請(qǐng)?zhí)羁铡?BR>    #include
    #include
    #define M 81
    int fun(char *ss, char c)
    { int i=0;
    for(; 【18】;ss++)
    if(*ss==c)i++;
    return i;}
    main()
    { char a[M], ch;
    clrscr();
    printf("\nPlease enter a string: "); gets(a);
    printf("\nPlease enter a char: "); ch=getchar();
    printf("\nThe number of the char is: %d\n", fun(a,ch));}
    解析: 從字符串ss中找出子字符串的方法是:從第1個(gè)字符開(kāi)始,對(duì)字符串進(jìn)行遍歷;若ss串的當(dāng)前字符等于t串的第1個(gè)字符,兩字符串的指針自動(dòng)加1,繼續(xù)比較下一個(gè)字符;若比較至字符串的結(jié)尾,則跳出循環(huán);若ss串的字符和c串的字符對(duì)應(yīng)不同,繼續(xù)對(duì)ss串的下一個(gè)字符進(jìn)行處理。本程序是采用逐一比較的方式找出出現(xiàn)的次數(shù)。循環(huán)的作用是在串中從左到右逐一走動(dòng),if()的作用是進(jìn)行判斷是否相同,若與c相同則表示又出現(xiàn)一次。
    (17)下面程序把從終端讀入的文本(用@作為文本結(jié)束標(biāo)志)輸出到一個(gè)名為bi.dat的新文件中,請(qǐng)?zhí)羁铡?BR>    #include "stdio.h"
    FILE *fp;
    { char ch;
    if((fp=fopen(【19】))==NULL)exit(0);
    while((ch=getchar( ))!='@')fputc (ch,fp);
    fclose(fp);}
    解析: fopen函數(shù)的調(diào)用方式通常為:
    FILE *fp
    fp=fopen(文件名,使用文件方式);
    (18)設(shè)有如下宏定義
    #define MYSWAP(z,x,y)
    {z=x;x=y;y=z;}
    以下程序段通過(guò)宏調(diào)用實(shí)現(xiàn)變量a,b內(nèi)容交換,請(qǐng)?zhí)羁铡?BR>    float a=5,b=16,c;
    MYSWAP(【20】,a,b);
    解析: 該題考查兩個(gè)知識(shí)點(diǎn):
    (1)用一個(gè)指定的標(biāo)識(shí)符(即名字)來(lái)代表一個(gè)字符串,它的一般形式為#define 標(biāo)識(shí)符 字符串
    (2)在MYSWAP宏定義中,利用中間變量z來(lái)交換x和y的值,所以要實(shí)現(xiàn)a和b的交換,只需通過(guò)中間變量即可,所以,此處應(yīng)填c。
    選擇題
    01-05 C D B D D
              
    06-10 C D C C B
              
    11-15 C A B B B
              
    16-20 A B B B A
              
    21-25 C C S D B
              
    26-30 D B D B C
            
    31-35 A D C C A
              
    36-40 C A A A D
              
    41-45 C A B B A
              
    46-50 B D D B D