资源描述
2010年春 二级 C语言 上机试卷(试卷代号C02) 答案一、改错题(16分)【程序功能】先将一个正整数转换为十进制表示的数字字符串,再将千位分隔符插入到该字符串中,最后输出该字符串。【测试数据及运行结果】输入:1234567 输出:1234567 1,234,567【含有错误的源程序】#include #include void ltoa(char s,long num) long n=num,i=0; printf(%ldn,num); while(n) i+; n/=10; si= 0 ; /* 语法错,易, 改为 si=0; 或 si=0; */ while(num) s-i=num%10+0; num/=10; void insert(char s) char j,k,t; t=j=strlen(s); while(j3) j=j-3; for(k=t; kj; k-) sk=sk+1; /*算法错,中偏难, 改为 sk=sk-1;*/ sj= ,; t+; void main() static char s20; long num; scanf(%d,&num); /*语义错,中,改为 scanf(%ld,&num);*/ ltoa(s,num); insert(s,num); /*语法错,易,改为 insert(s); */ puts(s); getch();二、编程题(24分)【程序功能】一个整数的“真因子”是指包括1但不包括整数自身的因子。“真因子和数列”是指取一个正整数作为数列首项,首项之后的每一项都是前一项的真因子之和。真因子和数列有几种可能的形式,其中的一种形式是以1结束。例如,取10作为数列首项,10的真因子和为8(1+2+5),8的真因子和为7(1+2+4),7的真因子和为1。因此,用10生成的真因子和数列(10,8,7,1)以1结束。编写程序分别以在给定范围内取值的多个正整数作为数列首项,生成多个与其对应的“真因子和数列”,这些数列均以1结束。【编程要求】1 编写函数int sequ(int m1,int m2,int num10)实现以下功能:依次取m1,m2范围内每个正整数作为数列首项可生成m2-m1+1个真因子和数列,将其中不超过10项且以1结束的数列保存到num指向的二维数组中,函数返回num数组中存储的数列个数。2 编写函数main实现以下功能:声明二维数组x和变量m1、m2,输入两个正整数保存到m1和m2中(m1m2),用m1、m2和数组x作为实参调用sequ函数,按所给格式将二维数组x中的数列输出到屏幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。【测试数据与运行结果】输入: m1=21,m2=30输出: 21 11 1 22 14 10 8 7 1 23 1 24 36 55 17 1 26 16 15 9 4 3 1 27 13 1 29 1【参考答案】#includeint sequ(int m1,int m2,int num10) int i=0,j,k,f,sum,term,a10; while(m1=m2) a0=m1;f=0; for(j=1;j10&!f;) sum=0; term=aj-1; for(k=1;kterm;k+) if(term%k=0)sum+=k; aj+=sum; if(sum=1) f=1; if(f) for(k=0;kj;k+) numik=ak; i+; m1+; return i;void main() int m1,m2,n,x8010=0,i,j; FILE *fp; fp=fopen(myf2.out,w); printf(input m1,m2:); scanf(%d%d,&m1,&m2); n=sequ(m1,m2,x); for(i=0;in;i+) printf(n); fprintf(fp,n); for(j=0;j10;j+) if(xij!=0) printf(%d ,xij); fprintf(fp,%d ,xij); fprintf(fp,nMy exam number is :0112400123); fclose(fp); getch();
展开阅读全文