C语言学习与应用课后习题答案 学习任务七参考答案 北邮_第1页
C语言学习与应用课后习题答案 学习任务七参考答案 北邮_第2页
C语言学习与应用课后习题答案 学习任务七参考答案 北邮_第3页
C语言学习与应用课后习题答案 学习任务七参考答案 北邮_第4页
C语言学习与应用课后习题答案 学习任务七参考答案 北邮_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习任务七参考答案

应用举例77:求数组各元素之和,依据题意将代码补充完整。

#incIude"stdio.h"

#incIude"stdIib.h"//用rand()函数需要包含的头

文件

#defineN10

voidarrin(int*a,intn)〃为数组元素赋值的函数

(

inti;

for(i=0;i<n;i++)

a[i]=rand()%50;〃为数组元素赋0-49的随机

}

voidarrout(inta[],intn)//输出数组元素的函数

(

inti;

for(i=0;i<n;i++)

printf("%d",a[i]);;

}

intarrsum(inta[N],intn)〃求各数组元素之和

(

inti,s=0;

for(i=0;i<n;i++)

s=s+a[i];

returns;

)

voidmain0

(

inta[N],s;

arrin(a,N);〃调用输入函数为数组赋值

arrout(a,N);;//调用输出函数输出数组元素

s=arrsum(a,N);//调用求和函数将和值赋给s

printf("\ns=%d",s);

getchar();

}

应用举例7-2:求数组元素的最大值,依据题意将代码补充完整。

#incIude"stdio.h"

#incIude"stdIib.h"

#defineM50

voidarrin(doubIes[],intn)〃为数组元素赋值的函数

t

inti;

for(i=0;i<n;i++)

s[i]=rand()%100*1e-2;〃为数组元素赋实型数

}

voidarrout(doubIea[M],intn)

(

inti;

for(i=0;i<n;i++)

(

printf("%5.2f",a[i]);

if((i+1)%10==0)//每输出10个元素换行

printf("\n");

)

)

doubIefun(doubIe*s,intn)〃求最大值的函数

(

inti;

doubIem=s[0];〃首先认为第一个数组元素

值最大

for(i=1;i<n;i++)〃搜索其它元素,有比m大的

就更新m

if(m<s[ij)

m=s⑴;

returnm;

}

voidmain()

(

doubIea[M],max;

intn=40;〃只使用了40个元素

arrin(a,n);〃调用函数,为数组元素赋值

arrout(a,n);〃调用函数,输出数组元素

max二fun(a,n);//调用函数,获得数组元素的

最大值

printf("\nmax=%5.2f",max);

getchar();

)

问题77:编写程序计算数组元素的最小值。

#incIude"stdio.h"

intfun(int*s,intn)//返回数组元素最小值的函数

{inti;

intm=s[0];

for(i=1;i<n;i++)

if(m>s[i])

m=s[i];

returnm;

)

voidmain()

(

intmin,a[10]={12,5,78,34,65,9,32,41,54,60};

min=fun(a,10);

printf("\nmin=%d",min);

getchar();

)

问题7-2:删除a数组中的偶数,并输出。

#incIude"stdio.h"

intfun(int*a,intn)

(

inti,j;

for(i=0,j=0;i<n;i++)

if(a[i]%2==1)

a[j++]=a[i];

returnj;

}

voidmain()

inta[]=[1,2,3,4,5,6},i,k;

k=fun(a.6);〃a数组6个数,删除偶数后为k个数

for(i=0;i<k;i++)〃输出a数组

printf("%3d",a[i]);

getchar();

)

应用举例7-4数值统计,将代码补充完整。

s[i]=rand0%10;〃将0-9之间的数赋给各数组

元素

问题7-3:统计各年龄段的人数。

#incIude<stdio.h>

#defineN50

#defineM11

voidfun(int*a,int*b)

(

inti;

for(i=0;i<M;i++)

b⑴=0;

for(i=0;i<N;i++)

if(a[i]<100)

b[a[i]/10]++;

eIse

b[10]++;

)

doublernd0〃获得一个随机数的函数

{statict=29,c=217,m=1024,r=0;

—r=(r*t+c)%m;return((doubIe)r/m);

|

voidmain()

{intage[N],i,d[M];

for(i=0;i<N;i++)

age[i]=(int)(115*rnd());〃赋年龄值

printf("Theoriginaldata:\n");

for(i=0;i<N;i++)

printf((i+1)%10==0?"%4d\n":"%4d",age[i]);

printf("\n\n");

fun(age,d);

for(i=0;i<10;i++)printf("%4d-一%4d:%4d\n",i*10,i*10+9,d

⑴);

printf("Over100:%4d\n",d[10]);

getchar();

}

编程训练7T-1数组元素的引用和输入/输出。

(1)

输入:23569056985678988712

输出:23569056985678988712

(2)

#incIude"stdio.h"

#defineM5

voidmain()

(

inti,s[M],*p=s;

for(i=0;i<M;i++)

scanf("%d",s+i);

for(i=M-1;i>=0;i—)

printf("%d",*(s+i));

getchar();

}

输入:2356905698

输出:9856905623

(3)

#define5M改为:#defineM5

inti,s[M];改为:inti,p[M];

编程训练7-1-2按要求计算数组元素之和o

(1)

#incIude"stdio.h"

#incIude"stdIib.h"

#defineM30

voidarrin(int*a)

inti;

for(i=0;i<M;i++)

a[i]=rand()%50;

|

voidarrout(int*a)

(

inti;

for(i=0;i<M;i++)

{printf("%4d",a[i]);

if((i+1)%10=0)

printf("\n");

)

)

intfun(int*a,intn)〃从a地址开始的连续n个元

素求和

(

inti,sum=0;〃为sum赋初值

for(i=0;i<n;i++)

sum=sum+a[i];〃计算数组元素和

returnsum;

}

voidmain()

inta[M],s

arrin(a);

arrout(a);

s=fun(a,M);

printf("数组元素和s=%d\n",s);

getchar();

输出:

411734019242881214

5453127114145422736

41423423221161845

数组元素和s=731

(2)将上面主函数中的s=fun(a,M);改为:s二fun(a+1,3);重新

运行程序,回答以下问题。

数组元素和s=51

这个和值是哪些数组元素之和?a[1]+a[2]+a[3]—

如思求a[82+a[9]+a[10L如何写:s=fun(a+8,3);

如果求a[8]+a[9]+a[10]+a[18]+a[19]+a[20],如何写:s=

fun(a+8,3)+fun(a+18,3)

调试程序写出验证结果:输出如下,正确。一

411734019242881214

5453127114145422736

41423423221161845

数组元素和s=135

(3)用形参传递结果,计算数组元素的奇数和和偶数和。

#incIude"stdio.h"

voidfun(int*a,intn,int*odd,int*even)

{inti;

*odd=0,*even=0;〃程序中的*odd就是主函数的

s1,为s1和s2赋初值

for(i=0;i<n;i++)

if(a[i]%2)//如果数组元素是奇数

*odd=*odd+a[i];

eIse

*even=*even+a[i];

}

voidmain0

tinta[]={1,2,3,4,5,6),s1,s2;〃定义数组的同时初始化

数组

fun(a,6,&s1,&s2);〃调用函数为s1,s2赋值

printf("奇数和:%d,偶数和:%d\n",s1,s2);

getchar();

)

输出:奇数和:9,偶数和:12

编程训练7-2-1求数组元素最大值的下标。

#incIude"stdIib.h"

#defineM50

voidarrin(ints[],intn)〃为数组赋100以内的随机数

{inti;

for(i=0;i<n;i++)

s[i]=rand()%100;

)

voidarrout(inta[M],intn)〃输出函数,每输出10个数换

{inti;

for(i=0;i<n;i++)

{printf("%4d",a[i]);

if((i+1)%10==0)

printf("\n");

}

|

intfun(int*s,intn)〃返回值是下标,是整型

(

inti,m=0;//m存最大值下标,默认最大值下标为

0

for(i=1;i<n;i++)〃从下标为1开始向后搜一边

if(s[i]>s[m])〃如果下标i的元素大于下

标m的元素,更新m

m=i;

returnm;

}

voidmain()

(

inta[M];

intk;//k用于接收最大值下标

arrin(a,M);

arrout(a,M);

k=fun(a,M);

printf("\nk=%4d,max=%4d\n",k,a[k]);〃输出最大值

下标和最大值

getchar();

)

输出:

4167340692478586264

5458127619195422736

914253928221161895

47267138691267993594

3112233736441115368

k=37,max=99

编程训练7-2-2将最大值放在a[0]中

voidarrin(ints[],intn)//为数组赋100内的随机数

{略}

voidarrout(inta[M],intn)//输出函数,每输出10个数换

{略}

voidfun(int*s,intn)//无需返回值

(

inti,m=0,t;〃m存最大值下标是整型,初

值。

for(i=1;i<n;i++)〃从下标为1开始向后搜一

if(s[m]<s[i])〃如果下标i的元素大于下标m的

元素,更新m

m=i;

t=s[m].s[m]=s[0],s[0]=t;〃s[m]与s[0]交

|

voidmain()

(

inta[M];

arrin(a,M);

arrout(a,M);

fun(a,M);//调用fun函数

printf("\nmax=%4d",a[0]);〃输出数组元素的最大值

getchar();

)

输出:max二99

编程训练7-2-3将最大值放在a[0]中,次大值放在a[1]中

#incIude"stdio.h"

#incIude"stdIib.h"

#defineM50

voidarrin(ints口,intn)

{略}

voidarrout(inta[M],intn)

{略}

voidfun(int*s,intn)

inti,m=0,t;

for(i=1;i<r);i++)

if(s[m]<s[i])

m=i;

t—s[m],s[m]—s[0],s[0]—t;

m=1;〃默认次大值的下标是1

for(i=2;i<n;i++)〃从下标为2开始向后搜一遍

if(s[m]<s[i])〃如果下标i的元素大于下

标m的元素,更新m

m=i;

t=s[m],s[m]=s[1],s[1]=t;〃将下标m的元素与第2个

数组元素s[1]交换

voidmain()

inta[M];

arrin(a,M);

arrout(a,M);

fun(a,M);

printf("\n最大和次大值是:%4d,%4d",a[0],a[1]);

getchar();

输出:最大和次大值是:99,95

编程训练7-2-4降序排序

#incIude"stdio.h"

#incIude"stdIib.h"

#defineM50

voidarrin(ints[],intn)

{略}

voidarrout(inta[M],intn)

{略}

voidfun(int*s,intn)〃返回值是下标,是整型

inti,m=0,t;〃m存最大值下标是整型,初

值0

for(i=1;i<n;i++)

if(s[m]<s[i])//注意是s[m]与s[i]比较,

更新m

m=i;

t=s[m],s[m]=s[0],s[

m=1;

for(i=2;i<n;i++)

if(s[m]<s[i])〃注意是s[m]与s[i]比较,

更新m

m=i;

t=s[m],s[m]=s[1],s[二t;

}

voidmain()

(

inta[3];〃定义数组长度为3

arrin(a,3);〃为数组赋值

arrout(a,3);〃输出数组元素

fun(a,3);〃调用函数实现降序排序

printf("\n");

arrout(a,3);;〃再次输出数组元素

getchar();

)

输出:

416734

674134

编程训练7-2-5选择排序

#incIude"stdio.h"

#incIude"stdIib.h"

#defineM50

voidarrin(ints口,intn)

{inti;

for(i=0;i<n;i++)

s[i]=rand()%100;

)

voidarrout(inta[M],intn)

{inti;

for(i=0;i<n;i++)

{printf("%4d",a[i]);

if((i+1)%10==0)

printf("\n");

}

}

voidsort(int*s,intn)

(

inti,m,t,j;

for(j=0;j<n-1;j++)

{m=j;

for(i=j+1;i<n;i++)

if(s[m]<s[i])

m=i;

t=s[m],s[m]=s[j],s[j]=t;

}

)

voidmain()

(

inta[10];

arrin(a,10);

arrout(a,10);

sort(a,10);

printf("\n");

arrout(a,10);

getchar();

)

输出:

4167340692478586264

7869676462584134240

编程训练7-3-1人数固定

#include"stdio.h"

#incIude"stdIib.h"

#defineM50〃某班50名学生

voidarrin(ints[],intn)〃模拟录入成绩

{inti;

for(i=0;i<n;i++)

s[i]=rand0%101;

}

voidarrout(inta[M],intn)//输出各分数

{inti;

for(i=0;i<n;i++)

{printf("%4d",a[i]);

if((i+1)%10=0)

printf("\n");

}

)

doubIeave(int*s,intn)〃返回平均分

inti;

doubIeav=0

for(i=0;i<n

av+=s[i]

returnav/n

)

voidfun(inta[M]rintn,intb口)〃统计各分数段人数,放在

b数组中

{inti;

for(i=0;i<5;i++)

b[i]=0;

for(i=0;i<n;i++)

if(a[i]>=90)

b[4]++;

eIseif(a[i]<60)

b[0]++;

b[(a[i]-50)/10]++;

}

voidsort(ints[M],intn)〃降序排列

(

inti,m,t,j;

for(j=0;j<n-1;j++)

{m=j;

for(i=j+1;i<n;i++)

if(s[m]<s[i])

m=i;

t=s[m],s[m]=s[j],s[j]=t;

}

)

voidmain()

(

inta[M],b[5],i;

arrin(a,M);

arrout(a,M);

printf("\n平均分:%.2f\n",ave(a,M));

fun(a,M,b);

printf("不及格人数:%d\n",b[0]);

for(i=1;i<5;i++)

printf("%d分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论