程序填充题(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 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’) {