c语言编程题答案.docx

上传人:b****0 文档编号:9818491 上传时间:2023-05-21 格式:DOCX 页数:44 大小:26.13KB
下载 相关 举报
c语言编程题答案.docx_第1页
第1页 / 共44页
c语言编程题答案.docx_第2页
第2页 / 共44页
c语言编程题答案.docx_第3页
第3页 / 共44页
c语言编程题答案.docx_第4页
第4页 / 共44页
c语言编程题答案.docx_第5页
第5页 / 共44页
c语言编程题答案.docx_第6页
第6页 / 共44页
c语言编程题答案.docx_第7页
第7页 / 共44页
c语言编程题答案.docx_第8页
第8页 / 共44页
c语言编程题答案.docx_第9页
第9页 / 共44页
c语言编程题答案.docx_第10页
第10页 / 共44页
c语言编程题答案.docx_第11页
第11页 / 共44页
c语言编程题答案.docx_第12页
第12页 / 共44页
c语言编程题答案.docx_第13页
第13页 / 共44页
c语言编程题答案.docx_第14页
第14页 / 共44页
c语言编程题答案.docx_第15页
第15页 / 共44页
c语言编程题答案.docx_第16页
第16页 / 共44页
c语言编程题答案.docx_第17页
第17页 / 共44页
c语言编程题答案.docx_第18页
第18页 / 共44页
c语言编程题答案.docx_第19页
第19页 / 共44页
c语言编程题答案.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言编程题答案.docx

《c语言编程题答案.docx》由会员分享,可在线阅读,更多相关《c语言编程题答案.docx(44页珍藏版)》请在冰点文库上搜索。

c语言编程题答案.docx

c语言编程题答案

六、编程题参考答案

1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。

#include"stdio.h"

#defineN50

voidmain()

{floatx;unsignedints1,s2,s3,i;

s1=s2=s3=0;

for(i=1;i<=N;i++){

scanf("%f",&x);

if(x<0)s1++;elseif(x==0)s2++;elses3++;

}

printf("负数%u个,零%u个,正数%u个\n",s1,s2,s3);

}

 

2.编程,计算并输出方程X2+Y2=1989的所有整数解。

#include"stdio.h"

voidmain()

{intx,y;

for(x=-45;x<=45;x++){

y=-45;

while(y<=45){

if(x*x+y*y==1989)

printf("%d*%d+%d*%d=%d\n",x,x,y,y,1989);

y++;

}

}

}

 

3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。

#include"stdio.h"

voidmain()

{unsignedintx;

printf("请输入一个十进制正整数:

");

scanf("%u",&x);

printf("%d=八进制数%o=十六进制数%x\n",x,x,x);

}

 

4.编程,找出1000以内的所有完数,并输出其因子。

#include"stdio.h"

voidmain()

{inti,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"

voidmain()

{intm,i=2;

printf("请输入一个整数:

");scanf("%d",&m);

while(m!

=1)if(m%i==0){printf("%d",i);m/=i;}elsei++;

printf("\n");

}

 

6.输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。

#include"stdio.h"

#defineN20

voidmain()

{inta[N],i,j;

for(i=0;i

for(i=0;i

if(a[i]%a[j]==0&&i!

=j){printf("%d\n",a[i]);break;}

}

 

7.输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。

#include"stdio.h"

#defineNA6

#defineNB8

voidmain()

{floata[NA],b[NB];inti,j;

for(i=0;i

for(i=0;i

for(i=0;i

if(a[i]==b[j]){printf("%f\n",a[i]);break;}

}

 

8.输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。

#include"stdio.h"

#defineNA6

#defineNB8

voidmain()

{floata[NA],b[NB];inti,j;

for(i=0;i

for(i=0;i

for(i=0;i

for(j=0;j

if(j==NB)printf("%f",a[i]);

}

printf("\n");

for(i=0;i

for(j=0;j

if(j==NA)printf("%f",b[i]);

}

printf("\n");

}

 

9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。

#include"stdio.h"

voidmain()

{chars1[20],s2[]="Goodmorning!

";inti=0;

while((s1[i++]=s2[i])!

='\0');

printf("%s\n",s1);

}

 

10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。

#include

#definef(year)year%4==0&&year%100!

=0||year%400==0

voidmain()

{inty;

printf("请输入年份:

");scanf("%d",&y);

if(f(y))printf("%d年为闰年\n",y);

elseprintf("%d年不是闰年\n",y);

}

 

11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、…、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。

#include

#defineMAX80

#defineSWITCH1

voidmain()

{charstr[MAX];inti=0;

printf("请输入文本行:

\n");scanf("%s",str);

#if(SWITCH)

while(str[i]!

='\0')

if(str[i]>='a'&&str[i]<='z')

if(str[i]=='z')str[i]='a';elsestr[i]++;i++;

#endif

printf("%s\n",str);

}

 

12.编写函数,处理n行n列维数组:

将每一行的元素同除以该行上绝对值最大的元素。

#include"stdio.h"

#include"math.h"

voiddiv(float**a,intn)

{inti,j;floatx;

for(i=0;i

x=*(*(a+i));

for(j=1;j

if(fabs(*(*(a+i)+j))>fabs(x))x=*(*(a+i)+j);

for(j=0;j

}

return;

}

voidmain()//函数引用示例

{floatb[3][3]={{1,2,3},{4,5,6},{7,8,9}};

inti,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"

floatf1(float*a,floatx,intn)

{inti;floatt=1,y=0;

for(i=0;i

returny;

}

voidmain()//函数引用示例

{floatb[4]={1,2,3,4};

printf("%f\n",f1(b,2,4));

}

 

14.设计一个函数,使给出一个数的原码,能得到该数的补码。

#include//假定sizeof(int)为2;

unsignedintgetbit(unsignedintvalue)//第1位为0表示数的原码,

{if(value>>15)return(value^0x7fff)+1;//其补码即其原码;若value

elsereturnvalue;//右移15位后为1,表示value是负数的原码,负数

}//的补码为原码按位取反(第1位不变)后加1。

voidmain()

{unsignedinty=0x800c,k;

k=getbit(y);printf("%x\n",k);

}

 

15.编写函数,求m行、n列的二维数组全体元素中负数的个数。

#include

intsum(float**a,intm,intn)

{inti,j;inty=0;

for(i=0;i

returny;

}

voidmain()//函数引用示例

{floatb[2][3]={{-1,2,-3},{4,-5,-6}};inti;float*c[2];

for(i=0;i<2;i++)c[i]=b[i];printf("%d\n",sum(c,2,3));

}

16.编写函数,返回在一个整数组中出现次数最多的数及其出现次数。

#include

voidfun(float*a,intn,int*k,float*x)

{inti,j,y;*k=0;

for(i=0;i

for(j=0;j

if(y>*k){*k=y;*x=*(a+i);}

}

return;

}

voidmain()//函数引用示例

{floatc[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t;intm;

fun(c,10,&m,&t);//若说明float*t;int*m;

printf("元素%f出现次数为%d\n",t,m);//引用为fun(c,10,m,t)将

}//产生悬挂指针的错误,即t、m不只指向确定的存储单元。

 

17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。

#include

voidmain()

{char*month_name[12]={"January","February","March","April",

"May","June","July","August","September","October",

"Novenber","December"};

intn;

printf("请输入月份号:

");

scanf("%d",&n);

if(n<1||n>12)printf("月份号输入错误!

\n");

elseprintf("%d月的英文表示是%s\n",n,month_name[n-1]);

}

 

18.编写递归函数,将输入的以“?

”结束的字符串按与输入相反的顺序输出。

#include

voidpline()

{charch;

if((ch=getchar())!

='?

'){pline();putchar(ch);}

return;

}

voidmain()//函数引用示例

{pline();printf("\n");}

 

19.编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。

#include

intnum(float*x,intn)

{inti,k=0;

for(i=1;i*(x+i-1)&&*(x+i)>*(x+i+1))k++;

returnk;

}

voidmain()//函数引用示例

{floata[10]={1,3,4,2,6,7,12,5,9,8};

printf("%d\n",num(a,10));

}

 

20.编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。

#include

voidnum(float*b,intn,float*max,float*min)

{*max=*b;*min=*b;

for(inti=1;i

if(*(b+i)>*max)*max=*(b+i);

if(*(b+i)<*min)*min=*(b+i);

}

return;

}

voidmain()//函数引用示例

{floata[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

voidsub(float**a,intm,intn,int*fs,int*lin,int*zs)

{inti,j;*fs=*lin=*zs=0;

for(i=0;i

if(*(*(a+i)+j)<0)(*fs)++;

elseif(*(*(a+i)+j)==0)(*lin)++;else(*zs)++;

return;

}

voidmain()//函数引用示例

{floatb[5][3]={{-1,5,2},{3,0,-2},{0,-3,5},

{4,7,-8},{3,4,5}},*c[5];

inti,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

voidfind(char*str)

{char*p1,*p2,*p3;intk1=0,k2=0;//k1为最长串的长度,初值为0。

p1=p2=p3=str;//p3指向最长串首字符,p1指向当前处理串首字符,

while(*p2!

='.')//p2为移动指针,*p2为空格表示查找到单词尾部。

if(*p2!

=''){k2++;p2++;}

elseif(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;

}

voidmain()//函数引用示例

{chara[40];inti=0;

while((a[i++]=getchar())!

='.');find(a);

}

 

23.编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。

#include

structstudent{

charnum[7],name[9];intscore[3];

};//尾部分号不得遗漏

voidprint(structstudent*s,intn)

{inti;//运算符'*'、'&'的优先级均低于运算符'.'

for(i=0;i

printf("%s%s%4d%4d%4d\n",(*(s+i)).num,(*(s+i)).name,

(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]);

return;

}

voidmain()

{structstudentt[4];inti;

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

voidmain()

{FILE*fpd1,*fpd2;charch;

fpd1=fopen("d1.dat","r");fpd2=fopen("d2.dat","w");

while(fscanf(fpd1,"%c",&ch)!

=EOF)

if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')

fprintf(fpd2,"%c",ch);

fclose(fpd1);fclose(fpd2);

}

 

25.编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。

#include

voidmain()

{FILE*fpd1,*fpd2;charch;

fpd1=fopen("d1.dat","r");fpd2=fopen("d2.dat","w");

while(fscanf(fpd1,"%c",&ch)!

=EOF)

if(ch!

='')fprintf(fpd2,"%c",ch);

fclose(fpd1);fclose(fpd2);

}

 

26.编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。

#include

voidmain()

{FILE*fpd1,*fpd2;charch;

fpd1=fopen("d1.dat","r");fpd2=fopen("d2.dat","w");

while(fscanf(fpd1,"%c",&ch)!

=EOF){

if(ch>='A'&&ch<='Z')ch=ch+32;

fprintf(fpd2,"%c",ch);

}

fclose(fpd1);fclose(fpd2);

}

 

27.把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。

#include

voidmain()

{FILE*fpd1,*fpd2;charch;

fpd1=fopen("d1.dat","r");fpd2=fopen("d2.dat","w");

while(fscanf(fpd1,"%c",&ch)!

=EOF)

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

#include

voidmain()

{FILE*fp;inti,j,k=2;

fp=fopen("su.dat","w");fprintf(fp,"%4d%4d",2,3);

for(i=5;i<100;i=i+2){

for(j=3;j<=sqrt(i);j=j+2)if(i%j==0)break;

if(j>sqrt(i)){fprintf(fp,"%4d",i);k++;

if(k%10==0)fprintf(fp,"\n");}

}

fclose(fp);

}

 

29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3

文件中,合并后仍保持字母顺序。

#include

#include

voidmain()

{FILE*fp1,*fp2,*fp3;inti,j,k;charc1,c2;

fp1=fopen("a1","r");fp2=fopen("a2","r");

//首先从文件a1、a2中各读入一个字符分别送入变量c1、c2,下面将作

//循环比较,直到读到文件尾标志为止。

fp3=fopen("a3","w");c1=fgetc(fp1);c2=fgetc(fp2);

do{

if(c1

else{fputc(c2,fp3);c2=fgetc(fp2);}

}while(!

feof(fp1)&&!

feof(fp2));

//若a1先读到文件尾,则将c2写入a3,再将a2中其它字符读入后写入a3;...

if(feof(fp1))do{

fputc(c2,fp3);c2=fgetc(fp2);

}while(!

feof(fp2));

elsedo{fputc(c1,fp3);c1=fgetc(fp1);

}while(!

feof(fp1));

fclose(fp1);fclose(fp2

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2