第12讲 编译预处理和数组的应用
更新时间:2023-03-20 16:46:02 阅读量: 实用文档 文档下载
- 中炮开局第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讲 编译预处理和数组的应用03-20
邹城市第一中学2022-2022学年下学期高二期中数学模拟题04-15
三河口供电所反事故演习及控制措施07-27
注水井深部调剖技术研究现状及发展趋势08-11
江苏省精神文明建设指导委员会07-06
新人教版小学三年级英语下册第二单元教案09-18
达旗六中杨帅 - 七年级下册教案06-01
中国石油大学(华东)石大在线2015春季学期《大学英语2》在线作业03-08
废塑料综合利用行业规范03-11
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 预处理
- 数组
- 编译
- 应用
- 百草益寿中国长寿第一品牌
- 证券法试题 大学经济法概论考试复习
- 基于MC912D60AMPV8的汽车CAN总线节点设计
- 2011年3月全国计算机等级考试三级网络技术笔试真题(编辑并且排版 直接打印即可)
- 新人教版小学数学五年级上册第七单元《数学广角—植树问题》教材分析及归纳总结
- 中国经典诗词名句精华版
- 写字楼地下停车场管理规定
- 企业资源计划ERP期末考试A卷-(含答案卷)
- 宿舍关系调查问卷
- 质量守恒定律(计算)
- 探究湖北地方戏曲_湖北汉剧_金姚
- 大企业应建立税务风险管理制度
- 实施高中物理自主学习教学模式的体会
- 2013年12月下旬系统集成项目经理继续教育D组考试真题整理(含答案2014-3-26)
- 第三章 纯流体的热力学性质(应化班)
- 春韵-亚文初中作文精选
- 人民币名义汇率、实际汇率、名义有效汇率和实际有效汇率对中国出口总额和进口总额的影响
- 财务经济效益分析报告
- 咨询工程师继续教育城市道路答案
- 一期园区突发性应急预案