第12讲 编译预处理和数组的应用
时间:2025-04-21
时间:2025-04-21
第12讲 编译预处理和数组的应用一、编译预处理1、宏定义2、文件包含
二、数组的应用1、排序 2、查找
一、宏定义: (P93)1、概念: 用标识符来表示一个字符串,标识符叫宏名。 2、无参宏定义 1)无参宏定义的一般格式: #define 标识符 字符串 例如:#define PI 3.14159 2)作用: 在宏定义之后,凡是该标识符出现的地方用对应 的字符串来代替。 上面的定义之后,凡是PI都用3.14159来代替。
例 输入半径,计算以该半径为圆的周长与圆面积、
球的体积与表面积。#include <stdio.h> #define PI 3.14159 void main( ) { float r, yzc,ymj,qbmj,qtj; scanf("%f",&r); yzc=2*PI*r; ymj=PI*r*r; qbmj=4*PI*r*r; qtj=4*PI*r*r*r/3; printf("%f,%f,%f,%f\n",yzc,ymj,qbmj,qtj); }
3、带参数的宏定义 (P94)
1)带参宏定义的一般格式: #define 标识符(参数表) 字符串 例如:#define ADD(x,y) x+y2)作用:
在宏定义之后,凡是该标识符出现的地方用对应 的字符串来代替,参数也作相应的替换。上面的定义之后,程序中如果出现ADD(4,5),则 用 4+5 来代替,出现ADD(a,b),则用 a+b 来代替。
写出下面程序的结果。 #include <stdio.h> #define PI 3.14159 #define AREA(r) PI*r*r
执行结果:
void main( ) { float x,s; x=10.0; s=AREA(x); printf("s=%.1f\n",s); }
s=314.2
写出下面程序的结果。
执行结果:
#include <stdio.h> #define ADD(x,y) x+y #define MAX(x,y) x>y?x:y
c=5
d=5
w=-0.2 z=5.6
void main( ) { int a=4,b=5,c,d; c=ADD(a,b); d=MAX(a,b); printf("c=%d\td=%d\n",c,d); float w,z; w=ADD(5.6,-5.8); z=MAX(5.6,-5.8); printf("w=%.1f\tz=%.1f\n",w,z); }
写出下面程序的结果。
#include <stdio.h> #define MUL(x,y) x*y
执行结果: m1=12
m2=29 void main( ) { int a=3,b=4,c=5,d=6,m1,m2; m1=MUL(a,b); m2=MUL(a+b,c+d); printf("m1=%d\n",m1); printf("m2=%d\n",m2); }
修改方法1:
执行结果: #include <stdio.h> #define MUL(x,y) (x)*(y) m1=12 m2=77
void main( ) { int a=3,b=4,c=5,d=6,m1,m2; m1=MUL( a , b ); m2=MUL( a+b , c+d ); printf("m1=%d\n",m1); printf("m2=%d\n",m2); }
修改方法2:
执行结果: #include <stdio.h> #define MUL(x,y) x*y m1=12 m2=77
void main( ) { int a=3,b=4,c=5,d=6,m1,m2; m1=MUL(a,b); m2=MUL( (a+b) , (c+d) ); printf("m1=%d\n",m1); printf("m2=%d\n",m2); }
二、文件包含 (P96) 1、 文件包含是C语言的一个重要功能,其作用是将 另外一个文件的内容包含进来。C语言使用#include 来实现,命令格式:#include "文件名" #include <文件名> 例如: #include "stdio.h" #include < stdio.h>
2、文件包含通常用来解决程序使用C的库函数和 公共符号常量的问题。例如:sqrt()函数、EOF。
3、 两种格式的区别
#include “文件名” 表示先在源程序文件的当前 目录下查找文件,如果当前目录下未找到文件再到包 含目录下查找。#include <文件名> 表示只在包含目录下查找
。 包含目录是编译系统的一个参数,在VC 6.0下通 过“工具”菜单中的“选项”、“目录”来查询与设 置,而在DEV C++下通过“工具”菜单中的“编译选 项”、“目录”、“C包含文件”来查询与设置。
三、数组的应用 ( P114 ) 数组的应用非常广泛,主要包括统计、排序与查 找等方面。例题1:输入10个学生的考试成绩,统计高于平 均分的学生人数。 思路:程序设计分三步 1)输入10学生的考试成绩,并计算总分数; 2)计算平均分;
3)统计高于平均分的人数。
参考程序:
#include <stdio.h> #define N 3 void main( ) { int i; float a[N],s,aver; for(i=0,s=0; i<N; i++) { scanf("%f",&a[i]);aver=s/N; for(i=0,s=0; i<N; i++) if ( a[i]>aver) s++; printf("%.0f\n",s); }
s+=a[i]; }
例2 顺序查找:在一些整数 2,3,1,7,5,8,9,0,4,6中查 找某个元素x是否出现。 #include <stdio.h> int main() { int a[10]={2,3,1,7,5,8,9,0,4,6}; int x,i; scanf("%d",&x); for (i=0;i<10; i++) if ( a[i]==x ) break; if (i<10) printf("%d\n",i+1); else printf("No found\n"); }
例3 二分查找。在一些整数 2,3,5,7, 8,9,10,14,16中查 找某个元素x是否出现。#include <stdio.h> int main() { int a[10]={ 2,3,5,7, 8,9,10,14,16,20 }; int x, mid, low=0, high=9; scanf("%d",&x); while ( low<=high ) { mid=(low+high)/2; if ( a[mid]==x ) { printf("%d\n",mid+1); break; } if ( a[mid]>x ) high=mid-1; else low=mid+1; } if ( low>high ) printf("No found\n"); }
例4 选择排序。在一些整数 8,9,2,7,5,10,1,4,6,3中查 找某个元素x是否出现。#include <stdio.h> #define N 10 int main() { int a[N]={ 8,9,2,7,5,10,1,4,6,3}; int i, j, t; for (i=0; i<N-1; i++) for (j=i+1; j<N; j++) if ( a[i]>a[j] ) { t=a[i]; a[i]=a[j]; a[j]=t; } for (i=0; i<N; i++) printf("%5d",a[i]); }
例5 改进的选择排序。在一些整数 8,9,2,7,5,10,1,4,6,3 中查找某个元素x是否出现。#include <stdio.h> #define N 10 int main() { int a[N]={ 8,9,2,7,5,10,1,4,6,3 }, i, j, t, k; for (i=0; i<N-1; i++) { k=i; for (j=i+1; j<N; j++) if ( a[k]>a[j] ) k=j; t=a[i]; a[i]=a[k]; a[k]=t; } for (i=0; i<N; i++) printf("%5d",a[i]); }
例6 猴子选大王。n只猴子围成一圈,每次从第1只开 始报数,凡是报道3者退出圈子。最后留在圈子中的猴 子为大王。输入n,输出猴子出圈的序号。 解题思路:
1)用数组元素的下标作为猴子的序号0--n-1,数组的 …… 此处隐藏:2363字,全部文档内容请下载后查看。喜欢就下载吧 ……
下一篇:第 3 章 记表备查