C语言 —— 函数
Posted liao-xin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 —— 函数相关的知识,希望对你有一定的参考价值。
C语言函数
一、C语言函数执行流程
代码:
#include <stdio.h>
void one()
printf("欢迎学习c语言!\\n");
int main()
one(); // one的调用
return 0;
第一步: 进入main()
函数;
第二步: 调用one()
函数;
①: 它会在main()
函数的前寻找有没有一个名字叫“one”
的函数定义;
②: 如果找到,接着检查函数的参数,这里调用函数时没有传参,函数定义也没有形参,参数类型匹配;
③:开始执行one()
函数,这时候,main()
函数里面的执行会阻塞( 停 )在one()
这一行代码,等待one()
函数的执行。
第三步: 当 one()
函数执行完( 这里打印一句话 ),main()
才会继续往下执行,执行到return 0
, 程序执行完毕。
二、C语言函数的嵌套调用
在C语言中,能够使用函数嵌套调用的机制,这种嵌套调用的方式可以将一些复杂的操作流程进行分步完成,从而增强程序的可读性和可维护性,这在大型程序中尤其重要。
函数嵌套调用的基本语法格式如下:
return_type function_name_1(arguments_1)
// function_name_1 code
return function_name_2(arguments_2);
return_type function_name_2(arguments_2)
// function_name_2 code
return function_name_3(arguments_3);
return_type function_name_3(arguments_3)
// function_name_3 code
return some_value;
如上所示,这里有三个函数 function_name_1、function_name_2 和 function_name_3
,它们互相调用。
当 function_name_1
调用 function_name_2
函数时,function_name_1
函数的执行暂停,function_name_2
函数开始执行。
当 function_name_2
函数调用 function_name_3
函数时,function_name_2
函数的执行暂停,function_name_3
函数开始执行。
一旦 function_name_3
函数执行完毕并返回一个值,控制权会传递回 function_name_2
函数,function_name_2
函数接着执行,并将返回值传递给 function_name_1
函数。最终,function_name_1
函数的执行也会继续,直到它返回一个值。
函数嵌套调用可以无限地进行下去,也就是说,你可以在任何一个函数中调用另一个函数,只要你遵循C语言的函数调用规则。需要注意的是函数的调用栈有一定的大小限制,如果调用层数过多,可能会导致栈溢出的问题。
函数嵌套调用在C语言中应用广泛,有助于提高程序的模块化和可读性,同时还可以减少一些冗余的代码。在程序设计中,我们应该恰当地运用函数嵌套调用,切勿滥用,以免导致调用层数过多带来的问题。
例子:计算sum = 1! + 2! + 3! + … + (n-1)! + n!
#include <stdio.h>
//求阶乘
long factorial(int n)
int i;
long result=1;
for(i=1; i<=n; i++)
result *= i;
return result;
// 求累加的和
long sum(long n)
int i;
long result = 0;
for(i=1; i<=n; i++)
//在定义过程中出现嵌套调用
result += factorial(i);
return result;
int main()
printf("1!+2!+...+9!+10! = %ld\\n", sum(10)); //在调用过程中出现嵌套调用
return 0;
三、C语言全局变量和局部变量
3.1、全局变量(Global Variable)
全局变量是在函数外部定义的变量,它们可以在整个程序范围内被访问和使用,即在任何函数中都可以使用这些变量。全局变量的作用域始于变量定义的位置,在程序结束时结束。
全局变量的优点是:它们可以方便地在程序的多个函数中使用,而不必在每个函数中传递参数。全局变量的缺点是:它们易受程序中其他函数的影响,因此需要小心处理。
以下是一些全局变量的定义示例:
int global_var = 10; // 定义一个全局变量
void func1()
printf("The value of the global variable is %d\\n", global_var);
void func2()
global_var++; // 修改全局变量的值
3.2、局部变量(Local Variable
局部变量是在函数内部定义的变量,它们只能在函数内部被访问和使用。局部变量的作用域始于变量定义的位置,在函数结束时结束。局部变量只能在定义它们的函数中使用,不能在其他函数中使用。
局部变量的优点是:它们只在定义它们的函数中可见,不会受到其他函数的影响。这使得程序更加安全,并且可以帮助避免变量名冲突。局部变量的缺点是:每个函数都需要重复定义。
以下是一些局部变量的定义示例:
void func()
int local_var = 20; // 定义一个局部变量
printf("The value of the local variable is %d\\n", local_var);
在函数内部,可以定义多个具有相同名称的局部变量,它们之间互不干扰。例如:
void func()
int local_var = 20; // 定义一个局部变量
// 定义一个名称相同的局部变量
for (int i = 0; i < 10; i++)
int local_var = i;
printf("The value of the local variable is %d\\n", local_var);
printf("The value of the local variable is still %d\\n", local_var);
3.3、例子:长方体的长宽高求它的体积以及前、侧、上面的面积
代码:
#include <stdio.h>
int s1, s2, s3; //面积
int vs(int a, int b, int c)
int v; //体积
v = a * b * c;
s1 = a * b;
s2 = b * c;
s3 = a * c;
return v;
int main()
int v, length, width, height;
printf("长方体长: 宽: 高: ");
scanf("%d %d %d", &length, &width, &height);
v = vs(length, width, height);
printf("体积=%d, 长方体前面面积=%d, 长方体侧面面积=%d, 长方体上面面积=%d\\n", v, s1, s2, s3);
return 0;
运行结果:
总之,全局变量和局部变量是C语言中两种不同类型的变量,它们在作用域、生命周期和访问方式等方面有所不同。在编写程序时,需要根据具体情况选择使用哪种类型的变量。
C语言中,变量可以被定义为全局变量或局部变量,其主要区别在于作用域和生命周期。
c语言 时间函数
我在自学C语言 最近在时间函数上卡住了 怎么搞都搞不懂
有哪位大大能给我讲解一下C当中的时间函数
CLOCK()
CLOCKS_PER_SEC()
time()
这几个函数的功能与用法
最好能详细一点 容易点
在此献上本人所有的分数 虽然只有15分 谢谢
1、获得日历时间函数:
可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);
如果已经声明了参数timer,可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:
2、获得日期和时间函数:
这里说的日期和时间就是平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?
其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。 参考技术A 废话少说!对于CLOCKS_PER_SEC()简单地理解就是用来计算程序本身的执行时间
以下程序可以验证如:
#include
<stdio.h>
#include
<time.h>
#include
<windows.h>
void
main()
Sleep(1000);//让程序休眠一秒钟
printf("Elapsed
time:
%u
secs.\n",
clock()/CLOCKS_PER_SEC);
//很显然从本程序来说主函数体里用到了Sleep函数并且让它休眠了一秒钟,所以这个程序执行的时间就是1秒 参考技术B C语言的建时间函数是
mktime(),原型在
里
调用有点繁。
下面,用我的程序输入
年月日时分秒,调用mktime(),
就得
C语言
可直接使用的
时间,
存放在
t
里。
例如
输入年月日时分秒:
2008
8
16
9
55
25
time_t
t;
里
就有了
各种时间信息,例如星期几...
#include
#include
void
main()
struct
tm
*target_time;
time_t
rawtime,
t;
int
year,month,mday,hh,mm,ss;
time
(
&rawtime
);
target_time
=
localtime
(
&rawtime
);
printf("Please
enter
year
month
day
hour
minute
second\n");
printf("For
example:
\n");
printf("2008
8
16
9
55
25\n");
scanf("%d
%d
%d
%d
%d
%d",
&year,
&month,
&mday,
&hh,&mm,&ss);
target_time->tm_year
=
year
-
1900;
target_time->tm_mon=
month
-
1;
target_time->tm_mday
=
mday
;
target_time->tm_hour
=
hh
;
target_time->tm_min
=
mm
;
target_time->tm_sec
=
ss
;
//
t
=
mktime
(target_time);
//
t
is
ready
to
use
printf("%s
",ctime(&t));
参考技术C 这个试看看应该可以的
#include
<stdio.h>;
#include
<time.h>;
time_t
scanf_time(char
*
timestr)
struct
tm
t;
if(!timestr)
return
0;
memset(&t,
0,
sizeof(t));
sscanf(timestr,
"%02d%02d%02d
%02d:%02d:%02d",
&(t.tm_mday),
&(t.tm_mon),
&(t.tm_year),
&(t.tm_hour),
&(t.tm_min),
&(t.tm_sec));
t.tm_year
+=
100;
t.tm_mon
-=1;
return
mktime(&t);
int
main(int
argc,
char
*argv[])
time_t
x
=
0;
time_t
y
=
0;
x
=
scanf_time("160312
00:00:00");
y
=
time(NULL);
if(x>y)
//0=1970-00-01
08:00:00
struct
tm
t;
memcpy(&t,
localtime(&x),
sizeof(struct
tm));
printf("\n%d年-%d月-%d日\t%d时:%d分:%d秒\n",
t.tm_year
+
1900,
t.tm_mon+1,
t.tm_mday,
t.tm_hour,
t.tm_min,
t.tm_sec);
memcpy(&t,
localtime(&y),
sizeof(struct
tm));
printf("\n%d年-%d月-%d日\t%d时:%d分:%d秒\n",
t.tm_year
+
1900,
t.tm_mon+1,
t.tm_mday,
t.tm_hour,
t.tm_min,
t.tm_sec);
time_t
result
=
x
-
y;
memcpy(&t,
localtime(&result),
sizeof(struct
tm));
printf("\n%d年-%d月-%d日\t%d时:%d分:%d秒\n",
t.tm_year
-70,
t.tm_mon,
t.tm_mday-1,
t.tm_hour-8,
t.tm_min,
t.tm_sec);
system("PAUSE");
return
0;
参考技术D 早就不用TC了,不清楚。
不知道你想要干什么,如果只是想简单地用字符串格式来输出现在的时间,用下面的代码就可以了。如果要自定格式,才需要用到struct
tm结构,不过不是你写的样子。
#include
<time.h>
#include
<stdio.h>
int
main()
time_t
lt;
lt
=
time(NULL);
printf("The
Calendar
Time
now
is
%s\n",
ctime(&
lt));
return
0;
以上是关于C语言 —— 函数的主要内容,如果未能解决你的问题,请参考以下文章