第12讲 编译预处理和数组的应用
更新时间:2023-08-09 13:08:01 阅读量: 综合文库 文档下载
- 中炮开局第12讲推荐度:
- 相关推荐
第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,数组的值为1表示猴子在圈中,数组的值为0表示猴 子不在圈中, ; 2)开始数组元素的值都设置成1; 3)从下标为0的数组元素开始计数,如果值部位 0,加1。如果加到了3,该猴子出圈。
#include <stdio.h> 执行结果: #define N 100 int main() 输入:5 { int a[N],i,n,k,count; 输出:2 0 4 1 3 scanf("%d",&n); for (i=0; i<n; i++) a[i]=1; count=0; i=-1; while (count<n-1) { k=0; while (k<3) { i=(i+1)%n; if ( a[i]!=0 ) k++; } if (k==3) { printf("%5d",i); a[i]=0; } } }
例7 n阶
魔方阵。将1-n2放到nXn 的方阵中,使得它 的每一行、每一列和对角线只和都相等。下面是一个3 阶方阵。
8 3 4
1 5 9
6 7 2
解题思路: 1)将1放到第一行正中间一列; 2)下一个数放在当前位置的上一行、下一列; 3)如果上一行、下一列已经有内容,则放到当前 列的下一行。
#include <stdio.h> #define N 15 int main() { int a[N][N]={0}, row, col, x, k; scanf("%d",&x); row=0; col=(x-1)/2; a[row][col]=1; for (k=2; k<=x*x; k++) //计算方阵 { if ( a[(row-1+x)%x][(col+1)%x]==0 ) { row=(row-1+x)%x; col=(col+1)%x; } else row=(row+1)%x; a[row][col]=k; } for (row=0; row<x; row++) //显示方阵 { for (col=0; col<x; col++) printf("%5d",a[row][col]); printf("\n"); } }
正在阅读:
第12讲 编译预处理和数组的应用08-09
63家跨国制药企业简介12-18
2011中考模拟(10)06-02
充电电池的性能指标12-19
VB习题及答案汇总11-27
基于ANSYS的相变储能建筑材料温度响应特性的研究08-08
三年级上册语文教案-2《吹泡泡》语文S版09-27
IELTS 11, TEST 3, WRITING TASK 1 sample answer BAND 7.504-26
工程造价概论完整110-25
雨水径流控制方案15.12.2409-21
- 高一物理牛顿运动定律全套学习学案
- 水处理一级反渗透加还原剂亚硫酸氢钠后为什么ORP会升高
- 毕业设计(论文)-正文董家口 - 图文
- 荣盛酒店经营管理公司录用通知及入职承诺书II
- 第二讲 大学英语四级快速阅读技巧
- 质量管理体系文件(2015年委托第三方医药物流配送企业专用版本)
- 214071收款办法
- 苏轼对《文选》选文的评价
- 《诊断学基础B》1-8作业
- 广东省东莞市高一数学下学期期末教学质量检查试题
- 海南电网公司VIS推广应用管理办法
- 红星照耀中国习题
- 苏教版小学语文六年级上册期末复习资料之生字词整理
- 局域网组建与应用—王向东
- 税务稽查内部管理文书样式
- 环保社会实践调查表
- 九年级思品第一单元复习
- 2016年全国注册咨询工程师继续教育公路路线设计规范试卷
- 毕业设计-青岛港董家口港区防波堤设计
- 撞背锻炼方法与益处
- 预处理
- 数组
- 编译
- 应用
- 中国经典诗词名句精华版
- 小数乘法的简便运算信息窗3(二)练习课_
- 实施高中物理自主学习教学模式的体会
- 阳 光 城:关于召开2011年第四次临时股东大会的提示性公告 2011-03-23
- 对高中政治新课改实施的理性思考
- 主轴单元设计
- 钻孔结构灌注桩施工应对方案
- 天府新区最新发展情况
- 温胆汤加减治疗非酒精性脂肪肝疗效观察
- 运筹学 各章习题
- 第三章 纯流体的热力学性质(应化班)
- 水利工程施工机械台时费定额
- 探究湖北地方戏曲_湖北汉剧_金姚
- 七个痴呆量表综合
- 戴德梁行物业培训-提高物管服务工作技巧
- 二手车买卖协议范本
- 北师大版四年级数学解决问题练习题
- Hygeia城镇职工基本医疗保险管理信息系统(v1.1)
- 云浮市新兴县英语五年级上册期末专题复习:语法填空
- 茶文化知识竞赛