



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
江蘇省高等學校非計算機專業學生計算機基礎知識和應用能力等級考試上機試卷(2009年秋)二級C語言 (試卷代號C01)(本試卷完成時間70分鐘)ー、改錯題(16分)【程序功能】輸入兩個正確日期且年份在1900-9999范圍內,計算并輸出兩個日期之間間隔的天數。提示,能被4整除并且不能被100整除的年份是閏年,能被400整除的年份也是閏年,其他年份則是平年。【測試數據與運行結果】顯不:firstdate:輸入:1980-2-1顯不:seconddate:輸入:2009-8-1輸出:10774days【含有錯誤的源程序】#include<stdio.h>#defineleap(inty)((y)%4=0&&(y)%100!=0||(y)%400=0)structd{inty,m,d;};intdays(structddl,structdd2){intmon|2][13]={{0,31,28,3130,31,30,3131,303130,31),{0,31,29,31,30,3130,31,31,30,313031}};inti;longtd=O;for(i=dl.y;i<d2.y;i++)td=leap(i)?366:365;for(i=l;i<dl.m;i++)td-=mon|leap(dl.y)]|i|;td-=dl.d-l;for(i=l;i<d2.m;i++)td+=mon|leap(d2.y)||i|;td+=d2.d-1;returntd;}voidmain(){structdl,d2;puts(''\nfirstdate:**);scanf(”%d-%d-%d'',&d1.y,&dLm,&dl.d);puts(n\nseconddate:'');scanf("%d-%d-%d",&d2.y,&d2.m,&d2.d);printf("%ddays",days(dl.y,d2.y));getch();【要求】.將上述程序錄入到文件myfl.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其它語句,也不能刪去整條語句。.改正后的源程序(文件名myfl.c)保存在T:盤根目錄中供閱卷使用,否則不予評分。二、編程題(24分)【程序功能】輸入兩個自然數P和Q(P<Q),找出滿足下列條件的整數組(KM,N)。P<K<M<QK*K+M*M=N*N【編程要求】.編寫函數intchlm(intp,intq,inta|]網)實現以下功能:査找K、M在|p,q|范圍內取值且滿足以上條件的所有整數組(K,M,N)。若找到則將這些整數組保存到a指向的數組中,函數返回找到的整數組的組數。若找不到則函數返回0。.編寫函數main實現以下功能:聲明二維數組a和變量p、q,輸入兩個自然數并保存到p和q中(p<q),調用chlm函數在[p,q]范圍內査找滿足以上條件的整數組。若找不到則在屏幕上輸出“notfound”,否則將査找結果保存到a數組中,輸出a數組數據到屏幕及文件myfl.out中。最后將考生本人的準考證號輸出到文件myfl.out中。【測試數據與運行結果】輸入:p=12 q=38輸出:121620123537152025153639163034182430202129212835243240273645【要求】.源程序文件名為myfl.c,輸出結果文件名為myf2.out。.數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。.源程序文件和運行結果文件均需保存在T:盤根目錄中供閱卷使用。.不要復制擴展名為。bj和exe的文件到T:盤中。2009年秋二級C語言上機試卷(試卷代號C01)答案ー、改錯題(16分)【程序功能】輸入兩個正確日期且年份在1900~9999范圍內,計算并輸出兩個日期之間間隔的天數。提示:能被4整除并且不能被100整除的年份是閏年,能被400整除的年份也是閏年,其他年份則是平年。【測試數據與運行結果】顯示:firstdate:輸入:1980-2-1顯ホ:seconddate:輸入:2009-8-1輸出:10774days【含有錯誤的源程序】#include<stdio.h>#defineleap(inty)((y)%4=0&&(y)%100!=0||(y)%400=0)/?語法錯,易,改為#defineleap(y)((y)%4==0&&(y)%100!=0||(y)%400=0)*/structd{inty,m,d;};intdays(structddInstructdd2){intmon[2H13]={{0,314831303130313130313031),{031,2931303130313130313031}};inti;longtd=O;for(i=dI.y;i<d2.y;i-H-)td=leap(i)?366:365; /?算法錯,中,改為td+=leap(i)?366:365;*/for(i=l;i<dl.m;i-H-)td-=mon|leap(dl.y)][i|;td-=dl.d-l;for(i=l;i<d2.m;i-H-)td+=mon[leap(d2.y)][i];td+=d2.d-1;returntd;}voidmain(){structdl,d2;/?語法錯,易,改為structddl,d2;*/puts(nfirstdate:");scanf(M%d-%d-%dn,&dl.y,&dl.m,&dl.d);puts(Hseconddate:");scanf("%d-%d-%d",&d2.y,&d2.m,&d2.d);printf(ハ%ddays\n",days(dl.y,d2.y));/?語法錯,中,改為printf("%dds\n",days(dl,d2));*/getch();二、編程題(24分)【程序功能】輸入兩個自然數P和Q(P<Q),找出滿足下列條件的整數組(K,M,N):P<K<M<QK*K+M*M=N*N【編程要求】.編寫函數intchlm(intp,intq,inta|]網)實現以下功能:査找K、M在[p,q]范圍內取值且滿足以上條件的所有整數組(K,M,N)。若找到則將這些整數組保存到a指向的數組中,函數返回找到的整數組的組數。若找不到則函數返回〇。.編寫函數main實現以下功能:聲明一個二維數組a變量p、q,輸入兩個自然數并保存到P和q中(p<q),調用chlm函數在|p.q|范圍內査找滿足以上條件的整數組。若找不到則在屏幕上輸出“!wtfound”,否則將査找結果保存到a數組中,輸出a數組數據到屏幕及文件myf2.out中。最后將考生本人的準考證號輸出到文件myf2.out中。【測試數據與運行結果】輸入:p=12 q=38輸出:121620123537152025153639163034182430202129212835243240273645【參考答案】#include<stdio.h>#include<math.h>intchlm(intp,intq,inta|||3|){intki,mi,ni,xi,i=0,j;for(ki=p;ki<q;ki++)for(mi=ki+l;mi<=q{xi=ki*ki+mi*mi;ni=sqrt(xi);if(ni*ni=xi){a|i]|0|=ki;a|i||l|=mi;a|i]|2|=ni;i++;}}returni;}voidmain(){intp,q,i,j,k,a|100]|31;FILE*fp;fp=fopen(Mmyf2.outH,MwM);if(fp==NULL){printf(nCannotopenthefi!e!\nn);exit(O);}printf(M\ninputpq:M);scanf(M%d%dn,&p,&q);k=chlm(p,q,a);if(k>0){for(i=0;i<k;i++){for(j=0;j<3;j++){printf(t?%4d^a[ilUl);fprintf(fp;?%4d,\a[iJU]);}pnntf(M\nM);fprintf(fp,n\nn);|}else{printf(MNotfound!**);fprintf(fp,MNotfound!,1);}fprintf(fp,**\nMyexamnumberis:0112400123**);fclose(fp);getch();}江蘇省髙等學校非計算機專業學生計算機基礎知識和應用能力等級考試上機試卷(2009年秋)
二級C語言 (試卷代號C02)(本試卷完成時間70分鐘)ー、改錯題(16分)【程序功能】函數dtoh實現將參數num的值表示為ー個十六進制形式的字符串,并將該字符串存儲在ー個動態申請的存儲區內,函數返回動態存儲區的起始地址。【測試數據及運行結果】輸入:1234輸出:4d2【含有錯誤的源程序】#include<stdio.h>#include<stdlib.h>chardtoh(unsignednum){chardigits||=**0123456789abcder*;char*s;intn=0;unsignedun=num;whiie(un){ n-H-; un/=16;}s=(char*)malloc((n+l)*sizeof(char));if(s=null){printf(**Memoryrequestfailed!\n**);exit(l);}s[n-]=**\0**;while(num){s|n--|=digits|num/16|; /?取一位十六進制數字字符?/num/=16;}returns;)voidmain(){char*p;unsignedn;scanf(**%u**,&n);p=dtoh(n);printf(n%sM,p);free(p);getch();}【要求】.將上述程序錄入到文件myfl.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其它語句,也不能刪去整條語句..改正后的源程序(文件名myfl.c)保存在T:盤根目錄中供閱卷使用,否則不予評分。二、編程題(24分)【程序功能】在給定的范圍內査找并輸出所有滿足以下條件的整數對(a,b)及與(a,b)關聯的反序數對(c,d):(1)a小于b;(2)a和b的十進制表示均是三位數且各位上的數字互不相同;(3)a的反序數(記作c)和b的反序數(記作d)也都是三位數并且axb等于cxd。例如,與整數對(302,406)關聯的反序數對是(203,604),302x406=203x604,因此(302,406)是滿足上述條件的整數對。【編程要求】.編寫函數intfind(intx[||4],intm,intn)實現以下功能:若m和n的十進制表示不是三位數則函數返回〇。否則,將取值在|m,n|范圍內所有滿足上述條件的整數對以及與這些整數對關聯的反序數對保存到x指向的二維數組中,函數返回x數組中保存的數據行數。.編寫函數main實現以下功能:聲明一個100行4列的二維數組a,用a數組作實參調用find函數在[300,4501范圍內査找,將找到的滿足上述條件的整數對及關聯的反序數對保存到a數組。按以下格式將a數組中數據輸出到屏幕及文件myf2.out中。最后將考生本人準考證號輸出到文件myfl.out中。【測試數據與運行結果】輸出:301*309=103*903 302*406=203*604 304*403=403*304 306*402=603*204312*426=213*624 314*413=413*314 321*369=123*963 324*423=423*324402*408=204*804 412*428=214*824【要求】.源程序文件名為myfl.c,輸出結果文件名為myf2.out。.數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。.源程序文件和運行結果文件均需保存在T:盤根目錄中供閱卷使用。.不要復制擴展名為。bj和exe的文件到T:盤中。2009年秋二級C語言上機試卷(試卷代號C02)答案ー、改錯題(16分)【程序功能】函數dtoh實現將參數num的值表示為ー個十六進制形式的字符串,并將該字符串存儲在ー個動態申請的存儲區內,函數返回動態存儲區的起始地址。【測試數據及運行結果】輸入:1234輸出:4d2【含有錯誤的源程序】#include<stdio.h>#include<stdlib.h>chardtoh(unsignednum) 語法錯,中,改為char*dtoh(unsigncdnum)*/{chardigits[]=f,0123456789abcdeF,;char*s;intn=0;unsignedun=num;while(un){ n-H-;un/=16;}s=(char*)malloc((n+l)*$izeof(char));if(s=null) /?語法錯,易,改為if(s=、ULL)或s=0或加#deflnenull0*/{printf(MMemoryrequestfailed!\nM);exit(l);}s|nーー]="\0"; /?語義錯,易,改為s[n-l='\0';*/while(num){s|n |=digits[num/16|;/?取一位十六進制數字字符?//*算法錯,中,改為s|n-|=digits|num%16|;*/num/=16;}returns;}voidmain(){char*p;unsignedn;scanf("%u",&n);p=dtoh(n);printf("%s",p);free(p);getch();二、編程題(24分)【程序功能】在給定的范圍內査找并輸出所有滿足以下條件的整數對(a,b)及與(a,b)關聯的反序數對(c,d):(l)a小于b;(2)a和b的十進制表示均是三位數且各位上的數字互不相同;(3)a的反序數(記作c)和b的反序數(記作d)也都是三位數并且axb等于cxd。例如,與整數對(302,406)關聯的反序數對是(203,604),302x406=203x604,因此(302,406)是滿足上述條件的整數對。【編程要求】.編寫函數intfind(intx|||4],intm,intn)實現以下功能:若m和n的十進制表示不是三位數則函數返回〇〇否則,將取值在|m,n|范圍內所有滿足上述條件的整數對以及與這些整數對關聯的反序數對保存到x指向的二維數組中,函數返回x數組中保存的數據行數。.編寫函數main實現以下功能:聲明一個100行4列的二維數組a,用a數組作實參調用find函數在[300,4501范圍內査找,將找到的滿足上述條件的整數對及關聯的反序數對保存到a數組。按以下格式將a數組中數據輸出到屏幕及文件myfl.out中。最后將考生本人準考證號輸出到文件myfZ.out中。【測試數據與運行結果】輸出:301*309=103*903 302*406=203*604 304*403=403*304 306*402=603*204312*426=213*624 314*413=413*314 321*369=123*963 324*423=423*324402*408=204*804 412*428=214*824【參考答案】#include"stdio.h"intjudge(inta){intg,b,s;b=a/100; s=(a%100)/10; g=a%10;if(b!=s&&b!=g&&s!=g)return1;elsereturn0;}intinv(inta){intt=0;while(a!=0){ t=t*10+a%10;a/=10; }returnt;}intfind(intx|||4|,intm,intn){intiJ9k=09num9a9b;if(m>1000||m<100||n>1000||n<100)return0;for(a=m;a<=n;a-H-)for(b=a+l;b〈=n;b++){i=inv(a);j=inv(b);ifGudge(a)&&judge(b)&&a*b=i*j){x|k][0]=a;x[k||l]=b;x[kl[2]=i;x[k][3)=j;k++;returnk;}voidmain(){inti,n,a|100||4|;FILE*fp;if((fp=fopen("myf2.01!ビJw"))=NULL){printf(MCannotopenthefile!");exit(0);}n=find(a,300,450);for(i=0;i<n;i-H-){printf("%d*%d=%d*%d"9a[i]|0|9a|i](l]9a[i]|2]9a|i][3]);
fprintf(fp,M%d*%d=%d*%d”/[川0]同川1]再[川2]再用[3]);fprintf(fp,M\nMyexamnumberis:0112400123M);fclose(fp);getchO;江蘇省髙等學校非計算機專業學生計算機基礎知識和應用能力等級考試上機試卷(2009年秋)二級C語言 (試卷代號C03)(本試卷完成時間70分鐘)ー、改錯題(16分)【程序功能】對ー個二維數組中的數據排序。排序規則如下:將整個數組中值最小的元素所在行調整為數組第1行(行下標為〇),將除第1行外剩余行中值最小的元素所在行調整為數組第2行,將除第1、2行外剩余行中值最小的元素所在行調整為數組第3行,其它以此類推。【測試數據與運行結果】輸出:821012345輸出:82101234543234563456821054321234【含有錯誤的源程序】#includeHstdio.hMintgetmin(inta||,intn){inti,min=a|0];for(i=l;i<n;i++)if(a|i|>min)min=a|i|;returnmin;}voidlineswap(inta||Jntb[],int*n){inti,t;for(i=0;i<n;i-H-){t=a|i);a|i|=b(i];b|i|=t;}Ivoidmain(){inta|4]={{3,4,5,6},{8,2,l,0},{5,4,3,2},{1,2,3,4}},i,j;for(i=0;i<3;i-H-){for(j=l;j<4;j++){if(getmin(a|j|,4)<getmin(a|i|,4))lineswap(a[j],a[i],4);}}for(i=0;i<4;i++){for(j=0;j<4;j++)printf("%d",a|i||j|);printf("\n");}getch();}【要求】.將上述程序錄入到文件myfl.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改O.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其它語句,也不能刪去整條語句。.改正后的源程序(文件名myfLc)保存在T:盤根目錄中供閱卷使用,否則不予評分。二、編程題(24分)【程序功能】計算由兩個整數生成的兩個合法代碼的碼距。這里的合法代碼定義為由16個二進制數字字符組成的字符串。例如“0000000000100101”是ー伯法^碼。碼距是指兩個合法代碼中對應位數字字符不同的位數。例如,合法代碼“000000000010010ド和“0000000000001110”自右向左在第1、2,4、6位上具有不同數字字符,因此這兩個合法代碼的碼距為4。【編程要求】.編寫函數inthamming(intx,inty,chara||,charb|])實現以下功能:先將形參、和y分別轉換為2個合法代碼并按從低位到髙位的順序分別保存2個合法代碼到a和b指向的數組中(不足16位時髙位補字符0),再計算a數組和b數組中的兩個合法代碼的碼距,函數返回該碼距。.編寫函數main實現以下功能:聲明字符數組a、b和變量m,n,輸入兩個整數并保存到m和n中,若m、n的值在〇?32767范圍內則用m、n和數組a、b作實參調用hamming函數,計算由m和n生成的兩個合法代碼的碼距,將a、b數組中存儲的合法代碼及這兩個代碼的碼距輸出到屏幕及文件myfl.out中。最后將考生本人的準考證號輸出到文件myfl.out中。【測試數據與運行結果】輸入:m=16n=8輸出:00000000000100000000000000001000distanceof16and8is2【要求】.源程序文件名為myfl.c,輸出結果文件名為my&.out。.數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。.源程序文件和運行結果文件均需保存在T:盤根目錄中供閱卷使用。.不要復制擴展名為。bj和exe的文件到T:盤中。2009年秋二級C語言上機試卷(試卷代號C03)答案ー、改錯題(16分)【程序功能】對ー個二維數組中的數據排序。排序規則如下:將整個數組中值最小的元素所在行調整為數組第1行(行下標為0),將除第1行外剩余行中值最小的元素所在行調整為數組第2行,將除第1、2行外剩余行中值最小的元素所在行調整為數組第3行,其它以此類推。【測試數據與運行結果】數組初始化數據: 輸出:【含有錯誤的源程序】#include"stdio.h"intgetmin(inta||,intn){inti,min=a[0];for(i=l;i<n;i-H-)if(a[i|>min) /?算法錯,中,改為if(a|i|<min)*/min=a|i|;returnmin;}voidlineswap(inta||,intb||Jnt*n)/?語法錯,易,改為voidlineswap(inta||,intb||,intn)*/{inti,t;for(i=0;i<n;i-H-){t=a|i|;a|i|=b|i|;b|i|=t;}}voidmain(){inta[4]={{3,4,5,6},{8,2,l,0},{5,4,3,2},{l,2,3,4}},i,j;/?語法錯,易,改為inta[4|[4]={{3,4,5,6},{8,2,l,0},{5,432},{l,23,4}}*/for(i=0;i<3;i++){fora=l;j<4;j++) /?算法錯,中,改為for(j=i+l;j<4;j++)*/{if(getmin(aIj|,4)<getmin(a|i],4))lineswap(a[j],a[i|,4);)}for(i=0;i<4;i-H-){for(j=0;j<4;j++)printf(M%d",a|i||j|);printf("\n");)getch();}二、編程題(24分)【程序功能】計算由兩個整數生成的兩個合法代碼的碼距。這里的合法代碼定義為由16個二進制數字字符組成的字符串。例如-ooooooooooiooior5是ー^合法^碼。碼距是指兩個合法代碼中對應位數字字符不同的位數。例如,合法代碼“00000000001001(H”和“0000000000001110”自右向左在第1、2、4、6位上具有不同數字字符,因此這兩個合法代碼的碼距為4。【編程要求】.編寫函數inthamming(intx,inty,chara||,charb|])實現以下功能:先將形參x和y分別轉換為2個合法代碼并按從低位到高位的順序分別保存2個合法代碼到a和b指向的數組中(不足16位時高位補字符0),再計算a數組和b數組中的兩個合法代碼的碼距,函數返回該碼距。.編寫函數main實現以下功能:聲明字符數組a、b和變量m、n,輸入兩個整數并保存到m和n中,若m、n的值在0-32767范圍內則用m、n和數組a、b作實參調用hamming函數,計算由m和n生成的兩個合法代碼的碼距,將a、b數組中存儲的合法代碼及這兩個代碼的碼距輸出到屏幕及文件myfl.ou!中。最后將考生本人的準考證號輸出到文件myfl.out中。【測試數據與運行結果】輸入:m=16n=8輸出:a:0000000000010000b:0000000000001000distanceof16and8is2【參考答案】#include<stdio.h>voidbin(intn,charstr||){inti=15,j;while(n!=0){ str[iT=n%2+'0';n=n/2;}for(j=0;j<=i;j++)str|j]='O';str|16]='\0';}inthamming(intx,chara[],inty,charb||){intcount=0,i;bin(x,a);bin(y,b);for(i=0;i<16;i++)if(a|il!=b|i|)count++;returncount;voidmain(){intm,n,t;chara|17|,b|17|;FILE*fp;if((fp=fopen(nmyf2.out,\Hwn))=NULL){printf(nCannotopenthefilemyf2.out!\nM);exit(l);}do{scanf(M%d%dn,&m,&n);}while(m<0||m>32767||n<0||n>32767);t=hamming(m,a,n,b);printf(**\n%s\n%s\ndistanceof%dand%dis%d\nM,a,b,m,n,t);fprintf(fp,M%s\n%s\ndistanceof%dand%dis%d\n”,a,b,m,n,。;fprintf(fp,”\nMyexamnumberis:0112400123");fclose(fp);getch();江蘇省高等學校非計算機專業學生計算機基礎知識和應用能力等級考試上機試卷(2009年秋)二級C語言 (試卷代號C04)(本試卷完成時間70分鐘)ー、改錯題(16分)【程序功能】將一個實數轉換為二進制科學計數法表示并輸出。二進制科學記數法是指將一個絕對值大于2或小于1的實數記為ax2±-形式,其中尾數a是用二進制表示的實數且!<|a|<2,指數中的n是用二進制表示的整數。例如:0.125的二進制科學計數法表示是1.0x2〇若用B代表基數2,貝リax2±n可表示為aB±n的形式。例如,1.0x2-”表示為!.0B-11.【測試數據與運行結果】第一次運行時輸入:0輸出:0.0B0第二次運行時輸入:0.125輸出S1.0B-11第三次運行時輸入:315輸出:1.00111011B+1000【含有錯誤的源程序】#include<stdio.h>voidoutBinary(intx){if(x/2)outBinary(x/2);printf(M%dn,x%2);}voidoutFloatBinary(floatx){inte=0;if(x=0){puts(O.OBO);return;)if(x<0){putchar(し’);x="x;}while(x>=2.0){e++;x/=2;}while(x<1.0){e++;x*=2;}printf(Ml.M);x=(x-(int)x)*2;do{printf(n%dM,x);x=(x-(int)x)*2;}while(x!=0);lf(e=0)printf(MB0M);elseif(e>0){prmtf(nB+n);outBinary(e);}else{printf("B」’);outBinary(-e);}printf(M\nM);}voidmain(){floata;scanf(M%F\&a);outFloatBinary(a);getch();}【要求】io,將上述程序錄入到文件myfl.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。.改錯時,可以修改語句中的一部分內容,調整語句次序,増加少量的變量說明或編譯預處理命令,但不能增加其它語句,也不能刪去整條語句..改正后的源程序(文件名myfl.c)保存在T:盤根目錄中供閱卷使用,否則不予評分。二、編程題(24分)【程序功能】求3000以內的親密數對。如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,則稱整數A和B為ー對親密數。【編程要求】.編寫函數皿介而11111(10118§[][2],1011811)實現以下功能:找到2?n范圍內的所有親密數對,將這些親密數對保存到s指向的二維數組中。函數返回s數組中存儲的親密數對的對數。.編寫函數main實現以下功能:聲明二維數組s和變量n,輸入ー個正整數并保存到n中,用二維數組s和變量n作為實參調用frinum函數,將n以內的所有親密數對輸出到屏幕及文件myfl.out中。最后將考生本人的準考證號輸出到文件myf2.out中。【測試數據與運行結果】輸入:n=3000輸出:(220,284)(1184,1210)(2620,2924)【要求】.源程序文件名為myf2.c,輸出結果文件名為myf2.out。.數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。.源程序文件和運行結果文件均需保存在T:盤根目錄中供閱卷使用。.不要復制擴展名為。bj和exe的文件到T:盤中。2009年秋二級C語言上機試卷(試卷代號C04)答案ー、改錯題(16分)【程序功能】將一個實數轉換為二進制科學計數法表示并輸出。二進制科學記數法是指將一個絕對值大于2或小于1的實數記為ax2±n形式,其中尾數a是用二進制表示的實數且l<|a|<2,指數中的n是用二進制表示的整數。例如:0.125的二進制科學計數法表示是1.0x2-”。若用B代表基數2,則ax2士1I可表示為aB±n的形式。例如,1.0X2-"表示為1.0B-U。【測試數據與運行結果】第一次運行時輸入:0輸出:0.0B0第二次運行時輸入:0.125輸出:1.0B-11第三次運行時輸入:315輸出:1.001U011B+1000【含有錯誤的源程序】#include<stdio.h>voidoutBinary(intx){if(x/2)outBinary(x/2);printf(n%dH,x%2);}voidoutFloatBinary(floatx){inte=0;if(x=O){puts(O.OBO); /?語法錯,中,改為puts(“0.0B0");*/return;}if(x<0){putchar(*-*);x=-x;}while(x>=2.0){e++;x/=2;}while(x<1.0){e++;x*=2;} ダ算法錯,中,改為{e??;x*=2;}★/printf(Hl.n);x=(x-(int)x)*2;do{printf(H%dM,x); /?語義錯,偏難,改為printf(M%dH,(int)x);*/x=(x-(int)x)*2;}while(x!=0);if(「0)printf("BO"); /?語義錯,易,改為if(e==O)printf("BO");*/elseif(e>0){printf(MB+n);outBinary(e);}else{printf(nB-M);outBinary(-e);}printf(M\nn);}voidmain(){floata;scanf(M%F\&a);outFloatBinary(a);getch();}二、編程題(24分)【程序功能】求3000以內的親密數對。如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,則稱整數A和B為ー對親密數。【編程要求】.編寫函數intfrinum(longs川2],longn)實現以下功能:找到2?n范圍內的所有親密數對,將這些親密數對保存到s指向的二維數組中。函數返回s數組中存儲的親密數對的對數。.編寫函數main實現以下功能:聲明二維數組s和變量n,輸入ー個正整數并保存到n中,用二維數組s和變量n作為實參調用frinum函數,將n以內的所有親密數對輸出到屏幕及文件myfl.out中。最后將考生本人的準考證號輸出到文件myf2.out中。【測試數據與運行結果】輸入:n=3000輸出:(220,284)(1184,1210)(2620,2924)【參考答案】#include<stdio.h>intfrinum(longs|||2|,longn){longa,b,m,i,k=0;for(a=2;a<=n;a++){for(b=0,i=l;i<=a/2;i-H-)if(!(a%i))b+=i;for(m=0,i=l;i<=b/2;i++)if(!(b%i))m+=i;if(m=a&&b>m){ s|k||0|=a; s|k||l|=b; k++; }Ireturnk;voidmain(){inti,j;longn,s|20||2|;FILE*fp;if((fp=fopen(nmyf2.outM,HwM))=NULL){printf(MCannotopenthefilemyf2.out!\nM);exit(l);}scanグ%Id”,&n);j=frinum(s,n);for(i=0;ivj;i++){printf("ヽn(%ld,%ld)n9s[i|[0]9s[i||l]);fprintf(fp,M\n(%ld,%ld)M,s(i||O|,s|i||l|);}fprintf(fp,M\nMyexamnumberis:0112400123n);fclose(fp);getch();|江蘇省髙等學校非計算機專業學生計算機基礎知識和應用能力等級考試上機試卷(2009年秋)二級C語言 (試卷代號C05)(本試卷完成時間70分鐘)ー、改錯題(16分)【程序功能】函數replace的功能是用s2指向的字符串替換si指向的字符串中第n個字符(下標為n-1)之后到第m個字符(下標為m-1)之前的m-n-1個字符組成的子串(m>n+l)。例如,若si指向的字符串為”abed”、s2指向的字符串為”xyz“、n=l、m=3,則執行替換操作后s!指向的字符串為"axyzed”。【測試數據與運行結果】顯不:sl=qwertyuiops2=zxcinputn,m:輸入:19輸出:qzxcop【含有錯誤的源程序】#include<stdio.h>#include<string.h>voidreplace(charsl||,intn,intm,chars2||){chars|80|;inti,j,lenl,len2,len;lenl=strlen(sl);Ien2=strlen(s2);if(m>n+l&&n<lenl&&m<=lenl){for(i=0;i<n;i-H-)s|i|=sl|i|;for(j=0;j<len2;j++,i++)s|i|=s2|j|;s|il='\0';len=strlen(s);for(i=0;sl|m-l+i|!=*\O*;i-H-)s|len+i]=s11m-1-H];§[len+i|=へ0,;for(i=0;s[i]!='、〇';i++)voidmain(){charsl|80|="qwertyuiop",s2|20|="zxc";intn,m;puts("sl=%ss2=%s\n",sl,s2);puts("inputn.m:");scanf("%d%d",n,m);replace(s19n9m9s2);puts(sl);getch。;【要求】.將上述程序錄入到文件myfl.c中,根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。.改錯時,可以修改語句中的一部分內容,調整語句次序,增加少量的變量說明或編譯預處理命令,但不能增加其它語句,也不能刪去整條語句。.改正后的源程序(文件名myfl.c)保存在T:盤根目錄中供閱卷使用,否則不予評分。二、編程題(24分)【程序功能】用烏勒母公式an=n2-n+41(n=l,2,...,m)生成一個數列的前m項并找出其中的回文數。【編程要求】.編寫函數intnumseq(longa[],longb[],intm)實現以下功能:用烏勒母公式生成一個數列的前m項并保存到a指向的數組中,從a數組中找出所有回文數保存到b指向的數組中,函數返回b數組中的回文數個數。.編寫函數main實現以下功能:聲明ー維數組a、b和變量m;輸入數列的項數并保存到m,用數組a、b和變量m作實參調用numseq函數,將生成的數列前m項以及其中的回文數分別保存到a和b數組中;按每行!0個數據的格式將a、b數組中的數據輸出到屏幕及文件myfl.out中。最后將考生本人的準考證號輸出到文件myfl.out中。【測試數據與運行結果】輸入:m=20輸出:a:TOC\o"1-5"\h\z41 43 47 53 61 71 83 97 113 131151 173 197 223 251 281 313 347 383 421131 151 313 383【要求】.源程序文件名為myfZ.c,輸出結果文件名為myfZ.out。.數據文件的打開、使用、關閉均用C語言標準庫中緩沖文件系統的文件操作函數實現。.源程序文件和運行結果文件均需保存在T:盤根目錄中供閱卷使用。.不要復制擴展名為。bj和exe的文件到T:盤中。2009年秋二級C語言上機試卷(試卷代號C05)答案ー、改錯題(16分)【程序功能】函數replace的功能是用s2指向的字符串替換s!指向的字符串中第n個字符(下標為n-1)之后到第m個字符(下標為m-D之前的m-n-1個字符組成的子串(m>n+D。例如,若si指向的字符串為"abed”、s2指向的字符串為”xyz"、n=km=3,則執行替換操作后s!指向的字符串為“axyzed”。【測試數據與運行結果】顯ポ:sl=qwertyuiops2=zxcinputn,m:輸入:19輸出:qzxcop【含有錯誤的源程序】#include<stdio.h>#include<string.h>voidreplace(chars1||,intn,intm,chars2||){chars|80|;intijjenlJenZJen;lenl=strlen(sl);Ien2=strlen(s2);if(m>n+l&&n<lenl&&m<=lenl){for(i=0;i<n;i++)s[i]=sl[i];forG=0;j<len2;j++,i++)s|i]=s2|j]; /?語義錯,中,應為s|i]=s2|j];*/s|i|='\0';len=strlen(s);for(i=0;sl[m?l+i|!='、〇’;i++)s[len+i]=s1[m-1-HJ;s|len+i|='\0';for(i=0;s|i]!='\0';i++)s|i]=sl|i|; /?算法錯,中,應為 */}Ivoidmain(){charsl|80]="qwertyuiop",s2|20]="zxc";intn,m;puts("§l=%§s2=%s\n",§l,§2);/?語法錯,易,應為printf("sl=%ss2=%s\n",sl,s2);*/
/?語義錯,易,應為scanf(n%d%dM,&n,&m);*//?語義錯,易,應為scanf(n%d%dM,&n,&m);*/puts(sl);getch();二、編程題(24分)【程序功能】用烏勒母公式2曰2?11+41(11=1ス.?,111)生成一個數列的前m項并找出其中的回文數。【編程要求】.編寫函數intmimseq(longa[],longb[],intm)實現以下功能:用烏勒母公式生成一個數列的前m項并保存到a指向的數組中,從a數組中找出所有回文數保存到b指向的數組中,函數返回b數組中的回文數個數。.編寫函數main實現以下功能:聲明ー維數組a、b和變量m;輸入數列的項數并保存到m,用數組a、b和變量m作實參調用numscq函數,將生成的數列前m項以及其中的回文數分別保存到a和b數組中;按每行10個數據的格式將a、b數組中的數據輸出到屏幕及文件myfl.out中。最后將考生本人的準考證號輸出到文件myfZ.out中。【測試數據與運行結果】輸入:m=20輸出:4143475361718397113131151173197223251281313347383421131151313383b:【參考答案】#include<stdio.h>#include<stdlib.h>int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年 東莞市望牛墩鎮招聘機關事業單位考試試題附答案
- “絲綢之路”絲路文化戲劇商業計劃書
- 天然氣化工項目可行性研究報告
- 中國苗圃行業市場運營現狀及投資戰略咨詢報告
- 2025-2030年中國席卡夾項目投資可行性研究分析報告
- 中國單反行業市場全景監測及投資前景展望報告
- 中國蜂制品行業市場深度研究及投資規劃建議報告
- 信息與計算機工程學院080400儀器科學與技術報錄數據分析報告
- 中國清潔能源行業市場調查報告
- 2025年中國雞精市場全面調研及行業投資潛力預測報告
- 醫療器械法規對醫療器械經銷商資質的規定
- 阿森斯失眠評定量表2
- 安全防水知識培訓內容
- 梨生產技術規范
- 紅旗H7汽車說明書
- 勞保鞋管理制度
- GB/T 15622-2023液壓缸試驗方法
- 1.2音樂情感及情緒《祝酒歌》課件-高中音樂人音版必修音樂鑒賞
- 制造業轉型升級的產業協同創新研究
- 父母多愛我-完整版課件
- 運維服務質量保障措施方案
評論
0/150
提交評論