C程序设计
----教学过程篇预处理命令
预处理命令不是 C程序本身的组成部分,不能直接对其进行编译。
一般是在程序编译之前,根据预处理命令对程序进行相应的处理,然后再将处理后的程序进行编译例如,#define N 10为预处理命令,在程序编译之前,将所有程序中出现 N的地方全部变成 10之后,再进行编译预处理命令
C语言提供的预处理功能主要有三种
1.宏定义:用宏定义命令来实现
2.文件包含:用文件包含命令来实现
3.条件编译:用条件编译命令来实现一般地,预处理命令是以符号,#”
开头的预处理命令
宏定义一、不带参数的宏定义用一个指定的标识符号来代表一个字符串格式:
#define 标识符号 字符串在预编译处理时,将程序中所有的标识符用字符串代替,其中标识符也称为 宏名,替换过程成为 宏展开预处理命令(程序一)
#include <stdio.h>
#include <stdlib.h>
#define N 3.14
main()
{
float r,result;
printf("请输入圆的半径,\n");
scanf("%f",&r);
result=N*r*r;
printf("圆的面积是,%3f\n",result);
system("pause");
}
预处理命令
关于不带参数的宏定义的说明:
1.宏名一般用大写字母表示,也可用小写字母表示。但是如果宏名用的是大
(小)写字母,则程序中使用宏名时也必须是对应的大(小)写字母
2.程序中多处出现相同的字符串或者是变量,则可以使用宏名,这样不容易出错,并且程序修改也方便预处理命令
3.宏定义仅仅做简单的字符串替换,不做正确性检查。
例如,#define N 3;14
定义中将小数点写成了分号,但预定义处理时,仍然会将内容带入,而不做错误检查
4.宏定义不是 C语句,所以定义行末尾不需要加分号预处理命令
5,#define 命令出现在函数的外面,其作用范围是从定义处到源文件结束处
6.可以用 #undef命令来终止宏定义的作用域
7.宏定义可以层层置换例如,#define r 5
#define N 3.14
#define s N*r*r
预处理命令
8,程序中用双撇号括起来的字符串内的字符,即使有与宏名重名的字符,也不替换
9,宏定义只做字符替换,不分配内存空间预处理命令
带参数的宏定义格式,# define v(r) 4*3.14*r*r*r/3
替换方法:
从左向右来替换,凡是出现宏定义形参的地方都用实参来替换,不是宏定义的形参的字符则保留下来预处理命令(程序二)
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) a>b?a:b
main()
{
int x,y,result;
printf("please input two numbers:\n");
scanf("%d%d",&x,&y);
result=max(x,y);
printf("the max number is,%3d\n",result);
system("pause");
}
预处理命令关于带参数宏定义的说明
1.带参的宏的展开只是将语句中的宏名后面括号中的实参字符串代替命令行中的形参例如,#include <stdio.h>
#define add(a) a*3.14
main()
{
int x,y,result;
result=add(x+y);
}
预处理命令预处理后的结果为 x+y*3.14
如果将,result=add(x+y);
改为,result=add(( x+y) );
则预处理后的结果为 (x+y)*3.14
两种写法结果完全不一样预处理命令
2.在宏定义时,宏名与参数的括号间不要加空格,否则空格后的字符都将作为替代字符串的一部分例如,#define s (a) a*3.14
表示的不是带参宏定义 S(a),而是表示不带参宏定义 s的替代字符串为,(a)
a*3.14
意义完全不同预处理命令
,文件包含”处理一个源文件可以将另外一个源文件的全部内容包含进来,一般通过 #include
命令来实现“文件包含”操作格式:
#include,文件名”
或:
#include <文件名 >
预处理命令
“文件包含”命令是在进行预处理的时候,将 #include中包含的文件全部复制插入到 #include位置,然后将包含了其它文件后的原文件作为一个源程序文件单位进行处理预处理命令( maxarraynum.h)
int maxarraynum(int a[],int n)
{
int i,temp=a[0];
for(i=1;i<n;i++)
{
if(a[i]>temp)
{
temp=a[i];
}
}
return(temp);
}
预处理命令 (input.h)
#include <stdio.h>
#include <stdlib.h>
void input(int a[],int n)
{
int i;
printf("please input %d numbers:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
}
预处理命令 (主程序 )
#include <stdio.h>
#include <stdlib.h>
#include <maxarraynum.h>
#include <input.h>
main()
{
int a[10],maxnum,i;
input(a,10);
maxnum= maxarraynum(a,10);
printf("the max num is %d\n",maxnum);
system("pause");
}
预处理命令
使用方法先分别生成两个文件 maxarraynum.h,input.h。 然后再将两个程序的原文件存放到指定的安装路径下的
include文件夹中即可
注意事项
1.一个 #include命令只能指定一个被包含文件,如果要包含 n个文件,要用 n个 #include
命令
2.如果文件 1包含文件 2,而文件 2中要用到文件 3的内容,则在文件 1中用两个 include
命令分别包含文件 2和 3,并且文件 3应出现在文件 2之前预处理命令
3,在一个被包含文件中又可以包含另一个被包含文件,文件的包含可以嵌套
4,#include命令中,文件名可以用双撇号或尖括号括起来。
如果是在尖括号中括起来的,则系统到 include文件夹中寻找相关文件如果是用双撇号括起来的,则系统首先当前目录中找相关文件,然后在到
include文件夹中查找文件预处理命令
条件编译一般情况下,源程序中所有的行都参加编译,但是有时需要只对其中一部分内容在满足一定条件下才进行编译,这就是条件编译。
预处理命令条件编译的形式:
1,#ifdef 标识符程序段 1
#else
程序段 2
#endif
其中 #else可以省略掉预处理命令
2.#ifndef 标识符程序段 1
#else
程序段 2
#endif
3.#if 表达式程序段 1
#else
程序段 2
#endif
----教学过程篇预处理命令
预处理命令不是 C程序本身的组成部分,不能直接对其进行编译。
一般是在程序编译之前,根据预处理命令对程序进行相应的处理,然后再将处理后的程序进行编译例如,#define N 10为预处理命令,在程序编译之前,将所有程序中出现 N的地方全部变成 10之后,再进行编译预处理命令
C语言提供的预处理功能主要有三种
1.宏定义:用宏定义命令来实现
2.文件包含:用文件包含命令来实现
3.条件编译:用条件编译命令来实现一般地,预处理命令是以符号,#”
开头的预处理命令
宏定义一、不带参数的宏定义用一个指定的标识符号来代表一个字符串格式:
#define 标识符号 字符串在预编译处理时,将程序中所有的标识符用字符串代替,其中标识符也称为 宏名,替换过程成为 宏展开预处理命令(程序一)
#include <stdio.h>
#include <stdlib.h>
#define N 3.14
main()
{
float r,result;
printf("请输入圆的半径,\n");
scanf("%f",&r);
result=N*r*r;
printf("圆的面积是,%3f\n",result);
system("pause");
}
预处理命令
关于不带参数的宏定义的说明:
1.宏名一般用大写字母表示,也可用小写字母表示。但是如果宏名用的是大
(小)写字母,则程序中使用宏名时也必须是对应的大(小)写字母
2.程序中多处出现相同的字符串或者是变量,则可以使用宏名,这样不容易出错,并且程序修改也方便预处理命令
3.宏定义仅仅做简单的字符串替换,不做正确性检查。
例如,#define N 3;14
定义中将小数点写成了分号,但预定义处理时,仍然会将内容带入,而不做错误检查
4.宏定义不是 C语句,所以定义行末尾不需要加分号预处理命令
5,#define 命令出现在函数的外面,其作用范围是从定义处到源文件结束处
6.可以用 #undef命令来终止宏定义的作用域
7.宏定义可以层层置换例如,#define r 5
#define N 3.14
#define s N*r*r
预处理命令
8,程序中用双撇号括起来的字符串内的字符,即使有与宏名重名的字符,也不替换
9,宏定义只做字符替换,不分配内存空间预处理命令
带参数的宏定义格式,# define v(r) 4*3.14*r*r*r/3
替换方法:
从左向右来替换,凡是出现宏定义形参的地方都用实参来替换,不是宏定义的形参的字符则保留下来预处理命令(程序二)
#include <stdio.h>
#include <stdlib.h>
#define max(a,b) a>b?a:b
main()
{
int x,y,result;
printf("please input two numbers:\n");
scanf("%d%d",&x,&y);
result=max(x,y);
printf("the max number is,%3d\n",result);
system("pause");
}
预处理命令关于带参数宏定义的说明
1.带参的宏的展开只是将语句中的宏名后面括号中的实参字符串代替命令行中的形参例如,#include <stdio.h>
#define add(a) a*3.14
main()
{
int x,y,result;
result=add(x+y);
}
预处理命令预处理后的结果为 x+y*3.14
如果将,result=add(x+y);
改为,result=add(( x+y) );
则预处理后的结果为 (x+y)*3.14
两种写法结果完全不一样预处理命令
2.在宏定义时,宏名与参数的括号间不要加空格,否则空格后的字符都将作为替代字符串的一部分例如,#define s (a) a*3.14
表示的不是带参宏定义 S(a),而是表示不带参宏定义 s的替代字符串为,(a)
a*3.14
意义完全不同预处理命令
,文件包含”处理一个源文件可以将另外一个源文件的全部内容包含进来,一般通过 #include
命令来实现“文件包含”操作格式:
#include,文件名”
或:
#include <文件名 >
预处理命令
“文件包含”命令是在进行预处理的时候,将 #include中包含的文件全部复制插入到 #include位置,然后将包含了其它文件后的原文件作为一个源程序文件单位进行处理预处理命令( maxarraynum.h)
int maxarraynum(int a[],int n)
{
int i,temp=a[0];
for(i=1;i<n;i++)
{
if(a[i]>temp)
{
temp=a[i];
}
}
return(temp);
}
预处理命令 (input.h)
#include <stdio.h>
#include <stdlib.h>
void input(int a[],int n)
{
int i;
printf("please input %d numbers:\n",n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
}
预处理命令 (主程序 )
#include <stdio.h>
#include <stdlib.h>
#include <maxarraynum.h>
#include <input.h>
main()
{
int a[10],maxnum,i;
input(a,10);
maxnum= maxarraynum(a,10);
printf("the max num is %d\n",maxnum);
system("pause");
}
预处理命令
使用方法先分别生成两个文件 maxarraynum.h,input.h。 然后再将两个程序的原文件存放到指定的安装路径下的
include文件夹中即可
注意事项
1.一个 #include命令只能指定一个被包含文件,如果要包含 n个文件,要用 n个 #include
命令
2.如果文件 1包含文件 2,而文件 2中要用到文件 3的内容,则在文件 1中用两个 include
命令分别包含文件 2和 3,并且文件 3应出现在文件 2之前预处理命令
3,在一个被包含文件中又可以包含另一个被包含文件,文件的包含可以嵌套
4,#include命令中,文件名可以用双撇号或尖括号括起来。
如果是在尖括号中括起来的,则系统到 include文件夹中寻找相关文件如果是用双撇号括起来的,则系统首先当前目录中找相关文件,然后在到
include文件夹中查找文件预处理命令
条件编译一般情况下,源程序中所有的行都参加编译,但是有时需要只对其中一部分内容在满足一定条件下才进行编译,这就是条件编译。
预处理命令条件编译的形式:
1,#ifdef 标识符程序段 1
#else
程序段 2
#endif
其中 #else可以省略掉预处理命令
2.#ifndef 标识符程序段 1
#else
程序段 2
#endif
3.#if 表达式程序段 1
#else
程序段 2
#endif