C语言实验报告8.docx

上传人:b****7 文档编号:10307082 上传时间:2023-02-10 格式:DOCX 页数:12 大小:103.40KB
下载 相关 举报
C语言实验报告8.docx_第1页
第1页 / 共12页
C语言实验报告8.docx_第2页
第2页 / 共12页
C语言实验报告8.docx_第3页
第3页 / 共12页
C语言实验报告8.docx_第4页
第4页 / 共12页
C语言实验报告8.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言实验报告8.docx

《C语言实验报告8.docx》由会员分享,可在线阅读,更多相关《C语言实验报告8.docx(12页珍藏版)》请在冰豆网上搜索。

C语言实验报告8.docx

C语言实验报告8

洛阳理工学院实验报告

系部

计算机系

班级

B130503

学号

B13050326

姓名

课程名称

高级语言程序设计

实验日期

2014.4.28

实验名称

函数的应用

成绩

实验目的:

1.掌握定义和声明函数的方法。

2.掌握函数实参与形参的对应关系,以及“值传递”的方式。

3.掌握函数的嵌套调用和递归调用的方法。

4.掌握全局变量和局部变量的概念和用法。

实验条件:

电脑一台,VC++6.0

实验内容与步骤:

内容:

1.写一个判别素数的函数,在主函数输入一个正整数,输出是否为素数的信息。

本程序应准备以下测试数据:

17、34、2、1、0,分别输入数据,运行程序并检查结果是否正确。

程序提示:

(1)求素数函数:

intprime(intn)

{inti,flag;

/*i循环变量,flag标记n是否为素数,1是素数,0不是素数*/

ifn<2flag=0;/*小于2的数一定不是素数*/

elseifn==2||n==3flag=1;/*2或3是素数*/

else

{

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

/*从2开始扫描,到n/2为止,若都不能整除n,则n是素数,否则不是素数*/

ifn能被i整除flag=0;break;

ifi>n/2flag=1;/*i一直不能整除n,此时n一定是素数*/

}

}

问:

函数prime的for循环中,“i<=n/2”的“=”能否去掉,去掉会出现什么问题?

break语句能否去掉,试分析。

(2)要求所编写的程序主函数的位置在其他函数之前,在主函数中对其所调用的函数作声明。

(3)保留判别素数的函数,修改主函数,要求实现输出100-200之间的素数。

2.编写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。

程序提示:

(1)输入程序,编译和运行程序,分析结果。

(2)分析函数声明中参数的写法。

先后用以下两种形式:

函数声明中参数的写法与定义函数时的形式完全相同,如:

voidcpy(chars[],charc[]);

函数声明中参数的写法与定义函数时的形式完全相同,省略数组名。

如:

voidcpy(chars[],char[]);

分析编译和运行,分析结果。

(3)思考形参数组为什么可以不指定数组大小,如:

voidcpy(chars[80],char[])

如果随便指定数组大小行不行,如:

voidcpy(chars[40],char[40])

请分别上机试一下。

3.输入10个学生5门课的成绩,分别用函数实现下列功能:

计算每个学生平均分。

计算每门课的平均分。

③找出所有50个分数中最高的分数所对应的学生和课程。

4.写一个函数,输入一个4位数,要求输出这4位数字字符,但每两个数字间空一个空格。

5.编写一个函数,由实参传来一个字符串,统计此字符串字母、数字、空格和其他字符的个数,在主函数中输入一串字符串以及输出上述的结果。

步骤:

第1题步骤:

Step1:

输入一个正整数n,定义一个变量flag;

Step2:

进入子函数如果n等于1,给flag赋值为0;

Step3:

判断n可以整除除了1和n之外的数;如果可以则给flag赋值为0,否则赋值为1;将flag的值返回给主函数;

Step4:

如果flag=1,输出该数是素数,否则输出该数不是素数.

第2题步骤:

Step1:

定义两个数组a[80],b[40];

Step2:

输入一个字符串,赋给数组a;

Step3:

进入子函数,将数组a中的元音字母挑选出来复制给数组b;

Step4:

输出数组b.

第3题步骤:

Step1:

定义一个二维数组a[10][5],输入是个学生的成绩赋值给数组a;

Step2:

进入子函数floataver1(floata[][5])计算出每位学生的平均成绩,将值赋值给aver1并返回给主函数,输出平均成绩;

Step3:

进入子函数floataver2(floata[][5])计算出学生的每门科目的平均成绩,将值赋给aver2并返回给主函数,输出平均成绩;

Step4:

在子函数floatmax(floata[][5])中将最高分选出来,之后将其对应数组行和竖求出来输出,将最高分返回给主函数并输出。

第4题步骤:

Step1:

定义两个数组chara[10],charb[10],并输入一个四位数,将其赋值给数组a;

Step2:

进入子函数,将数组a里的值赋给数组b的偶数位与第0为,奇数位赋值为空格并将之返回给主函数;

Step3:

输出返回值.

第5题步骤:

Step1:

输入一个字符串;

Step2:

进入子函数,判断字符串中的字符的类型;

Step3:

输出各类字符串的字符串数.

运行结果:

第一题结果:

 

第二题结果:

 

第三题结果:

 

第四题结果:

 

第五题结果:

 

实验总结:

1.第二题中忘了c[j]='\0';使得输出的字符串后出现乱码。

2.第三题一开始定义i,j,x,y时没有将它们定义为全局变量,都是在主函数里和子函数里定义的,之后结果不对。

在考虑它们是主函数与子函数都使用的变量后,将其定义为全局变量,结果对了。

3.第三题的最后一问中在比较一位学生的每门成绩,if((a[i][j-1]>a[i][j]){x=i;y=j-1;a[i][j]=a[i][j-1];};else{x=i;y=j;}这种做法使得如果前面的数大,要换位,之后如果还是前面的数大则标记就会出错。

改为if(a[i][j-1]>a[i][j])a[i][j]=a[i][j-1];else{x=i;y=j;}结果对了。

4.第四题的j+=2;一开始输成了j++;这就使得结果错误,结果数字之间没有空格,因为数字间要有空格,所以在复制时应将数组a中的值赋值一个,空一个格。

附:

源程序:

第一题:

#include

intmain()

{

intprime(int);

intn,flag;

printf("输入一个正整数:

\n");

scanf("%d",&n);

if(flag==1)

printf("是素数\n");

else

printf("不是素数\n");

}

intprime(intn)

{

inti,flag;

if(n==1)flag=0;

else

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

{

if(n%i==0)flag=0;

elseflag=1;

}

return(flag);

}

第二题:

#include

intmain()

{

voidcpy(char[],char[]);

chara[80];

charc[40];

printf("请输入一个字符串:

\n");

gets(a);

cpy(a,c);

printf("其中元音字母为:

%s\n",c);

}

voidcpy(chara[],charc[])

{

inti=0,j=0;

while(a[i]!

='\0')

{

if(a[i]=='a'||a[i]=='A'||a[i]=='e'||a[i]=='E'||

a[i]=='i'||a[i]=='I'||a[i]=='o'||a[i]=='O'||

a[i]=='u'||a[i]=='U')

{

c[j]=a[i];

j++;

}

i++;

}

c[j]='\0';

}

第三题:

#include

inti,j,x,y;

intmain()

{

floataver1(floata[][5]);

floataver2(floata[][5]);

floatmax(floata[][5]);

floata[10][5];

printf("请按照科目顺序输入学生成绩:

\n");

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

{

printf("第%d位学生成绩:

",i+1);

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

scanf("%f",&a[i][j]);

}

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

printf("第%d位学生的平均成绩为:

%6.2f\n",i+1,aver1(a));

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

printf("第%d门科目的平均成绩为:

%6.2f\n",j+1,aver2(a));

printf("最高分为:

%6.2f\n",max(a));

}

floataver1(floata[][5])

{

floataver1,sum=0;

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

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

aver1=sum/5;

return(aver1);

}

floataver2(floata[][5])

{

floatsum=0,aver2;

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

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

aver2=sum/10;

return(aver2);

}

floatmax(floata[][5])

{

floatmax,b[10];

intx,y,z=0;

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

{

x=i;y=0;

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

{

if(a[i][j-1]>a[i][j])a[i][j]=a[i][j-1];

elsex=i;y=j;

}

b[z]=a[x][y];

z++;

}

max=b[0];

for(z=1;z<10;z++)

{

if(b[z-1]>b[z])b[z]=b[z-1];

elsemax=b[z];

}

i=0;

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

{

if(max==a[i][j])break;

if(j==4){i++;j=0;}

if(i==10)break;

}

printf("第%d位学生的第%d门科目分数最高,",i+1,j+1);

return(max);

}

第四题:

#include

intmain()

{

voidkg(chara[10],charb[10]);

chara[10],b[10];

intj;

printf("请输入一个4位数:

");

gets(a);

kg(a,b);

b[8]='\0';

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

return0;

}

voidkg(chara[10],charb[10])

{

inti,j,k;

i=0,j=0;

while(a[i]!

='\0')

{

for(k=0;k<8;k++)

if(k%2!

=0)b[k]='';

b[j]=a[i];

i++;

j+=2;

}

}第五题:

#include

intmain()

{

voidfun(chara[]);

chara[30];

printf("请输入字符串:

");

gets(a);

fun(a);

}

voidfun(chara[])

{

inti,b=0,c=0,d=0,e=0;

for(i=0;a[i]!

='\0';i++)

{

if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))b++;

elseif(a[i]<='9'&&a[i]>='0')c++;

elseif(a[i]=='')d++;

elsee++;

}

printf("字母数为:

%d;\t数字数为:

%d;\t空格数为:

%d;\t其他符号数为:

%d\n",b,c,d,e);

}

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

当前位置:首页 > PPT模板 > 简洁抽象

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

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