头文件:包括两种,举个例子,#include stdio.h 和#include "type.h"
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网站空间、营销软件、网站建设、钦北网站维护、网站推广。
前者,当你在C语言的最开头加上这句后,就可以使用系统已经帮你包装好的函数,例如printf等,后者则是你自己写的头文件。
库函数:是C语言编译器已经帮你设计好的程序,例如打印信息可以直接使用printf,打开硬盘的某个文件可以使用fopen,等等。
模块化:这个概念就是要求我们尽量将一个程序分割成很多小的功能,每个功能均用一个函数来实现,而不是一个程序从头到尾只用一到二个函数就完成了。
各种用 C 语言实现的模板可能在使用形式上有所不同。现以一个求和函数 Sum 为例,用 C++ Template 可写如下:
template R Sum(const T *array, int n)
{
R sum = 0;
for (int i = 0 ; i n ; ++i)
sum += i;
return sum;
}
如果不是内置类型,该模板隐式地需要 有R R::operator+=(T)运算符可用。
1. 使用函数指针作为 Functor 替换者
Typedef struct tagAddClass
{
Void (*add)(char* r1, const char* r2);
Int elemSize;
Char sum[MAX_ELEM_SIZE];
} AddClass;
void Sum(AddClass* self, const char* array, int n)
{
for (int i = 0 ; i n ; ++i)
self-add(self-sum, array + i*self-elemSize);
}
使用时:
Void AddInt(char* r1, const char* r2) {
*(long*)r1 += *(int*)r2; }
AddClass addClass = {AddInt, 2, 0 };
Int array[100];
Read(array);
Sum(addClass, array, 100); …..
2. 用宏作为Functor的替换者
#define GenSumFun(SumFunName, Add, RetType, ElemType)
RetType SumFunName (const ElemType *array, int n) \
{
RetType sum = 0;
for (int i = 0 ; i n ; ++i)
Add(sum, i);
return sum; }
使用时:
#define AddInt(x, y) ((x) += (y))
GenSumFun(SumInt, AddInt, long, int) …..
Int array[100];
Read(array);
Long sum = SumInt(array, 100); …..
3. 所有可替换参数均为宏
至少需要一个额外的文件(实现文件)为 impsum.c
/* impsum.c */
RetType FunName(const ElemType *array, int n)
{
RetType sum = 0;
for (int i = 0 ; i n ; ++i)
Add(sum, i);
return sum; }
使用时:
#undef RetType
#undef FunName
#undef ElemType
#undef Add
#define AddInt(x, y) ((x) += (y))
#define RetType long
#define FunName SumInt
#define ElemType int
#define Add AddInt
#include impsum.c …..
Int array[100];
Read(array);
Long sum = SumInt(array, 100);
4. 总结:
第一种方法,易于跟踪调试,但是效率低下,适用于对可变函数(函数指针)的效率要求不高,但程序出错的可能性较大(复杂),模板函数(Sum)本身很复杂,模板参数也比较复杂(add)的场合。
第二种方法,效率高,但很难跟踪调试,在模板函数和模板参数本身都很复杂的时候更是如此。
第三种方法,是我最近几天才想出的,我认为是最好的,在模板参数(Add)比较复杂时可以用函数(第二种也可以如此),简单时可以用宏,并且,易于调试。在模板函数本身很复杂,而模板参数比较简单时更为优越。但是,可能有点繁琐。
不知道你要实现什么功能,只给你说了下问题所在
#includestdio.h
#include "conio.h" //getch()函数要这个头文件
int sum_(int m,int d);//函数用之前要声明
int leap(int y);
void main()
{
int sum_(int,int);
int leap(int);
int y,m,d,s;
printf("Please input the year,month and day:\n");
scanf("%d%d%d",y,m,d);
sum_(m,d); //这里返回的S没用上
leap(y); //这里返回的S没用上
printf("It's %d days",s);//这里的S没有给值,是不是应取上面两个函数中的一个
getch();
}
int sum_(int m,int d)
{
int s;
switch(m)
{
case 12:s=334+d;break;
case 11:s=304+d;break;
case 10:s=273+d;break;
case 9:s=243+d;break;
case 8:s=212+d;break;
case 7:s=181+d;break;
case 6:s=151+d;break;
case 5:s=120+d;break;
case 4:s=90+d;break;
case 3:s=59+d;break;
case 2:s=31+d;break;
case 1:s=d;break;
}
return s;
}
int leap(int y)
{
int s,m; //这里的m,s没有初始化,应从主函数中传递过来如用int leap(int y,int s,int m)
if(m2y%400==0||y%100!=0y%4==0)
s=s+1;
return(s);
}
C语言中用函数来实现程序模块。
模块化程序设计是将一个大的任务分解成若干个小任务,再将小任务分解成更小的任务,直到每一个任务都只完成一个独立功能。这样的每个任务都叫做模块,C语言中模块是用函数来实现的。
借助函数来实现程序模块化,把你想实现的功能用函数来实现,不同功能的就用不同的函数来实现,而且,函数在一定程度上可以被复用,所以称为模块,搜索零基础学通C语言系列大全之线程_模块儿_静态库_循环总结视频教程就可以看了。
C语言中调用函数的方法及步骤:
工具/原料:C语言
1、首先需要输入想要调用的函数。
2、然后当输入一个括号后,即可观察他的参数。
3、接着在对应的参数中输入参数值。
4、然后,系统会发生一个警告。
5、接着需要调用它相应的头文件。
6、最后再次编译,发现没有任何警告和错误即可。