数组综合实验.docx

上传人:b****5 文档编号:6790072 上传时间:2023-01-10 格式:DOCX 页数:31 大小:218.49KB
下载 相关 举报
数组综合实验.docx_第1页
第1页 / 共31页
数组综合实验.docx_第2页
第2页 / 共31页
数组综合实验.docx_第3页
第3页 / 共31页
数组综合实验.docx_第4页
第4页 / 共31页
数组综合实验.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

数组综合实验.docx

《数组综合实验.docx》由会员分享,可在线阅读,更多相关《数组综合实验.docx(31页珍藏版)》请在冰豆网上搜索。

数组综合实验.docx

数组综合实验

《C语言程序设计》实验报告

(2)

学号:

姓名:

班级:

成绩:

实验名称:

数组综合实验

实验地点:

宿舍

所使用的工具软件及环境:

WindowsXP系统;VC++6.0 

一、实验目的:

学会VisualC++6.0编辑、编译、连接和执行C程序。

掌握C语言语法基础;

熟练掌握if语句和switch语句while语句,do-while语句和for语句实现循环的方法。

掌握定义和使用数组;

加深对筛选法,选择法,冒泡法和二分法的使用。

 

二、实验内容:

课堂练习:

改错题:

3.2下列给定程序中,函数fun和quest的功能是:

用二分法求方程2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过0.001。

例如,若给m输入-50,给n输入30,则函数求得的一个根值为2.000。

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

注意:

不要改动main函数,不能增行或删行,也不能更改程序的结构。

#include

#include

doublequest(doublex)

{

return(2*x*x*x-4*x*x+3*x-6);

}

doublefun(doublem,doublen)

{

/********error********/

doubler;

r=(m+n)/2;

/********error********/

while(fabs(n-m)>0.001)

{

if(quest(r)*quest(n)<0)

m=r;

else

n=r;

r=(m+n)/2;

}

returnr;

}

main()

{

doublem,n,result;

printf("Pleaseinputmn:

\n");

scanf("%lf%lf",&m,&n);

result=fun(m,n);

printf("result=%6.3f\n",result);

getch();

}

22.2下列给定程序中函数fun的功能是:

用选择法对数组中的n个元素按从小到大的顺序进序请修改程序中的错误,使它能计算出正确的结果。

注意:

不要改动main函数,不能增行或删行,也不能更改程序的结构

#include

#defineM100

voidfun(intsort[],intn)

{

inti,j,temp,p;

for(j=0;j

{

/********error********/

p=j;

for(i=j;i

if(sort[i]

{

/******error********/

p=i;

temp=sort[p];

sort[p]=sort[j];

sort[j]=temp;

}

}

}

main()

{

intsort[M]={23,3,67,-2,9,-6,27,12},

i,num=8;

printf("beforesort:

");

for(i=0;i

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

printf("\n");

fun(sort,num);

printf("aftersort:

");

for(i=0;i

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

printf("\n");

getch();

}

填空题:

20.1请补充fun函数,该函数的功能是求一维数组a[N]的平均值,并对所得结果进行四舍五入保留两位小数。

例如,当a[10]={23.1,12.3,5.3,56.4,10.0,13.7,24.5,42,1.2,9.9}时,输出结果为:

average=19.840000。

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

注意:

部分源程序给出如下。

#include

#include

doublefun(doublea[10])

{

inti;

longtemp;

doubleaverage=0.0;

doublesum=0.0;

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

sum+=a[i];

average=sum/10;

average=average*1000;

temp=(average+5)/10;

average=(double)temp/100;

returnaverage;

}

main()

{

doubleaverage,a[10]={23.1,12.3,5.3,

56.4,10.0,13.7,24.5,42,1.2,9.9};

inti;

printf("\nThedata:

\n");

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

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

printf("\n\n");

average=fun(a);

printf("Theaverage=%f\n\n",average);

getch();

}

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

把字符串s中的字符按字符的ASCII码升序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。

例如,如果输入"edcba",则输出为"abcde"。

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

注意:

部分源程序给出如下。

#include

#defineN100

voidfun(charp[],intn)

{

inti,j;

chart;

for(i=0;i

for(j=i;j

if(p[i]>p[j])

{

t=p[j];

p[j]=p[i];

p[i]=t;

}

}

main()

{

inti=0,strlen=0;

chars[N];

printf("Pleaseinputastring:

\n");

gets(s);

while(s[i]!

='\0')

{

strlen++;

i++;

}

fun(s,strlen);

printf("Displaystring\n");

puts(s);

getch();

}编程题:

1.3数组point中存放着m个人的成绩,请编写函数fun,它的功能是:

返回高于平均分的人数,并将高于平均分的分数放在high所指的数组中。

例如,当point数组中的数据为50、60、65、70、75、80、88、90、95时,函数返回的人数应该是5,high中的数据应为75、80、88、90、95。

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

注意:

部分源程序给出如下。

#include

#include

#include

intfun(intpoint[],intn,inthigh[])

{

inti,j,average;

ints=0;

for(i=0;i

s+=point[i];

average=s/n;

for(j=0,i=0;j

if(point[j]>average)

{

high[i]=point[j];

i++;

}

returni;

}

main()

{

intj,m,high[9];

intpoint[9]={50,60,65,70,75,80,

88,90,95};

FILE*out;

m=fun(point,9,high);

printf("\nHightheaveragepointare:

");

out=fopen("outfile.dat","w");

for(j=0;j

{

printf("%d",high[j]);

fprintf(out,"%d\n0",high[j]);

}

fclose(out);

}

4.3请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。

二维数组中的值在主函数中赋予。

例如,若二维数组中的值为:

3 5 7 9

9 9 9 4

9 9 9 8

则函数值为72。

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

注意:

部分源程序给出如下。

#include

#include

#defineM3

#defineN4

intfun(intb[M][N])

{

inti,j,s=0;

for(i=0;i

for(j=0;j

if(i==0||i==M-1)

s+=b[i][j];

elseif(j==0||j==N-1)

s+=b[i][j];

returns;

}

main()

{

inta[M][N]={{3,5,7,9},{9,9,9,4},

{9,9,9,8}};

inti,j,sum;

FILE*out;

printf("Theoriginaldatais:

\n");

for(i=0;i

{

for(j=0;j

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

printf("\n");

}

sum=fun(a);

printf("\nThesum:

%d\n",sum);

printf("\n");

out=fopen("outfile.dat","w");

fprintf(out,"%d",sum);

fclose(out);

}

31.3编写程序,实现矩阵(3行列)的转置(即行列互换)。

例如,若输入下面的矩阵:

1 2 3

4 5 6

7 8 9

则程序输出:

1 4 7

2 5 8

3 6 9

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

注意:

部分源程序给出如下。

#include

#include

voidfun(inta[3][3])

{

inti,j,k;

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

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

{

k=a[i][j];

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

a[j][i]=k;

}

printf("\n");

}

main()

{

inti,j;

inta[3][3]={{1,2,3},

{4,5,6},

{7,8,9}};

FILE*out;

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

{

for(j=0;j<3;j++)

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

printf("\n");

}

fun(a);

printf("Converteda:

\n");

out=fopen("outfile.dat","w");

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

{

for(j=0;j<3;j++)

{

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

fprintf(out,"%7d",a[i][j]);

}

printf("\n");

fprintf(out,"\n");

}

fclose(out);

getch();

}

73.1请编写函数fun,其功能是:

计算并输出给定10个数的方差:

例如,给定的10个数为76.0,65.0、72.0、85.0、57.0、67.0、45.0、92.0、44.0、58.0,则输出为F=14.982990。

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

注意:

部分源程序给出如下。

#include

#include

doublefun(doubley[10])

{inti;

doubles=0,a=0,t=0;

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

s+=y[i];

a=s/10;

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

t+=(y[i]-a)*(y[i]-a);

t=t/10;

t=sqrt(t);

returnt;

}

main()

{

doublef,y[10]={76.0,65.0,72.0,85.0,

57.0,67.0,45.0,92.0,44.0,58.0};

inti;

FILE*out;

printf("\nTheoriginaldatais:

\n");

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

printf("%6.1f",y[i]);

printf("\n\n");

f=fun(y);

printf("f=%f\n\n",f);

out=fopen("outfile.dat","w");

fprintf(out,"%f",f);

fclose(out);

}

三、程序运行结果示例:

改错题:

3.2

22.2

填空题:

20.1

43.1

编程题:

1.3

4.3

31.3

73.1

四、作业

3.3请编写函数voidfun(inty,intb[],int*m),它的功能是:

求出能整除y且是奇数的各整数,并按从小到大的顺序放在b所指的数组中,这些除数的个数通过形参m返回。

例如,若y中的值为90,则有4个数符合要求,它们是1、3、5、9、15、45。

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

注意:

部分源程序给出如下。

#include

#include

voidfun(inty,intb[],int*m)

{

inti=0,j=1,k=0,*t=b;

for(j=0;j<=y;j++)

if(j%2!

=0)

{

t[i]=j;

i++;

}

for(j=0;j

if(y%t[j]==0)

{

b[k]=t[j];

k++;

}

*m=k;

}

main()

{

inty,a[500],m,j;

FILE*out;

printf("\nPleaseinputanintegernumber:

\n");

scanf("%d",&y);

fun(y,a,&m);

for(j=0;j

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

printf("\n");

fun(730,a,&m);

out=fopen("outfile.dat","w");

for(j=0;j

fprintf(out,"%d\n",a[j]);

fclose(out);

getch();

}

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

判断字符ch是否与s所指串中的某个字符相同,若相同,则什么也不做;若不同,则将其插在串的最后。

请修改程序中的错误,使它能得出正确的操作。

注意:

不要改动main函数,不能增行或删行,也不能更改程序的结构。

#include

#include

#include

/*******error*********/

voidfun(char*s,charc)

{

while(*s&&*s!

='c')

s++;

/*******error*********/

if(*s==c)

{

s[0]='c';

/*******error*********/

s[1]='\0';

}

}

main()

{

charstr[81],ch;

printf("\nPleaseenterastring:

\n");

gets(str);

printf("\nPleaseenterthecharactertosearch:

");

ch=getchar();

fun(str,ch);

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

}

5.3编写函数intfun(intmm,intb[MAX]),该函数的功能是求出小于或等于mm的所有素数,并放在b数组中,该函数返回所求出的素数的个数。

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

注意:

部分源程序给出如下

#include

#include

#defineMAX100

intfun(intmm,intb[MAX])

{

inti,m,n=0;

for(m=2;m<=sqrt(m);m++)

{

for(i=2;i<=sqrt(m);i++)

if(m%i==0)break;

if(i>=m)

{

b[n]=m;

n+=1;

}

}

returnn;

}

main()

{

intm,i,sum;

intb[MAX];

FILE*out;

printf("inputadata:

\n");

scanf("%d",&m);

sum=fun(m,b);

for(i=0;i

{

if(i%10==0&&i!

=0)

printf("\n");

printf("%5d",b[i]);

}

sum=fun(28,b);

out=fopen("outfile.dat","w");

for(i=0;i

fprintf(out,"%d\n",b[i]);

fclose(out);

}

18.1请补充fun函数,该函数的功能是求不超过给定自然数的各奇数之和。

例如,输入34,则输出结果为289。

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

注意:

部分源程序给出如下。

#include

intfun(intn)

{

inti,sum;

sum=0;

for(i=1;i

sum+=i;

returnsum;

}

main()

{

inta;

do

{

printf("\nPleaseenternaturalnumbersa:

");

scanf("%d",&a);

}while(a<=0);

printf("\n不超过给定自然数%d的各奇数之和为%d\n",a,fun(a));

getch();

}

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

根据以下公式计算,计算结果作为函数值返回。

s=1+1/(1+2)+1/(1+2+3)+....+1/(1+2+3+...+n)p通过形参传入,例如,若p的值为21时,函数的值为1.909091。

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

注意:

部分源程序给出如下。

#include

#include

#include

floatfun(intn)

{

inti;floats,m;s=0;m=0;

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

{

m+=i;

s=s+1.0/m;

}

returns;

}

main()

{

intn;

floatstr;

FILE*out;

printf("\nPleaseinputtheintegern:

");

scanf("%d",&n);

str=fun(n);

printf("Theresultis:

%f\n",str);

str=fun(10);

out=fopen("outfile.dat","w");

fprintf(out,"%f",str);

fclose(out);

getch();

}

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

计算并输出给定整数m的所有因子(不包括1与自身)之和。

规定m的值不大于1000。

例如,若主函数从键盘给m输入的值为111,则输出为sum=40。

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

注意:

部分源程序给出如下。

#include

intfun(intm)

{

inti;

intsum=0;

for(i=2;i

if(!

(m%i))

sum+=i;

returnsum;

}

main()

{

intn,num;

FILE*out;

printf("Inputm:

");

scanf("%d",&n);

num=fun(n);

printf("num=%d\n",num);

out=fopen("outfile.dat","w");

fprintf(out,"%d\n",fun(123));

fprintf(out,"%d\n",fun(456));

fprintf(out,"%d\n",fun(789));

fclose(out);

getch();

}

23.1s是一个由数字和字母字符组成的字符串,由变量len传入字符串长度。

请补充fun函数,该函数的功能是把字符串s中的数字字符转换成数字并存放到整型数组a中,函数返回数组a的长度。

例如,s="Abc123e456hui7890",结果为:

1234567890。

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

注意:

部分源程序给出如下

#include

#defineM80

inta[M];

intfun(chars[],inta[],intlen)

{

intj,m=0;

for(j=0;j

if(s[j]>='0'&&s[j]<='9')

{

a[m]=s[j]-'0';

m++;

}

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1