2- 利用三种结构程序解决简单问题_第1页
2- 利用三种结构程序解决简单问题_第2页
2- 利用三种结构程序解决简单问题_第3页
2- 利用三种结构程序解决简单问题_第4页
2- 利用三种结构程序解决简单问题_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

本书结合汽车技术发展和汽车类专业特点,按照“由简到难、循序渐进”的原则,共设置了“绪论”“汽车程序设计基础”“汽车嵌入式技术基础”三部分内容。通过本书的学习,可以从整体上加深理解汽车电子控制系统的组成和工作原理,对后续的汽车电子控制技术类课程和智能网联汽车技术类课程学习奠定良好的汽车计算机基础。

本书特色:任务驱动,理实一体,学以致用。内容组织由简到难、循序渐进,灵活采用对比法、类比法、启发法、实验法等多种教学方法,有效降低教学难度和学习难度。

本书可作为高职院校汽车类专业的汽车计算机基础教材,也可供从事相关技术的工程人员参考。第1单元:C语言程序设计入门第2单元:利用三种结构程序解决实际问题第3单元:利用数组处理同类型的批量数据第4单元:利用函数实现模块化程序设计第5单元:灵活使用指针处理问题第6单元:利用结构体类型解决实际问题汽车程序设计基础

第2单元利用三种结构程序解决实际问题【单元导读】

在现实生活中,经常遇到顺序执行、选择执行和循环执行的问题,这些问题可通过C语言程序来解决。

单元学习目标:(1)掌握顺序结构程序设计方法。(2)掌握选择结构程序设计方法。(3)掌握循环结构程序设计方法。(4)掌握预处理命令的应用方法。(5)能够利用三种结构程序解决实际问题。2.1.1数据输入输出函数任务2.1利用顺序结构程序解决实际问题1、数据输入输出的概念及在C语言中的实现

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

(2)C语言本身不提供输入输出语句,而用户可以通过调用C标准函数库中的输入输出函数,实现数据的输入和输出。

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

#include<stdio.h>或

#include"stdio.h"2.1.1数据输入输出函数任务2.1利用顺序结构程序解决实际问题2、格式输出函数——printf函数

●向显示器输出若干个任意类型的数据。一般形式:printf(格式控制字符串,输出列表)在1.2.2节中曾学过:按照格式控制字符串中以%开头的格式符指定的格式,将输出列表中对应的数据输出。也可以没有输出列表项。printf("这是我写的第2个C程序\n");

//原样输出一串字符,并换行printf("i=%d\n",i);//原样输出i=,然后以%d形式输出变量i的值,并换行printf("%d,%c\n",

i,c);//分别以%d形式和%c形式输出变量i和变量c的值,并换行2.1.1数据输入输出函数任务2.1利用顺序结构程序解决实际问题#include<stdio.h>

//包含输入输出库函数头文件intmain(void){ inta=5;floatb=1.2;charc='a';printf("a=%d,b=%f\n",a,b);//依次按指定的格式将多个数据输出printf("%c\n",c);//输出字母aprintf("%d\n",c);//输出字母a的ASCII码值printf("%s\n","CHINA");//输出字符串CHINAprintf("50%%\n");//输出50%}【例2.1】printf函数使用:格式化输出数据。2.1.1数据输入输出函数任务2.1利用顺序结构程序解决实际问题3、格式输入函数——scanf函数

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

(2)地址列表:由若干个地址组成的列表。

变量的地址:地址运算符“&”后跟变量名。

多个地址之间要用逗号隔开。

(1)格式控制字符串的作用与printf函数类似。

●按用户指定的格式从键盘把数据输入到指定的变量地址中。%d:输入有符号的十进制整数%f:以小数形式输入单精度实数2.1.1数据输入输出函数任务2.1利用顺序结构程序解决实际问题#include<stdio.h>

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

inti;

floatj;printf("请输入一个整数和一个实数:\n");//提示输入两个数据scanf("%d%f",&i,&j);//输入两个数据分别赋给两个变量printf("%d,%f\n",i,j);//将两个变量的数值输出}

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

②用换行符作分隔3、格式输入函数——scanf函数③用Tab符作分隔2.1.2顺序结构程序设计应用任务2.1利用顺序结构程序解决实际问题【例2.3】将输入的两个整数交换,然后再输出这两个整数。ABABABAB

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

需要借助一个临时变量实现两数的交换。#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-1】知识巩固与运用。任务2.2利用选择结构程序解决实际问题

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

1、if语句的基本形式if(表达式)语句#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.2.1if语句及应用【例2.4】输入两个整数,要求按由大到小的顺序输出。任务2.2利用选择结构程序解决实际问题2.2.1if语句及应用#include<stdio.h>intmain(void){

intscore;

printf("请输入成绩:");

scanf("%d",&score);

if(score>=60)printf("恭喜,通过!\n");}【例2.5】用if语句判断考试结果。要求:当考试成绩不低于60分时,输出“恭喜,通过”。1、if语句的基本形式if(表达式)语句任务2.2利用选择结构程序解决实际问题#include<stdio.h>intmain(void){

intscore;

printf("请输入成绩:");

scanf("%d",&score);

if(score>=60)printf("恭喜,通过!\n");

elseprintf("未通过,继续努力!\n");}2.2.1if语句及应用if(表达式)语句1else语句22、if…else语句的基本形式【例2.6】用if…else语句判断考试结果。要求:当考试成绩不低于60分时,输出“恭喜,通过!”。

当考试成绩低于60分时,输出“未通过,继续努力!”2.2.1if语句及应用任务2.2利用选择结构程序解决实际问题说明:注意if与else的配对关系。else总是与它上面最近的未配对的if配对。3、if…else语句的嵌套形式——用于解决多分支问题任务2.2利用选择结构程序解决实际问题2.2.1if语句及应用

虚线左侧的嵌套结构,还可写成虚线右侧的更加紧凑的形式。3、if…else语句的嵌套形式——用于解决多分支问题任务2.2利用选择结构程序解决实际问题2.2.1if语句及应用3、if…else语句的嵌套形式——用于解决多分支问题【例2.7】根据符号函数,编程实现输入一个x值,输出y值。#include<stdio.h>intmain(void){

intx,y;

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

scanf("%d",&x);

if(x<0)y=-1;

else

if(x==0)y=0;

elsey=1;

printf("x=%d,y=%d\n",x,y);}【思考与实践】若改用if基本形式,如何实现?执行效率有区别吗?【例2.8】根据输入的课程成绩(整数),判断并输出对应的等级。

输入成绩与输出结果:90~100,优秀;80~89,良好;70~79,中等;60~69,及格;0~59,不及格;其他值,输入有误!2.2.1if语句及应用任务2.2利用选择结构程序解决实际问题#include

<stdio.h>intmain(void){

intscore;printf("请输入课程成绩(整数):");scanf("%d",

&score);

if(score>100

||score<0)printf("输入有误!\n");

elseif(score>=90)

printf("优秀!\n");

elseif(score>=80)

printf("良好!\n");

elseif(score>=70)

printf("中等!\n");

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

elseprintf("不及格!\n");}【思考】若输入85,只输出“良好”,为什么不会输出“中等”和“及格”?【同步练习2-2】第2~4题。2.2.2条件运算符(三目运算符?:)和条件表达式任务2.2利用选择结构程序解决实际问题条件表达式的一般形式:

表达式1?表达式2:

表达式3

条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。因此,max=(a>b)?a:b等价于max=a>b?a:b说明:可简写为:max=(a>b)?a:b;

if(a>b)max=a;

elsemax=b;任务2.2利用选择结构程序解决实际问题#include<stdio.h>intmain(void){

int

a,b,max;

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

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

max=a>b?a:b;

printf("max=%d\n",max);}【例2.9】利用条件运算符求两数的最大值。2.2.2条件运算符(三目运算符?:)和条件表达式【同步练习2-2】第1题。任务2.2利用选择结构程序解决实际问题2.2.3switch语句及应用

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

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

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

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

每一组允许有多个语句,可以不用{}括起来。带有[]的部分为可选部分2.2.3switch语句及应用任务2.2利用选择结构程序解决实际问题【例2.10】用switch语句实现:根据输入的课程成绩(整数),判断并输出对应的等级。

输入成绩与输出结果:90~100,优秀80~89,良好70~79,中等60~69,及格0~59,不及格其他值,输入有误!#include<stdio.h>intmain(void){

intscore;

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

scanf("%d",&score);

if(score>=0&&score<=100)

{

switch(score/10)

{

case10:

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

break;

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

break;

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

break;

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

break;

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

}

}

else

printf("输入有误!\n");}

实验:将某个break语句去掉,观察运行结果,体会其作用。思考:若将每一个成绩作为switch语句中的

case常量,是否可行?printf("优秀!\n");

break;score)思考:(1)能否用swtich语句解决多分支选择

结构问题的关键是什么?(2)if语句和switch语句有何区别?【同步练习2-2】第5题。任务2.3利用循环结构程序解决实际问题

在许多问题中需要用到循环控制,即重复执行同种性质的任务。例如:在测试例2.8程序时,需要多次单击运行命令;在嵌入式智能设备中,上电后,主函数反复执行一段无限循环程序。C语言中,最基本的有while语句、do…while语句、for语句。while语句的一般形式:while(循环条件表达式)循环体语句2.3.1while循环结构程序设计【例2.11】

用while循环结构程序,实现在同一行依次输出0~9。#include<stdio.h>intmain(void){inti=0;while(i<10){printf("%d",i);i++;}printf("\n");}#include<stdio.h>intmain(void){printf("1");printf("2");printf("3");...printf("8");printf("9");printf("\n");}任务2.3利用循环结构程序解决实际问题while语句的一般形式:while(循环条件表达式)循环体语句2.3.1while循环结构程序设计【例2.12】用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+…+99(2)2+4+6+…+100任务2.3利用循环结构程序解决实际问题while语句的一般形式:while(循环条件表达式)循环体语句2.3.1while循环结构程序设计说明:

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

循环体语句while(表达式);【例2.13】用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);}do…while循环至少要执行一次循环体语句。2.3.2do…while循环结构程序设计任务2.3利用循环结构程序解决实际问题【例2.14】while和

do…while循环的比较。

经测试,当输入i<3时,两者运行结果相同;但当输入i≥3时,运行结果则不同。

#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.3.3for循环结构程序设计任务2.3利用循环结构程序解决实际问题for语句的一般形式:for(表达式1;

表达式2;

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

for(循环变量赋初值;

循环条件;

循环变量变化)循环体语句2.3.3for循环结构程序设计任务2.3利用循环结构程序解决实际问题【例2.15】用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++)【课堂练习】(1)1+3+5+…+99(2)2+4+6+…+100inti=1,sum=0;for(;i<=100;){sum=sum+i;i++;}inti,sum;

for(sum=0,i=1;i<=100;i++)2.3.3for循环结构程序设计任务2.3利用循环结构程序解决实际问题(2)for(;;)与while(1)等价,表示无限循环。主函数一般为无限循环结构。嵌入式软件设计中常用的两种for语句形式:(1)for循环体可以是空语句,常用于软件延时。例如:

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

for(i=1000;i>0;i--);【同步练习2-3】第3题:输出所有的“水仙花数”。2.3.4循环嵌套任务2.3利用循环结构程序解决实际问题一个循环体内又包含另一个完整的循环结构,称为循环嵌套。

#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=111234567891011123242345【例2.16】统计循环次数。【同步练习2-3】第4题:输出九九乘法表。2.3.5break语句和continue语句任务2.3利用循环结构程序解决实际问题【例2.17】循环结构程序。#include

<stdio.h>intmain(void){

int

i;for(i=1;i<=5;i++){

if(i==3)break;printf("%d

",

i);}}#include

<stdio.h>intmain(void){int

i;for(i=1;i<=5;i++){

if(i==3)continue;printf("%d

",

i);}}break语句可提前结束“整个”循环过程。continue语句可提前结束“本次”循环(跳过循环体中下面尚未执行的语句),接着执行下次循环。#include

<stdio.h>intmain(void){

inti;for(i=1;i<=5;i++){printf("%d",i);}}【同步练习2-3】第5、6题。任务2.4

利用预处理命令提高编程效率几乎所有的C语言程序,都使用以“#”开头的预处理命令,例如包含命令#include、宏定义命令#define等。C语言中,最常用的3种预处理命令(功能):宏定义、条文件包含、件编译。需要注意,预处理命令不是C语句。为了与一般C语句相区别,这些命令均以#开头。

当对一个源文件进行编译时,系统将自动引用预处理程序对源程序中的预处理命令做处理,处理完毕后自动进入对源程序的编译。

灵活使用预处理命令,可以提高编程效率。2.4.1宏定义任务2.4

利用预处理命令提高编程效率1、不带参数的宏定义

例如:#define

PI

3.1415926

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

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

#define宏名(2)#define宏名

替换文本仅说明宏名对应的标识符被定义。2.4.1宏定义任务2.4

利用预处理命令提高编程效率2、带参数的宏定义

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

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

带参宏调用的一般形式:宏名(实参表)在宏调用时,不仅要宏展开,而且要用实参的值去代换宏定义的形参。

带参宏定义也称为宏函数。在宏定义中的参数称为形式参数(简称形参),在宏调用中的参数称为实际参数(简称实参)。2.4.1宏定义任务2.4

利用预处理命令提高编程效率【例2.18】使用宏定义:根据输入的半径,求圆的面积。#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("半径

温馨提示

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

评论

0/150

提交评论