② ; if(i==5)
③ ; i%= 5; }
④ ; }
【分 数】5分 【评分标准】
①rec5[i]==‘W’ 【1分】; ②rec5[i++] = *rec++【2分】; ③countRec(rec5,5) 【1分】; ④countRec(rec5,i) 【1分】;
编程操作题(2题,10分/题,共20分)
1、已知有一集合A={a,b,c,d,e,f},要求编写程序打印出A的所有非空子集(含A本身)。程序命名为“1.c”后保存并提交。 【分 数】10分 【参考答案】 #include
/*arr集合数组;cur当前循环变量;before前面的循环中已经选择的元素;iBefore当前循环的层数,从0开始*/
void sub(char arr[],int cur,int before[],int iBefore) {
int j,k,m;
for(j=cur+1;j before[iBefore+1]=j; sub(arr,j,before,iBefore+1); } } void genSubset(char arr[]) { int i; int before[N]; for(i=0;i before[0]=i; sub(arr,i,before,0); } } int main() { char arr[N]={ 'a','b','c','d','e','f'}; genSubset(arr); return 0; } 【评分标准】 答案不唯一,只要程序能输出正确的结果即可。 (1)能正确定义主函数及对应的字符数组,得2分; (2)能正确编写genSubset函数或功能等价代码,得3分; (3)能正确编写sub函数或与其功能等价代码,得5分。 2、编写程序输出边长为N的空心正六边形,其边由“*”组成。程序命名为“2.c”后保存并提交。 【分 数】10分 【参考答案】 #include for(i=0;i int i;int m=12;int nbase=m/2; /*正六边形分析,第一行按1+2+1长度,即斜边横向长度为1*/ printLineBlank();printN(nbase,' '); printN(2*nbase,'*');printf(\ for(i=1;i printLineBlank();printN(nbase-i,' '); printN(1,'*'); printN(2*nbase+2*(i-1),' '); printN(1,'*'); printf(\ } else { printLineBlank();printN((i-m/2)+1,' '); printN(1,'*');printN(2*nbase+2*(nbase-(i-m/2)-2),' '); printN(1,'*');printf(\ } } printLineBlank();printN(nbase,' '); printN(2*nbase,'*');printf(\ return 0; } 【评分标准】:答案不唯一,只要程序能输出正确结果即可。 (1)能正确定义主函数,, 得1分; (2)能输出正六边形第一行,得1分; (3)能输出正六边形上半部分,, 得3分; (4)能输出正六边形下半部分, 得4分; (5)能输出正六边形最后一行,得1分。