实验三教案.docx

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

实验三教案.docx

《实验三教案.docx》由会员分享,可在线阅读,更多相关《实验三教案.docx(23页珍藏版)》请在冰点文库上搜索。

实验三教案.docx

实验三教案

第三课

教学内容:

一维数值数组相关算法

教学目的:

掌握一维数值数组相关算法的考题

教学内容:

一、一维数值数组相关算法种类

数组元素排序,查找,求最值,计算平均值,逆序,移动。

二、课堂练习

第一套

1、程序填空题(求平均值)

给定程序的功能是计算scroe中m个人的平均成绩aver,将低于aver的成绩放在below中,通过函数名返回人数。

例如,当score={10,20,30,40,50,60,70,80,90},m=9时,函数返回的人数应该是4,below={10,20,30,40}。

#include

#include

intfun(intscore[],intm,intbelow[])

{inti,j=0;

floataver=0.0;

for(i=0;i

aver/=(float)m;

for(i=0;i

/**************found**************/

if(score[i]

returnj;

}

main()

{inti,n,below[9];

intscore[9]={10,20,30,40,50,60,70,80,90};

/**************found**************/

n=fun(score,9,___2___);

printf("\nBelowtheaveragescoreare:

");

/**************found**************/

for(i=0;i

}

2、程序改错题(选择法排序)

给定程序modi.c中,函数fun的功能是:

用选择法对数组中的n个元素按从小到大的顺序进行排序。

请改正程序中的错误,使它能得出正确结果。

注意:

不要改动main函数。

#include

#defineN20

voidfun(inta[],intn)

{inti,j,t,p;

for(j=0;j

{

/************found************/

p=j

for(i=j;i

if(a[i]

/************found************/

p=j;

t=a[p];a[p]=a[j];a[j]=t;

}

}

main()

{inta[N]={9,6,8,3,-1},i,m=5;

printf("排序前的数据:

");

for(i=0;i

fun(a,m);

printf("排序后的数据:

");

for(i=0;i

}

3、程序设计题(求最值及位置)

请编写一个函数fun,它的功能是:

找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。

数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

注意:

部分源程序存在文件prog.c中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include

#include

voidfun(inta[],intn,int*max,int*d)

{}

main()

{inti,x[20],max,index,n=10;

randomize();

for(i=0;i

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

第二套

1、程序填空题(折半法查找)

N个有序整数数列已放在一维数组中,给定下列程序中,函数fun()的功能是:

利用折半查找算法查找整数m在数组中的位置。

若找到,则返回其下标值;反之,则返回"Notbefound!

"。

折半查找的基本算法是:

每次查找前先确定数组中待查的范围:

low和high(low

如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中。

直到low>high,查找结束。

试题程序:

#include

#defineN10

intfun(inta[],intm)

{intlow=0,high=N-1,mid;

while(low<=high)

{mid=___1___;

if(m

high=___2___;

elseif(m>a[mid])

low=mid+1;

elsereturn(mid);

}

__3___(-1);

}

main()

{inti,a[N]={-3,4,7,9,13,24,67,89,100,180},k,m;

printf("a数组中的数据如下:

");

for(i=0;i

printf("Enterm:

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

k=fun(a,m);

if(k>=0)printf("m=%d,index=%d\n",m,k);

elseprintf("Notbefound!

\n");

}

2、程序改错题(按条件求平均值)

给定程序modi.c中,函数fun的功能是:

按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中,若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。

例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。

请改正程序中的错误,使它能得出正确结果。

注意:

不要改动main函数。

#include

#defineSIZE20

fun(double*s,double*w)

{intk,i;doublesum;

for(k=2,i=0;i

{s[i]=k;k+=2;}

/************found************/

sun=0.0;

for(k=0,i=0;i

{sum+=s[i];

/************found************/

if(i+1%5==0)

{w[k]=sum/5;sum=0;k++;}

}

returnk;

}

main()

{doublea[SIZE],b[SIZE/5];

inti,k;

k=fun(a,b);

printf("Theoriginaldata:

\n");

for(i=0;i

{if(i%5==0)printf("\n");

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

}

printf("\n\nTheresult:

\n");

for(i=0;i

printf("\n\n");

}

3、程序设计题(元素循环右移)

请编写函数fun,函数的功能是:

移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。

例如,一维数组中的原始内容为:

1,2,3,4,5,6,7,8,9,10;p的值为3。

移动后,一维数组中的内容应为:

5,6,7,8,9,10,1,2,3,4。

注意:

部分源程序存在文件prog.c中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include

#defineN80

voidfun(int*w,intp,intn)

{}

main()

{inta[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

inti,p,n=15;

printf("Theoriginaldata:

\n");

for(i=0;i

printf("\n\nEnterp:

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

fun(a,p,n);

printf("\nThedataaftermoving:

\n");

for(i=0;i

printf("\n\n");

}

三、课后练习

1、程序填空题(奇数位置元素排序)

请补充函数fun(),该函数的功能是:

把数给aa中元素下标为奇数的元素按从大到小的顺序重新保存在原数组中,其它元素位置不变。

例如,输入“33,67,42,58,25,76,85,16,41,56”,则输出“33,76,42,67,25,58,85,56,41,16”。

注意:

部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#defineN10

voidfun(intaa[])

{inti,j,t;

for(【1】;i

{for(j=i;j

if(aa[i]

{

【2】;

aa[j]=aa[i];

【3】;

}

}

}

main()

{inti;

intaa[N]={33,67,42,58,25,76,85,16,41,56};

clrscr();

printf("\n***originallist***\n");

for(i=0;i

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

fun(aa);

printf("\n***newlist***\n");

for(i=0;i

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

}

2、程序填空题(等步长交换)

函数fun的功能是:

将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。

形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。

例如:

若a所指数组中的数据依次为:

1、2、3、4、5、6、7、8、9,则调换后为:

6、7、8、9、5、1、2、3、4。

#include

#defineN9

voidfun(inta[],intn)

{inti,t,p;

/**********found**********/

p=(n%2==0)?

n/2:

n/2+___1___;

for(i=0;i

{t=a[i];

/**********found**********/

a[i]=a[p+___2___];

/**********found**********/

___3___=t;

}

}

main()

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

printf("\nTheoriginaldata:

\n");

for(i=0;i

printf("\n");

fun(b,N);

printf("\nThedataaftermoving:

\n");

for(i=0;i

printf("\n");

}

3、程序填空题(数组元素引用)

给定程序的功能是把a数组中的n个数,和b数组中逆序的n个数一一对应相乘、求平方,结果存在c数组中。

例如:

当a数组中的值是:

1、3、5、7、8,b数组中的值是:

2、3、4、5、8调用该函数后,c中存放的数据是:

64、225、400、441、256请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确结果。

#include

voidfun(inta[],intb[],intc[],intn)

{inti;

for(i=0;i

/**************found**************/

___1___=(a[i]*b[n-1-i])*(a[i]*b[n-1-i]);

}

main()

{inti,a[100]={1,3,5,7,8},b[100]={2,3,4,5,8},c[100];

/**************found**************/

fun(___2___,5);

printf("Theresultis:

");

/**************found**************/

for(i=0;i<5;i++)printf("%d",___3___);

printf("\n");

}

4、程序填空题(求最值及位置)

函数fun的功能是:

找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。

数组元素中的值已在主函数中赋予。

主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

#include

#include

voidfun(inta[],intn,int*max,int*d)

{inti,base,subscript;

base=a[0];

subscript=0;

for(i=1;i

if(a[i]>__1_____){

subscript=i;

base=a[i];

}

}

*max=base;

__2____=subscript;

}

main()

{inti,x[20],max,index,n=10;

randomize();

for(i=0;i

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n",max,index);

}

5、程序填空题

给定程序的功能是将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分段的人数存到b数组中:

成绩为60到69的人数存到b[0]中,成绩为70到79的人数存到b[1],成绩为80到89的人数存到b[2],成绩为90到99的人数存到b[3],成绩为100的人数存到b[4],成绩为60分以下的人数存到b[5]中。

例如,当a数组中的数据是:

93、85、77、68、59、43、94、75、98。

调用该函数后,b数组中存放的数据应是:

1、2、1、3、0、2。

#include

voidfun(inta[],intb[],intn)

{inti;

for(i=0;i<6;i++)b[i]=0;

/**************found**************/

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

if(a[i]<60)b[5]++;

/**************found**************/

___2___b[(a[i]-60)/10]++;

}

main()

{inti,a[100]={93,85,77,68,59,43,94,75,98},b[6];

/**************found**************/

fun(___3___,9);

printf("theresultis:

");

for(i=0;i<6;i++)printf("%d",b[i]);

printf("\n");

}

6、程序改错题

给定程序modi.c中,在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。

下列程序中,函数fun的功能是:

计算数组元素中值为正数的平均值(不包括0)。

例如:

数组中元素中的值依次为:

39,-47,21,2,-8,15,0,则程序的运行结果为:

19.250000。

请改正程序中的错误,使它能得出正确结果。

注意:

不要改动main函数。

#include

#include

doublefun(intx[])

{

************found************/

intsum=0.0;

intc=0,i=0;

while(x[i]!

=0)

{if(x[i]>0)

{sum+=x[i];c++;}

i++;

}

/************found************/

sum\=c;

returnsum;

}

main()

{intx[1000];inti=0;

clrscr();

printf("\nPleaseentersomedata(endwith0):

");

do

{scanf("%d",&x[i]);}

while(x[i++]!

=0);

printf("%f\n",fun(x));

}

7、程序改错题

给定程序modi.c中,函数fun的功能是:

求出a所指数组中最大数和次最大数(规定最大数和次最大数不在a[0]和a[1]中,依次和a[0]、a[1]中的数对调。

例如数组中原有的数为:

7、10、12、0、3、6、9、11、5、8,输出的结果为:

12、11、7、0、3、6、9、10、5、8。

请改正程序中的错误,使它能得出正确结果。

注意:

不要改动main函数。

#include

#include

#defineN20

intfun(int*a,intn)

{inti,m,t,k;

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

{

/************found************/

m=0;

for(k=i;k

/************found************/

if(a[k]>a[m])k=m;

t=a[i];a[i]=a[m];a[m]=t;

}

}

main()

{intx,b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;

clrscr();

for(i=0;i

printf("\n");

fun(b,n);

for(i=0;i

printf("\n");

}

8、程序改错题

给定程序modi.c中函数fun的功能是:

给一维数组a输入任意4个整数,并按下例的规律输出。

例如输入1、2、3、4,程序运行后将输出以下方阵。

4123

3412

2341

1234

请改正函数fun中指定部位的错误,使它能得出正确的结果。

注意:

不要改动main函数。

#include

#defineM4

/**************found**************/

voidfun(inta)

{inti,j,k,m;

printf("Enter4number:

");

for(i=0;i

printf("\n\nTheresult:

\n\n");

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

{k=a[M-1];

for(j=M-1;j>0;j--)

/**************found**************/

a[j]=a[j+1];

a[0]=k;

for(m=0;m

printf("\n");

}

}

main()

{inta[M];

fun(a);printf("\n\n");

}

9、程序改错题

给定程序中,函数fun()的功能是:

使数组中的元素的值缩小5倍。

请改正程序中的错

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

当前位置:首页 > 解决方案 > 学习计划

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

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