6.2函数的定义与使用
6.2.1初见函数
求素数的和
可以将判断一个数是不是素数的那部分代码放入函数
#include<stdio.h>
int main()
{
int m,n;
int sum=0;
int cnt=0;
int i=1;
scanf("%d %d",&m,&n);
//m=10;n=31
if(m==1)m=2;
for(i=m;i<n;i++){
int isPrime=1;
int k;
for(k=2;k<i-1;k++){
if(i%k==0){
isPrime=0;
break;
}
}
if(isPrime){
sum+=i;
cnt++;
}
}
printf("%d %d\n",cnt,sum);
return 0;
}
21:19:52
判断素数部分代码可以单独取出
21:19:59
#include<stdio.h>
int isPrime(int i)
{
int ret=1;
int k;
for(k=2;k<i-1;k++){
if(i%k==0){
ret=0;
break;
}
}
return ret;
}
int main()
{
int m,n;
int sum=0;
int cnt=0;
int i=1;
scanf("%d %d",&m,&n);
//m=10;n=31
if(m==1)m=2;
for(i=m;i<n;i++){
if(isPrime(i)){
sum+=i;
cnt++;
}
}
printf("%d %d\n",cnt,sum);
return 0;
}
21:21:38
void sum(int begin,int end)//函数头 返回类型 函数名 参数表
{
int i;//函数体
int sum=;
for(i=begin;i<=end;i++){
sum+=i;
}
printf("%d到%d的和使%d\n",begin,end,sum);
}
int main()
{
sum(1,10);
sum(20,30);
sum(35,45);
return 0;
}
求出1到10,20到30,35到45的三个和
用一个函数去求三段的和
6.2.2函数定义和调用
函数
是一块代码,接收0个或者多个参数,做一件事情,并返回0个或者1个值。
函数结构:函数头(返回类型 函数名 参数)+函数体
()的含义是起到了表示函数调用的重要作用,即使没有参数也需要()
讲函数指针的时候我们再来讲调用函数时一定要加上()的原因
DEV C++编译器中我们通常在调试的时候是使用下一步(主程序),但是如果我们要进入一个函数,一步一步的执行一个函数中的步骤,我们使用单步进入的按钮
函数名(参数值);
如果有参数,则需要给出正确的数量和顺序
这些值会被按照顺序依次用来初始化函数中的参数
6.2.3 从函数中返回值
int isPrime(int i)
{
int ret=1;
int k;
for(k=2;k<i-1;k++){
if(i%k==0){
ret=0;
break;
}
}
return ret;
}
return的作用:停止函数的执行,并送回一个值。
return有两种写法:
1.return; 2.return 表达式;
一个函数中是可以出现多个return语句的,而且return不一定要放在最后,但是这不好,不符合我们单一出口的理念。有很多个出口可以传递值到外面
可以赋值给变量,有时也可以丢弃(有时候我们要的是副作用)
用void做返回类型的函数,可以没有return,但一定不能使用带值的return
如果函数有返回值,必须使用带值的return
6.3函数的参数与变量
6.3.1函数原型
函数先后关系:
1.如果我们不在主函数中声明函数,那么函数应该写在主函数的上面,这是因为C 的编译器是自上而下的顺序分析的你的代码的。
2.如果我们不是将函数写在上面,那么我们就需要在主函数中先声明这个需要使用 的函数。
(通常我们使用第二种顺序)LLVM是一个严格的编译器。
int isPrime(int i);
函数的原型声明:声明不是函数,只有函数头,可以在int main之外去定义
函数原型的目的就是告诉编译器这个函数长什么样子
函数原型里可以不写参数的名字,只写类型
int isPrime(int i)
{
…
}
函数的定义:具体的代码(函数头+函数体);
原型声明在写主函数里是旧版本的C,现在函数的原型声明在写主函数的外面
作业:#include<stdio.h>
#include<math.h>
int main()
{
float x,result;
scanf("%f",&x);
if(x>=0){
result=sqrt(x);
}
else{
result=pow(x+1,2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,result);
return 0;
}