全國計(jì)算機(jī)等級考試二級C模擬試題(5)

字號:

二、填空題。
     (1)算法的復(fù)雜度主要包括空間復(fù)雜度和【1】復(fù)雜度。
     【解析】算法的復(fù)雜度主要指時間復(fù)雜度和空間復(fù)雜度。
     (2)在線性結(jié)構(gòu)中,隊(duì)列的操作順序是先進(jìn)先出,而棧的操作順序是【2】 。
     【解析】隊(duì)列和棧都是線性結(jié)構(gòu),但是不同之處在于隊(duì)列的操作順序是先進(jìn)先出,而棧的操作順序是先進(jìn)后出。
     (3)數(shù)據(jù)流圖的類型有【3】和事務(wù)型。
     【解析】典型的數(shù)據(jù)流圖有兩種,即變換型和事務(wù)型。
     (4)在數(shù)據(jù)庫理論中,數(shù)據(jù)物理結(jié)構(gòu)的改變,如存儲設(shè)備的更換、物理存儲的更換、存取方式等都不影響數(shù)據(jù)庫的邏輯結(jié)構(gòu),從而不引起應(yīng)用程序的變化,稱為【4】 。
     【解析】數(shù)據(jù)的物理結(jié)構(gòu)改變,不影響數(shù)據(jù)庫的邏輯結(jié)構(gòu),從而不引起應(yīng)用程序的變化,這種性質(zhì)叫做物理獨(dú)立性。
     (5)數(shù)據(jù)庫管理系統(tǒng)是位于用戶與【5】之間的軟件系統(tǒng)。
     【解析】數(shù)據(jù)庫管理系統(tǒng)是幫助用戶創(chuàng)建和管理數(shù)據(jù)庫的應(yīng)用程序的集合。因此,數(shù)據(jù)庫管理系統(tǒng)需要操作系統(tǒng)的支持,為用戶提供服務(wù)。
     (6)若從鍵盤輸入58,則以下程序的輸出結(jié)果是【6】 。
     main()
     { int a;
     scanf("%d",&a);
     if(a>50) printf("%d",a);
     if(a>40) printf("%d",a);
     if(a>30) printf("%d",a);
     }
     【解析】在程序中,執(zhí)行scanf()語句后,a被賦值為58。接著執(zhí)行第一個if語句,因?yàn)椋琣=58>50,執(zhí)行第一個if語句后面的輸出語句,輸出58;接著執(zhí)行第二個if語句,因?yàn)椋琣=58>40,執(zhí)行第二個if語句后面的輸出語句,輸出58;接著執(zhí)行第三個if語句,因?yàn)椋琣=58>30,執(zhí)行第三個if語句后面的輸出語句,輸出58,所以最后的輸出為585858。
     (7)以下程序的輸出結(jié)果是【7】 。
     main()
     { int a=177;
     printf("%o\n",a);
     }
     【解析】在控制格式符中“o”代表的是將數(shù)據(jù)按八進(jìn)制數(shù)輸出,十進(jìn)制數(shù)的177代表的八進(jìn)制數(shù)是261。
     (8)以下程序的輸出結(jié)果是【8】 。
     main()
     { int a=0;
     a+=(a=8);
     printf("%d\n",a);
     }
     【解析】在程序中首先將8賦值給變量a,然后再進(jìn)行復(fù)合賦值運(yùn)算。即a=a+a=8+8=16,所以該空格處應(yīng)該填16。
     (9)以下程序的輸出結(jié)果是【9】 。
     main()
     { int a=5,b=4,c=3,d;
     d=(a>b>c);
     printf("%d\n",d);
     }
     【解析】關(guān)系運(yùn)算符“>”的結(jié)合方式是從左向右的,所以在本題中的表達(dá)式a>b>c;從左向右開始計(jì)算,a>b的結(jié)果為“1”,接著1和c比較假,該空格處應(yīng)該填0。
     (10)以下定義的結(jié)構(gòu)體類型包含兩個成員,其中成員變量info用來存放整型數(shù)據(jù);成員變量link是指向自身結(jié)構(gòu)體的指針。請將定義補(bǔ)充完整。
     struct node
     { int info;
     【10】link;
     };
     【解析】link是指向結(jié)構(gòu)體自身的指針,因此link是指針,指向struct node類型的數(shù)據(jù),可定義成“struct node *link”。
     (11)以下程序的輸出結(jié)果是【11】 。
     main()
     { int s,i;
     for(s=0,i=1;i<3;i++,s+=i);
     printf("%d\n",s);
     }
     【解析】此程序中,for循環(huán)語句后面直接跟了一個“;”,表明循環(huán)體為空。輸出語句不在for循環(huán)體內(nèi),所以在循環(huán)執(zhí)行完畢后才輸出s的值。s、i的初值分別為0和1,判斷循環(huán)條件,表達(dá)式“1<3”成立,執(zhí)行“i++,s+=i”后,i和s的值分別為2和1,繼續(xù)判斷循環(huán)條件,表達(dá)式“2<3”成立,執(zhí)行“i++,s+=i”后,i和s的值分別為3,再次判斷循環(huán)條件,表達(dá)式“3<3”不成立,循環(huán)結(jié)束。
     (12)以下程序的輸出結(jié)果是【12】 。
     main()
     { char *p="abcdefgh",*r;
     long *q;
     q=(long *)p;
     q++;
     r=(char *)q;
     printf("%s\n",r);
     }
     【解析】本題定義了一個字符型指針變量p并通過賦初值讓它指向了一個字符串,定義了另一個字符型指針變量r和一個長整型指針變量q。首先通過語句“q=(long*)p;”把p的地址值強(qiáng)制轉(zhuǎn)換為長整型地址值并賦值給q,然后執(zhí)行“q++;”,地址值增加了4,執(zhí)行語句“r=(char*)q;”,把長整型指針變量q的值再強(qiáng)制轉(zhuǎn)換成字符型地址值并賦給r,r的值應(yīng)為字符串中字符“e”的地址,最后輸出r指向的字符串,是“efgh”。
     (13)以下程序的輸出結(jié)果是【13】 。
     main()
     { char s[]="abcdef";
     s[3]='\0';
     printf("%s\n",s);
     }
     【解析】字符串的結(jié)束標(biāo)記'\0',當(dāng)輸出一個存放在字符數(shù)組中的字符串時,只需輸出到'\0'為止,而不管其后有什么數(shù)據(jù)。本題給字符數(shù)組s的元素s[3]賦值為'\0',故只能輸出3個字符“abc”。
     (14)以下程序的輸出結(jié)果是【14】 。
     main()
     { int x=0;
     sub(&x,8,1);
     printf("%d\n",x);
     }
     sub(int *a,int n,int k)
     { if(k<=n)sub(a,n/2,2*k);
     *a+=k;
     }
     【解析】在主函數(shù)中定義了一個變量x并賦初值0,然后執(zhí)行函數(shù)調(diào)用語句,該語句的執(zhí)行過程為sub(&x,8,1)調(diào)用sub(&a,4,2),sub(&a,4,2)調(diào)用sub(&a,2,4),sub(&a,2,4)中由于2<4,所以if后面括號里的判斷為假,遞歸結(jié)束,執(zhí)行其后的*a+=k;語句此時x=x+k=0+4=4,回退到上一層調(diào)用函數(shù)sub(&x,4,2)中,執(zhí)行后面的語句,x=x+k=4+2=6,再回推到最上一層調(diào)用函數(shù)sub(&x,8,1)執(zhí)行后面的語句,x=x+k=6+1=7,所以最后輸出7。
     (15)設(shè)有如下宏定義
     #define MYSWAP(z,x,y) {z=x;x=y;y=z;}
     以下程序段通過宏調(diào)用實(shí)現(xiàn)變量a、b內(nèi)容的交換,請?zhí)羁铡?BR>     float a=5,b=16,c;
     MYSWAP(【15】,a,b);
     【解析】本題關(guān)鍵在考生是不是了解宏的基本運(yùn)用,在使用宏的時候明顯少了一個實(shí)參。在定義宏的時候變量z是用來做中間變量的,題目中缺的變量就是一個中間變量c。
     (16)以下程序用來統(tǒng)計(jì)文件中字符的個數(shù)。請?zhí)羁铡?BR>     #include "stdio.h"
     main()
     { FILE * fp; long num=0L;
     if((fp=fopen("fname.dat", "r"))==NULL);
     { printf("Open error\n");exit(0);}
     while(【16】)
     { fgetc(fp);num++;}
     printf("num=%1d\n",num-1);
     fclose(fp);
     }
     【解析】統(tǒng)計(jì)文件中字符個數(shù)的算法可描述如下:首先判斷文件位置指針是否指向了文件尾,如果不是則讀出一個字符,同時字符的個數(shù)加1,再判斷文件位置指針是否位于文件尾,如此循環(huán),直到文件位置指針位于文件尾為止。本題首先以讀文件的方式打開了文件“fname.dat”,如果打開成功則把返回的文件型指針賦值給fp,然后通過循環(huán)求文件中的字符數(shù)。首先判斷文件位置指針是否位于文件尾,如果不是則循環(huán)讀取字符,每次字符數(shù)加1。所以下劃處應(yīng)填循環(huán)條件,文件位置指針不是指向文件尾,即“!feof(fp)”。
     (17)以下程序中,select函數(shù)的功能是:在N行M列的二維數(shù)組中,選出一個值作為函數(shù)值返回,并通過形參傳回此值所在的行下標(biāo)。請?zhí)羁铡?BR>     #define N 3
     #define M 3
     select(int a[N][M],int *n)
     { int i,j,row=1,colum=1;
     for(i=0;i<N;i++)
     for(j=0;j<M;j++)
     if(a[i][j]>a[row][colum]){row=i;colum=j;}
     *n=【17】;
     return(【18】);
     }
     main()
     { int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;
     max=select(a,&n);
     printf("max=%d,line=%d\n",max,n);
     }
     【解析】指針變量作為函數(shù)參數(shù)及二維數(shù)組的一個典型算法—求值及其下標(biāo)。通過對題意的分析,在select()函數(shù)中,變量row的作用是用來記錄元素的行下標(biāo),colum的作用是用來記錄元素的列下標(biāo)。程序中通過一個循環(huán)求得數(shù)組元素中值的行列下標(biāo),分別存放在變量row和colum中,根據(jù)題意,應(yīng)該把行下標(biāo)賦值給形參指針變量n指向的變量,把值a[row][colum]作為函數(shù)值返回。
     (18)mystrlen函數(shù)的功能是計(jì)算str所指字符串的長度,并作為函數(shù)值返回。請?zhí)羁铡?BR>     int mystrlen(char *str)
     { int i;
     for(i=0;【19】!= '\0';i++);
     return(【20】);
     }
     【解析】求str指向的字符串長度的算法是:用一個變量i表示字符串中字符的位置,一開始賦值為0,取出i位置的字符,判斷是否為“\0”,若不是,則i的值加1,如此循環(huán)直到取出的字符是“\0”為止,此時i的值就是字符串的長度。由此可知,第一個空處應(yīng)填第i位置上的字符*(str+i);第二個空格應(yīng)該填字符串的長度i。