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

② ; 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 #define N 6

/*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 /*最左边空出若干空间*/ void printLineBlank(){printf(\void printN(int n,char c) { int i;

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分。

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