黑马程序员:C语言基本知识(4)

 

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


一、函数

 

1.库函数

1.调用C语言标准库函数时要求的include命令行

   Include命令行必须以#开头,系统提供的头文件以.h作为文件的后缀,文件名用一对双引号或一对尖括号(需要注意include命令行不是C语句,因此不能在最后加分号)

2.标准库函数的调用

   函数名(参数表)

  如:putchar(ch)

(1)     出现在表达式中的 ------ch=getchar()

(2)     做为单独的语句完成某种操作。-----printf(“********”);

1.1函数的定义和返回值

   由于C语言中的定义的函数不能完成用户所有的要求,所以用户可以为自己定义函数实现相应的功能。

1.2函数定义的语法

      1:格式:

           函数返回值的类型名  函数名(类型名 形式参数1,类型名 形式参数2……)

             {

                说明部分

                语句部分

}

      2:函数名和形式参数都是用户命名的标识符。在同一个程序中,函数名必须唯一,形式参数名只要在同一函数中唯一即可,可以与其他函数中的变量同名。

      3:C语言规定,不能在函数的内部定义函数。

      4:若在函数的首部省略了函数返回值的类型名,则说明该函数的返回值是int类型

      5:除了返回值类型为int类型的函数外,函数必须先定义后调用。

      6:当没有函数返回值,则必须把函数定义成void类型。

例:编写求两个双精度数之和的函数。

  

double add(double a, double b )
{
    double s;
    s=a+b;
    return s;
}

 

2.函数的返回值

  函数的值通过return语句返回,

  return 表达式;

  此表达式的值必须与函数首部所说明的类型一致,若类型不一致,则以函数值的类型为准。需要注意的是,无论函数体中有多少个return语句,只能执行一次。

   函数体内可以没有return语句,这时也必须定义函数为 viod类型。

 

3.函数的调用

3.1函数的两种调用方式

    格式为:

     函数名(实在参数表)

  当实参的个数多于一个时,各实参用逗号隔开。实参的个数必须与调用函数中形参的个数相周,类型一一对应匹配。

  如没有形参,则形式为 函数名()   注意后面的小括号不能丢。

如题:

#include<stdio.h>
double add(double ,double);
main()
{
   double m,n,z;
   scanf(“%lf%lf”,m,n);
   z=add(m,n);
   printf(“%lf”,z);
}
double add(double a, double b )
{
   double s;
   s=a+b;
   return s;
}


 

 

3.2 函数调用时的语法要求

   1.调用函数时,函数名必须与所调用的函数名字完全一致。

   2.实参的个数必须与形参的个数一致。

   3.C语言中规定,函数必须先定义后使用。

   4.C语言中,函数可以直接或间接的自己调用自己。称为递归调用

 fac(n)=fac(n-1)*n

 

4.函数的说明

   在C语言中凡是未在调用前定义的函数,C编译程序都默认函数的返回值为int 型。对于返回值是其它类型的,若把函数的定义放在调用之后,应该在调用之前对函数进行说明。

   说明的格式:

类型名 函数名(参数类型1,参数类型2.。。。。)

也可以用以下格式

类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,……)

函数说明的位置:

  一般为了让程序早点识别出程序中的定义好了的函数,一般将其放在程序的开始部分

 

5.调用函数和被调用函数之间的数据传递

 一:三种格式进行传递

1.  实在参数和形式参数之间进行数据传递

2.  通过return语句把函数值返回调用函数

3.  能过全局变量,但这不是一种好的方式,通常不提倡使用。

通过一个程序来看一下数据到底是怎样传递的。

#include<stdio.h>
viodtry(int,int ,int );
main()
{
   intx=2,y=3,z=0;
   printf(“(1)x=%dy=%d z=%d\n”,x,y,z);
   try(x,y,z);
   printf(“(4)x=%d y=%d z=%d\n”,x,y,z);
}
voidtry(intx,int y,int z)
{
   printf(“(2)x=%d y=%d z=%d\n”,x,y,z);
   z=x+y;
}

 

再来一个程序

 

#include<stdio.h>
viodswap(int,int);
main()
{
   int x=10,y=20;
   printf(“(1)x=%d    y=%d\n”,x,y);
   swap(x,y);
   printf(“(4)x=%d   y=%d\n”,x,y);
}
voidswap (inta,int b )
{
   int t;
   printf(“(2)a=%d b=%d\n”,a,b);
   t=a;a=b;b=t;
   printf(“(3)a=%d   b=%d\n”,a,b);
}
 

 程序运行结果

(1)    x=10  y=20

(2)    a=10  b=20

(3)    a=20  b=10

(4)    x=10  y=20


6.程序应用举例

编写一个函数isprime(int a),用来判断自变量a是否为素数。若是素数,函数返回整数1,否则返回0.

 

#include<stdio.h>
intisprime(int)
main()
{
   intx;
   printf(“entera integer number:”);
   scanf(“%d”,&x);
   if(isprime(x))
      printf(“%dis prime \n”,x);
   else
     printf(“%dis not prime\n”,x);
}
intisprime(int a)
{
   int=i;
   for(i=2;i<=a/2;i++)
   {
      if(a%i==0)
          return 0;
      return 1;
   }
 
}


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

详情请查看:http://edu.csdn.net/heima



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值