版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习任务七参考答案
应用举例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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 白酒购销合同版示例
- 物流采购合同的支付方式分析
- 服务外包合同的监管政策
- 快速招聘服务合同
- 碎石采购合同纠纷
- 茶叶种植收购合同
- 省测绘项目招标文件模板
- 鱼类购销契约
- 户口转入协助合同
- 全面建筑材料采购合同样式
- 职业教育国家在线课程申报书
- 2025届高考语文复习:小说情节概括+课件
- 国开2024年秋《机电控制工程基础》形考任务2答案
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 2024年“农业经理人”职业技能大赛考试题库500题(含答案)
- 西方近现代建筑史智慧树知到期末考试答案章节答案2024年天津大学
- 土地整治项目全套表格
- 煤焦油水分、密度的测定方法
- 方格纸,申论答题卡A4打印模板
- 第七章气相色谱法PPT课件
- 西师大版一年级数学上册应用题与解决问题专项表
评论
0/150
提交评论