《C语言程序设计 第4版》 课件 1- C语言程序设计入门、2- 利用三种程序结构解决简单问题_第1页
《C语言程序设计 第4版》 课件 1- C语言程序设计入门、2- 利用三种程序结构解决简单问题_第2页
《C语言程序设计 第4版》 课件 1- C语言程序设计入门、2- 利用三种程序结构解决简单问题_第3页
《C语言程序设计 第4版》 课件 1- C语言程序设计入门、2- 利用三种程序结构解决简单问题_第4页
《C语言程序设计 第4版》 课件 1- C语言程序设计入门、2- 利用三种程序结构解决简单问题_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

第1单元:C语言程序设计入门第2单元:利用三种程序结构解决简单问题第3单元:利用数组处理同类型的批量数据第4单元:利用函数实现模块化程序设计第5单元:灵活使用指针处理问题第6单元:利用复杂的构造类型解决实际问题第7单元:利用文件进行数据管理第8单元:应用软件设计

教学内容第1单元C语言程序设计入门【单元导读】

产生于20世纪70年代的C语言是国际上广泛流行的计算机高级编程语言。

C语言既是通用计算机软件设计的基础语言,也是当前嵌入式软件设计的主流语言。通过对本书的学习,既能掌握C语言编程基础,也能掌握模块化程序设计方法及软件工程文件组织方法,可为后续的其他软件语言程序设计(如Python、Java等)和嵌入式软件设计奠定良好的基础。

单元学习目标:首先了解通用计算机和嵌入式计算机的区别;然后通过上机练习,掌握VC++2010软件开发C程序的方法和步骤;最后能利用基本的数据类型和运算符解决简单的问题。任务1.1了解通用计算机和嵌入式计算机的区别

微型计算机具有很大的通用性,所以又称通用计算机。测控领域的计算机系统是嵌入到应用系统中,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、成本、体积、可靠性、功耗严格要求的专用计算机系统,即嵌入式计算机系统,简称嵌入式系统(EmbeddedSystem)。通俗地说,除了通用计算机(如台式计算机和笔记本计算机)外,所有包含CPU的系统都是嵌入式系统,其中以微控制器(MicroControllerUnit,MCU,国内也称为单片机)为核心的嵌入式系统应用最广泛。

通用计算机和嵌入式计算机,是计算机技术在发展过程中形成的两大分支。任务1.1了解通用计算机和嵌入式计算机的区别

我国在众多嵌入式应用领域,取得了举世瞩目的巨大成就。

例如:航空领域、智能家电、智能电动汽车等等。

请读者列举一些典型的嵌入式系统应用实例。

随着技术的发展,嵌入式计算机芯片的硬件集成度越来越高,使得嵌入式硬件设计难度不断降低,因此嵌入式软件设计在整个嵌入式系统开发中所占的分量越来越大,而当前嵌入式软件设计的主流语言是C语言。关于嵌入式软件设计的具体内容,读者可通过参考文献2(索明何《基于构件化的嵌入式系统设计》)进一步学习。C语言程序设计一般要经过4个基本步骤(VC++2010开发环境的使用方法和步骤请参照教材和微课视频):(1)编辑源程序(.c文件或

.h文件);(2)对源程序进行编译,生成二进制目标文件(.obj文件);(3)连接若干个源文件和库文件对应的多个目标文件,生成可执行文件(.exe文件);(4)运行程序。1.2.1VC++2010开发环境的使用方法和步骤任务1.2使用VC++2010软件开发简单的C程序

说明:Dev-C++开发环境的使用方法和步骤请参照教材附录E。1.2.2初识简单的C程序任务1.2使用VC++2010软件开发C程序【例1.1】在PC屏幕上显示一串字符。/*程序功能:在PC屏幕上显示一串字符*/#include

<stdio.h>

//(1)预处理命令:包含输入输出头文件intmain(void)

//(2)主函数{

printf("这是我写的第1个C程序\n");

//(3)调用printf函数,原样输出一串字符return0;

//(4)如程序正常结束,返回函数值0}可省略不写【课堂练习】同步练习1-1:分行输出社会主义核心价值观。任务1.3

理解数据的基本类型及其表现形式

【课堂练习】同步练习1-2:写出C语言的基本数据类型及两种表现形式。

数据又有常量与变量两种表现形式,例如整型数据有整型常量和整型变量。1.3.1常量和变量1、常量任务1.3理解数据的基本类型及其表现形式

在程序执行过程中,其值不发生改变的量称为常量。根据书写方式,常量可分为直接常量和符号常量。(1)直接常量:如4、23;1.23;'a'、'b';''CHINA''等(2)符号常量:用#define指令,指定一个标识符代表一个常量。

例如,#definePI3.1415926//定义符号常量PI(代表常量3.1415926)

关于#define指令的使用方法,将在任务2.5中详细介绍。

用户定义的标识符不能与系统提供的关键字(参见附录B)同名。如int、void等都不能作为用户标识符。另外,标识符区分大小写,如Sum和sum是两个不同的标识符。1.3.1常量和变量1、常量任务1.3理解数据的基本类型及其表现形式

说明:

标识符是用来标识变量名、符号常量名、函数名、数组名、类型名、宏名、文件名的有效字符序列。C语言的标识符只能由字母、数字、下画线3种字符组成,且第一个字符必须是字母或下画线。

【课堂练习】同步练习1-3:识别C语言标识符。

在程序执行过程中,其值可以改变的量称为变量。变量必须“先定义,后使用”。定义变量后,编译系统为每个变量名分配对应的内存地址,即一个变量名对应一个存储单元。1.3.1常量和变量2、变量任务1.3理解数据的基本类型及其表现形式

1.3.2整型数据1、整型常量任务1.3理解数据的基本类型及其表现形式

(3)十六进制整数:以0x开头的数。如0x123表示十六进制数123,对应十进制291。在C语言中,整型常量(整型常数)有3种表示形式:(1)十进制整数:如123、-456、7。(2)八进制整数:以0开头的数。如0123表示八进制数123,对应十进制83。归纳起来,有10种整型变量,在VC++系统中对应的数值范围如下:(1)整型变量的分类1.3.2整型数据2、整型变量任务1.3理解数据的基本类型及其表现形式

数值范围是怎样计算出来的?(2)整型变量在内存中的存储形式(以单字节整型数据为例)1.3.2整型数据2、整型变量任务1.3理解数据的基本类型及其表现形式

(3)定义整型变量的方法1.3.2整型数据2、整型变量任务1.3理解数据的基本类型及其表现形式

1)定义一个变量的格式:类型标识符变量名;

例如:inti;//定义有符号基本整型变量i

unsignedintj;//定义无符号基本整型变量j2)同时定义多个同类型变量的格式:类型标识符

变量名1,变量名2,变量名3,…;

例如:inti,j,k;//同时定义三个基本整型变量i、j、k

定义变量后,系统将根据变量的类型给变量分配对应大小的内存空间,用于存储该变量。例如:

shortint

i;//定义短整型变量i

i=10;//给变量i赋值【课堂练习】同步练习1-4:定义变量。1.3.2整型数据2、整型变量任务1.3理解数据的基本类型及其表现形式

【例1.2】整型变量的定义、赋值和输出。#include<stdio.h>//(1)预处理命令:包含输入输出头文件intmain(void)

//(2)主函数{

inti;

//(3)定义变量

i=1234;

//(4)给变量赋值

printf("这是我写的第2个C程序\n");

//(5)原样输出一串字符

printf("i=%d\n",i);//(6)输出变量的值}格式输出函数printf的用法一般形式:printf(格式控制字符串,输出列表)作用:向显示器输出若干个任意类型的数据。②原样输出的字符,在显示中起提示作用。(2)输出列表:是需要输出的一些数据,可以是常量、变量或表达式。

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

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

①由%开头的格式符,用于指定数据的输出格式。

%d:以十进制形式输出带符号整数;

%%:输出%%x:以十六进制形式输出无符号整数;

%c:输出单个字符;

%s:输出字符串;%f:以小数形式输出实数(默认输出6位小数);%e:以指数形式输出实数;%u:以十进制形式输出无符号整数;

使用printf函数时,要求格式控制字符串中必须含有与输出项一一对应的格式符,并且类型要匹配。printf函数也可以没有输出项。printf("这是我写的第2个C程序\n");

//原样输出一串字符,并换行printf("i=%d\n",i);//原样输出i=,然后以%d形式输出变量i的值,并换行1.3.2整型数据任务1.3理解数据的基本类型及其表现形式

【例1.3】整型变量的定义、赋值和输出。#include<stdio.h>intmain(void){

unsignedchara;

//定义无符号单字节整型变量charb,c;

//定义有符号单字节整型变量

unsignedshortintd;

//定义无符号短整型变量

shortinte,f;

//定义有符号短整型变量a=0xff;

b=0xff;

c=-1;

//单字节整型变量赋值

d=0xffff;e=0xffff;f=-1;

//短整型变量赋值

printf("%d%d%d\n",a,

b,

c);//以十进制形式输出变量的值

printf("%d%d%d\n",d,

e,

f);//以十进制形式输出变量的值

}【课后作业】思考与实践:分析并运行程序,理解整型数据在内存中的存储形式。1.3.3字符型数据1、字符常量任务1.3理解数据的基本类型及其表现形式

用一对单撇号括起来的一个字符,称为字符常量,例如:'A','6','+'

等。

C语言还有一种以

\开头的字符序列,称为转义字符(将\后面的字符转换成为另外的含义)。

请参考附录A,熟悉字符0~9、大写字母A~Z、小写字母a~z对应的ASCII码值。1.3.3

字符型数据任务1.3理解数据的基本类型及其表现形式

字符变量用来存放字符,并且只能存放1个字符。其类型标识符是char。

例如:charc1,c2;//定义字符变量c1、c2c1='a';c2='b';//给变量c1赋值'a',变量c2赋值'b'3、字符型数据在内存中的存储形式及使用方法

一个字符变量在内存中占一个字节。字符型数据在内存中存储的是该字符对应的ASCII码。

字符型数据的存储形式与单字节整型数据相同。因此,字符型可以当作单字节整型。

2、字符变量

【课堂练习】同步练习1-5:字符型数据在内存中的存储形式、常用字符的ASCII码值。#include<stdio.h>intmain(void){

charc1;

//定义字符变量

c1=97;

//给变量c1赋整数(将ASCII码值97赋给变量c1)

printf("%c\n",c1);//以字符形式输出变量c1的值(ASCII码值对应的字符)

printf("%d\n",c1);//以整数形式输出变量c1的值(字符对应的ASCII码)}1.3.3字符型数据【例1.4】向字符变量赋整数。任务1.3理解数据的基本类型及其表现形式

【思考与实践】分析并运行程序,体会字符型数据在内存中的存储形式。1.3.3字符型数据【例1.5】字符型数据与整型数据混合运算。任务1.3理解数据的基本类型及其表现形式

【思考与实践】编写、运行程序,分析程序功能。#include<stdio.h>intmain(void){charc1,c2;//定义字符变量

c1='a';c2='b';

//给字符变量赋字符常量

c1=c1-32;c2=c2-32;

//将字符变量对应的ASCII码值更新

printf("%c,%c\n",c1,

c2);//以字符形式输出变量c1和c2的值

}

字符串常量是由一对双撇号括起来的字符序列。例如:"CHINA"

,"Cprogram"

,"a","$12.5"

字符常量和字符串常量的区别:因此字符串常量"CHINA"在内存中占用6个字节。【思考】字符常量'a'和字符串常量"a"有何区别?4、字符串常量

1.3.3字符型数据任务1.3理解数据的基本类型及其表现形式

【课后作业】同步练习1-6:用sizeof运算符计算并输出字符串常量占用内存字节数。1.3.4实型数据1、实型常量

(2)指数形式。如123e3或123E3都代表123×103。要注意字母e(或E)之前必须要有数字,且e后面的指数必须为整数,如e2、4e2.5、.e3、e都不是合法的指数形式。

实型常量也称实数,在C语言中,实数有两种表示形式:

(1)十进制小数形式。它由数字和小数点组成(注意,必须要有小数点)。如:0.123、123.、123.0、0.0。

一个实数可以有多种指数表示形式。在程序中以指数形式输出一个实数时,会以规范化的指数形式输出。

例如123.456的规范化指数形式是1.23456e2。2、实型变量

根据数据的数值范围和精度,实型变量的类型主要有单精度(float)型和双精度(double)型。需要注意:实型数据在计算机内存中的存储精度有限,不可能得到完全精确的数值。任务1.3理解数据的基本类型及其表现形式

#include<stdio.h>intmain(void){

floatx;//定义实型变量xx=12.3;//将实型常数12.3赋给变量xprintf("%f\n",x);//以小数形式输出变量x的数值printf("%e\n",x);//以指数形式输出变量x的数值}1.3.4实型数据【例1.6】实型变量的定义、赋值和输出。任务1.3理解数据的基本类型及其表现形式

【课后作业】同步练习1-7:用sizeof运算符测试系统中数据类型的存储字节数。1.3.5变量的初始化C语言允许在定义变量的同时,对变量赋初值,即变量的初始化。任务1.3理解数据的基本类型及其表现形式

例如:

inta=3;

//定义整型变量a,并赋初值3

当一次定义同类型的多个变量时,可以给全部变量或部分变量赋初值。inta,b,c=5;

//定义a、b、c三个整型变量,只给c赋初值5注意,对3个变量赋相同的初值3时,不能写成:inta=b=c=3;inta=1,b=2,c=3;

//定义a、b、c三个整型变量,并赋不同的初值inta=3,b=3,c=3;

//定义a、b、c三个整型变量,并赋相同的初值3【课后作业】【例1.7】变量的初始化和输出。charc='a';

//定义字符变量c,并赋初值'a'floatb=1.23;//定义实型变量b,并赋初值1.23

在定义变量并对变量初始化时,如果加上关键字const,则变量的值在程序运行期间不再改变,这种变量称为常变量(constantvariable),也称为只读变量。例如:constinta=5;

//用const声明整型变量a为常变量,其值始终是5*1.3.6常变量任务1.3理解数据的基本类型及其表现形式

1.4.1算术运算符及其表达式1.4.2强制类型转换运算符及其表达式1.4.3赋值运算符及其表达式1.4.4关系运算符及其表达式1.4.5逻辑运算符及其表达式1.4.6位运算符及其表达式1.4.7

逗号运算符及其表达式任务1.4

利用基本的运算符解决简单问题

附录C列出了C语言的各种运算符。1.4.1算术运算符及其表达式1、基本的算术运算符(2)-

减法运算符,或负值运算符,如7-2、-4

(1)+

加法运算符,或正值运算符,如2+3、+5

(4)/

除法运算符,如5/2、5.0/2

(3)*乘法运算符,如2*3

(5)%模运算符,或称求余运算符,%两侧均应为整型数据,如5%2的值为1

说明:

任务1.4

利用基本的运算符解决简单问题

【课堂练习】同步练习1-8:理解算术运算符的运算规则。1.4.1算术运算符及其表达式1、基本的算术运算符任务1.4

利用基本的运算符解决简单问题

【例1.8】将两位十进制整数的十位数和个位数分离。#include

<stdio.h>intmain(void){inta=23,b,

c;

//定义a、b、c三个变量

b

=

a%10;

//求变量a的个位数

c

=

a/10;

//求变量a的十位数(/10相当于右移1位)printf("a=%d\n",

a);

//输出变量a的值printf("十位=%d\n",

c);//输出变量a对应的十位数printf("个位=%d\n",

b);//输出变量a对应的个位数

}1.4.1算术运算符及其表达式1、基本的算术运算符任务1.4

利用基本的运算符解决简单问题

(1)【例1.9】将一个正整数倒序输出。(2)同步练习1-9:

用/和%运算符将一个3位和一个4位十进制整数的各位数字分离。

(3)【思考与实践】

分析并运行例1.10程序,体会不同类型数据之间的混合运算规则。【课后作业】1.4.1算术运算符及其表达式2、自增、自减运算符任务1.4

利用基本的运算符解决简单问题

自增运算符++:使变量的值自增1,相当于i=i+1。自减运算符--:使变量的值自减1,相当于i=i-1。

i++

表达式先用i的值,然后对i的值加1

(先用后加)

++i

先对i的值加1,然后表达式用i加1的值(先加后用)--i

先对i的值减1,然后表达式用i减1的值(先减后用)

i--

表达式先用i的值,然后对i的值减1

(先用后减)有以下4种形式的表达式:

可见,由自增(自减)运算符构成不同形式的表达式时,对变量而言,自增1(自减1)都具有相同的效果,但对表达式而言却有着不同的值。1.4.1算术运算符及其表达式2、自增、自减运算符#include<stdio.h>intmain(void){int

i=3,j=3,k=3,x=3;

printf("%d\t",i++);printf("i=%d\n",i);

printf("%d\t",++j);printf("j=%d\n",j);

printf("%d\t",k--);printf("k=%d\n",k);

printf("%d\t",--x);printf("x=%d\n",x);}说明:

(1)自增、自减运算符只能用于变量,不能用于常量或表达式。如5++或(a+b)++都是不合法的。(2)自增、自减运算符常用在循环语句中,使循环变量自动加1、减1,这将在后续单元中学习。任务1.4

利用基本的运算符解决简单问题

【例1.11】自增、自减运算符的应用。1.4.1算术运算符及其表达式任务1.4

利用基本的运算符解决简单问题

3、算术表达式和运算符的优先级与结合性

算术表达式:用算术运算符和括号将运算对象(常量、变量或表达式)连接起来的、符合C语法规则的式子。例如:a+b*c-5/2+'a'。C语言规定了运算符的优先级。在表达式求值时,先按运算符的优先级高低次序执行,例如:x-y*z相当于x-(y*z)。

算术运算符的结合方向为“自左向右(左结合性)”,即先左后右。因此a+b-c相当于

(a+b)-c。附录C给出了C语言运算符的优先级和结合性,在分析表达式时查询参考。

如果在一个运算对象两侧的运算符的优先级相同,则按照规定的“结合方向(结合性)”处理。

问题:a+b-c,b先与a相加,还是先与c相减?1.4.2强制类型转换运算符及其表达式强制类型转换表达式的一般形式:(类型标识符)(表达式)例如:

(int)i

将i转换为整型(int)x+y

将x转换成整型后,再与y相加(“(int)”的优先级高于“+”)

(float)(x+y)

将x+y的结果转换为float型#include<stdio.h>intmain(void){

inti;//定义整型变量i

floatx=2.4F;//定义实型变量x,并赋初值

i=

(int)x;//将实型变量x强制转换为int型

printf("x=%f,i=%d\n",x,i);

//输出变量

x

i的值}【例1.12】将实型数据强制转换为整型。任务1.4

利用基本的运算符解决简单问题

1.4.2强制类型转换运算符及其表达式任务1.4

利用基本的运算符解决简单问题

【思考与总结】数值类型转换有几种方式?

(1)系统自动进行的类型转换。如2+3.5,系统自动将整数2转换为实型。

(2)强制类型转换。若i为float型,则i%3不合法,必须用(int)i%3。(1)【思考与实践】

1)分析并运行例1.13程序,体会强制类型转换运算符的作用。

2)编程输出表达式的值。(2)同步练习1-10:

输出课程的优秀率(用百分比表示)。

【课后作业】1、简单赋值运算符“=”及其表达式1.4.3赋值运算符及其表达式任务1.4

利用基本的运算符解决简单问题

简单赋值表达式的形式:变量=

表达式

赋值表达式中的“表达式”,又可以是一个赋值表达式。根据附录C,赋值运算符是按照“自右向左”的结合顺序。

根据附录C,赋值运算符的优先级仅高于逗号运算符,而低于其他运算符。因此赋值表达式a=3*5等价于a=(3*5),i=a+b等价于i=(a+b)。

一个表达式应该有一个值,例如赋值表达式“

a=5”的值是5。执行运算后,变量a的值也是5。

同步练习1-11:分析下面各赋值表达式中变量a的值。a=5+(c=7)a=b=c=33a=(b=6)/(c=2)a=(b=2)+(c=5)1273

因此

a=b=5与

a=(b=5)等价。2、复合的赋值运算符及其表达式1.4.3赋值运算符及其表达式

在简单赋值运算符“=”之前加上其他运算符,可构成复合的赋值运算符。a*=3等价于a=a*3a-=3等价于a=a-3a*=b+2等价于a=a*(b+2)a+=3等价于a=a+3a/=3等价于a=a/3a%=3等价于a=a%3任务1.4

利用基本的运算符解决简单问题

【课后作业】【思考与实践】

(1)分析并运行例1.14程序,体会复合赋值运算符的运算规则。

(2)编程输出变量的值。①a*=b+2

②a*=

(b+2)

(

)

(对表达式

b+2

外加括号,因为“+”的优先级高于“*=”)③

=

(在“=”左侧补上变量名a)

(将“a*”移到“=”右侧)

aa*(b+2)

3、类型转换1.4.3赋值运算符及其表达式任务1.4

利用基本的运算符解决简单问题

注意:在赋值运算中,需要根据数据的类型和数值的范围为变量指定合适的类型,必要时还需要借助强制类型转换运算符,以防出错。

【思考与实践】

如果赋值运算符“=”两侧的数据类型不一致,但同为数值型数据,在赋值时,系统会自动进行类型转换。

课后上机编程,输出教材中所列的几种情况下变量的值,并思考其原因。1.4.4关系运算符及其表达式1、关系运算符及其优先级次序

优先级相同(高)优先级相同(低)③>

大于①<

小于②<=

小于或等于⑥!=

不等于④>=

大于或等于⑤==

等于任务1.4

利用基本的运算符解决简单问题

根据附录C,关系运算符的优先级低于算术运算符,高于赋值运算符。a=b>c等价于

a=(b>c)例如:

c>a+b等价于

c>(a+b)a==b<c等价于

a==(b<c)a>b==c等价于

(a>b)==c2、关系表达式1.4.4关系运算符及其表达式任务1.4

利用基本的运算符解决简单问题

用关系运算符将两个表达式连接起来的式子,称为关系表达式。a+b>c+d(a=3)>(b=5)'a'<'b'a==3例如:a>ba!=3

关系表达式的值是一个逻辑值:“真”或“假”。例如关系表达式“5==3”的值为“假”,“5>=0”的值为“真”。

关系运算结果,以“1”代表“真”,以“0”代表“假”。关系表达式逻辑值(真、假)关系表达式的值(1、0)a>ba>b+ca!=b+ca>b>c若a=3,b=2,c=1,则:真假假假1000【课堂练习】【例1.15】考察关系表达式的值。假1.4.5逻辑运算符及其表达式1、逻辑运算符及其优先级次序

③!逻辑非①&&逻辑与②||逻辑或

逻辑运算的真值表aba&&ba||b!a真真真假假真假假真真假真假真假假真!a==b||c<d等价于a>b&&c>d等价于a+b>c&&x+y<d等价于根据附录C,几种运算符的优先级次序:

!(非)

高算术运算符关系运算符&&和||赋值运算符低(a+b)(>c)(x+y)(<d)&&(a>b)(c>d)&&(!a)(==b)||(c<d)任务1.4

利用基本的运算符解决简单问题

2、逻辑表达式的值

1.4.5逻辑运算符及其表达式任务1.4

利用基本的运算符解决简单问题

C语言规定,参与逻辑运算的操作数以非0代表“真”,以0代表“假”。逻辑表达式的值,即逻辑运算结果,以数值1代表“真”,以0代表“假”。例如:(1)若a=3,则!a的值:(4)'a'&&'b'的值:(2)若a=3,b=4,则a&&b的值:(3)3&&0||-4的值:0111在逻辑表达式的求解过程中,有时并非所有的运算都被执行。

例如:

(1)a&&b:只有当a为真(非0)时,才需要判断b的值。只要a为假,就不必判断b的值,此时整个表达式已确定为假。(2)a||b:只要a为真(非0),就不必判断b的值。只有a为假,才判断b的值。1.4.5逻辑运算符及其表达式任务1.4

利用基本的运算符解决简单问题

【课堂练习】(1)同步练习1-12:关系运算符和逻辑运算符的综合运用。(2)【思考与实践】分析并运行例1.16程序,考察逻辑表达式的值。位运算符含义&按位与|按位或^按位异或~按位取反<<左移>>右移说明:1)位运算符中除“~”以外,均为二目运算符,即要求两侧各有一个运算量。

2)运算量只能是整型或字符型数据,不能是实型数据。1.4.6位运算符及其表达式

在嵌入式软件设计中,经常用到位运算符:对二进制位进行运算。任务1.4

利用基本的运算符解决简单问题

例如,0x23与0x45按位与:00100011(0x23)

&)01000101(0x45)

特殊用途:“与0清零、与1保留”——可对数据的某些位清零,某些位保留不变。0&0=0,0&1=0,1&0=0,1&1=100000001(0x01)1.4.6位运算符及其表达式任务1.4

利用基本的运算符解决简单问题

1、“按位与”运算符(&)

例如,将0x23的高4位清零,低4位保留不变。00100011

(0x23)

&)00001111(0x0F)0000

0011

(0x03)例如,0x23与0x45按位或:00100011(0x23)

|)01000101(0x45)

特殊用途:“或1置1、或0保留”——可对数据的某些位置1,某些位保留不变。0|0=0,0|1=1,1|0=1,1|1=101011101(0x67)2、“按位或”运算符(|)1.4.6位运算符及其表达式任务1.4

利用基本的运算符解决简单问题

例如,将0x23的高4位置1,低4位保留不变。00100011

(0x23)

|)

11110000(0xF0)1111

0011

(0xF3)例如,0x23与0x45按位异或:00100011(0x23)

^)01000101(0x45)

特殊用途:“异或1取反(0变1,1变0),异或0保留”——可对数据的某些位取反,某些位保留不变。3、“按位异或”运算符(^)01011100(0x66)两者相异为1,相同为0。0^0=0,0^1=1,1^0=1,1^1=0

1.4.6位运算符及其表达式任务1.4

利用基本的运算符解决简单问题

例如,将0x23的高4位取反,低4位保留不变。00100011

(0x23)

^)11110000(0xF0)1101

0011

(0xD3)4、“按位取反”运算符(~)例如,0x55按位取反:01010101(0x55)~)↓

10010110(0xaa)1.4.6位运算符及其表达式任务1.4

利用基本的运算符解决简单问题

对一个二进制数按位取反:0变1,1变0。

例如:

a<<3,表示将a的二进制数左移3位,高位溢出后丢弃,低位补0。任务1.4

利用基本的运算符解决简单问题

用来将一个数的各二进制位全部左移若干位。5、“左移”运算符(<<)1.4.6位运算符及其表达式例如:

a>>3,表示将a的二进制数右移3位,低位溢出后丢弃,对于无符号数,高位补0。【课堂思考与实践】分析并运行例1.17程序,考察位运算表达式的值。任务1.4

利用基本的运算符解决简单问题

1.4.6位运算符及其表达式6、“右移”运算符(>>)

用来将一个数的各二进制位全部右移若干位。【例1.18】利用位运算符实现对8位寄存器R和对16位寄存器R'的二进制位操作

。1.4.6位运算符及其表达式任务1.4

利用基本的运算符解决简单问题

1.4.7逗号运算符及其表达式

逗号表达式的一般形式:表达式1,表达式2

根据附录C,逗号运算符的结合性是“从左至右”。求解过程:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。

例如,逗号表达式“2+3,3+5”的值是8。

【思考】

表达式“a=2*3,a*5”的值是多少?

30C语言中,在所有运算符中,逗号运算符的优先级最低。任务1.4

利用基本的运算符解决简单问题

逗号表达式的扩展形式:表达式1,

表达式2,表达式3,…,表达式n整个逗号表达式的值等于表达式n的值。【课堂练习】【例1.19】考察逗号表达式的值。【课后作业】同步练习1-13:考察逗号表达式的值。第1单元:C语言程序设计入门第2单元:利用三种程序结构解决简单问题第3单元:利用数组处理同类型的批量数据第4单元:利用函数实现模块化程序设计第5单元:灵活使用指针处理问题第6单元:利用复杂的构造类型解决实际问题第7单元:利用文件进行数据管理第8单元:应用软件设计

教学内容第2单元利用三种程序结构解决简单问题【单元导读】

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

单元学习目标:能利用C语言中的顺序结构、选择结构、循环结构解决实际问题,并在此基础上,能利用预处理命令提高编程效率。

计算机程序

=数据结构

+算法

+程序代码2.1.1算法及流程图表示1、算法的概念

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

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

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

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

(4)有输入:一个算法可有零个或多个输入(键盘输入或传给算法数据)。

(5)有输出:一个算法必须有一个或多个输出(显示输出或传给算法数据)。任务2.1知识储备3、算法的流程图表示

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

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

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

2、选择结构任务2.1知识储备

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

2.1.2程序的三种基本结构3、循环结构当型循环结构

先判断

后执行直到型循环结构

先执行

后判断任务2.1知识储备1、声明语句:对变量、函数、类型(如结构体等类型)等进行声明例如:

变量声明语句:inti;

变量声明语句:int

a1=12,a2=34,a3=56;

在C语言中,分号是语句的结束标志。C语句分为6类。2.1.3C语句分类2、表达式语句:在表达式的末尾加分号例如:

a=3(赋值表达式)

a=3;

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

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

printf("这是我写的第1个C程序\n");2.1.3C语句分类4、控制语句:控制程序的流程(1)条件语句:if语句、switch语句(3)转向语句:break语句、continue语句、return语句、goto语句(2)循环语句:while语句、do…while语句、for语句任务2.1知识储备

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

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

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

;

//空语句

}6、空语句:只有一个分号,什么也不执行任务2.1知识储备1、数据输入输出的概念及在C语言中的实现2.2.1数据输入输出函数

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

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

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

#include<stdio.h>或

#include"stdio.h"任务2.2利用顺序结构程序解决实际问题2、字符输出函数——putchar函数

●向显示器输出一个字符。2.2.1数据输入输出函数任务2.2利用顺序结构程序解决实际问题putchar('H');

//输出字符Hputchar('\n');//换行charc='X';

putchar(c);//输出字符X3、字符输入函数——getchar函数

●读取从键盘上输入的一个字符。

注意:getchar函数只能接收一个字符,输入数字也按字符处理。输入多个字符时,计算机只接收第一个字符。2.2.1数据输入输出函数【例2.1】从键盘输入一个字符,并在显示屏显示。任务2.2利用顺序结构程序解决实际问题#include

<stdio.h>

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

charc;printf("请输入一个字符:");

//原样输出一串字符,增加人机互动性

c

=

getchar();

//从键盘输入一个字符

putchar(c);

//在屏幕上显示输入的字符

putchar('\n');

//换行

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

【课后作业】同步练习2-1:putchar和getchar函数的应用。4、格式输出函数——printf函数2.2.1数据输入输出函数任务2.2利用顺序结构程序解决实际问题

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

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

i,c);//分别以%d形式和%c形式输出变量i和变量c的值,并换行#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.2.1数据输入输出函数【例2.2】printf函数使用:格式化输出数据。任务2.2利用顺序结构程序解决实际问题4、格式输出函数——printf函数【思考与实践】分析并运行例2.2程序,以进一步掌握printf函数的使用方法。【课后作业】【例2.3】printf函数的使用:指定输出宽度、小数位数和左端对齐。

说明:使用printf函数输出数据时,还可在格式符中的%和格式字符之间加入一些修饰符,用于指定输出宽度、小数位数和左端对齐。5、格式输入函数——scanf函数2.2.1数据输入输出函数任务2.2利用顺序结构程序解决实际问题

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

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

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

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

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

●按用户指定的格式从键盘把数据输入到指定的变量地址中。%d:输入有符号的十进制整数;%e:以指数形式输入单精度实数(%le用于输入双精度实数)%u:输入无符号的十进制整数;%x:输入无符号的十六进制整数;%c:输入单个字符;%s:输入字符串(将字符串送到一个字符数组中);%f:以小数形式输入单精度实数(%lf用于输入双精度实数);#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符作分隔。2.2.1数据输入输出函数【例2.4】用scanf函数输入多个数值数据。①用空格作分隔

②用换行符作分隔任务2.2利用顺序结构程序解决实际问题③用Tab符作分隔5、格式输入函数——scanf函数【课堂练习】同步练习2-2:scanf函数的正确输入数据方法。

当输入数据的类型与scanf函数中的格式符指定的类型不一致时,系统认为该数据结束。2.2.1数据输入输出函数【例2.5】用scanf函数输入多个不同类型的数据。任务2.2利用顺序结构程序解决实际问题#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的数据输出

}5、格式输入函数——scanf函数#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.2.1数据输入输出函数【例2.6】用scanf函数输入多个字符。任务2.2利用顺序结构程序解决实际问题【课后作业】同步练习2-3:scanf函数的正确输入数据方法、解决实际问题。5、格式输入函数——scanf函数2.2.2顺序结构程序设计应用任务2.2利用顺序结构程序解决实际问题【例2.7】将输入的两个整数交换,然后再输出这两个整数。ABABABAB

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

需要借助一个临时变量实现两数的交换。//==================================//程序功能:输入两个整数,交换后再输出。//设计日期:2023-07-20//==================================#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.8】计算1+2+3+4+5的和。#include

<stdio.h>intmain(void){

inti=1,

s=0;s=s+i;i++;s=s+i;i++;s=s+i;i++;s=s+i;i++;s=s+i;

printf("sum=%d\n",s);}2.2.2顺序结构程序设计应用重复执行多次循环结构任务2.2利用顺序结构程序解决实际问题

选择结构程序:根据不同的条件,执行不同的语句(根据不同的条件选择不同的道路)。两种选择语句:if语句和switch语句。1、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.3.1if语句及应用【例2.9】输入两个整数,要求按由大到小的顺序输出。任务2.3利用选择结构程序解决实际问题1、if语句的3种形式

2.3.1if语句及应用任务2.3利用选择结构程序解决实际问题(1)if基本形式if(表达式)语句#include<stdio.h>intmain(void){

intscore;

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

scanf("%d",&score);

if(score>=60)printf("恭喜,通过!\n");}要求:当考试成绩不低于60分时,输出“恭喜,通过”。【例2.10】用if语句判断考试结果。#include<stdio.h>intmain(void){

intscore;

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

scanf("%d",&score);

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

elseprintf("未通过,继续努力!\n");}2.3.1if语句及应用if(表达式)语句1else语句2(2)if…else基本形式【例2.11】用if…else语句判断考试结果。【课后作业】【例2.12】判断输入的数据是否为0。【例2.13】判断输入的两个数据是否有0。任务2.3利用选择结构程序解决实际问题1、if语句的3种形式

要求:当考试成绩不低于60分时,输出“恭喜,通过!”。

当考试成绩低于60分时,输出“未通过,继续努力!”

同步练习2-4:

用if语句解决实际问题。2.3.1if语句及应用任务2.3利用选择结构程序解决实际问题1、if语句的3种形式

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

(3)if…else嵌套形式——用于解决多分支问题

虚线左侧的嵌套结构,还可写成虚线右侧的更加紧凑的形式。【例2.14】根据符号函数,编程实现输入一个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;else

温馨提示

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

评论

0/150

提交评论