C语言:第四章,函数

其它:外部变量从申明到代码末尾是全局可用的。但是局部变量,可以使用extern来使用这些变量;
            局部变量的生命期可以通过staic扩大,直到程序结束,将其转化为静态局部变量;
            在多文件程序中,用static申明的外部变量的作用域仅限于该文件,而未用static的变量在整个程序;
            外部变量未初始化,默认为0;
file2.c

#include <stdio.h>
 extern int x; //引用性申明
  static char ch;
void f1()
{
    printf("x是:%d",x);
    ch='a';
}
file 1.c

#include <stdio.h>
#include <stdlib.h>
int x;
char ch;
int f1();
int main()
{  
    x=12;
    f1();
    printf("ch是:%c",ch);
    system("pause");
    return 0;
}

1.自定义函数:

#include <stdio.h>
#include <stdlib.h>
int show() // show为函数名,为自定义函数
{
printf("xiaolingzi.com\n");
}
int main() //主函数,入口,直接调用,其它函数都是直接或者间接调用的函数
{
printf("main函数开始\n");
show();
printf("main函数结束\n");
system("pause");
return 0;
}
2. 带参数的函数

#include <stdio.h>
#include <stdlib.h>
int add(int x, int y) //在调用之前x和y是不存在的,x y表示形式参数,传递过后存在,传递后释放,int表示返回值的类型
//如果不需要返回值,可以将int改为void,如上所示
{
return x+y;  //将值返回到主函数
}
int main()
{
int a;
a=add(1,2); // 1 2表示实际参数,实参可以是表达式
printf("%d",a);
system("pause");
return 0;
}
3. 形式参数和实际参数

#include <stdio.h>
#include <stdlib.h>
int add(int x, int y) //在调用之前x和y是不存在的,x y表示形式参数,传递过后存在,传递后释放
{
return x+y;
}
int main()
{
int x,a;
x=3;
a=add(1+2,x); //实参可以是常量,变量和表达式,实参必须是确定的值;实参和形参的类型要一致。因为add函数定义x和y都为int,所以在调用add时,对应的实参也必须是整型。
printf("%d",a);
system("pause");
return 0;
}
4. 局部变量和全局变量

#include <stdio.h>
#include <stdlib.h>
//全局变量可以为所有函数使用,生命周期很长,占内存
// ,如在show可以添加代码y=156,在main函数中也可以修改,所以变量可以在所有函数修改,因此后面的修改中应该加以注释,避免错误。
int y=567; //全局变量没有初始化的时候,值为0
int show()
{
int y=22; //当局部变量和全局变量同名时,局部变量覆盖全局变量,所有y为22; 局部变量没有初始化会随机生成一个数。
printf("在show函数中x的值是: %d\n",y);
}
int main()
{
show();
printf("在mian函数中x的值是: %d\n",y);
printf("y的值是:%d\n",y); //局部变量为函数内部申明的变量,只能在本函数有效,生命很短,调用有生命,调动结束生命结束,这样做可以更好的节省内存空间
system("pause");
return 0;
}
//局部变量作用域为函数包含的区域,即括号包括的内容。如main函数定义int y 在运行show函数时,它就不起作用,但是y的生命周期并没有结束,而是在最后一行代码return 0后结束。
5. 输出函数

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
printf("四则运算...\n");
printf("%d+%d\t=%d\n",15,16,15+16); //\t表示制表符
printf("%d-%d\t=%d\n",15,16,15-16); //减法运算
printf("%d*%d\t=%d\n",15,16,15*16); //乘法运算
printf("%d/%d\t=%f\n",15,16,(float)15/16); //除法运算 结果为0, 为了将小数点表示出来,输出的浮点数为15/16,这里还需要对15/16进行强制转换
system("pause");
return 0;
}
6.输入函数


#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
scanf("%d",&a); //&取地址运算符,获取变量a的内存地址,这样才能根据用户输入的变量来修改a的值
printf("%d",a);
system("pause");
return 0;
 
}
7. 输入输出字符


#include <stdio.h>
#include <stdlib.h>
 
int main()
{ 
char x,c;
x='A';
//字符输出函数
putchar('s'); // 表示在标准设备输出字符;一般默认为显示器
//也可以输出控制字符
putchar('\n'); 
//可以输出变量的值,但是变量必须保存了一个字符
putchar(x);
 
//字符输入函数
//当输入一个字符,getchar并不会获取字符,而在回车过后,字符会送到内存中,或者输入缓冲中区,getchar获取输入缓冲区一个字符;对于多个字符,系统将多余的暂时保存在缓冲区,等待下一次getchar提取
c=getchar(); //从标准输入设备(键盘,扫描仪等)获取一个字符,没有参数可以直接调用
putchar(c);
//可以用sanf函数替代。scanf("%s",&s)
scanf("%c",&c); //在提取多个字符时要方便于getchar()
putchar(c);
//输入ab,提取a
c=getchar(); 
putchar(c);
//提取b
c=getchar();
putchar(c);
//提取回车键
c=getchar();
//putchar(c);
//缓冲区没有字符,需要继续输入。如s,则提取s,但回车留在输入缓冲区
c=getchar();
putchar(c);
//提取回车键
printf("程序结束");
system("pause");
return 0;
}
   
8. 函数声明与定义

#include <stdio.h>
#include <stdlib.h>
int add(int, int ); //申明add函数;申明函数并不创建函数,不需要提供参数名,只需要提供参数个数和类型
//函数原型,以分号结束
int main()
{  
    int x=add(1,2);
    printf("%d",x);
    system("pause"); 
    return 0; 
}
int add(int x, int y)  //add函数放在后面,导致出现warning,未定义add函数,因此需要在前面定义函数
//函数定义分两部分,函数头申明函数返回值类型, 及函数名
//函数头没有分号
{
    return x+y;
}
//括号部分为函数体,实现函数功能


Updated: 2014-11-10 — pm2:52

Leave a Reply

  Subscribe  
Notify of