C语言实验报告 函数.docx
- 文档编号:9484581
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:26
- 大小:105.62KB
C语言实验报告 函数.docx
《C语言实验报告 函数.docx》由会员分享,可在线阅读,更多相关《C语言实验报告 函数.docx(26页珍藏版)》请在冰豆网上搜索。
C语言实验报告函数
实验名:
函数的定义及调用
一、实验目的
1、掌握C语言函数定义及调用的规则。
2、理解参数传递的过程。
二、实验内容
(一))题目1
1、题目内容描述
1、上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。
main()
{
int,y;
printf(“%d\n”,sum(x+y));
intsum(a,b)
{
inta,b;
return(a+b);
}
}
2、编写并调试一个求n!
(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
三、分析讨论
1、针对以上实验内容写出相应的参数传递过程并分析结果。
2、讨论参数的传递的几种形式。
2、输入和输出信息描述及数据类型确定;
(1)、输入数据
序号
输入数据描述
数据类型
1
x,y
int
2
a,b
int
(2)输出数据
序号
输出数据描述
数据类型
1
x+y
int
3、程序源代码(填写程序调试正确后的代码)
#include
intmain()
{
intsum(inta,intb);//对被调用函数sum的声明
intx,y,z;
scanf("%d,%d",&x,&y);
z=sum(x,y);//调用sum函数,将其值赋给z
printf("%d\n",z);//输出函数结果z
return0;//返回值为0
}
intsum(inta,intb)//定义sum函数
{
return(a+b);//将a+b的值作为返回值返回到调用sum的位置
}
4、程序调试
错误序号
错误信息(列出出错语句以及出错提示)
是否解决
解决方法
1
Infunction'main':
|
int,y;
是
改为intx,y;
2
error:
stray'\241'inprogram|
error:
expectedexpressionbefore'%'token|
error:
stray'\'inprogram|
printf(“%d\n”,sum(x+y));
是
将整段改为
intsum(inta,intb);
intx,y,z;
z=sum(x,y);
printf("%d\n",z);
3
error:
'a'redeclaredasdifferentkindofsymbol|
error:
'b'redeclaredasdifferentkindofsymbol|
inta,b;
是
去掉整句话
4
warning:
'x'isuseduninitializedinthisfunction[-Wuninitialized]|
是
加上scanf("%d,%d",&x,&y);
5
error:
staticdeclarationof'sum'followsnon-staticdeclaration|
是
将int及后面的语句块都移到main外面
5、测试与结果分析
(1)、测试数据与结果
测试序号
测试用例选取原因
测试输入数据
测试输出结果
是否正确
结果分析
1
测试用例
4,5
9
是
可运算范围内
2
测试用例
55555,7933
63488
是
可运算范围内
3
测试用例
-89,-79
-168
是
可运算范围内
(2)、相关问题回答
2、编写并调试一个求n!
(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。
1、输入和输出信息描述及数据类型确定;
(1)、输入数据
序号
输入数据描述
数据类型
1
n
int
2
result
long
(2)输出数据
序号
输出数据描述
数据类型
1
result
long
3、程序源代码(填写程序调试正确后的代码)
#include
longfact(longn);//对被调用的函数fact的声明
intmain()
{
intn;
longresult;//定义result为长型整数
printf("Inputn:
");
scanf("%d",&n);
result=fact(n);//调用fact函数
if(result==-1)
printf("n<0,dataerror!
\n");//fact函数返回值即result为-1时输出此句话
else
printf("%d!
=%ld\n",n,result);//fact函数返回值即result不为-1时输出此句
return0;//主函数返回值为0
}
longfact(longn)//定义fact函数函数值和n都为长整型
{
if(n<0)
return-1;//若n为负则返回值为-1
elseif(n==0||n==1)
return1;//若n为0或1则返回值为1
else
{
printf("fact(%ld)=%ld*fact(%ld)\n",n,n,n-1);//输出函数被调用的n的变化
return(n*fact(n-1));//否则返回n!
的值
}
}
3、程序调试
错误序号
错误信息(列出出错语句以及出错提示)
是否解决
解决方法
1
warning:
controlreachesendofnon-voidfunction[-Wreturn-type]|
printf("n<0,dataerror!
\n");
是
改为return-1;
此处是要有返回值的
5、测试与结果分析
(1)、测试数据与结果
测试序号
测试用例选取原因
测试输入数据
测试输出结果
是否正确
结果分析
1
测试用例
4
是
可运算范围内,程序无误
2
测试用例
10
是
可运算范围内
3
测试用例
7
是
可运算范围内
(二))题目2
1、题目内容描述
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别统计下列内容:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单;
(3)统计各分数段的学生人数及所占的百分比;
2、输入和输出信息描述及数据类型确定;
(1)、输入数据
序号
输入数据描述
数据类型
1
n
Int
2
num[30]
int
3
score[30
float
4
name[30]
char
(2)输出数据
序号
输出数据描述
数据类型
1
count
int
2
(float)stu[j]/(float)n*100)
float
4、函数解释
(1)函数Getfail函数功能:
统计不及格人数并打印不及格学生的名单
函数参数:
整数型数组num,储存学生学号;实型数组score,储存学生成绩;字符型变量name,学生名字;整型变量n,学生总数
函数返回值:
不及格人数
(2)函数GetAver函数功能:
计算全班平均分
函数参数:
实型数组score,储存学生成绩;整型变量n,学生总数
函数返回值:
平均分
(3)函数GetAboveAver函数功能:
统计分数在全班平均分以上的学生人数并打印学生名单
函数参数:
整数型数组num,储存学生学号;实型数组score,储存学生成绩;整型变量n,学生总数
函数返回值:
分数在全班平均分以上的学生人数
(4)函数GetPerct函数功能:
统计各分数段的学生人数及所占百分比
函数参数:
实型数组score,储存学生成绩;整型变量n,学生总数
函数返回值:
无
6、程序源代码(填写程序调试正确后的代码)
#include
intGetFail(intnum[],floatscore[],charname[],intn);//对被调用函数Getfial的声明
floatGetAver(floatscore[],intn);//对被调用函数Getaver的声明
intGetAboveAver(intnum[],floatscore[],charname[],intn);//对被调用函数Getaboveaver的声明
voidGetPerct(floatscore[],intn);//对被调用函数Getperct的声明
intmain()
{
inti,n,fail,AboveAver;
intnum[30];
floatscore[30],aver;
charname[30];
printf("请输入学生人数:
");
scanf("%d",&n);
printf("请按如下格式输入\n");
printf("学号名字成绩\n");
for(i=0;i scanf("%d%c%f",&num[i],&name[i],&score[i]);//输入学号名字成绩的格式 fail=GetFail(num,score,name,n);//调用Getfial函数并将其赋值给fial printf("不及格人数为: %d\n",fail); aver=GetAver(score,n);//调用Getaver函数并将其赋值给aver printf("平均分为%f\n",aver); AboveAver=GetAboveAver(num,score,name,n);//调用Getabovaver函数并将其赋值给aboveaver printf("在平均分之上的人数为: %d\n",AboveAver); printf("分数段学生人数百分比(百分之)\n"); GetPerct(score,n);//调用Getperct函数 return0;//返回值为0 } intGetFail(intnum[],floatscore[],charname[],intn)//定义函数 { inti,count; count=0; printf("不及格的人为: \n"); for(i=0;i { if(score[i]<60)//打印不及格的人 { printf("%d%c%f\n",num[i],name[i],score[i]); count++;//统计不及格的人数 } } if(count==0) printf("无\n");//若没有不及格的人则输出无 returncount;//将count的值作为返回值返回到调用位置 } floatGetAver(floatscore[],intn)//定义函数 { inti; floatsum; sum=0; for(i=0;i { sum=sum+score[i];//计算总分 } returnsum/n;//将平均分作为返回值返回到调用位置 } intGetAboveAver(intnum[],floatscore[],charname[],intn)//定义函数 { inti,count; floataver; count=0; aver=GetAver(score,n);//调用GetAver函数 printf("平均分在班平均分以上: \n"); for(i=0;i { if(score[i]>=aver)//打印分数高于平均分的人 { printf("%d%c%f\n",num[i],name[i],score[i]); count++; } } returncount;//将人数count作为返回值返回到调用位置 } voidGetPerct(floatscore[],intn)//定义函数 { inti,j,k; intstu[6]={0}; for(i=0;i { if(score[i]<60)k=0; elsek=((int)score[i]-50)/10; switch(k) { case0: stu[0]++;break;//统计k=0即不及格的人数 case1: stu[1]++;break;//统计k=1即分数在60-69的人数 case2: stu[2]++;break;//...... case3: stu[3]++;break;//...... case4: stu[4]++;break;//...... case5: stu[5]++;break;//...... } } for(j=0;j<6;j++) { if(j==0) printf("<60%d%f\n",stu[j],(float)stu[j]/(float)n*100);//不及格的人 elseif(j==5) printf("100%d%f\n",stu[j],(float)stu[j]/(float)n*100);//100分的人 else printf("%d~%d%d%f\n",(j+5)*10,(j+5)*10+9,stu[j],(float)stu[j]/(float)n*100); //60-99之间的人,利用数组stu[j]输出不同等级分类 } } 7、程序调试 错误序号 错误信息(列出出错语句以及出错提示) 是否解决 解决方法 1 error: expectedidentifieror'('before','token| intn,,fail,AboveAver,count; 是 去掉两个逗号的一个 2 error: expected';'before'Perct'| printf("分数段学生人数百分比") 是 改为printf("分数段学生人数百分比\n"); 3 error: voidvaluenotignoredasitoughttobe| warning: variable'perct'setbutnotused[-Wunused-but-set-variable]| perct=GetPerct(score,n); 是 去掉perct= 4 warning: format'%c'expectsargumentoftype'int',butargument3hastype'char*'[-Wformat=]| printf("%d%c%f\n",num[i],name,score[i]); 是 Name后面加上【i】 5 warning: toomanyargumentsforformat[-Wformat-extra-args]| printf("学号姓名成绩\n",num[i],name[i],score[i]); 是 改为printf("%d%c%f\n",num[i],name[i],score[i]); 6 intstu[6]; 是 初始化 7 warning: toomanyargumentsforformat[-Wformat-extra-args]| printf("平均分在班平均分以上: \n",count); 是 改为printf("平均分在班平均分以上: %d\n",count); 8、测试与结果分析 (1)、测试数据与结果 测试序号 测试用例选取原因 测试输入数据 测试输出结果 是否正确 结果分析 1 测试用例 如下图 是 程序无误 2 测试用例 如下图 是 程序无误 (三))题目3 1、题目内容描述 某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。 考试后要求: (1)计算每个学生的总分和平均分; (2)按总分成绩由高到低排出成绩的名次; (3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。 2、输入和输出信息描述及数据类型确定; (1)、输入数据 序号 输入数据描述 数据类型 1 num[STU],score[STU][COURSE] Int (2)输出数据 序号 输出数据描述 数据类型 1 num[STU],score[STU][COURSE],sum[STU] int 2 aver[STU] float 3、函数解释 Getsumaver: 函数功能: 计算每个学生的总分和平均分 函数参数: 整型数组score,存放学生成绩 整型变量n,存放学生人数 整型数组sum,存放每个学生的总分 实型数组aver,存放每个学生的平均分 函数返回值: 无 Sort: 函数功能: 排名次 函数参数: 整型数组num,存放学生学号 整型数组score,存放学生成绩 整型变量n,存放学生人数 整型数组sum,存放每个学生的总分 实型数组aver,存放每个学生的平均分 函数返回值: 无 Print: 函数功能: 输出成绩表 函数参数: : 整型数组num,存放学生学号 整型数组score,存放学生成绩 整型变量n,存放学生人数 整型数组sum,存放每个学生的总分 实型数组aver,存放每个学生的平均分 函数返回值: 无 Search: 函数功能: 名次查询 函数参数: : 整型数组num,存放学生学号 整型变量n,存放学生人数 长整型变量x,存放名次 函数返回值: 无 6、程序源代码(填写程序调试正确后的代码) #include #defineSTU30 #defineCOURSE3 voidGetsumaver(intscore[][COURSE],intn,intsum[],floataver[]); voidSort(intnum[],intscore[][COURSE],intn,intsum[],floataver[]); voidPrint(intnum[],intscore[][COURSE],intn,intsum[],floataver[]); intSearch(intnum[],intn,intx);//函数声明 intmain() { intn,pos,x,i,j; intnum[STU],score[STU][COURSE],sum[STU]; floataver[STU];//定义变量 printf("请输入学生人数: \n"); scanf("%d",&n); printf("请输入学生的学号和成绩\n"); printf("学号数学英语物理\n");//输出成绩表表头 for(i=0;i { scanf("%d",&num[i]); for(j=0;j scanf("%d",&score[i][j]);//输入学生的成绩 } Getsumaver(score,n,sum,aver);//调用函数,计算总分和平均分 printf("总分和平均分: \n"); Print(num,score,n,sum,aver);//调用函数 Sort(num,score,n,sum,aver);//调用函数,排名次 printf("名次表: \n"); Print(num,score,n,sum,aver);//调用函数 printf("请输入待查找的学生的学号: "); scanf("%d",&x); pos=Search(num,n,x);//调用函数,名次查询 if(pos! =-1)//返回值为-1时输出成绩表 { printf("名次\t学号\t数学\t英语\t物理\t总分\t平均分\n"); printf("%d\t%d\t%4d\t%4d\t%3d\t%3d\t%3f\n",pos+1,num[pos],score[pos][0],score[pos][1],score[pos][2],sum[pos],aver[pos]); } else printf("未找到! \n");//否则找不到 return0; } voidGetsumaver(intscore[][COURSE],intn,intsum[],floataver[])//定义函数 { inti,j; for(i=0;i { sum[i]=0; for(j=0;j sum[i]=sum[i]+score[i][j];//求每行即每人的总分 aver[i]=(float)sum[i]/COURSE;//求平均分 } } voidSort(intnum[],intscore[][COURSE],intn,intsum[],floataver[])//定义函数 { inti,j,k,m,t1,t2; floatt3; for(i=0;i { k=i; for(j=i+1;j if(sum[j]>sum[k])k=j; if(k! =i) { t1=sum[k]; sum[k]=sum[i]; sum[i]=t1; t2=num[k]; num[k]=num[i]; num[i]=t2; t3=aver[k]; aver[k]=aver[i]; aver[i]=t3; for(m=0;m { t1=score[k][m]; score[k][m]=score[i][m]; score[i][m]=t1; } } } } voidPrint(intnum[],intscore[][COURSE],intn,intsum[],floataver[])//定义函数 { inti,j; printf("分数: \t学号\t数学\t英语\t物理\t总分\t平均分\n"); for(i=0;i { pri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言实验报告 函数 语言 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)