函数
函数是一种能完成特定功能的程序代码的一个单元。它提供给我们一个和黑子的概念,让代码模块化,当你需要实现某一功能的时候,即可调用一个函数来帮你做,这样减少了重复工作,也让代码更加模块化,使得代码的阅读,完善和维护更加简单。
函数的分类
按函数的定义分类
1.标准函数,系统自带的函数,不需要程序员来定义的函数,如scanf()和printf()。
2.自定义函数,系统中并不存在的函数,由程序员来定义函数并调用。
按函数的返回值来分类
按返回值来分类。 返回值:该类函数被调用执行完毕,将向调用者返回一个执行结果,称为函数的返回值
1.有的函数并没有返回值,返回值需定义类型,如double,int,char等
2.有的函数没有返回值,在函数类型部分写void
函数定义
我们只介绍自定义函数
定义格式:
返回值类型 函数名称(数据类型 变量名称, 数据类型 变量名称 ……………………){
函数体,对传进来的变量执行相关操作;
// 如果函数返回值类型不为空,则一定要写return 返回值;
}
函数参数
函数的参数有两类:形参和实参
函数定义时的参数称为形参,参数在函数未被调用时是没有确定值的,只是形式上的参数,函数调用时使用的参数称为实参
c语言规定,实参对形参的数据传递是“值传递”,即单向传递,
只是把实参的值传递给形参,而不能把实参的值再传递给实参。
再内存当中,实参与形参是不同的单元,不管名字是否相同,因此函数中对形参值的任何改变都不会影响到实参的值。
函数定义位置
函数定义有两种可以放置的位置
第一种:
在主函数之前定义并实现。
第二种:
在主函数之前定义,在主函数之后实现。
函数实战
1.输出图形
用来输出m行由
∗
*
∗构成的图形。(m≥1)
第一行包含1个
∗
*
∗,第二行包含2个
∗
*
∗…………第m行包含m个*。
主函数如下:
#include <stdio.h>
void print(int);// 在主函数之前定义,在主函数之后实现。
int main() {
int m,n;
scanf("%d",&m);
for(n=1;n<=m;n++)
print(n);
return 0;
}
输出函数如下:
此函数功能要求仅仅是输出,不需要返回数据内容,所以返回值类型是void,传入的变量是整数,所以定义为int a.
void print(int a){
for(int i=1;i<=a;i++){
printf("*");
}
printf("\n");
}
在主函数之前定义,在主函数之后实现,完整代码如下:
#include <stdio.h>
void print(int m);// 在主函数之前定义,在主函数之后实现。
//注意函数定义结束后要有分号。
int main() {
int m,n;
scanf("%d",&m);
for(n=1;n<=m;n++)
print(n);
return 0;
}
void print(int a){
for(int i=1;i<=a;i++){
printf("*");
}
printf("\n");
}
在主函数之前定义并实现代码如下:
#include <stdio.h>
void print(int a){ // 在主函数之前定义并实现
for(int i=1;i<=a;i++){
printf("*");
}
printf("\n");
}
int main() {
int m,n;
scanf("%d",&m);
for(n=1;n<=m;n++)
print(n);
return 0;
}
2.定义函数prime,判定正整数n是否素数
程序的功能:输出[a,b]范围内的所有素数
要求每行输出10个。
主函数代码如下:
#include <stdio.h>
int prime(int);
int main() {
int a,b,i,c;
scanf("%d%d",&a,&b);
c=0;
for(i=a;i<=b;i++)
{
if(prime(i))
{
printf("%6d",i);
c++;
if(c%10==0)
{
c=0;
printf("\n");
}
}
}
return 0;
}
prime函数如下:
此函数用来判断是否为素数,C语言中一般用0代表false用1代表true,
所以判断是素数返回1不是素数返回0.
#include<math.h>
int prime(int n){
for(long long i=2;i<=sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
完整程序如下:
#include <stdio.h>
#include <math.h>
int prime(int n){
for(long long i=2;i<=sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
int main() {
int a,b,i,c;
scanf("%d%d",&a,&b);
c=0;
for(i=a;i<=b;i++)
{
if(prime(i))
{
printf("%6d",i);
c++;
if(c%10==0)
{
c=0;
printf("\n");
}
}
}
return 0;
}