《函数》
1. 如何编写一个好的程序:
使程序模块化。所谓模块化,就是在您的主函数中要实现某种功能时,尽量单独地写一个函数,当您要用此功能时再调用您写的函数即可。前面介绍的printf(), scanf(), getchar(), putchar()以及strlen(),这些函数都是标准的C库函数,并且都被预先定义在C库中。
2. 为什么使用函数?
第一:函数的使用可以省去重复代码的编码。如果程序需要多次使用某种特定的功能,那么只需编写一个合适的函数即可,需要实现此功能就调您编写的函数即可。
第二:即使某种功能在程序中只使用一次,将其以函数的形式实现也是有必要的,因u为函数使得程序更加模块化,从而有利于程序的阅读,修改和完善。
3. 编写和使用一个简单的函数(不带参数的函数):
#include<stdio.h>
#define NAME "GIGATHINK, INC."
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Magaplis.CA 94904"
#define WIDTH 40
void starbar(void);//声明函数原型
int main(void)
{
starbar();
printf("%s\n", NAME);
printf("%s\n", ADDRESS);
printf("%s\n", PLACE);
starbar();//使用函数
return 0;
}
void starbar(void)//定义函数
{
int count;
for(count = 1; count <= WIDTH; count++)
{
putchar('#');
}
putchar('\n');
}
程序输出如下:
程序解释与评价:
(1). void starbr(void);
1). 圆括号表明starbr是一个函数名;
2). 第一个void: 指的是函数类型,而且该函数没有返回值,第二个void: 表明函数不接受任何参数;
3). 分号表示语句是进行函数声明而不是函数定义。
这一行表明了程序将使用一个名为starbar()且函数类型为void的函数。
(2). starbar()原型置于main()之前;也可将其置于main()之内,可以放置变量声明的任何位置。
(3). starbar()中的变量count是一个局部变量,如果在别的函数声明变量用count来命名也是可以的,不会出现任何冲突。
即:您可以用同一名称的多个单独的,互不相关的变量。
4. 在3中的程序的基础上,将函数变为代有参数的函数:
#include<stdio.h>
#include<string.h>
#define NAME "GIGATHINK, INC." //为strlen()提供原型
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Magaplis.CA 94904"
#define WIDTH 40
#define SPACE ' '
void show_n_char(char ch, int num);//声明函数原型
int main(void)
{
int spaces;
show_n_char('*', WIDTH);//使用常量作为参数
putchar('\n');
show_n_char(SPACE, 12);//使用常量作为参数
printf("%s\n", NAME);
spaces = (WIDTH - strlen(ADDRESS))/2;
show_n_char(SPACE, spaces);
printf("%s\n", ADDRESS);
show_n_char(SPACE, (WIDTH - strlen(ADDRESS))/2);
printf("%s\n", PLACE);
show_n_char('*', WIDTH);
putchar('\n');
return 0;
}
//show_n_char()定义
void show_n_char(char ch, int num)//定义函数
{
int count;
for(count = 1; count <= num; count++)
{
putchar(ch);
}
}
程序输出如下:
程序解释与评价:
(1). void show_n_char(char ch, int num); 这一步可以写成void show_n_char(char, int )。这是因为在原型中使用变量名并没有实际地创建变量。只是说明char代表了一个char类型变量,以此类推。
(2). 实际参数和形式参数:
(3). 函数声明和函数定义:
函数声明:只是将函数类型告诉编译器;
函数定义:函数实现实际代码。