江蘇計算機等級考試C語言考前沖刺模擬試卷 |
考試模擬1 1.以下關于微電子技術的敘述中,錯誤的是_____________ 集成電路芯片是微電子技術的結晶,它是計算機和通信設備的硬件核心,是現代信息產業的基礎 集成電路根據包含的電子元件數目分為小規模,中規模,大規模、超大規模和極大規模集成電路 小規模集成電路以簡單的門電路或單級放大器為集成對象 隨著微米、亞微米量級的微細加工技術的采用和硅拋光片面積的增大,集成電路的規模越來越小 2.以下關于通信技術的敘述中,錯誤的是_________________ 通信系統中被傳輸的信息必須以某種電(或光)信號的形式才能通過傳輸介質進行傳輸 多路復用技術有兩種,時分多路復用和頻分多路復用,其中頻分多路復用是指以事先規定的順序輪流使用同一傳輸線路進行數據傳輸 模擬通信的優點是結構比較簡單,成本低,數字通信傳輸的是數字信號 微波是一種極高頻率的電磁波,波長很短,通常為1m—1mm 3.使用8個二進制位來表示整數的編碼時,十進制-88對應的原碼與補碼分別是_______ A.11011000 和 10100111 B.01011000和10101000 C.11011011 和 10100111 D.11011000和10101000 4. .在PC機中,各類存儲器的速度由高到低的次序是________。 A.Cache、主存、硬盤、軟盤 B.主存、Cache、硬盤、軟盤 C. 硬盤、Cache、主存、軟盤 D. Cache的、硬盤、主存、軟盤 5.下面關于計算機局域網特性的敘述中,服務錯誤的是________。 A. 數據傳輸速率高 B. 通信延遲時間短、可靠性好 C. 可連接任意多的計算機 D. 可共享網絡中的軟硬件資源 6. 下列關于計算機組成及功能的說法中,正確的是__________。 A.一臺計算機內只能有一個CPU B.外存中的數據是直接傳送給CPU處理的 C. 多數輸出設備的功能是將計算機中用“ D. I/O設備是用來連接CPU、內存、外存和各種輸入輸出設施并協調它們工作的一個控制部件 7. .鍵盤、顯示器和硬盤等常用外圍設備在操作系統啟動時都需要參與工作,所以它們的驅動程序都必須預先存放在________中。 A. 硬盤 B. BIOS ROM C. 內存 D. CPU 8.在計算機加電啟動過程中,1.POST程序、2. 操作系統、3.引導程序、4.自舉裝入程序,這四個部分程序的執行順序為________。 A. 1、2、3、4 B. 1、3、2、 9.以下關于操作系統中多任務處理的敘述中,錯誤的是:________ A. 將CPU時間劃分成許多小片,輪流為多個程序服務,這些小片稱為"時間片" B. 由于CPU是計算機系統中最寶貴的硬件資源,為了提高CPU的利用率,一般采用多任務處理 C. 正在CPU中運行的程序稱為前臺任務,處于等待狀態的任務稱為后臺任務 D.在單CPU環境下,多個程序在計算機中同時運行時,意味著它們宏觀上同時運行,微觀上由CPU輪流執行 10.廣域網是一種跨越很廣的的計算機網絡,下面關于廣域網的敘述中,正確的是___________ A.廣域網是一種公用計算機網,所有計算機都可無條件的接入廣域網 B.廣域網使用專門的通信線路,數據傳輸更高 C.廣域網能連接任意多的計算機,也能將相距任意距離的計算機互相連接起來 D.廣域網像很多局域網一樣按廣播方式通信 11.當局域網中一臺計算機向同一網絡中的另一臺計算機發送數據幀時,在數據幀中必須包含發送方主機和接收方主機的_____________ A.MAC地址 B.IP地址 C.域名 D.計算機名 12.網絡服務是指用戶通過計算機網絡在共享資源及數據通信方面能夠得到的新增功能,下面關于網絡服務的敘述中,錯誤的是_____________ A.文件服務允許網絡用戶使用網絡上其他計算機中可共享的程序和數據 B.應用服務是指網絡用戶需要執行的某項任務,部分甚至全部可由網上的另一臺計算機完成 C.連接在網絡上的計算機只要有帳號就可以獲得他所需要的服務 D.消息服務允許網絡用戶之間能相互通信,互相傳遞消息 13.以下漢字編碼中,不再我國大陸使用而在臺灣與香港地區使用的是___________ A.GB18030 B.GBK C.GB2312 D.BIG5 14.以下關于圖像與圖形說法錯誤的是_____________ A.圖像獲取的過程實際上是模擬信號的數字化過程 B.一幅取樣圖像由M*N個取樣點組成,每個取樣點表示一個像素 C.數據壓縮分為無損和有損壓縮,有損壓縮是指對壓縮的圖像還原時,會影響到人們對圖像的正確理解 D.BMP是微軟公司在Windows操作系統下使用的一種標準圖像文件格式 15.以下對數字聲音的敘述中錯誤的是______________ A.聲音信號的數字化過程包括:取樣,量化,編碼 B.聲卡既參與聲音的獲取也負責聲音的重建 C.聲音的重建是聲音信號數字化的逆過程,分為三步:解碼,數模轉換,插值處理 D.聲音的獲取設備包括麥克風和聲卡,麥克風的作用是把電信號轉換為聲波 16.彩色圖像所使用的顏色描述方法稱為顏色模型,顯示器使用的顏色模型為RGB三基色模型,彩色噴墨打印機在打印彩色圖像時所使用的顏色模型是___________ A.YUV B.HSB C.CMYK D.RGB 17.人們說話時所產生的語音信號必須數字化之后才能由計算機存儲和處理,假設語音信號數字化時的取樣頻率為8KHZ,量化精度為8位,數據壓縮倍數為4倍,那么1分鐘數字語音的數據量是___________ A.960KB B.480kb C.120kb D.60kb 18.把全局E-R模型圖轉化稱關系模式的結構,屬于數據庫系統設計的________ A.邏輯結構設計 B.概念結構設計 C.物理結構設計 D.程序結構設計 19. 下列有關Windows98/2000/XP操作系統的敘述中,錯誤的是_________________。 A.任務欄上的“快速啟動”工具欄可以關閉。 B.對于中文版的Windows操作系統來說,任務欄上顯示的輸入法指示圖標不能被關閉。 C.即使計算機未物理連接打印機,也可以安裝多個打印機驅動程序。 D.在“我的電腦”的“屬性”窗口中可以查看當前計算機的內存的大小 20. 在Windows操作系統和Office軟件環境下操作時,下列操作中不能實現的是 _____________。 A.在“Windows資源管理器”窗口中同時選中多個不連續的文件與文件夾。 B.在Word編輯窗口中同時選定多個不連續的段落。 C.在Word編輯窗口中同時選定多個繪制的圖形對象。 D.在Excel編輯窗口中同時選定多個不連續的單元格。 C程序設計部分 一:選擇題: 21.當需要定義一個函數時,以下標識符中,__________(21)___________不能用作函數名。 A.scanf B.for C._sum D.F2 22.已有聲明語句”unsigned char ch;”,與表達式”ch=’B’”的值不相同的表達式是_____(22)______(注釋:字符A的Ascii碼以十進制表示為65) A.ch=0x42 B.ch= 23.若要對a進行++運算,則a應具有以下說明_______(23)_______ A.int a[3][2] B.char *a[]={“ C.int b[10],*a=b; D.char (*a)(char); 24.以下對于break語句使用的正確描述是______(24)___________ A.可以出現在程序中的任何位置 B.只能出現在循環或switch結構中 C.只能出現在switch結構中 D.只能出現在循環結構中 25.若有聲明語句”int a=5,b=4,c=3,*p=&a;”,則下列________(25)__________表達式語句是正確的。 A.(*p)++=c; B.*(*p)++; C.printf(a%4= =0?”%3d\n”:”%3d”,*p); D.a>20?return *p-20:return *p-1; 26.設”int x=2,y=3,z=(++x<=y--)?((--y= =1)?y--:--y):y--;”,則x,y,z的值為____________ A.3,0,1 B.2,0, 27.下列程序段執行后的結果為____(27)__________ main() { struct int a[3][3]={1,3,5,7,9,11,13,15,17},y,x,*p=&a[2][2]; for(x=0;x<3;x++) y+=*(p-4*x); printf(“\n%d”,y); } A.45 B 28.設有函數f的定義如下; void f(int x,int *y) { *y=x*x*x;} main() {int i,c[4]={1,2,3,4},s[4]={0}; for(i=0;i<4;i++) {______________/*調用f函數*/ printf("%d",s[i]);} 若在main函數中欲調用f函數,則正確的調用語句是 ____(28)______ A.f(c,s); B.f(c[i],s[i]); C.f(*(c+i),&s[i]); D.f(c+i,s+i); 29.設有定義如下; typedef stuct{int x,y;}POINT; typedef enum{RED,YELLOW,BLUE,GREEN}COLOR; struct {POINT xy;COLOR c;}pixel,*p=&pixel; 以下對變量pixel的賦值操作中正確的是 (29) 。 A.pixel={1,2,BLUE}; B.P->xy.x=1;p->xy.y=2;p->c=BLUE; C.scanf("%d%d%d",P->xy.x,P->xy.y,&pixel.c); D.scanf("%d%d,,,&pixel.xy);pixel.color=2; 30.執行了以下程序段后,x、w的值為___(30)_________ int x=0,y=1,z=2,w; if(x++) w=x; else if(x++&y>=1) w=y; else if(x++&&z>1) w=z; A.0、1 B.1、 二、填空題(請將答案填寫在答題紙的相應答題號內,每個答案只占-行) ●基本概念題(共5分) 1.一個用c語言編寫的程序必須有-個并且只能有-個_____(1)____函數。 2.若有定義"int k=1;",執行語句"while(k++<5);"后,k的值為______(2)_____。 3.在程序中需要調用庫函數sqrt時必須包含頭文件:_____(3)________ 。 4.已知聲明語句:"FILE *fpl,*fp2;long a[2]={12345678,12345678};",當執行了以下語句 后,文件f1.dat和f2.dat長度分別是____(4)_____字節和____(5)______字節。 fpl=fopen("f1.dat","w");fprintf(fpl,"%ld%ld",a[0],a[1]);fclose(fpl); fp2=fopen("f2.dat","wb");fwrite(a,sizeof(long),2,fp2);fclose(fp2); ●閱讀程序題(共7分) 5.以下程序運行后輸出____(6)____ #include<stdio.h> int f(char *sl,char *s2) {static int nl,n2; while(*s1++)n1++; while(*s2++)n2++; return n1-n2; } main() {printf("%d",f("c:\\program","\ 6•下列程序執行后,x的值為____(7)______ main() {int x,y; for(x=1,y=1;x<=100;x++) {if(y>=20)break; if(y%3==1){y+=3;continue;} y-=5; } printf("%d\n",x); } 7.以下程序運行時輸出_____(8)________ #include<stdio.h> #include<string.h> main() {char s[20]="acef",sl[]="bd"; int i,j,k; for(k=0;sl[k]!='\0';k++) {j=0; while(sl[k]>=s[j]&&s[j]!='\0')j++; for(i=strlen(s);i>=j;i--)s[i+1]=s[i]; s[j]=sl[k]; } puts(s); } 8.以下程序運行時輸出結果的第-行是___(9)_____,第二行是____(10)______。 int m=5,n=7,a[10]={0,1,2}; void fl(void); void f2(int m); main() { int i; for(i=0;i<7;i++)fl(); f2(1);printf("\n%d,%d",a[m],a[n]); } void fl(void) {static int n=3; a[n]=a[n-1]+a[n-2]+a[n-3];n++; } void f2(int m) {for(;m<3;m+=2) {int m; for(m=1;m<4;m++) printf("%d,",a[m++]); } } 9.以下程序運行后輸出結果的第-行是__(11)_____,第二行是___(12)______ 。 extern int m1,m2; void fun(int n,int *p1,int *p2) {int i; *p1=1;*p2=1; for(i=1;i<=n;i++){*p1+=3;*p2*=3;} m1+=*p1;m2+=*p2; } int m1,m2; main() { int i,k1[4],k2[4]; for(i=0;i<4;i++) fun(i,&k1[i],&k2[i]); for(i=0;i<4;i++) printf(“%d,”,k1[i]); printf(“%d\n”,m1); for(i=0;i<4;i++) printf(“%d,”,k2[i]); printf(“%d”,m2); } 完善程序題(共18分) 10.以下程序中函數encode完成一個字符串的加密功能,將s1字符串中的字符經過變換后保存到s2指向的字符數組中,二維數組cs保存了一個明碼密碼對照表,第一行是明碼字符,第二行是對應的密碼字符,加密方法如下:從s1字符串中每取一個字符,均在cs表第一行中查找有無該明碼字符,若找到則將對應的密碼字符放入s2中,否則將s1中原來的字符放入s2中。 #include <string.h> #include <stdio.h> char cs[2][10]={“aceghjlnp”,”fonptiude”}; void encode(char *s1, char *s2) { int n,i,j; for(n=0;s1[n]!=’\ { for(i=0;i<10&&s1[n]!=cs[0][i];_______(13)____) if(i<10) s2[n]=______(14)_____; else s2[n]=______(15)_______; } s2[n]=’\ } main() { char ts[80]=”jntwrnwt”, td[80]; encode(ts,td); puts(td); } 11.以下程序依次輸入某單位每位職工的姓名和工資數(整型數),然后計算發放工資時所需 發給每位職工的不同面值的紙幣張數,并計算工資總和以及累計所需不同幣值的張數 #include<stdio.h> #include<string.h> struct{ char name[10]; /*姓名*/ int total; /*工資數*/ int mnum[7]; /*發放工資時所需不同幣值的張數*/ }st[21]; int mvalue[7]={100,50,20,10,5,2,1}; main() {FILE *fp; int n=0,i,j,wage; fp=fopen("wage.dat","r"); if(fp= =NULL)exit(1); while(!feof(fp)) {fscanf(fp,"%s%d",st[n].name,&st[n].total); wage=st[n].total; for(j=0;j<7&&wage;j++) {st[n].mnum[j]=___(16)_________; wage= _____(17)______; } _________(18)________; } strcpy(st[n].name,"summary"); for(i=0;i<n;i++) { st[n].total+=st[i].total; for(j=0;j<7;j++) st[n].mnum[j]+=_____(19)_______; } for(i=O;i<n+1;i++) {printf("\n%s%d=",st[i].name,st[i].total); for(j=0;j<7;j++) printf("%d",st[i].mnum[j]); } } 12.以下函數的功能是以十進制字符形式打印出任一int函數 #include "stdio.h" void f(int n) {int i; if(n<0) {putchar('-');____(20)____;} if((_____(21)______)!=0)f(i); putchar(____(22)_______+'0'); } 13.以下程序中函數maxmin的功能是:對于x中存儲的一個任意的四位整數,求出:(1)組成以這個整數的四個數字由大到小排列后構成的最大的四位數;(2)組成以這個整數的四個 數字由小到大排列后構成的最小的四位數。 #include <stdio.h> void maxmin(int x,int *pmax,int *pmin) {int num[4],i,j,k,temp; *pmax=0;*pmin=0; for(i=0;i<4;i++) {num[i]=x%10;x=_____(23)_____;} for(i=O;i<3;i++) {k=i; for(j=i+1;j<4;j++) if(num[k]<num[j])k=j; if(____(24)_____){temp=num[i];num[i]=num[k];num[k]=temp;} } for(i=0;i<4;i++) {*pmax=*pmax*10+____(25)____; /*生成最大的四位數*/ *pmin=*pmin*10+ _____(26)_______; /*生成最小的四位數*/ } } main() {int n=3169,max=0,min=O; maxmin(n,&max,&min); printf("\n%d%d",max,min); } 14.設某鏈表上結點的數據結構定義如下: struct node{ int x; struct node *next; } 函數create的功能是:創建一個有序的鏈表(結點中x的值按升序排序),鏈表中結點的個數為參數n的值,函數返回該有序鏈表的頭指針。算法思想如下:每產生一個新的結點,插入到鏈表中的恰當位置,使得插入新結點以后的鏈表仍然保持有序 _______(27)_______create(int n) { struct node *p,*p1,*p2,*h=NULL; int i=0; if(n<1) return NULL; while(______(28)________) { p=(struct node *) malloc(sizeof(struct node)); scanf(“%d”,&p->x);p->next=NULL; if(h= =NULL)_______(29)____________; else {p1=p2=h; while(p2 &&p->x>=p2->x) {p1=p2;p2=p2->next;} if(p2==h){_____(30)____________;h=p;} else{p->next=p2;p1->next=p;} } i++; } return h; } 答案: 1.D2.B3.D4.A5.C6.C7.B8.D9.C10.C11.A12.B13.D14.C15.D16.C17.C18.A19.B20.B 21.B 22.D 23.C 24.B 25.C 26.A 27.D 28.C 29.B 30.C (1)main (2)6 (3)math.h (4)16 (5)8 (6)4 (7)8 (8)abcdef (9)1,3 (10)11,37 (11)1,4,7,10,2 (12)1,3,9,27,40 (13)i++ (14)cs[1][i] (15)s1[n] (16)wage/mvalue[j] (17)wage%mvalue[j] (18)n++ (19)st[i].mnum[j] (20)n=-n (21)i=n/10 (22)n%10 (23)x/10 (24)i!=k (25)num[i] (26)num[3-i] (27)struct node * (28)i<n (29)h=p (30)p->next=p2 改錯題目: 下列程序中函數divfun的功能是對于s指向的一個含有數字字符和非數字字符的字符串(串長不超過80),將其中連續的數字字符轉換為一個整數,如果連續的數字字符個數超過4個,則以4個數字字符為一組進行轉換。將轉換后生成的整數一次存放到整型數組a中。函數返回a數組中整數的個數。例如:若輸入的字符串”c123yz45! 786 *56abc123456789”,則a數組中的數值分別為:{123,45,786,56,1234,5678,9} #include <stdio.h> #include <ctype.h> void divfun(char *s, int a) { char *p=s; int i=0,k,sum; while(*p) if(isdigit(*p)) { sum=*p-'0';p++;k=1; while(isdigit(*p)) { k++; if(k<=4){sum=sum+*p-'0';p++;} else{a[i++]=sum; k=1;sum=*p-'0';p++; } } a[i++]=sum; } else p++; return i-1; } main() { char *str;int i,n,num[40]; gets(str);n=divfun(str,num); puts(str); for(i=0;i<=n;i++) printf("%6d",num[i]); printf("\n"); } 編程題目: 編寫函數int value(int bb[ ]),在三位正整數中尋找所有符合以下條件的正整數:它既是完全平方數并且又有兩位數字相同。例如:144是12的平方并且有兩位數字相同,因此144是符合條件的數。將找到的數按從小到大的次序依次存入bb數組中,函數返回bb數組中有效數據的個數 編寫main函數,調用函數value,將結果數組中全部有效數據按照每行5個數據的格式保存到文件myf2.out中。 符合上述條件的整數有:100,121,144,225,400,441,484,676,900 1.將源文件取名為myf2.c,輸出結果文件取名為myf2.out。 ‘ 2.數據文件的打開、使用和關閉等操作均用C標準庫中緩沖文件系統的文件操作函數 實現。 3.源程序文件和運行結果文件均須保存在T:盤的根目錄下,供閱卷用。 4.不要將myf2.obj、myf2.exe保存到T:盤中。 改錯題目答案: (1) void divfun(char *s, int a) 修改為:int divfun(char *s, int a) (2) void divfun(char *s, int a) 修改為:int divfun(char *s, int a[ ]) (3) if(k<=4){sum=sum+*p-'0';p++;} 修改為:if(k<=4){sum=sum*10+*p-'0';p++;} (4) char *str; 修改為:char str[80]; 編程題目答案: #include <stdio.h> int value(int bb[ ]) { int i,i2,j=0,a,b,c; for(i=10;i<32;i++) { i2=i*i; a=i2/100; b=i2/10%10; c=i2%10; if((a==b||b==c||c==a)&&!(a==b&&b==c)) /*兩個數相同*/ bb[j++]=i2; } return j; } main() { int i,n,zz[32]={0}; FILE *fp; if((fp=fopen("myf2.out","w"))==NULL) { printf("Can't open file!");exit(0); } n=value(zz); for(i=0;i<n;i++) { printf("%7d\n",zz[i]); fprintf(fp,(i+1)%5?"%7d":"%7d\n",zz[i]); } fprintf(fp,"\n"); fclose(fp); } |