2- C程序设计基础_第1页
2- C程序设计基础_第2页
2- C程序设计基础_第3页
2- C程序设计基础_第4页
2- C程序设计基础_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教学内容: 第1章:C语言语法基础第2章:C程序设计基础第3章:利用数组处理同类型的批量数据第4章:利用函数实现模块化程序设计第5章:灵活使用指针第6章:结构体、共用体、枚举类型及其应用第7章:常用的三种线性数据结构第8章:利用文件进行数据管理第9章:嵌入式技术基础实践方法C语言程序设计第2章C程序设计基础【学习内容】2.1预备知识

2.2顺序结构程序设计

2.3选择结构程序设计

2.4循环结构程序设计

2.5预处理命令2.6三种结构程序设计的综合应用【学习目标】1.熟悉算法及其表示方法;

2.熟悉C语句及其分类;

3.掌握数据输入输出函数的应用方法;

4.掌握顺序、选择、循环3种结构程序设计方法;

5.掌握预处理命令的应用方法。

本章首先介绍程序设计的预备知识,然后详细介绍顺序结构、选择结构和循环结构这3种基本结构的程序设计方法,最后给出预处理命令的应用方法。

计算机程序

=数据结构

+算法

+程序代码2.1预备知识2.1.1算法及流程图表示1、算法的概念

为解决问题而采用的方法和步骤称为算法。对于同一个问题可以有不同的算法,应尽量选择占用内存小、执行速度快的算法。2、算法的5个特征

(1)有穷性:一个算法应包含有限的操作步骤,且每个步骤都能在有限时间内完成。

(2)确定性:算法中的每一个步骤都应该是确定的,而不应模糊和具有二义性。

(3)可行性:算法的每一个步骤都是切实可行的。

(4)有输入:一个算法可有零个或多个输入。

(5)有输出:一个算法必须有一个或多个输出。3、算法的流程图表示

常用的算法表示方法:自然语言描述法、流程图法、计算机语言描述法。在此,只介绍最常用的流程图法。2.1.1算法及流程图表示2.1预备知识2.1.2程序的三种基本结构1、顺序结构

按照程序语句书写的顺序一步一步依次执行。

2.1预备知识

根据条件判断的结果,从多种路径中选择其中的一种路径执行。

2、选择结构

将一组操作重复执行多次。有“当型”和“直到型”两种循环结构。

2.1.2程序的三种基本结构3、循环结构2.1预备知识当型循环结构

先判断后执行直到型循环结构

先执行后判断1、声明语句:对变量、函数、类型(如结构体等类型)等进行声明例如:

变量声明语句:inta,b,s;

变量声明语句:inti=3,j=3,k=3,x=3;函数声明语句:intadd(intx,inty);在C语言中,分号是语句的结束标志。C语句分为6类。2.1.3C语句分类2、表达式语句例如:

a=3(赋值表达式)

a=3;

(赋值语句)i++(自增1表达式)i++;

(自增1语句)2.1预备知识3、函数调用语句:函数调用表达式加分号例如:

printf("ThisisamyfirstProgram.\n");

add(a,b);

2.1.3C语句分类4、控制语句:控制程序的流程(1)条件语句:if语句、switch语句(3)转向语句:break语句、continue语句、return语句、goto语句(2)循环语句:while语句、do…while语句、for语句2.1预备知识

把多条语句用花括号括起来组成的一个语句,称为复合语句。例如:5、复合语句2.1.3C语句分类2.1预备知识

例如:下面的for循环体是空语句,在嵌入式软件设计中常用作软件延时。

for(i=10000;i>0;i--) {

;

//空语句

}6、空语句:只有一个分号,什么也不执行2.2顺序结构程序设计1、数据输入输出的在C语言中的实现2.2.1数据输入输出函数

(1)从计算机内存向输出设备传送数据称为输出,从输入设备向计算机内存传送数据称为输入。

(2)C语言本身不提供输入输出语句,而在C标准函数库中提供了一些输入输出函数,例如printf函数和scanf函数,分别用于数据的输出和输入。

(3)使用标准输入输出库函数时,要用预处理命令#include将其对应的头文件“stdio.h”包含到源文件中: #include<stdio.h>或

#include"stdio.h"2.2顺序结构程序设计2、字符输出函数——putchar()

一般形式:putchar(c)

●向显示器输出字符变量c对应的字符。2.2.1数据输入输出函数【例2.1】输出一个字符

。#include

<stdio.h>

//包含输入输出库函数头文件intmain(void){chara,b,c,d;

a='N';b='U';c='A';d='A';

putchar(a);putchar(b);putchar(c);putchar(d);putchar('\n');

//在屏幕上显示字符}2.2顺序结构程序设计3、字符输入函数——getchar()

通常将键盘上输入的字符赋给一个字符变量,构成赋值语句。如:

charc; c=getchar();2.2.1数据输入输出函数

注意:getchar函数只能接收一个字符,输入数字也按字符处理。输入多个字符时,计算机只接收第一个字符。【例2.2】从键盘输入一个字符,并在显示屏显示

。#include<stdio.h>

//包含输入输出库函数头文件intmain(void){

charc;printf("请输入一个字符:");//原样输出一串字符,增加人机互动性

c=getchar();

//从键盘输入一个字符

putchar(c);

//在屏幕上显示输入的字符putchar('\n');

//换行

}putchar(getchar());//在屏幕上显示输入的字符

2.2顺序结构程序设计4、格式输出函数——printf()●向显示器输出若干个任意类型的数据。2.2.1数据输入输出函数一般形式:printf(格式控制字符串,输出列表)例如: printf("%d,%c\n",i,c)

②原样输出的字符,在显示中起提示作用。(2)输出列表:是需要输出的一些数据,可以是常量、变量或表达式。

多个数据之间要用逗号隔开。

括号内包含两部分:(1)格式控制字符串:由双撇号括起来的一个字符串,它包含两种信息。

①由%开头的格式符,用于指定数据的输出格式。例如,%d:以十进制形式输出带符号整数;%c:输出单个字符;%x:以十六进制形式输出无符号整数;%s:输出字符串;%f:以小数形式输出实数;%e:以指数形式输出实数。

使用printf函数时,要求格式控制字符串中必须含有与输出项一一对应的格式符,并且类型要匹配。printf函数也可以没有输出项。2.2顺序结构程序设计4、格式输出函数——printf()2.2.1数据输入输出函数#include<stdio.h>//包含输入输出库函数头文件intmain(void){inta=5,b=-1;floatc=1.2;

chard='a';printf("a=%d,b=%d,c=%f,d='%c'\n",a,b,c,d);//依次按指定的格式将多个数据输出

printf("字母a的ASCII码:%d\n",d);//以十进制格式输出字母a的ASCII码printf("字母a的ASCII码:%x\n",d);//以16进制格式输出字母a的ASCII码printf("输出字符串:%s\n","CHINA");//输出字符串"CHINA"printf("今年的增长率=");//原样输出一串字符printf("50%%\n");//输出50%}【例2.3】printf函数使用:格式化输出数据。练习:【例2.4】printf函数的使用:指定输出宽度、小数位数和左端对齐。2.2顺序结构程序设计5、格式输入函数——scanf()2.2.1数据输入输出函数

一般形式:scanf(格式控制字符串,地址列表)

作用:按用户指定的格式从键盘把数据输入到指定的变量地址中。

地址列表:由若干个地址组成的列表。变量的地址:地址运算符“&”后跟变量名。多个地址之间要用逗号隔开。

格式控制字符串的作用与printf函数类似。例如,%d:以十进制形式输入带符号整数;%c:输入单个字符;%x:以十六进制形式输入无符号整数;%s:输入字符串;%f(%lf):以实数形式输入单精度(双精度)实数。2.2顺序结构程序设计5、格式输入函数——scanf()2.2.1数据输入输出函数【例2.5】用scanf函数输入多个数值数据。#include<stdio.h>//包含输入输出库函数头文件intmain(void){inti,j;

floatk;

doublex;

printf("请输入两个整数和两个实数:\n");//提示输入4个数据

scanf("%d%d%f%lf",&i,&j,&k,&x);//输入4个数据分别赋给4个变量

printf("%d,%d,%f,%f\n",i,j,k,x);//将4个变量的数值输出}

说明:用scanf函数一次输入多个数值或多个字符串时,在两个数据之间可用空格或换行符或Tab符作分隔。①用空格作分隔

②用换行符作分隔③用Tab符作分隔2.2顺序结构程序设计5、格式输入函数——scanf()2.2.1数据输入输出函数

当输入数据的类型与scanf函数中的格式符指定的类型不一致时,系统认为该数据结束。【例2.6】scanf函数输入多个不同类型的数据

。#include<stdio.h>intmain(void){ inti;charj; floatk;printf("请输入1个整数、1个字符和1个实数:\n");

//提示输入3个数据

scanf("%d%c%f",&i,&j,&k);//输入3个数据分别赋给变量i、j、k

printf("%d,%c,%f\n",i,j,k);//将变量i、j、k的数据输出

}2.2顺序结构程序设计5、格式输入函数——scanf()2.2.1数据输入输出函数#include<stdio.h>intmain(void){chari,j,k;

printf("请输入3个字符:\n");//提示输入3个数据

scanf("%c%c%c",&i,&j,&k);//输入3个数据分别赋给变量i、j、k

printf("%c,%c,%c\n",i,j,k);//将变量i、j、k的数据输出}用scanf函数输入字符时,系统将输入的空格、换行符作为有效字符。【例2.7】scanf函数输入多个字符。2.2顺序结构程序设计2.2.2顺序结构程序设计应用【例2.9】将输入的两个整数交换,然后再输出这两个整数。ABABABAB

两名同学互换位置,如何实现?

需要借助一个临时变量实现两数的交换。//==================================//程序功能:输入两个整数,交换后再输出。//设计日期:2020-03-25//==================================#include<stdio.h>//包含头文件intmain(void){intx,y,t;//定义三个变量

printf("请输入两个整数(用空格隔开):");

scanf("%d%d",&x,&y);//输入两个数据给x和y

t=x;x=y;y=t;//将数x和y交换

printf("将输入的两个整数交换之后:");

printf("%d%d\n",x,y);//输出x和y两个数}2.2顺序结构程序设计【例2.10】从键盘输入一个双精度型实数,然后根据需要保留的小数点后的位数进行四舍五入处理,最后输出该实数处理后的数值。#include<stdio.h>#include<math.h>

//包含数学函数库头文件intmain(void){

//(1)定义变量

doublei,j;intn;

//(2)输入相关的数据

printf("请输入一个实数:");

scanf("%lf",&i);

printf("请输入保留小数点后的位数:");

scanf("%d",&n);

//(3)进行四舍五入运算

j=i*pow(10,n);j=j+0.5;

j=(int)j;

j=j/pow(10,n);

//(4)输出处理后的实数值

printf("%f\n",j);}2.2.2顺序结构程序设计应用2.3选择结构程序设计

选择结构程序:根据不同的条件,执行不同的语句(根据不同的条件选择不同的道路)。两种选择语句:if语句和switch语句。1、if语句的3种形式

(1)if基本形式if(表达式)语句#include<stdio.h>intmain(void){inti;

printf("请输入一个整数:");

scanf("%d",&i);

if(i>=0)printf("该数为非负数.\n");}2.3.1if语句及应用【例2.11】用if语句判断输入数据的正负。2.3选择结构程序设计#include<stdio.h>intmain(void){ inti;

printf("请输入一个整数:");

scanf("%d",&i);

if(i>=0)printf("该数为非负数.\n");

elseprintf("该数为负数.\n");}1、if语句的3种形式

2.3.1if语句及应用if(表达式)语句1else语句2(2)if…else基本形式【例2.12】用if…else语句判断输入数据的正负。练习:【例2.13】判断输入的数据是否为0。【例2.14】判断输入的两个数据是否有0。2.3选择结构程序设计1、if语句的3种形式

2.3.1if语句及应用(3)if…else嵌套形式——用于解决多分支问题说明:注意if与else的配对关系。else总是与它上面最近的未配对的if配对。2.3选择结构程序设计

虚线左侧的嵌套结构,还可写成虚线右侧的更加紧凑的形式。1、if语句的3种形式

2.3.1if语句及应用(3)if…else嵌套形式——用于解决多分支问题2.3选择结构程序设计1、if语句的3种形式

2.3.1if语句及应用(3)if…else嵌套形式——用于解决多分支问题【例2.15】根据符号函数,编程实现输入一个x值,输出y值。#include<stdio.h>intmain(void){intx,y;

printf("请输入x的值:");

scanf("%d",&x);

printf("x=%d,y=%d\n",x,y);}if(x<0)y=-1;elseif(x==0)y=0;elsey=1;if(x<0)y=-1;else

if(x==0)y=0;elsey=1;2.3选择结构程序设计2、条件运算符(三目运算符?:)和条件表达式2.3.1if语句及应用条件表达式的一般形式:表达式1?表达式2:

表达式3条件表达式通常用于赋值语句之中。可写为:max=(a>b)?a:b;例如:if(a>b)max=a; elsemax=b;

(2)条件运算符的结合方向是自右至左。

a>b?a:c>d?c:d

等价于a>b?a:(c>d?c:d)

(1)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。因此,max=(a>b)?a:b等价于max=a>b?a:b说明:2.3选择结构程序设计2.3.1if语句及应用2、条件运算符和条件表达式【例2.16】利用条件运算符求两数的最大值。#include<stdio.h>intmain(void){ inta,b,max;

printf("请输入两个整数:");

scanf("%d%d",&a,&b);

max=a>b?a:b;

printf("max=%d\n",max);}【练习】用条件运算符实现:输入两个整数,输出它们的差值(绝对值)。2.3选择结构程序设计【例2.17】输入两个整数,要求按由大到小的顺序输出。3、if语句应用

2.3.1if语句及应用#include<stdio.h>intmain(void){ inta,b,t;printf("请输入两个整数:");scanf("%d%d",&a,&b);if(a<b){

t=a;a=b;b=t;

}

printf("由大到小:%d,%d\n",a,b);}2.3选择结构程序设计【拓展】输入3个整数,要求按由大到小的顺序输出

。3个数进行比较时,实际上需要比较两轮:第1轮,选出三个数中最大的数,赋给变量a;第2轮,在剩余的两个数中选出最大的数,赋给变量b;最后剩下的数最小,赋给变量c。

对多个数进行排序时,仍可采用“选择法”,这将在3.1节详细介绍。

3、if语句应用

2.3.1if语句及应用【思考与实验】

1)输入2个整数,输出较大值和较小值。2)输入4个整数,要求按由小到大的顺序输出。#include<stdio.h>intmain(void){ inta,b,c,t;printf("请输入三个整数:");

scanf("%d%d%d",&a,&b,&c);

if(a<b)

{

t=a;a=b;b=t; }

if(a<c)

{

t=a;a=c;c=t; }

if(b<c)

{

t=b;b=c;c=t; }

printf("由大到小:%d,%d,%d\n",a,b,c);}2.3选择结构程序设计3、if语句应用

2.3.1if语句及应用

4个开关SW1、SW2、SW3、SW4的状态分别由LIGHT1、LIGHT2、LIGHT3、LIGHT4灯指示。如:开关SW1闭合,LIGHT1灯亮;SW1断开,LIGHT1灯灭。【例2.18】嵌入式应用:微控制器MCU实现多路开关状态指示功能。2.3选择结构程序设计3、if语句应用

2.3.1if语句及应用【例2.19】根据输入的课程成绩(整数),判断并输出对应的等级。

输入成绩与输出结果:90~100,优秀;80~89,良好;70~79,中等;60~69,及格;0~59,不及格;其他值,输入有误!#include<stdio.h>intmain(void){intscore;printf("请输入课程成绩(整数):");scanf("%d",&score);

if(score>=90&&score<=100)printf("优秀!\n");

elseif(score>=80&&score<90)printf("良好!\n");

elseif(score>=70&&score<80)printf("中等!\n");

elseif(score>=60&&score<70)printf("及格!\n");

elseif(score>=0&&score<60)printf("不及格!\n");

else

printf("输入有误!\n");}2.3选择结构程序设计2.3.2switch语句及应用

处理多分支选择问题时,可采用if…else嵌套形式,还可采用switch语句。

当switch括号内“表达式”的值与某个case后面“常量表达式”的值相等时,即执行该行对应的语句,后面的break语句可用来终止switch语句的执行。若switch括号内“表达式”的值与所有case后面的“常量表达式”均不相等时,则执行default后面的语句。switch语句的一般形式: 值的类型应为整型或字符型

不能是变量,必须是常量表达式,且必须互不相同

多个case可以共用一组执行语句。

每一组允许有多个语句,可以不用{}括起来。带有[]的部分为可选部分2.3选择结构程序设计【例2.21】用switch语句实现:根据输入的课程成绩(整数),判断并输出对应的等级。

输入成绩与输出结果:90~100,优秀80~89,良好70~79,中等60~69,及格0~59,不及格其他值,输入有误!2.3.2switch语句及应用思考:(1)能否用swtich解决多分支选择结构问题,关键问题是什么?(2)if语句和switch语句有何区别?练习:【例2.20】用switch语句实现:输入一个正整数,输出该整数除以5的余数。

实验:将某个break语句去掉,观察运行结果,体会其作用。#include<stdio.h>intmain(void){intscore;

printf("请输入课程成绩(整数):");

scanf("%d",&score);

if(score>100||score<0)

printf("输入错误!\n");

else

{

switch(score/10)

{

case10:

case9:printf("优秀!\n");

break;

case8:printf("良好!\n");

break;

case7:printf("中等!\n");

break;

case6:printf("及格!\n");

break;

default:printf("不及格!\n");

}

}}2.3选择结构程序设计【例2.22】嵌入式应用:用switch语句实现多路开关状态指示功能(假设不存在多个开关同时闭合的情况)。2.3.2switch语句及应用

4个开关SW1、SW2、SW3、SW4的状态分别由LIGHT1、LIGHT2、LIGHT3、LIGHT4灯指示。如:开关SW1闭合,LIGHT1灯亮;SW1断开,LIGHT1灯灭。2.4循环结构程序设计

在许多问题中需要用到循环控制,即重复执行同种性质的任务。C语言中,最基本的有while语句、do…while语句、for语句。while语句的一般形式:while(循环条件表达式)循环体语句2.4.1while循环结构程序设计【例2.23】用while语句实现1+2+3+

+100的和。#include<stdio.h>intmain(void){inti=1,sum=0;while(i<=100){ sum=sum+i;i++;}printf("sum=%d\n",sum);}思考与实验:1)1+3+5+…+992)2+4+6+…+1003)1+2+3+…+n练习:【例2.24】输入一串字符以#结束,然后输出这串字符。说明:

循环条件表达式一般是关系表达式或逻辑表达式,只要循环条件表达式的值为真(非0),即可继续执行循环体语句。如嵌入式系统软件的主函数一般用while(1)构成无限循环结构。请读者将例2.20程序的执行语句作为while(1)的循环体语句,运行程序并体会循环结构的作用。2.4循环结构程序设计2.4.2do…while循环结构程序设计do…while语句的一般形式:

do

循环体语句

while(表达式);【例2.25】用do…while语句实现1+2+3+…

+100的和。#include<stdio.h>intmain(void){inti=1,sum=0;

do

{

sum=sum+i;

i++;

}while(i<=100);

printf("sum=%d\n",sum);}2.4循环结构程序设计2.4.2do…while循环结构程序设计【例2.26】while和do…while循环的比较。经测试,当输入i<3时,两者运行结果相同;但当输入i≥3时,运行结果则不同。练习:【例2.27】倒序输出一个整数。【例2.28】统计输入的非负整数的位数。#include<stdio.h>intmain(void){ inti;printf("请输入1个整数:");scanf("%d",&i);while(i<3){i++;}printf("i=%d\n",i);}#include<stdio.h>intmain(void){ inti;printf("请输入1个整数:");scanf("%d",&i);do{i++;}while(i<3);printf("i=%d\n",i);}2.4循环结构程序设计2.4.3for循环结构程序设计for语句的一般形式:for(表达式1;

表达式2;

表达式3)循环体语句for语句最常用、最容易理解的应用形式:

for(循环变量赋初值;

循环条件;

循环变量变化)循环体语句2.4循环结构程序设计2.4.3for循环结构程序设计【例2.29】用for语句实现1+2+3+…+100的和。#include<stdio.h>intmain(void){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d\n",sum);}inti=1,sum=0;for(;i<=100;i++)inti,sum;

for(sum=0,i=1;i<=100;i++)思考与实现:1)1+3+5+…+992)2+4+6+…+100 3)1+2+3+…+ninti=1,sum=0;for(;i<=100;){sum=sum+i;i++;}2.4循环结构程序设计2.4.3for循环结构程序设计(2)for(;;)与while(1)等价,表示无限循环。主函数一般为无限循环结构。嵌入式软件设计中常用的两种for语句形式:(1)for循环体可以是空语句,常用于软件延时。例如:

for(i=0;i<1000;i++);或

for(i=1000;i>0;i--);2.4循环结构程序设计2.4.4循环嵌套一个循环体内又包含另一个完整的循环结构,称为循环嵌套。

【例2.30】统计循环次数。练习:【例2.31】输出由星号组成的三角图形。#include<stdio.h>intmain(void){inti,j;//定义两个循环变量intk=0;//存放循环次数

for(i=1;i<=3;i++)

{

for(j=1;j<=4;j++)

k++;

}

printf("循环次数:%d\n",k);}说明:(1)这几行代码是一条语句,因此可以不加{}。但为了程序的规范性和可读性,建议加{}(2)在嵌入式软件设计中,常用此方式实现更长时间的软件延时。【思考与实验】程序执行后,变量i和j的值分别是多少?

i=:j=:k=1112345678910111232423452.4循环结构程序设计break语句和continue语句在循环结构中的控制作用区别:2.4.5break语句和continue语句

break语句可提前结束“整个”循环过程,接着执行循环结构下面的语句。continue语句可提前结束“本次”循环(跳过循环体中下面尚未执行的语句),接着执行下次循环。2.4循环结构程序设计【例2.32】break语句和continue语句在循环结构中的使用。

2.4.5break语句和continue语句练习:【例2.33】使12+22+32+…+i2的累加和sum大于1000为止,输出sum和i的值。【例2.34】循环输入一个整数,如果为非负整数,则输出其平方根;如果为负整数,则退出循环程序。【例2.35】输出1~100之间能被7整除的整数。#include<stdio.h>intmain(void){inti;for(i=1;i<=5;i++){

if(i==3)break;printf("%d\n",i);}}#include<stdio.h>intmain(void){inti;for(i=1;i<=5;i++){

if(i==3)continue;printf("%d\n",i);}}2.5预处理命令

最常用的3种预处理功能:文件包含、宏定义、条件编译。需要注意,预处理命令不是C语句。这些命令均以#开头。当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理部分做处理,处理完毕自动进入对源程序的编译。灵活使用预处理命令,可以提高编程效率。2.5预处理命令2.5.1宏定义1、不带参数的宏定义

例如:#define

PI

3.1415926

在编译预处理时,对程序中所有的宏名“PI”,都用“3.1415926”去替换,此过程称为“宏替换”。两种形式:

用一个简单且见名知意的“宏名”代表“替换文本”,“替换文本”可以是常数、表达式、格式串等。该形式的宏定义可以提高编程效率。(1)

#define宏名(2)#define宏名

替换文本仅说明宏名对应的标识符被定义。2.5预处理命令【例2.36】使用不带参数的宏定义:根据输入的半径,求圆的周长和面积。2.5.1宏定义1、不带参数的宏定义

编译预处理时,对程序中所有的“PI”,都用宏定义中的“3.1415926”去替换。

printf函数中的“%6.2f

”表示以实型数据格式输出,输出的数据最小宽度是6,并且保留2位小数。#include<stdio.h>#define

PI

3.1415926

//宏定义符号常量intmain(void){ floatr,

c,

s;

//定义半径、周长、面积变量printf("请输入半径:");scanf("%f",&r);//输入半径c=2.0*PI*r;

//计算周长s=PI*r*r;

//计算面积printf("半径=%6.2f\n",r);printf("周长=%6.2f\n",c);printf("面积=%6.2f\n",s);}宏定义不是C语句,不必在行末加分号!2.5预处理命令2.5.1宏定义2、带参数的宏定义

带参宏定义的一般形式:#define宏名(形参表)

替换文本其中,在替换文本中含有形参表中的各个形参。

带参宏调用的一般形式:宏名(实参表)在宏调用时,不仅要宏展开,而且要用实参去代换宏定义的形参。【例2.37】使用带参数的宏定义:根据输入的半径,求圆的面积。#include<stdio.h>#definePI

3.14159

//宏定义PI符号常量(不带参数)#defineS(r)

PI*(r)*(r)

//宏定义面积计算公式(带参数)intmain(void){floata,area;//定义半径、面积变量

while(1)

{

printf("请输入半径:");

scanf("%f",&a);

if(a<0)break;

//若输入的半径是负值,则退出循环

area=S(a);

//宏调用

printf("半径=%6.2f\n",a);

printf("面积=%6.2f\n",area);

}}练习:【例2.38】使用带参数的宏定义:宏定义条件表达式。2.5预处理命令

在嵌入式软件设计中,经常用到对寄存器的位操作。根据表1-7:

说明:(1)宏定义中的宏名一般都用大写字母。(2)带参宏定义,对其替换文本中的参数和表达式外加括号是为了不引起歧义,提高程序设计的可靠性。2.5.1宏定义2、带参数的宏定义

练习:【例2.39】输入一个整数,输出其对应的二进制数。2.5预处理命令2.5.2文件包含文件包含命令行的一般形式:#include<文件名>或#include"文件名"在前面我们已多次使用此命令包含库函数的头文件。例如:

#include<stdio.h>

功能:在编译预处理时,将指定的文件插入该命令行位置取代该命令行,从而将指定的文件和当前的源程序文件连成一个源文件。(1)在#include命令中,文件名可以用尖括号或双撇号括起来。例如:

#include<stdio.h>或 #include"stdio.h"

一般来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论