第一篇:培训资料中的实战题编程题答案
编程题答案
/*P127: 6-1*/ #include
int i,j,k;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*i*i+j*j*j+k*k*k==1099)
printf(“%d ”,i*100+j*10+k);}
/*P127(P132): 6-2*/ void reverse(char *s);void main(){ char *str=“abcdefg”;
puts(str);
reverse(str);
puts(str);} void reverse(char *s){ char *p1,*p2,ch;
p1=p2=s;
while(*p2!=' ')
p2++;
p2--;
while(p1
{ ch=*p1;*p1=*p2;*p2=ch;
p1++;
p2--;
} }
/*P127: 1*/ void main(){ int i,j;
for(i=1;i<=6;i++)
{
for(j=0;j<6-i;j++)
printf(“ ”);
for(j=1;j<=i;j++)
printf(“%2d”,j);
for(j=i-1;j>=1;j--)
printf(“%2d”,j);
printf(“n”);
} }
}
/*P135: 8.2.2-1*/ #include
for(i=3;i<=20;i++)
a[i]=a[i-1]+a[i-2];
for(i=1;i<=20;i++)
{ printf(“%6d”,a[i]);
if(i%10==0)
printf(“n”);
}
printf(“n”);}
/*P135: 8.2.3-1A*/ #include
total=0;
for(m=1;m<=10;m++)
{ sum=0;
for(n=1;n<=m;n++)
sum=sum+n;
total=total+sum;
}
printf(“total=%dn”,total);}
/*P143: 1*/ #include
int a[SIZE],d,n,*p;
printf(“Input array length:”);
scanf(“%d”,&n);
/* 输入插入前数组长度,n要求小于SIZE */
printf(“nInput array %d element:n”,n);
for(p=a;p scanf(“%d”,p); /* 输入插入前已排好序的元素 */ printf(“nBefore insert:n”); for(p=a;p printf(“%dt”,*p); /* 输出插入前的数组元素 */ printf(“nInput insert data:”); { if(*s==c) } return(n);} /*P144: 8.3.3-1*/ n++;#include int n; gets(str1); gets(str2); n=mychrcmp(str1,str2); printf(“nstr1= %s,str2=%s,n=%dn”,str1,str2,n);} int mychrcmp(char *s,char *t){ while(*s++==*t++&&*s!=0); if(*s==' '&&*t==' ') return(*(--s)-*(--t)); else return(*s-*t);} /*P150: 5-1*/ #include for(i=1;;i++) if((i+3)%5==0&&(i-3)%6==0) { printf(“n=%dn”,i); break; } } /*P150(P132): 5-2*/ #include puts(str); reverse(str); puts(str);} void reverse(char *s){ char *p1,*p2,ch; p1=p2=s; while(*p2!=' ') if(a[j]!=a[i-j-1]) { f=0; break; } if(f) printf(“%ld,YES.n”,m); else printf(“%ld,NO.n”,m);} /*P158(P127): 5-1*/ #include int i,j,k; for(i=1;i<=9;i++) for(j=0;j<=9;j++) for(k=0;k<=9;k++) if(i*i*i+j*j*j+k*k*k==1099) printf(“%d ”,i*100+j*10+k);} /*P158: 5-2*/ #include int n0,n; gets(str); scanf(“%d%d”,&n0,&n); p=cut(str,n0,n); printf(“str=%s,n0=%d,n=%dn”,p,n0,n);} char *cut(char *s,int m,int n){ char *t=s; int i,j=0; for(i=0;i s++; while(*s!=' '&&j { *(t+j)=*s; s++; j++; } *(t+j)=' '; return t;} /*P158(P127): 1*/ 六、编程题参考答案 1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。#include “stdio.h” #define N 50 void main(){ float x;unsigned int s1,s2,s3,i;s1=s2=s3=0;for(i=1;i<=N;i++){ scanf(“%f”,&x);if(x<0)s1++;else if(x==0)s2++;else s3++;} printf(“负数%u个,零%u个,正数%u个n”,s1,s2,s3);} 2.编程,计算并输出方程 X2+Y2=1989 的所有整数解。#include “stdio.h” void main(){ int x,y;for(x=-45;x<=45;x++){ y=-45;while(y<=45){ if(x*x+y*y==1989)printf(“%d*%d+%d*%d=%dn”,x,x,y,y,1989);y++;} } } 3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。#include “stdio.h” void main(){ unsigned int x;printf(“请输入一个十进制正整数:”);scanf(“%u”,&x);printf(“%d=八进制数 %o=十六进制数%xn”,x,x,x);} 4.编程,找出1000以内的所有完数,并输出其因子。#include “stdio.h” 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(“%d=1”,i);// 如果i 是完数则输出其各因子 for(j=2;j<=i/2;j++)if(i%j==0)printf(“+%d”,j);printf(“n”);} } } 5.输入一个正整数,输出它的所有质数因子。#include “stdio.h” void main(){ int m,i=2;printf(“请输入一个整数:”);scanf(“%d”,&m);while(m!=1)if(m%i==0){ printf(“%d ”,i);m/=i;} else i++;printf(“n”);} 6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。#include “stdio.h” #define N 20 void main(){ int a[N],i,j;for(i=0;i 7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i 8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。#include “stdio.h” #define NA 6 #define NB 8 void main(){ float a[NA],b[NB];int i,j;for(i=0;i 9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。#include “stdio.h” void main(){ char s1[20],s2[]=“Good morning!”;int i=0;while((s1[i++]=s2[i])!=' ');printf(“%sn”,s1);} 10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。#include 11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。#include 12.编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。 #include “stdio.h” #include “math.h” void div(float** a,int n){ int i,j;float x;for(i=0;i { 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(“%f ”,b[i][j]);printf(“n”);} } 13.编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。#include “stdio.h” float f1(float* a,float x,int n){ int i;float t=1,y=0;for(i=0;i 14.设计一个函数,使给出一个数的原码,能得到该数的补码。 #include unsigned int getbit(unsigned int value)//第1位为0表示数的原码,{ if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value else return value;//右移15位后为1,表示value是负数的原码,负数 } //的补码为原码按位取反(第1位不变)后加1。 void main(){ unsigned int y=0x800c,k;k=getbit(y);printf(“%xn”,k);} 15.编写函数,求m行、n列的二维数组全体元素中负数的个数。#include { float b[2][3]={{-1,2,-3},{4,-5,-6}};int i;float* c[2];for(i=0;i<2;i++)c[i]=b[i];printf(“%dn”,sum(c,2,3));} 16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。#include { float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;int m;fun(c,10,&m,&t);// 若说明float *t;int *m;printf(“元素%f出现次数为%dn”,t,m);// 引用为 fun(c,10,m,t)将 } // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。 17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。#include 18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。#include 19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。#include { float a[10]={1,3,4,2,6,7,12,5,9,8};printf(“%dn”,num(a,10));} 20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。 #include { float a[10]={1,3,4,2,6,7,12,5,9,8},x,y;num(a,10,&x,&y);printf(“最大值为%f,最小值为%f。n”,x,y);} 21.编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并 返回统计结果。 #include { float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5];int i,k1,k2,k3;for(i=0;i<5;i++)c[i]=b[i];sub(c,5,3,&k1,&k2,&k3);printf(“负数%d个,零%d个,正数%d个。n”,k1,k2,k3);} 22.编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。#include p1=p2=p3=str;// p3指向最长串首字符,p1指向当前处理串首字符,while(*p2!='.')// p2为移动指针,*p2为空格表示查找到单词尾部。 if(*p2!=' '){ k2++;p2++;} else if(k2>k1){ p3=p1;p1=++p2;k1=k2;k2=0;} else { k2=0;p1=++p2;} for(k2=0;k2<=k1;k2++)printf(“%c”,*(p3+k2));printf(“n”);return;} void main()// 函数引用示例 { char a[40];int i=0;while((a[i++]=getchar())!='.');find(a);} 23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。#include void print(struct student* s,int n){ int i;// 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;i printf(“%s %s %4d%4d%4dn”,(*(s+i)).num,(*(s+i)).name,(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);return;} void main(){ struct student t[4];int i;for(i=0;i<4;i++) scanf(“%s%s%d%d%d”,&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]);print(t,4);} 24.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。 #include 25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。#include 26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。 #include 27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。#include if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9'))fprintf(fpd2,“%c”,ch);fclose(fpd1);fclose(fpd2);} 28.求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。 #include 29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。#include // 循环比较,直到读到文件尾标志为止。 fp3=fopen(“a3”,“w”);c1=fgetc(fp1);c2=fgetc(fp2);do { if(c1 30.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。#include typedef int datatype;typedef struct node {datatype data;struct node *next;}linklist;„„ INVERT(linklist *head){linklisk *p,*q;p=head->next;if(p!=NULL){head->next=NULL;do {q=p->next;p->next=head->next;head->next=p;p=q;} while(p!=NULL);} } 32.程序清单: PURGE(linklist *head){linklist *p,*q;q=head->next;if(q==NULL)return;p=q->next;while(p!=NULL)if(p->data==q->data){q=p->next;free(p);p=q->next;} else {q=p;p=p->next;} } 33、程序清单: #include 34、#include 第二篇:c语言编程题答案