2009秋C语言上机试卷C04答案

更新时间:2023-09-19 02:41:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2009年秋 二级 C语言 上机试卷(试卷代号C04) 答案

一、改错题(16分) 【程序功能】

将一个实数转换为二进制科学计数法表示并输出。

二进制科学记数法是指将一个绝对值大于2或小于1的实数记为a×2?n形式,其中尾数a是用二进制表示的实数且1≤|a|? 2,指数中的n是用二进制表示的整数。例如:0.125的二进制科学计数法表示是1.0?2 ? 11 。

若用B代表基数2,则a×2?n可表示为aB?n的形式。例如,1.0?2?11表示为1.0 B?11。 【测试数据与运行结果】

第一次运行时输入:0

输出:0.0B0

第二次运行时输入:0.125

输出:1.0B-11

第三次运行时输入:315

输出:1.00111011B+1000

【含有错误的源程序】 #include void outBinary(int x) { if(x/2) outBinary(x/2); printf(\}

void outFloatBinary(float x) { int e=0; if(x==0)

{ puts(0.0B0); /* 语法错,中,改为 puts(“0.0B0”); */ return; }

if(x<0){ putchar('-'); x=-x; } while(x>=2.0) { e++; x/=2; } while(x<1.0)

{ e++; x*=2; } /*算法错,中,改为 { e--; x*=2; } */ printf(\ x=(x-(int)x)*2; do

{ printf(\ /* 语义错, 偏难,改为 printf(\ x=(x-(int)x)*2;

}while(x!=0);

if(e=0) printf(\ /*语义错,易,改为 if(e==0) printf(\ */ else if(e>0)

{ printf(\ else

{ printf(\ } printf(\

C语言 2009年秋C04 答案 第1页

}

void main( ) { float a;

scanf(\ outFloatBinary(a); getch(); }

二、编程题(24分) 【程序功能】

求3000以内的亲密数对。

如果A的全部真因子(包括1,不包括A自身)之和等于B;B的全部真因子之和等于A,则称整数A和B为一对亲密数。 【编程要求】

1. 编写函数int frinum(long s[][2],long n)实现以下功能:找到2?n范围内的所有亲密数对,将这些亲密数对保存到s指向的二维数组中。函数返回s数组中存储的亲密数对的对数。 2. 编写函数main实现以下功能:声明二维数组s和变量n,输入一个正整数并保存到n中,用二维数组s和变量n作为实参调用frinum函数,将n以内的所有亲密数对输出到屏幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。 【测试数据与运行结果】

输入:n=3000 输出:

( 220,284 ) ( 1184,1210 ) ( 2620,2924 ) 【参考答案】 #include

int frinum(long s[][2],long n) { long a,b,m,i,k=0; for(a=2;a<=n;a++)

{ for(b=0,i=1;i<=a/2;i++) if(!(a%i)) b+=i;

for(m=0,i=1;i<=b/2;i++) if(!(b%i)) m+=i; if(m==a&&b>m)

{ s[k][0]=a; s[k][1]=b; k++; } }

return k; }

void main()

{ int i,j; long n,s[20][2]; FILE *fp;

if ((fp=fopen(\

{ printf(\ exit(1); } scanf(\

C语言 2009年秋C04 答案 第2页

j=frinum(s,n); for(i=0;i

{ printf(\ fprintf(fp,\ }

fprintf(fp,\ fclose(fp); getch(); }

C语言 2009年秋C04 答案 第3页

本文来源:https://www.bwwdw.com/article/n78h.html

Top