第12讲 编译预处理和数组的应用

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……

第12讲 编译预处理和数组的应用.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219