2011春江蘇省二級C上機考試真題第2套 |
江蘇省高等學校非計算機專業學生 計算機基礎知識和應用能力等級考試上機試卷(2011年春) 二級C語言 (試卷代號C02) (本試卷完成時間70分鐘) 一、改錯題(16分) 【程序功能】 統計一個字符串中包含的字母串個數并找出其中最長的字母串。 所謂字母串是指一個連續的字母序列(不區分大小寫),字母串之間用非字母字符分隔。函數count的功能是統計p指向的字符串中包含的字母串個數,找出的最長字母串存放在pmax指向的數組中,函數返回字母串的個數。 【測試數據與運行結果】 測試數據:you are teaeher234too. 屏幕輸出:a=you are teacher234too. number is 4 max string is:teacher 【含有錯誤的源程序】 #include <stdio.h> #include <string.h> #include <ctype.h> int count(char p[],char pmax[]) { int j=0,k,m=0; char temp[100]; while(*p) { while((!isalpha(*p)) && *p) p++; k=0; if(*p!='\0') m++; while(isalpha(*p)) temp[k++]=*p++; temp[k]="\0"; if(k<j) { j=k; pmax=temp; } } return m; } void main() { char a[100]="you are teacher234too.",max[100]; int i; i=count(a[],max[]); if(i==0) printf("a=%S: No letter strings!\n",a); else prinff("a=%s\nnumber is %d\nmax string is:%s\n",a,i,max); } 【要求】 1.將上述程序錄入到文件myf1.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。 2.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其他語句,也不能刪去整條語句。 3.改正后的源程序(文件名myf1.c)保存在T:盤根目錄中供閱卷使用,否則不予評分 二、編程題(24分) 【程序功能】 將一個二維數組中的若干行數據按要求插入到另一個二維數組中。 【編程要求】 1.定義符號常量N代表4 2.編寫函數int insert_row(int a[][N],int n,int b[][N],int m)。已知形參a指向的二維數組(簡稱a數組)前n行數據已按每行數據之和升序排列,形參b指向的二維數組中有m行數據。insert_row函數實現將b數組中m行數據插入到a數組中,完成插入操作后a數組中所有行的數據仍按每行數據之和升序排列。函數返回a數組中有效數據的行數。 3.編寫main函數。函數功能是聲明兩個二維數組x和y并用測試數據初始化,用x和y 數組作為實參調用insert_row函數將y數組中的兩行數據插入到x數組中。輸出x數組中全部數據到屏幕及文件myf2.out中。最后將考生本人的準考證號字符串輸出到文myf2. out中。 【測試數據與運行結果】 測試數據: x數組原數據: 2 2 3 4 9 10 11 12 y數組數據: 1 3 5 7 5 10 15 20 屏幕輸出: 2 2 3 4 1 3 5 7 9 10 11 12 5 10 15 20 【答案】 改錯1:將第13行 "temp[0]="\0" 修改為 temp[0]='\0' 改錯2:將第 14行 if(k<j) 修改為 if(k>j) 改錯3:將第16行 pmax=temp,修改為 strcpy(pmax,temp); 改錯4:將第24行i=count(a[],max[])修改為i=count(a,max); |