六、编程题参考答案
1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。 #include \ #define N 50 void main()
{ float x; unsigned int s1,s2,s3,i; s1=s2=s3=0;
for(i=1;i<=N;i++) { scanf(\
if(x<0) s1++; else if(x==0) s2++; else s3++; }
printf(\负数%u个,零%u个,正数%u个\\n\ }
2. 编程,计算并输出方程 X2+Y2=1989 的所有整数解。 #include \ void main() { int x,y;
for(x=-45;x<=45;x++) { y=-45;
while(y<=45) {
if(x*x+y*y==1989)
printf(\ y++; } } }
3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。 #include \ void main()
{ unsigned int x;
printf(\请输入一个十进制正整数:\ scanf(\
printf(\八进制数 %o=十六进制数%x\\n\ }
4.编程,找出1000以内的所有完数,并输出其因子。 #include \
void main() { int i,j,s=1;
for(i=1;i<=1000;i++,s=1) {
for(j=2;j<=i/2;j++) if(i%j==0) s+=j; // 求 i的因子和 if(s==i) {
printf(\ // 如果i 是完数则输出其各因子 for(j=2;j<=i/2;j++)
if(i%j==0) printf(\ printf(\ } } }
5. 输入一个正整数,输出它的所有质数因子。
#include \ void main() { int m,i=2;
printf(\请输入一个整数:\
while(m!=1) if(m%i==0){ printf(\ \ printf(\ }
6. 输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。 #include \ #define N 20 void main() { int a[N],i,j;
for(i=0;i if(a[i]%a[j]==0&&i!=j) { printf(\ } 7. 输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。 #include \ #define NA 6 #define NB 8 void main() { float a[NA],b[NB]; int i,j; for(i=0;i for(i=0;i if(a[i]==b[j]) { printf(\ } 8. 输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。 #include \ #define NA 6 #define NB 8 void main() { float a[NA],b[NB]; int i,j; for(i=0;i for(j=0;j printf(\ for(i=0;i for(j=0;j printf(\ } 9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。 #include \ void main() { char s1[20],s2[]=\ int i=0; while((s1[i++]=s2[i])!='\\0'); printf(\ } 10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。 #include #define f(year) year%4==0&&year0!=0||year@0==0 void main() { int y; printf(\请输入年份:\ if(f(y)) printf(\年为闰年\\n\ else printf(\年不是闰年\\n\ } 11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、…、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。 #include { char str[MAX]; int i=0; printf(\请输入文本行:\\n\ #if(SWITCH) while(str[i]!='\\0') if(str[i]>='a'&&str[i]<='z') if(str[i]=='z')str[i]='a'; else str[i]++; i++; #endif printf(\ } 12. 编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。 #include \ #include \ void div(float** a,int n) { int i,j; float x; for(i=0;i if(fabs(*(*(a+i)+j))>fabs(x)) x=*(*(a+i)+j); for(j=0;j return; } void main() // 函数引用示例 { float b[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j; float* c[3]; for(i=0;i<3;i++) c[i]=b[i]; div(c,3); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf(\ } } 13. 编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。 #include \ float f1(float* a,float x,int n)