2012 第七届itatC语言程序设计预赛主观题答案及评分标准

程序填充题(6题,5分/题,共30分)

1、下列代码欲实现将一个二进制字符串转换为整数。请填写缺少的语句: char *p = \int n=0;

for(int i=0; i< strlen(p); i++) { ; }

printf(\【分 数】5分

【评分标准】n=n*2+(*(p+i)-48)【5分】

2、计算3个A,2个B可以组成多少种排列的问题(如:AAABB,AABBA)属于组合数学的研究领域。下列程序将计算出m个A,n个B可以组合成多少个不同的排列。请补充缺少的代码。 int f(int m, int n) {

if(m==0 || n==0) return 1;

return ; }

【分 数】5分

【评分标准】f(m-1,n)+f(m,n-1) 【5分】

3、下列代码是把一个缓冲区中的整数重新排列,使得所有负数都在正数的左边。请分析其工作流程,补充缺失的代码。 void reorder(int *pData, int len) {

if(pData == NULL || len == 0) return; int *pBegin = pData;

int *pEnd = ① ; while(pBegin < pEnd) {

if(*pBegin < 0) { pBegin++; ② ; }

if(*pEnd >= 0) { pEnd--; ③ ; }

int temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; }

int main(int argc, char **argv) {

int a[] = {1, 2, 3, -5, -4, 5, 9, -8, -1}; reorder(a, 9);

for(int i=0; i<9; i++) printf(\ printf(\ return 0; }

【分 数】5分 【评分标准】

①pData + len-1【3分】; ②continue【1分】; ③continue【1分】。

4、下列程序可以求出1~299中能被3整除,且至少有一位数字为5的所有整数,并将结果写到文件d:\\result.txt中。请补充缺失的代码。 #include int IsDivBy5(int m)

{ int i;

for(i=0;i<3;i++){

if(m%10==5) return 1;

① ; } return 0; }

void main() { int i; FILE *fp;

if( (fp= ② ) == NULL){ printf(\ exit(0); }

for(i=0;i<300;i++){ if( ③ ) fprintf(fp,\ } fclose(fp); }

【分 数】5分 【评分标准】 ①m /=10【2分】;

②fopen(\【1分】; ③i%3==0&&IsDivBy5(i) 【2分】。

5、某抽奖活动的规则是:每位参与者在纸上写下一个8位数的号码。最后通过摇奖的办法

随机产生一个8位数字。参与者写下的数字中最多有多少个连续位与开奖号码相同,则称为中了几个号。

例如:某参与者写的数字是:12345678,而开奖号是:42347856,则称中了3个号,因为其中最长的相同连续位是“234”。如果写的是:87654321,则中了一个号。请按此规则完善下面的程序。 int g(int a,int b) {

char sa[]=\ char sb[]=\ int n=0; int i,j;

sprintf(sa,\ sprintf(sb,\ for(i=0;i<8;i++) { for(j=1;j<=8-i;j++) {

char t = ① ; sa[i+j] = 0; if(strstr(sb,sa+i)) { if(j>n) ② ; } sa[i+j] = t; } } return n; }

【分 数】5分 【评分标准】 ①sa[i+j]【3分】; ②n++【2分】。

6、某比赛采用5分制一局,现有甲和乙的比赛,对甲而言W代表得一分,L代表输一分。比赛记录如下:

WWLWLWLLWWLWLLWWWLLLWWL

现在要求把比赛记录转化为每局的比分对比情况,如上述结果记为: 3:2 3:2 2:3 2:3 2:1

最后的2:1表示比赛正在进行。

请完善下面的程序,将上述计分串变为比分的形式。 #include

void countRec(char rec5[5],int n) {

int i,win=0,lose=0; for(i=0;i

printf(\}

void main() { int i=0;

char * rec=\ char rec5[5]; while(*rec != ‘\\0’) {

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4