目的:在一行打印40个星号的函数,并打印表头程序。
代码:
#include <stdio.h>
#define NAME "GIGATHINK,INC."
#define ADDRESS "101 Megabuck Plaza"
#define PLACE "Megapolis, 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.宏:
首先解释一下#define NAME "GIGATHINK,INC."
,这里我们叫做宏,宏的作用主要为替换,将后面的内容用前面来进行替换。所以该程序中所有NAME的内容都被翻译成为GIGATHINK,INC.。
宏也可以定义为:#define M (x*y)//用M代表x*y
!!一般我们为了定义宏时,为了区别其他变量,要用大写字母,但是也可以用小写字母,只不过不推荐用小写字母。
宏的优势:
在程序中如果我们未定义宏,如果修改时就需要一个一个修改,效率十分低下,如果我们使用宏进行编辑,修改时只需要修改宏对应的值便可以修改程序内容,效率提升。
2.函数原型与定义函数
函数原型
函数原型应当在使用函数前定义,告诉编译函数类型,并且要在函数调用前声明。
函数调用
函数调用表明在这里使用函数。
定义函数
定义函数表明怎么执行。
在本程序中,第一个void starbar(void)为函数原型,应当在调用前声明。在后面的starbar()中为调用函数,调用后面的定义函数。第二个void starbar(void)为定义函数,函数定义当调用starbar()时,输出40个“*”。
注意:
- 函数声明是要分号,需要写在调用之前,定义是没有分号的
- 当函数调用无需返回值时,用void定义函数,当需要返回值时,函数接收的类型应当与与返回类型保持一致。
例如:
int imin(int n,int m);
int main (void)
{
.
.
.
}
int imin(int n, int m)
{
int min;
if (n < m);
min = n;
else
min = m;
return min;
}
因为我的返回值min是int类型,所以定义时imin时应当定义为int类型。
- 定义要求每个变量都需要来声明类型
void dibs (int x,y,z)//无效的定义
void dibs(int x,int y,int z)//有效的定义
- 函数头中的starbar()没有加分号,这是告诉编译器正在定义starbar()。而不是调用或声明函数原型。
以上是我的总结,希望对大家有所收获