![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2007年(春)江蘇二級C上機(jī)試卷 |
2007年(春)上機(jī)試卷(01) (考試時間70分鐘) 一、改錯題(18分) [程序功能] 下列程序中函數(shù)fun的功能是: 首先將s數(shù)組中的字符串按以下規(guī)則復(fù)制到t數(shù)組:對于下標(biāo)值為偶數(shù)位置上的字符復(fù)制n次(n=下標(biāo)值+1),對于下標(biāo)值為奇數(shù)位置上的字符只復(fù)制一次;其次將t數(shù)組中的字符串按字符編碼從小到大的順序排序。 [測試數(shù)據(jù)與運行結(jié)果] 當(dāng)s中的字符串為“abcdefg”時,程序運行結(jié)果應(yīng)為“abcccdeeeeefggggggg” 當(dāng)s中的字符串為“136254”時,程序運行結(jié)果應(yīng)為“123455555666” [含有錯誤的源程序]*/ #include "stdio.h" #include "conio.h" void fun(char *s,char *t) {int i,j,k,n=0; char temp; for(i=0;s[i]!='\0'; ++i) if(i%2=0) for(k=0;k<i+1;++k) {t[n]=s[i]; n++; } else t[n]=s[i]; t[n]='\0'; for(i=0;i<n-1;i++) {k=i; for(j=0;j<n;j++) if(t[j]<t[k]) k=j; if(k!=i) { temp=t[i]; t[i]=t[k]; t[k]=temp; } } } main() {char s[20],t[100]; printf("\nPlease enter string s:"); gets(s); fun(s); printf("The result is: %s",t); getch(); } /* 二、編程題(22分) [程序功能] 驗證對于任意一個不超過9位的自然數(shù)按下列步驟經(jīng)過有限次的變換得到的新數(shù)最終轉(zhuǎn)換成123并(1)統(tǒng)計該數(shù)中偶數(shù)數(shù)字的個數(shù)a(0被當(dāng)作偶數(shù)對待),該數(shù)中奇數(shù)數(shù)字的個數(shù)b,該數(shù)的總位數(shù)c。 (2)用a,b,c按以下規(guī)則組成一個新數(shù):當(dāng)a!=0時,a為百位,b為十位,c為個位;當(dāng)a=0時,b為百位,a為十位,c為個位。(3)當(dāng)這個新數(shù)不等于123時,對這個新數(shù)重復(fù)上述操作。經(jīng)過多次重復(fù),新數(shù)最終轉(zhuǎn)換成123。數(shù)學(xué)上稱123為陷阱數(shù)。 [編程要求] 1、編寫函數(shù)int fun(long n,long a[]),對給定的一個長整型數(shù)n根據(jù)上述規(guī)則作變換,直到新生成的數(shù)等于123。在轉(zhuǎn)換過程中,把n及轉(zhuǎn)換過程中生成的所有數(shù)依次保存到數(shù)組a中,函數(shù)返回a數(shù)組中數(shù)據(jù)個數(shù)。 2、編寫main函數(shù),從鍵盤輸入n的值,調(diào)用函數(shù)fun判斷n是否轉(zhuǎn)換成123,將n及轉(zhuǎn)換過程中生成的所有數(shù)依次輸出到屏幕并用寫文件函數(shù)保存保存到結(jié)果文件myf2.out,最后將考生本人的準(zhǔn)考證號字符串也保存到結(jié)果文件myf2.out中。 [測試數(shù)據(jù)與運行結(jié)果] 當(dāng)n=12345678時輸出結(jié)果為: 12345678,448,303,123 my exam number is :考生本人準(zhǔn)考證號字符串 2007年(春)上機(jī)試卷(02) (考試時間70分鐘) 一、改錯題(18分) [程序功能] 找到并輸出2~100之間的所有互逆素數(shù)對;ツ嫠財(shù)對:若一個素數(shù)的反序數(shù)也是素數(shù),則稱該素數(shù)和其反序數(shù)為互逆素數(shù)對。例如,13是素數(shù),13的反序數(shù)31也是素數(shù),故(13,31)是互逆素數(shù)對。 算法提示:函數(shù)prime的功能是先用篩選法求出保存在a指向的結(jié)構(gòu)數(shù)組元素的成員i中2~n范圍內(nèi)的所有素數(shù),再從中選出大于11的互逆素數(shù)對。存放互逆素數(shù)對的方法是:將互逆素數(shù)對分別存放于同一結(jié)構(gòu)數(shù)組的i和flag成員中。例如,13和31是互逆素數(shù)對,故a[13].i=13,a[13].flag=31;a[31].i=31,a[31].flag=13。 [測試數(shù)據(jù)與運行結(jié)果] 運行結(jié)果 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 13, 31 17, 71 31, 13 37, 73 71, 17 73, 37 79, 97 97, 79 [含有錯誤的源程序] #include<math.h> #define N 101 struct PR{ int i;int flag; }; void prime(struct PR a[],int n) { int i,j; for(i=2;i<sqrt(n);i++) if(a[i].i) for(j=i+1;j<n;j++) if(a[j].i && a[j].i%a[i].i=0) a[j].i=0; for(i=12;i<=n;i++) if(a[i].i) { int k=i,s=0; while(k) { s=s*10+k%10;k/=10; } if(a[s].i) { a[k].flag=i;a[i].flag=k;} } } main() { struct PR a[N]=0;int i; clrscr(); for(i=2;i<N;i++) a[i]=i; prime(a,N); for(i=2;i<N;i++) if(a[i].i) printf("%3d",a[i].i); printf("\n"); for(i=10;i<N;i++) if(a[i].flag) printf("%4d,%4d\n",a[i].i,a[i].flag); getch(); } 要求: 1、將上述程序錄入到文件myf1.c中,根據(jù)題目要求及程序中語句之間的邏輯關(guān)系對程序中的錯誤進(jìn)行修改。 2、改錯時,可以修改語句中的一部分內(nèi)容,調(diào)整語句次序,增加少量的變量說明或編譯預(yù)處理命令,但不能增加其它語句,也不能刪去整條語句。 3、改正后的源程序(文件名myf1.c)保存在考試軟盤的根目錄中供閱卷使用,否則不予評分。 二、編程題(22分) [程序功能] 字符串變換 [編程要求] 1. 編寫函數(shù)void conv(char *ss),其功能是:從左到右依次掃描字符串ss,把小寫字母o左邊的所有字符移到該串的右邊,并把該小寫字母o刪除,繼續(xù)掃描字符串ss并做上述操作,直到字符串ss中所有的小寫字母o被刪除為止。 2. 編寫main函數(shù),聲明一個長度為80的字符數(shù)組并用測試數(shù)據(jù)初始化該數(shù)組,調(diào)用conv函數(shù)對數(shù)組中的字符串作上述變換,將變換后的結(jié)果字符串輸出到屏幕并用寫文件函數(shù)保存到結(jié)果文件myf2.out中,最后將考生本人的準(zhǔn)考證號字符串也保存到結(jié)果文件myf2.out中。 [測試數(shù)據(jù)與運行結(jié)果] 測試數(shù)據(jù): You can create an index on any field. 輸出結(jié)果: n any field.Yu can create an index My exam number is: 考生本人準(zhǔn)考證號字符串 [要求] 1. 源程序文件名必須取為myf2.c,輸出結(jié)果文件名必須取為myf2.out。 2. 數(shù)據(jù)文件的打開、使用和關(guān)閉均用C語言標(biāo)準(zhǔn)庫中緩沖文件系統(tǒng)的文件操作函數(shù)實現(xiàn)。 3. 源程序文件和運行結(jié)果文件均須保存在考試盤的根目錄下,供閱卷用。 4. 不要復(fù)制擴(kuò)展名為OBJ和EXE的文件到考試盤上。 |