試題1:
機試時間:9月23日15:30
機試試題:南開67(整數各位數字運算題)
下列程序的功能是:選出5000以下符合條件的自然數。條件是:千位數字與百位數字之和等于十位數字與個位數字之和,且千位數字與百位數字之和等于個位數字與千位數字之差的10倍。計算并輸出這些四位自然數的個數cnt以及這些數的和sum。請編寫函數countValue()實現程序的要求,最后調用函數writeDat()把結果cnt和sum,輸出到文件OUT13.DAT中。
部分源程序存在文件prog1.c中。
請勿改動主函數main()和輸出數據函數writeDat()的內容。
答案內容:
void countValue()
{int i,thou,hun,ten,data;
for(i=1000;i<5000;i++)
{ thou=i/1000; hun=i%1000/100;
ten=i%100/10; data=i%10;
if(thou+hun==ten+data&&thou+hun==(data-thou)*10) {cnt++;sum+=i;}
}
}
試題2:
在文件in.dat中有200組數據,每組有3個數,每個數均是三位數。函數ReadDat()讀取這200組數據存放到結構數組aa中,請編制函數jsSort(),其函數的功能是:要求在200組數據中找出條件為每組中的第二個數大于第一個數加第三個數的之和,其中滿足條件的組數作為函數jsSort() 的返回值,同時把滿足條件的數據存入結構數組bb中,再對bb中的數據按照每組數據的第二個數加第三個之和的大小進行降序排列(第二個數加第三個數的和均不相等),排序后的結果仍重新存入結構數組bb中,最后調用函數WriteDat()把結果bb輸出到文件out.dat中。
部分源程序存在文件prog1.c中。
請勿改動主函數main()、讀數據函數ReadDat()和輸出數據函數WriteDat()的內容。
答案是
int jsSort()
{int i, j, cnt=0;
data ch;
for(i=0;i<200;i++)
if(aa.x2>aa.x1+aa.x3) bb[cnt++]=aa;
for(i=0;i<cnt-1;i++)
for(j=i+1;j<cnt;j++)
if(bb.x2+bb.x3<bb[j].x2+bb[j].x3) { ch=bb;bb=bb[j];bb[j]=ch;}
return cnt;
}
試題3:
請編寫一個函數jsValue(int m,int k,int xx[]),該函數的功能是:將大于整數m且緊靠m的k個素數存入數組xx傳回。
最后調用函數writeDat()讀取10組數據,分別得出結果且把結果輸出到文件out.dat中。
部分源程序存在文件prog1.c中。
例如:若輸入17 5 則應輸出:19,23,29,31,37。
請勿改動主函數main()和寫函數writeDat()的內容。
void num(int m,int k,int xx[])
{ int i,s=0;
for(i=m+1;k>0;i++)
if(isP(i)) { xx[s++]=i; k--;}
}