类型 | 实验报告 |
---|---|
课程名 | C语言程序设计 |
内容 | 函数练习 |
学生姓名 | kk_阿白 |
专业班级 | 电信2101班 |
学 号 | 01 |
指导教师 | 常老师 |
实验日期 | 2021年11月05日 |
一、实验目的
熟悉并掌握函数的语法规则,掌握函数定义、声明和调用的基本语法格式。理解基于函数的模块化程序设计思想,能根据问题合理设计函数,分步骤化简问题、解决问题。
二、实验内容
Contest1725 - 电信通信21级实验作业3
请登录acm.zzuli.edu.cn完成http://acm.zzuli.edu.cn/contest.php?cid=1725中的在线题目,用函数来解决每个问题(A和C题可不用函数)。
A n个数求和(多实例测试)
B 敲7(多实例测试)
C 数值统计(多实例测试)
D 素数表(函数专题)
E 复合函数求值(函数专题)
F 统计元音(函数专题)
G 逆序数字(函数专题)
H 回文数(函数专题)
I 反转a+b [选做]
三、题目的分析和思考
【在这里描述下你在解题过程中对题目进行的思考,以及解题的思路。】
A n个数求和(多实例测试)
解题思路:
使用2个while循环,同时用sum进行累加,得到每组n个数的和,每次输出后初始化sum
B 敲7(多实例测试)
解题思路:
利用函数判断数字是否符合,while分离数字进行判断,主函数使用1个while循环,内嵌入for循环,遍历n的同时进行判断(至于oj上会超限是因为数据在一定范围内,可不采用分离数字,直接判断即可)
C 数值统计(多实例测试)
解题思路:使用2个while循环,并用3个变量进行统计,每次输出后初始化
D 素数表(函数专题)
解题思路:利用prime函数判断是否为素数,判断范围为(2,√n),使用一个for循环,从m到n进行遍历
E 复合函数求值(函数专题)
解题思路:公式中含绝对值的分类进行讨论
F 统计元音(函数专题)
解题思路:利用vowel函数判断是否为对应元音字母即可
G 逆序数字(函数专题)
解题思路:利用inverse函数进行转换,其中使用while进行逆置,首先倒序数字m先乘10后加余数,之后原先数字n进行除10
H 回文数(函数专题)
解题思路:使用函数进行判断是否为回文数,得到逆序数字后判断即可,主函数使用for循环,从m到n进行遍历
四、解题程序代码(必须有详细注释)
【在该部分列出解题代码,关键语句必须有注释。】
A n个数求和(多实例测试)
程序如下:
#include<stdio.h>
int main()
{
int t,n,sum,m;
scanf("%d",&t);
/*代表t组数据*/
while(t--)
{
/*初始化sum*/
sum=0;
scanf("%d",&n);
/*每组数据n个数*/
while(n--)
{
scanf("%d",&m);
sum+=m;
}
printf("%d\n",sum);
}
return 0;
}
B 敲7(多实例测试)
程序如下:
#include<stdio.h>
int seven(int m);
int main()
{
int i,t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1; i<=n; i++)
{
if(seven(i))
printf("%d ",i);
}
printf("\n");
}
return 0;
}
int seven(int m)
{
if(m%7==0)
return 1;
while(m>0)
{
if(m%10==7)
return 1;
m/=10;
}
}
C 数值统计(多实例测试)
程序如下:
#include<stdio.h>
int main()
{
int n;
int a,b, c,i;
double num;
/*输入n组数据,n为0时结束*/
while(scanf("%d", &n),n!=0)
{
/*初始化3个变量*/
a = 0,b = 0,c = 0;
for(i=1;i<=n;i++)
{
scanf("%lf", &num);
if(num==0)
a++;
else if(num>0)
b++;
else
c++;
}
printf("%d %d %d\n",c, a,b);
}
return 0;
}
D 素数表(函数专题)
程序如下:
#include<stdio.h>
#include<math.h>
int prime(int m);
int main(void)
{
int i,a,b;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
{
/*判断i是否为素数*/
if(prime(i))
printf("%d ",i);
}
return 0;
}
/*返回1代表为素数,否则不是素数*/
int prime(int m)
{
int i;
/*如果m为1则直接返回0*/
if(m==1)
return 0;
for(i=2;i<=sqrt(m);i++)
{
if(m%i==0)
return 0;
}
return 1;
}
E 复合函数求值(函数专题)
程序如下:
double funF(double x)
{
double F;
/*因为公式含绝对值,需分三种情况进行讨论*/
if(x<=-1)
F=2-2*x;
else if(-1<=x&&x<=3)
F=4;
else
F=2*x-2;
return F;
}
double funG(double x)
{
double G;
G=x*x-3*x;
return G;
}
F 统计元音(函数专题)
程序如下:
int vowel(char ch)
{
/*字母有大小写,故判断需注意*/
if(ch=='a'||ch=='i'||ch=='e'||ch=='o'||ch=='u'||ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U')
return 1;
return 0;
}
G 逆序数字(函数专题)
程序如下:
int inverse(int n)
{
int a=0;
while(n>0)
{
/*乘10,然后加余数*/
a*=10;
a+=n%10;
n/=10;
}
return a;
}
H 回文数(函数专题)
程序如下:
#include<stdio.h>
int inverse(int n);
int main()
{
int i,s,t;
scanf("%d%d",&s,&t);
for(i=s; i<=t; i++)
{
/*判断是否为回文数*/
if(inverse(i)==i)
printf("%d ",i);
}
return 0;
}
int inverse(int n)
{
int a=0;
while(n>0)
{
/*乘10,然后加余数*/
a*=10;
a+=n%10;
n/=10;
}
return a;
}
五、收获与思考
【在此描述下你从中获得的知识点或经验技巧】
知识点:
1.多实例分析
2.素数判定
3.得到逆数字
4.函数返回值与判断语句结合
经验技巧:
1.使用while比for更加简洁明了
2.每组数据结束后注意初始化,防止出错
3.先思考题干定义,制定对应函数,最后再写主函数,使得思路清晰
评分标准:①是否按时出勤实验课,实验任务是否全部完成,占50%;② 实验代码及报告的格式是否规范,代码是否注释,是否美观,是否详尽,是否真实,占40%;③ 实验作业及报告是否按时提交,占10%