函数
返回值类型 函数名 ([参数类型 参数名1],[参数类型 参数名2],[参数类型 参数名3],......)
{
执行语句;
......
return 返回值; //若为void则无返回值
}
1.返回值类型:用于限定函数返回值的数据类型;
2.函数名:表示函数的名称,该名称可以根据标识符命名规范来定义;
3.参数类型:用于限定调用方法时传入参数的数据类型;
4.参数名:用于接收调用方法时传入的数据;
5.return关键字:用于结束函数,并返回函数指定类型的值;
6.返回值:被return语句返回的值,该值会返回给调用者。如果函数没有返回值,则返回值类型要声明为void,此时,函数体中的return语句可以省略不写。
函数分为4种,根据有无返回值(数据类型与void对立),有无参数.
printf()函数
printf()函数输出数据,它可以通过格式控制字符输出多个任意类型的数据。
常用printf()格式 | 含义 |
---|---|
%s | 输出一个字符串 |
%c | 输出一个字符 |
%d | 以十进制输出一个有符号的整型 |
%u | 以十进制输出一个无符号整型 |
%o | 以八进制输出一个整数 |
%x | 以十六进制输出一个小写整数 |
%X | 以十六进制输出一个大写整数 |
%f | 以十进制输出一个小写浮点数 |
%e | 以科学计数法输出一个小写浮点数 |
%E | 以科学计数法输出一个大写浮点数 |
%# | 带格式输出 例如:%#x意思是输出前面加个0x |
scanf()函数
scanf()函数负责从控制台上接收用户的输入,它可以灵活接收各种类型的数据,如字符串、字符、整型、浮点数等,scanf()函数也可以通过格式控制字符控制用户的输入,其用法与printf()函数一样。
脚下留心:C语言中的终止符
在使用scanf()函数获取用户输入的信息时,如果输入的信息中包含某个终止符,scanf()函数就认为输入结束,接下来就列举一些常见的终止符.
字符 | 含义 |
---|---|
0x20 | 空格 |
\t | 水平制表符 (tab键) |
\n | 换行 |
\v | 垂直制表符 |
\f | 换页 |
\r | 回车 |
终止符-->
#include <stdio.h>
#include <stdlib.h>
int main(){
char str[256];
scanf("%s",str);
printf("%s\n",str);
}
//运行时 若输入:helloworld 则输出helloworld
// 若输入:hello world 则输出hello
// 因为遇到空格了
函数的调用
//调用函数的具体语法格式如下
函数名 ([实参列表1],[实参列表2],.....);
1.将函数作为表达式调用时,函数必须有返回值.
//示例如下
int ret1=max(100,200);
2.将函数作为语句调用
//示例如下
printf("%s",hanshu(a1,a2));
3.将函数作为实参调用
//示例如下(这个同样需要有返回值)
printf("%d\n",hanshu(100,200));
嵌套调用函数
C语言中函数的定义是独立的,即一个函数不能定义在另一个函数内部。但在调用函数时,可以在一个函数中调用另一个函数,这就是函数的嵌套调用。 示例如下:
//比较4个数字的最大值
#include <stdio.h>
#include <stdlib.h>
int max2(int a, int b)
{
int temp;
return temp=(a>b? a: b);
}
int max4(int a,int b, int c,int d)
{
int temp;
temp=max2(a,b);
temp=max2(temp,c);
temp=max2(temp,d);
return temp;
}
int main(){
int a,b,c,d,max;
printf("请输入4个数用来比较大小......\n");
scanf("%d%d%d%d",&a,&b,&c,&d);
max=max4(a,b,c,d);
printf("其中最大的数字为: %d\n",max);
system("pause");
return 0;
}
多学一招:函数调用时最多可以嵌套多少层?
大家肯定会问:“既然函数嵌套调用和普通的调用看上去没什么区别,那是不是可以进行无限层的函数嵌套调用呢?”很遗憾,函数可以嵌套调用多少层是由程序运行时一个名为“栈”的数据结构决定的。一般而言,Windows上程序的默认栈大小大约为8 KB,每一次函数调用至少占用8个字节,因此粗略计算下,函数调用只能嵌套大约一千层,如果嵌套调用的函数里包含许多变量和参数,实际值要远远小于这个数目。
当然,单纯手动书写代码写出一千层嵌套函数调用基本是不可能的,但是一种名为“递归”的方法可以轻松达到这个上限。
递归函数调用
所谓的递归调用就是函数内部调用自身的过程。需要注意的是,递归必须要求有结束条件,不然就会陷入无限递归的状态,永远无法结束调用。
#include <stdio.h>
#include <stdlib.h>
int and(int n)
{
if(n==1)
{
return 1; //满足条件,递归结束
}
int temp=and(n-1); //在函数中调用自身
return temp+n;
}
int main(){
int n;
printf("该破程序计算1~n的和...\n请定义n的值为: ");
scanf("%d",&n);
printf("则1至%d的和为: %d\n",n,and(n));
system("pause");
return 0;
}
外部函数
(extern)
在C语言中,可以被其他源文件调用的函数称为外部函数,在调用外部函数之前,需要在当前源文件中定义外部函数。定义外部函数的方式是在函数的返回值类型前面添加extern关键字 .示例代码如下:
estern int add(int x,int y);
在上述示例代码中,编译器会通过extern关键字知道add()函数是定义在其他文件中的外部函数。
为了帮助大家掌握外部函数的用法,接下来,在first.c文件中定义一个add()函数,然后在second.c文件中使用first.c文件中定义的add()函数,first.c和second.c的代码如下:
文件: first.c
int add(int x, int y)
{
return x+y;
}
文件:second.c
#include <stdio.h>
extern int add(int x, int y);
void main()
{
printf("%d",add(1,2));
}
second.c文件通过调用first.c中定义的add()函数计算出1加2的结果。second.c文件中的外部函数add()是在first.c文件中实现的,编译器从first.c中找到了该函数,并将它的作用域扩大到second.c文件中,于是second.c文件中也可以调用这个first.c中定义的add()函数,从而完成计算。
为简化编程,C语言中允许在定义外部函数时省略关键字extern。
内部函数
stcatic
不同源文件中重名的函数就会互相干扰。此时,就需要一些特殊函数,这些函数只在它的定义文件中有效,该类函数称为内部函数。
在定义内部函数时,需要在函数的返回值类型前面添加static关键字(又称为静态函数),示例代码如下:
static void show(int x)
{
printf("%d",x);
}
为了让读者熟悉内部函数的作用,接下来通过在两个源文件中定义同名的内部函数来演示内部函数的用法,具体示例如下:
//文件first.c
#include <stdio.h>
void show()
{
printf("%s\n","first.c");
}
//second.c文件
#include <stdio.h>
static void show()
{
printf("%s\n","second.c");
}
void main()
{
show();
}
最终输出显示: second.c
脚下留心:
如果将second.c中修饰show()函数的关键字static去除,运行时程序会提示错误
局部变量与全局变量
局部变量就是在函数内部声明的变量,它只在本函数内有效,也就是说,只能在本函数内使用它。此外,局部变量只有当它所在的函数被调用时才会被使用,而当函数调用结束时局部变量就会失去作用。 示例如下:
#include <stdlo.h>
void show()
{
int x=0;
}
void main()
{
printf("x的值为: %d\n",x);
}
运行结果: 会出现错误
在show()函数内部定义了一个变量x,这个变量是个局部变量,它只在show()函数中有效。第8行,main()函数试图输出x的值,由于x只在show()函数中有效,在main()函数中无效,所以编译器报告一条错误。
全局变量
在所有函数外部定义的变量称为全局变量(包括main()函数),它不属于哪一个函数,而是属于源程序。因此全局变量可以为程序中的所有函数所共用。它的有效范围从定义处开始到源程序结束, 示例如下:
#include <stdio.h>
#include <stdlib.h>
int x= 123;
void show()
{
printf("show()函数中,x值为: %d\n",x);
}
int main()
{
show();
printf("main()函数中,x值为: %d\n",x);
system("pause");
return 0;
} //而且全局变量在哪都能被人修改
需要注意的是,当局部变量与全局变量重名时,全局变量会被屏蔽。
变量的作用域
在前面介绍过变量需要先定义后使用,但这并不意味着在变量定义之后的语句中一定可以使用该变量。变量需要在它的作用范围内才可以被使用,这个作用范围称为变量的作用域。
标签:语言,调用,return,定义,int,printf,函数 From: https://www.cnblogs.com/CzzA/p/16788123.html