高级语言程序设计_第1页
高级语言程序设计_第2页
高级语言程序设计_第3页
高级语言程序设计_第4页
高级语言程序设计_第5页
已阅读5页,还剩387页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

高级语言程序设计高等学校精品资源共享课程(省级)省级教学成果一等奖建设教材第1章程序设计引论高等学校精品资源共享课程(省级)省级教学成果一等奖建设教材主要内容计算科学与问题求解程序与程序设计程序设计语言C语言简介C语言程序开发工具与开发步骤主要内容计算科学与问题求解程序与程序设计程序设计语言C语言简介C语言程序开发工具与开发步骤第1章程序设计引论1.1计算科学与问题求解维基百科(Wikipedia)关于计算机科学(ComputerScience,缩写为CS)的定义是:系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究。第1章程序设计引论1.1计算科学与问题求解美国计算机学会(ACM)指出计算机科学是“计算机和算法过程”的研究,包括它们的原理、它们的硬件和软件设计、它们的应用以及它们对社会的影响”。CS又称计算学科(ComputingDiscipline)。计算机学科的根本问题是:什么能、且如何被有效地自动计算。第1章程序设计引论1.1计算科学与问题求解问题求解是指人们在生产、生活中面对新的问题时,由于缺少现成的有效对策所引起的一种积极寻求问题答案的活动过程。问题求解是计算科学的根本目的,计算科学多半也是问题求解的实践中发展起来的。图1-1借助于计算机的问题求解过程第1章程序设计引论1.1计算科学与问题求解尽管关于计算机科学定义有许多种,但它们实质上都强调了算法的研究。算法是一组明确的,有效可计算操作的有序集合,它能在有限的时间内结束,并产生计算结果。第1章程序设计引论1.1计算科学与问题求解如果我们可以指定一个算法来解决问题,那么我们就可以对该问题进行自动化的求解。计算机算法最终需要通过程序设计来实现,程序设计使得计算机科学成为实验学科而非纯理论学科。第1章程序设计引论1.1计算科学与问题求解2006年,美国Carnegie

Mellon大学计算机科学系前系主任周以真(JeannetteM.Wing)教授在《CommunicationsoftheACM》杂志发表了一篇《ComputationalThinking》(计算思维)的文章。第1章程序设计引论1.1计算科学与问题求解计算思维是指运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列思维活动。计算思维强调一切皆可计算,从物理世界模拟到人类社会的模拟,从人类社会模拟再到智能活动,都可以认为是计算的某种形式。将计算思维贯穿于理论教学和实践应用,将有助于促进知识向能力的转化。主要内容计算科学与问题求解程序与程序设计程序设计语言C语言简介C语言程序开发工具与开发步骤第1章程序设计引论1.2.1程序程序并非计算机专利,《舌尖上的中国》第二季第2集《心传》——空心挂面加工:和面、搓条、盘条、上筷子、阴条、分筷子、再阴条、出筷子、装封。1.2程序与程序设计第1章程序设计引论1.2.1程序计算机程序(ComputerProgram)是指一组指示计算机或其他具有信息处理能力装置每一步动作的指令,通常用某种程序设计语言编写,运行于某种目标体系结构上。计算机(硬件)本身并不是一个智能设备,它需要运行特定的程序才能完成特定的任务。第1章程序设计引论1.2.1

程序图1-2利用全景拍摄软件拍摄的全景照(拍摄于DevilsTower,USA)第1章程序设计引论1.2.1

程序

图1-3电波钟表

图1-4车载行车电脑第1章程序设计引论1.2.1

程序第1章程序设计引论1.2.2

程序设计程序设计,简单地讲就是设计“程序”的过程,程序设计是创造性劳动。第1章程序设计引论1.2.2

程序设计程序设计并非程序员的专利。程序设计并非计算机科学的全部。主要内容计算科学与问题求解程序与程序设计程序设计语言C语言简介C语言程序开发工具与开发步骤第1章程序设计引论1.3.1

程序设计语言的分类机器语言0,1二进制代码,机器可以唯一识别的语言1.3

程序设计语言第1章程序设计引论1.3.1

程序设计语言的分类汇编语言用指令助记符来表示机器指令。第1章程序设计引论1.3.1

程序设计语言的分类高级语言用接近自然语言的代码来书写程序。例如:printf(“%d”,1+2);System.out.print(1+2);第1章程序设计引论1.3.1程序设计语言的分类高级语言历史上共出现2000多种。例如:VisualC#JavaPHPJavaScriptObjective-C第1章程序设计引论1.3.2程序的执行方式编译型解释型虚拟机型图1-5编译连接示意图图1-6解释流程示意图

第1章程序设计引论1.3.2程序的执行方式编译型解释型虚拟机型图1-7虚拟机工作原理示意图图1-6解释流程示意图

主要内容计算科学与问题求解程序与程序设计程序设计语言C语言简介C语言程序开发工具与开发步骤第1章程序设计引论1.4C语言简介KenThompson江湖人称kenDennisM.Ritchie江湖人称dmr第1章程序设计引论1.4C语言简介1969年,贝尔实验室,KenThompson和DennisM.Ritchie梦想能遨游宇宙Ken设计了一款电子游戏——“SpaceTravel”游戏在PDP-7小型机上开发,因为这台机器免费免费的机器没有操作系统玩游戏之前,先给PDP-7做个操作系统,命名为“UNIX”第1章程序设计引论1.4C语言简介汇编编写UNIX太慢,又没有称手的高级语言,怎么办?70年代,将BCPL语言改造成更适合开发UNIX的B语言1971年,DennisM.Ritchie开始和Thompson合作开发UNIX,将B语言改造成C语言,1972年正式发布第1章程序设计引论1.4C语言简介1983年,因为UNIX和C语言的巨大成功,ken和dmr共同获得当年度的计算机界最高奖——图灵奖第1章程序设计引论1.4C语言简介1972年产生于Bell实验室第1章程序设计引论1.4C语言简介Ritchie和Unix的设计者KenThompson接受美国国家技术勋章第1章程序设计引论1.4C语言简介语言简洁,功能强大应用广泛,对许多主流

程序设计语言产生重要

影响Cisquirky,flawed,andanenormoussuccess.第1章程序设计引论1.4C语言简介TIOBE程序设计语言流行度排名(2014年8月)数据来源第1章程序设计引论1.4C语言简介目前广泛应用于嵌入式系统开发可为学习C++、Java等其它程序设计语言打下基础主要内容计算科学与问题求解程序与程序设计程序设计语言C语言简介C语言程序开发工具与开发步骤第1章程序设计引论1.5C语言程序开发工具《论语》:“工欲善其事,必先利其器”VisualC++6.0、VisualC++2013和Code::Blocks等。推荐使用:Code::Blocks或VisualC++2013。本书使用:

开源工具Code::BlocksCode::Blocks(简称CB),功能强大,支持C与C++,是一款跨平台的C/C++集成开发环境(IDE)。第1章程序设计引论1.5C语言程序开发工具可以配置多种编译器,建议读者使用GCC编译器和GDB调试器。首页地址:http:://DownloadthebinaryreleaseforWindowscodeblocks-13.12mingw-setup.exe第1章程序设计引论1.5C语言程序开发工具初始界面第1章程序设计引论1.5C语言程序开发工具(方式一)新建consoleapplication

Project第1章程序设计引论1.5C语言程序开发工具选择C语言第1章程序设计引论1.5C语言程序开发工具输入ProjectTitle输入项目名称welcome选择存放路径第1章程序设计引论1.5C语言程序开发工具设置编译器

设置编译器一般用默认选项第1章程序设计引论1.5C语言程序开发工具Code::Blocks视图

编辑窗口Message窗口工程视图窗口编译运行编译并运行第1章程序设计引论1.5C语言程序开发工具HelloWorld程序简介

第1章程序设计引论1.5C语言程序开发工具程序运行结果

HelloWorld!Processreturned0(0x0)executiontime:0.042sPressanykeytocontinue.第1章程序设计引论1.5C语言程序开发工具(方式二)建立单个C文件

第1章程序设计引论1.5C语言程序开发工具(方式二)建立单个C文件#include<stdio.h>intmain(){ printf("welcometoC!\n"); printf("Thereisawillthereisaway!\n"); return0;}WelcometoC!Thereisawillthereisaway!第1章程序设计引论1.6C语言程序开发步骤需求分析设计编写源程序编译链接运行调试第1章程序设计引论1.6C语言程序开发步骤程序调试#include<stdio.h>intmain(){ printf("welcometoC!\n") printf("Thereisawillthereisaway!\n"); return0;}缺少;号第1章程序设计引论1.6C语言程序开发步骤调试(Debug)d:\c\ch1\1_1.c5 error:expected‘;’beforeprintf第1章程序设计引论1.6C语言程序开发步骤Bug第1章程序设计引论1.6C语言程序开发步骤Bug分类语法错运行时错误逻辑错/G2S/site/preview#/rich/v/9314?ref=¤toc=948

教学网站江西省高等学校精品资源共享课程揭安全著,高级语言程序设计(C语言版)——基于计算思维能力培养ISBN:978-7-115-39460-6

人民邮电出版社2015.8版江西省教学成果一等奖建设成果,江西省精品资源共享课程主讲教材,配套教辅:课件,教材源码,习题解答,实验案例,实验答案,综合设计案例源码。人民邮电出版社网站可以下载:PPT课件,源代码,习题解答,实验案例,实验案例解答等资料。使用教材的老师如需实验解答、实验源码等更多教学资源请联系:揭安全,jieanquan@163.com南昌市紫阳大道99号江西师大计算机信息工程学院(330022)揭安全高级语言程序设计揭安全jieanquan@163.com人民邮电出版社高等学校精品资源共享课程(省级)省级教学成果一等奖建设教材揭安全jieanquan@163.com江西师范大学计算机信息工程学院第2章数据类型、运算符与表达式高等学校精品资源共享课程(省级)省级教学成果一等奖建设教材主要内容C程序基本结构C程序中常见的符号数据类型常量与变量运算符与表达式2.1C程序基本结构【例2.1】编写一个能输出键盘上输入的任意两个整数中的较大数的C程序。#include<stdio.h>/* @函数名称:max

@入口参数:两个整型形式参数a,b

@函数功能:返回两个形式参数中的较大者

@文件名:2_1.c*/注释2.1C程序基本结构intmax(inta,intb){ intm;

if(a>b)m=a; else m=b;returnm;

/*如果a>b,则返回a,否则返回b*/}函数名称函数体2.1C程序基本结构/* @函数名称:main()

@函数功能:主函数*/intmain(){

intx,y,z; /*变量定义*/

printf("Pleaseinputtwointegers:");scanf("%d%d",&x,&y); /*输入两个整数*/

2.1C程序基本结构

z=max(x,y);/*调用函数max求x,y中的较大者存入z*/printf("较大的数是:%d\n",z);

/*输出z的值*/return0;}函数调用z=max(x,y);intmax(inta,intb){

…returnm;}2.1C程序基本结构语句分隔符;主要内容C程序基本结构C程序中常见的符号数据类型常量与变量运算符与表达式2.2C程序中常见的符号1、标识符:用于标识程序中的函数、变量等对象的名称统称标识符。

标识符分为系统预定义标识符和用户自定义标识符两类。命名规则:(1)英文字母或下划线开头,中间可以是数字或英文字线、下划线等。(2)见名知意例如:max,a,b,m,sum,_price都是合法的标识符,而my@name,9cd为非法的标识符。

2.2C程序中常见的符号2、关键字:又称保留字,它们是C语言中预先规定的具有固定含义的标识符。例如:int表示整数类型char表示字符类型return表示返回主调函数。用户在自定义标识符不能与关键字相同。2.2C程序中常见的符号3、运算符:C语言的运算符有34种,如加、减、乘、除,分别表示为:+、-、*、/按运算对象分:单目运算符,如求负(-),自增(++)等双目运算符,如+、-三目运算符,唯一一个,条件运算符?:2.2C程序中常见的符号4、数据:程序的加工对象,分为常量与变量。常量是指程序运行过程中保持不变的量。如:"Pleaseinputtwointegers:"变量是指程序运行过程中可以修改的数据,一般对应内存单元。如:intx,y,z;2.2C程序中常见的符号5、分隔符与其它符号空格、回车、逗号、分号都是有效的分隔符。{、}、/*和*/等具有特定含义的符号块注释则包含在“/*”与“*/”之间。主要内容C程序基本结构C程序中常见的符号数据类型常量与变量运算符与表达式2.3数据类型处理输入设备输出设备数据数据2.3数据类型2.3数据类型2.3数据类型基本数据类型和构造数据类型常用的数据类型有“整数型”、“浮点型”、“字符型”、“字符串型”和“布尔型”。数据类型决定了:该变量能够存放数据的类型该变量占用内存占用的空间大小能够对该变量执行的操作为何要区分数据类型?2.3数据类型图2-5炊具和餐具的类型决定了其功能与用途2.3数据类型高级语言中的同一种数据类型又根据需要存储数据的范围区分成了不同的类别。如,在C语言中整型可分为基本整型(int)、短整型(shortint)和长整型(longint)。2.3数据类型数据类型基本类型构造类型指针类型无类型整型实型(浮点型)字符型char枚举类型数组类型结构体类型共用体类型单精度实型float双精度实型double基本整型int长整型longint

短整型shortint无符号整型unsignedint长双精度实型longlongint2.3数据类型int整数,在目前绝大多数机器上占4个字节float单精度浮点数,4个字节double双精度浮点数,8个字节char字符,1个字节,表示256个ASCII字符,或0~255的整数2.3数据类型shortshortint,简写为short,短整数,2个字节longlongint,简写为long,长整数,4个字节Longlongint,8个字节longdouble,长双精度(高精度)浮点数,10个字节unsigned用来修饰char、int、short和long无符号整数(正整数和0)类型名范围存储大小char0~2551个字节shortint-215(-32768)~215-1(32767)2个字节int-231(-2147483648)~231-1(2147483647)4个字节unsignedint0~232-14个字节longlonglong-231(-2147483648)~231-1(2147483647)-263~263-14个字节8个字节float-3.4×10-38~3.4×1038精度为6位有效数字4个字节double-1.7×10-308~1.7×10308精度为15位有效数字8个字节如何知道变量占用的内存大小?sizeof是C语言的运算符,并非函数,用于计算类型占用的字节数两种语法形式sizeof(类型)结果为类型占用的字节数sizeof(变量名)结果为表达式值所属类型占用的字节数一般都使用sizeof(变量名)2.3数据类型【例2.2】测试各种数据类型占用的内存空间#include<stdio.h>intmain(){ printf("数据类型

字节\n"); printf("char%d\n",sizeof(char)); printf("short %d\n",sizeof(short)); printf("int %d\n",sizeof(int)); printf("unsigned

%d\n",sizeof(unsigned)); printf("long %d\n",sizeof(long));

printf("longlong%d\n

",sizeof(longlong)); printf("float %d\n",sizeof(float)); printf("double %d\n",sizeof(double)); return0;}2.3数据类型2.3数据类型数据类型字节char 1short 2int 4unsigned 4long 4longlong 8float 4double 8主要内容C程序基本结构C程序中常见的符号数据类型常量与变量运算符与表达式2.4常量

常量按数据类型可分为整型常量、字符型常量、实型常量和字符串常量等。2.4.1整型常量

整型常数的表示形式(1)十进制整数:

如2008、+1975、-1,18u,123L,140Lu(2)八进制整数:

例如,012表示(12)8,-020表示(-20)8。(3)十六进制整数:

例如,0x20表示十六进制的(20)16,其等值的十进制数是30,同理0x2A3B表示十六进制数(2A3B)16整型常量默认为int型。2.4.2实型常量

实型常量的表示形式(1)十进制小数表示形式

如.56、3.1415926、-96.25f、20.(2)指数形式

例如,314.15926e-2、0.031415926E2。注意:e4,2E4.5,.e8都是不合法的表示形式。浮点型常量默认为double型。2.4.3字符常量

C语言中用单引号括起来的单个字符为字符常量。如’A’,‘9’等。ASCII码

b7b6b5b4b3b2b1b001000001附录B是常用字符的ASCII码表2.4.3字符常量小写字母‘a’的ASCII码为97,其它小写字母的ASCII码依次递增。大写字母‘A’的ASCII码为65,其它大写字母的ASCII码依次递增。大写字母与其对应的小写字母的ASCII码相差32。将一个大写字母的ASCII码加上32可以将它转换成对应的小写字母;数字字符‘0’的ASCII码为48,其它数字字符的ASCII码依次递增。

字符含义字符含义‘\n’换行(Newline)‘\a’响铃报警提示音(AlertorBell)‘\r’回车(不换行)(CarriageReturn)‘\”’一个双引号(DoubleQuotationMark)‘\0’空字符,通常用作字符串结束标志‘\’’单引号(SingleQuotationMark)‘\t’水平制表(HorizontalTabulation)‘\\’一个反斜线(Backslash)‘\v’垂直制表(VerticalTabulation)‘\?’问号(QuestionMark)‘\b’退格(Backspace)‘\ddd’1到3位八进制ASCII码值所代表的字符‘\f’走纸换页(FormFeed)‘\xhh’1到2位十六进制ASCII码值所代表的字符转义字符转义字符例如:printf(“Hesaid\”Ilikeclanguageverymuch.\”\n”);输出结果为:Hesaid“Ilikeclanguageverymuch.”

例2.3以下选项不是C语言字符常量的是()。A.'\x41'

B.'\\'C.'9'D.'国'

2.4.4字符串常量用双引号括起来的串如:"Helloworld!","a","中国","3.14159"等。

2.4.5宏常量可用#define宏定义宏常量例如,若有定义:#definePI3.1415926则area=PI*10.2*10.2;等价于area=3.1415926*10.2*10.2;

注意:后面不需加;号2.5变量变量的本质是内存或CPU中的寄存器,其值可以改变。使用变量前要需根据存储的数据类型与数据范围选择相应的变量类型。

2.5.1变量的声明例如:intlength;floatarea,volume;charanswer,selection;ANSIC变量使用基本原则:变量必须先声明,后使用;所有变量必须在第一条可执行语句前声明;声明的顺序无关紧要;一条声明语句可声明若干个同类型的变量。2.5.1变量的声明每一条完整的声明语句都要以分号结尾;在同一个函数中,不能声明同名的多个变量。变量的命名规则同用户自定义标识符的命名规则,同时遵循见名知意的原则。

2.5.2变量初始化

新定义的变量其值为不确定数据。inta,b;charc;floatarea;2.5.2变量初始化

新定义的变量其值为不确定数据。inta=20,b=30;charc=‘A’;floatarea;2.5.3变量的访问与使用

简单赋值语句语法:

变量=

表达式;Don’tforgetthesemicolon!!Everyassignmentexpressionhasavalue2.5.3变量的访问与使用例如:a=b; 30b=0; c=c+1;0662.5.3变量的访问与使用简单赋值语句对变量进行赋值时,赋值语句右边的表达式类型应该与赋值语句左边的变量类型相容。ValidExample: InvalidExample:

intx; charc; x=20; c=“Hello”;2.5.3变量的访问与使用多重赋值语句语法:变量1=

变量2=

表达式;Don’tforgetthesemicolon!!右结合:从右向左赋值变量1=(变量2=表达式);2.5.3变量的访问与使用多重赋值语句Example:inta,b;intc;a=b=c=0;b??a??

c??0002.5.3变量的访问与使用显示变量的值printf(“a:%d\n”,a);a:30注意:%d仅用于int型变量,如果要显示字符型,可以用%c来代替%d。如果要显示float型变量,则需要用%f。默认情况下,%f会显示出小数点后6位数字。主要内容C程序基本结构C程序中常见的符号数据类型常量与变量运算符与表达式2.6运算符与表达式算术运算符关系运算符逻辑运算符赋值运算符条件运算符逗号运算符指针运算符自增(自减)运算符求字节运算符和特殊运算符2.6运算符与表达式Example:x+y操作数(Operand)运算符(Operator)操作数(Operand)2.6.1算术运算符Addition(+)Subtraction(-)Multiplication(*)Division(/)Modulus(%)2.6.1算术运算符例如:可表示为:(x+y)/2-(a*b-(a+b))/(x-y)(x+y)/2-(a*b-a-b)/(x-y)除法/Division浮点数除法(FloatingDivision)x

ory

orbotharefloats整数除法(IntegerDivision)x

andy

areintegersExample:x/y除法/DivisionExample:anintegeraninteger

theresultisalsoaninteger11/2=5除法/DivisionExample:andoubleaninteger

theresultisalsoandouble11.0/2=5.5求余%(Modulus)操作数必须为整数Example:11%3=2anintegeranintegertheresultistheremainderof11/3113392remainderresult求余(Modulus)余数符号与被除数同号Example:-26%-8=-2anintegeraninteger-26-83-24-2remainderresulttheresultistheremainderof-26/-8求余(Modulus)余数符号与被除数同号Example:15%-4=3anintegeraninteger15-4-3123remainderresulttheresultistheremainderof15/-4【例2.4】写出下面程序的输出结果。#include<stdio.h>intmain(){inta=17,integerResult;floatb=17.0,floatResult;integerResult=a/2;printf("integerResult:%d\n",integerResult);floatResult=b/2;printf("floatResult:%f\n",floatResult);printf("Remainderof(7+79)and24is:%d",(7+79)%24);return0;}integerResult:8floatResult:8.500000Remainderof(7+79)and24is:14【例2.5】利用算术运算符求一个三位整数的百位数、十位数和个位数,并输出它们和与乘积。如何分离个位、十位、百位数字?个位:153%10

=3十位:153/10%10=5百位:153/100=1#include<stdio.h>intmain(){intx,b0,b1,b2,sum,product;x=153;b0=x%10; //求个位数b1=x/10%10; //求十位数b2=x/100; //求百位数sum=b0+b1+b2;product=b0*b1*b2;printf("b2=%d\tb1=%d\tb0=%d\n",b2,b1,b0);printf("sum=%d\tproduct=%d\n",sum,product);return0;}b2=1b1=5b0=3sum=9product=152.6.2运算符的优先级与结合性当算术表达式包含两个或两个以上的算术运算符时

首先要确定运算顺序所有的运算符都有一个优先级(OrderofPrecedence)

2.6.2运算符的优先级与结合性附录C——运算符的优先级与结合性不同优先级时的运算顺序:——从高到低

例如:*,/,%

优先级大于+、-相同优先级时的运算顺序:——左结合为从左到右,右结合为从右到左例如:算术运算为左结合,赋值运算为右结合2.6.2运算符的优先级与结合性除后置++、--运算符之外的一元运算符和三元运算符均为右结合;除赋值运算符之外的所有二元运算符均为左结合。自增和自减运算符(++和--)用作后缀运算符时(比如x++)具有较高的优先级。运算符的优先级不需要去死记硬背,编写程序时可以通过使用()来改变表达式的计算顺序。5+2+4*3-6=?例:算术表达式计算顺序71219-6=13=135+2+4*(3–6)=?利用()改变计算顺序:7-3=-5-12=-572.6.3关系运算符运算符意义范例结果<

小于10<90<=小于或等于8<=201>

大于10>81>=大于或等于8>=100==等于10==101!=不等于9!=90例如,表达式10+30<10+40等价于(10+30)<(10+40)。2.6.3关系运算符注意不要直接判断两个浮点数是否相等。注意区别C语言的关系表达式与数学中的关系表达式。在数学中10<x<20,表示x∈(10,20)在C语言中能用10<x<20表示x∈(10,20)吗?2.6.4复合赋值运算符Syntax:

变量x=变量x

运算符op

表达式;

变量x

运算符op=表达式;例如:

x=x+10;可写成:x+=10;2.6.4复合赋值运算符Example:num=num+2;num15

15+2

1717Example:num+=

2;similarto

num=num+2shorthandassignmentoperator2.6.4复合赋值运算符运算符复合赋值运算例子计算过程+=num+=2;num=num+2;-=num-=2;num=num–2;*=num*=a+b;num=num*(a+b);/=num/=a-b;num=num/(a-b);%=num%=2;num=num%2;2.6.4复合赋值运算符例如,若有变量定义intx=10;则表达式: x*=2+3;等价于: x=x*(2+3);

(x的结果为50)而不是: x=x*2+3;

(x的结果为23)2.6.4复合赋值运算符例如,若有变量定义inta=10,b=20,c=30;表达式a+=b+=c;等价于a+=(b+=c); //执行完后a的值为60,b的值为50,c的值为30执行后,a,b,c的值分别是?2.6.4复合赋值运算符再如,若有变量定义inta=3;表达式 a+=a*=a-=1;的计算顺序为:a-=1; //执行完成后a为2a*=a; //执行完成后a为4a+=a; //执行完后a为82.6.5++和--运算符x++,x--,++x,--x++让参与运算的变量加1,--让参与运算的变量减1作为后缀(postfix)运算符时,先取n的值参与表达式计算,然后x自身加/减1y=x++;y=x;x=x+1;2.6.5++和--运算符x++,x--,++x,--x++让参与运算的变量加1,--让参与运算的变量减1作为前缀(prefix)运算符时,先将x的值加1,然后再取x的值参与表达式计算y=++x;x=x+1;y=x;Example:y=x++

-2x10similartoy=x–2;x=x+1;后缀(Postfix)增1和减1运算符y??811Example:y=++x-2x10similartox=x+1;y=x–2;y??911前缀(Prefix)增1和减1运算符y=-x++; printf("x:%d,y:%d\n",x,y); x10similartoy=-(x++);后缀(Postfix)增1和减1运算符11y10-10x=x+1;printf(“x:%d,y:%d\n",x,y);x:11,y:-102.6.5++和--运算符良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次增1或者减1运算过多的增1和减1运算混合,不仅可读性差,而且因为编译器实现的方法不同,导致不同编译器产生不同的运行结果2.7表达式的类型转换赋值表达式的类型转换char,shortintunsignedlongunsignedlonglonglongfloatdoubledoublefloat2.7表达式的类型转换不当的赋值将导致溢出2.7表达式的类型转换例如,有变量定义:inta=2;longb=10;doublec=25;floatsum=0;表达式sum=‘A'+2*a+b*c的计算过程如图2-10所示:2.7表达式的类型转换强制类型转换

(类型说明符)表达式(float)(x+y)

将x+y的值转换成float类型。(int)a+b

将a的值取出转换为int型再与b相加。(double)b

取出变量b的值转换为double型2.7表达式的类型转换【例2.7】分析下面程序的运行结果。#include<stdio.h>intmain(){

intsum;floata=2.5;sum=2+(int)a;printf("sum=%d,a=%f\n",sum,a);return0;}sum=4,a=2.5000002.8const常量【例2.8】计算并输出圆的周长和面积。#include<stdio.h>intmain(){constfloatpi=3.1415926;//定义const常量floatr=5.0;doublelength,area;length=2.0*pi*r; //计算圆的周长area=pi*r*r; //计算圆的面积printf("length=%f\n",length); //输出圆的周长printf("area=%f\n",area); //输出圆的面积return0;}length=31.415924area=78.539810/G2S/site/preview#/rich/v/9314?ref=¤toc=948

教学网站江西省高等学校精品资源共享课程揭安全著,高级语言程序设计(C语言版)——基于计算思维能力培养ISBN:978-7-115-39460-6

人民邮电出版社2015.8版订价48元江西省教学成果一等奖建设成果,江西省精品资源共享课程主讲教材,配套教辅:课件,教材源码,习题解答,实验案例,实验答案,综合设计案例源码。人民邮电出版社网站可以下载:PPT课件,源代码,习题解答,实验案例,实验案例解答等资料。使用教材的老师如需实验解答、实验源码等更多教学资源请联系:揭安全,jieanquan@163.com南昌市紫阳大道99号江西师大计算机信息工程学院(330022)揭安全高级语言程序设计揭安全jieanquan@163.com人民邮电出版社高等学校精品资源共享课程(省级)省级教学成果一等奖建设教材揭安全jieanquan@163.com江西师范大学计算机信息工程学院第3章算法与简单C程序设计高等学校精品资源共享课程(省级)省级教学成果一等奖建设教材主要内容C语句C程序输入、输出操作的实现算法简单程序设计举例实验三3.1C语言表达式语句例如:z=x*y+6;i++;空语句;复合语句{ …}主要内容C语句C程序输入、输出操作的实现算法简单程序设计举例实验三3.2.1字符输入/输出通过调用标准库函数来实现#include<stdio.h>字符输出函数putchar(c)

输出一个字符c字符输入函数getchar()

无参数函数值为从输入设备接收的字符

【例3.1】putchar函数应用举例。#include<stdio.h>intmain(){

chara='n',b='i';intc=99;putchar(a-32); //输出大写字母Nputchar(b);putchar(c);putchar(c+2);putchar('\n'); //输出换行符return0;}Nice【例3.2】getchar函数应用举例。#include<stdio.h>intmain(){chara,b;a=getchar();b=getchar();putchar(a);putchar(b);return0;}AB↙ABAB↙A【例3.3】下面的程序希望根据提示首先接收一个从键盘输入的字符并输出所输入的字符,再提示输入下一个字符,然后输出第二次输入的字符。#include<stdio.h>intmain(){chara,b;printf("\nPleaseinputacharacterandthenpressEnter:");a=getchar();putchar(a);printf("\nPleaseinputacharacterandthenpressEnteragain:");b=getchar();putchar(b);return0;}PleaseinputacharacterandthenpressEnter:A↙APleaseinputacharacterandthenpressEnter:B↙B期望运行结果【例3.3】下面的程序希望根据提示首先接收一个从键盘输入的字符并输出所输入的字符,再提示输入下一个字符,然后输出第二次输入的字符。#include<stdio.h>intmain(){chara,b;printf("\nPleaseinputacharacterandthenpressEnter:");a=getchar();putchar(a);printf("\nPleaseinputacharacterandthenpressEnteragain:");b=getchar();putchar(b);return0;}PleaseinputacharacterandthenpressEnter:A↙APleaseinputacharacterandthenpressEnter:实际运行结果【例3.3】下面的程序希望根据提示首先接收一个从键盘输入的字符并输出所输入的字符,再提示输入下一个字符,然后输出第二次输入的字符。#include<stdio.h>intmain(){chara,b;printf("\nPleaseinputacharacterandthenpressEnter:");a=getchar();putchar(a);printf("\nPleaseinputacharacterandthenpressEnteragain:");b=getchar();putchar(b);return0;}PleaseinputacharacterandthenpressEnter:AB↙APleaseinputacharacterandthenpressEnteragain:B【例3.4】利用getchar()函数清除缓冲区中的驻留字符。#include<stdio.h>intmain(){chara,b;printf("\nPleaseinputacharacterandthenpressEnter:");a=getchar();putchar(a);getchar();//清除驻留在缓冲区中的加车符printf("\nPleaseinputacharacterandthenpressEnteragain:");b=getchar();putchar(b);return0;}PleaseinputacharacterandthenpressEnter:A↙APleaseinputacharacterandthenpressEnteragain:B↙B1、printf()函数printf(“格式串”,表达式1,表达式2,…);3.2.2格式输入/输出格式转换控制字符表类型说明类型说明d以带符号的十进制形式输出整数(正数不输出符号)c以字符形式输出,只输出一个字符o以八进制无符号形式输出整数(不输出前导符0)s输出字符串x十六进制无符号整数(小写字母a~f)f以小数形式输出单、双精度数、默认输出6位小数X十六进制无符号整数(大写字母A~F)e十进制指数(小写e)u以无符号十进制形式输出整数E十进制指数(大写E)g,G选用%f或%e格式中输出宽度较短的一个格式在格式说明中,%和上述格式转换字符之间可以按以下顺序插入如下附加字符:%+、-、#m.nh、l格式字符↓↓↓↓↓↓开始符标志字符宽度指示符精度指示符长度修正符格式转换字符printf函数附加字符表字符说

明标志字符-输出的数字或字符在域内向左对齐,右端补空格,缺省是右对齐+输出数据为正是冠以+号,为负时冠以-号,缺省时正数不输出+号#八进制输出时加前缀0,十六进制输出时加前缀0x宽度指示m指示输出项所占的最小宽度。当m小于数据实际宽度时,按实际宽度输出。例如,printf(“%3d”,1234);实际输出为:1234字符说

明精度指示.n对实数,表示输出n位小数;对字符串,表示截取的字符个数。例如,printf(“%6.2f”,12.3467);输出结果为:_12.35(_代表空格)长度修正字母l用于长整数,可加在格式字符d,o,x,u之间字母h用于短整数,可加在格式字符d,o,x,u之间printf函数附加字符表(续)例:printf("%6d\n",123);printf("%-6d\n",123);输出结果为:

123123例:又如,printf(“%+d,%+d\n”,123,-123);输出结果为:+123,-123例:

若要输出八进制或十六进制,可以使用以下形式:printf(“%o,%x\n”,10,16);输出结果为:12,10【例3.5】格式输出程序示例。#include<stdio.h>#include<stdio.h>intmain(){inta=97;longb=1234567;floatc=12.34567;printf("%c,%d,%6d,%-6d,%1d\n",a,a,a,a,a);printf(“%ld,%8ld,%4ld\n”,b,b,b,a);

//此处输出项列表比格式转换符多一项printf("%f,%10f,%10.2f,%-10.2f\n",c,c,c,c,c);printf("%s,%8.6s,%-8.3s\n","Hello","Hello","Hello");return0;}a,97,97,97,971234567,1234567,123456712.345670,12.345670,12.35,12.35Hello,Hello,Hel编译程序不对输出项列表的项数与格式转换符个数进行检查,当输出项列表多于格式转换符时,多余的项将不被输出。反之,则可能出现运行时错误。此外,当格式转换符与输出项的类型不匹配时,编译程序也不做检查,但在运行时将得到不正确的运行结果。初写程序时要特别注意,不要误用%d输出float和double的表达式,同理,也不能用%f输出int型的表达式。

但%d可输出字符的ASCII码,反之,%c可以输出ASCII码值对应的字符。2、scanf()函数 scanf(“格式控制串”,地址列表);%*mh、l格式字符↓↓↓↓↓开始符赋值抑制符宽度指示符长度修正符格式转换字符3.2C程序输入/输出操作的实现scanf格式字符类型说明d输入有符号的十进制整数u输入无符号的十进制整数o输入无符号的八进制整数x,X输入无符号的十六进制整数(大小写作用相同)c输入单个字符s输入字符串。将字符串送到一个字符数组中,在输入时以非空格白字符开始,以第一个空白字符结束。字符串以串结束标志’\0’作为其最后一个字符类型说明f输入float型实数,可以用小数形式或指数形式输入;输入double型实数,需用%lfe,E,g,G与f作用相同,e与f,g可以互相转换。注意,输入double数据需加前缀lscanf格式字符scanf例如:inta;doubleb;scanf(“%d%lf”,&a,&b); 输入1212.34↙后变量a获得12,变量b获得12.34。scanf

若将输入语句改成:

scanf(“%d,%lf”,&a,&b);

则输入格式应为:

12,12.34↙scanf同理,scanf(“a=%d,b=%lf”,&a,&b);输入时应采用以下格式:a=12,b=12.34↙【例3.6】scanf函数输入示例。#include<stdio.h>intmain(){inta;charb;

printf("PleaseinputanintegerandthenpressEnter:");scanf("%d",&a);printf("a=%d\n",a);

printf("PleaseinputancharacterandthenpressEnter:");scanf("%c",&b);printf("b=%c\n",b);return0;}PleaseinputanintegerandthenpressEnter:12↙a=12PleaseinputancharacterandthenpressEnter:b=方法1:增加getchar();方法2:改为scanf(“%c”,&b)3.2C程序输入/输出操作的实现宽度指示符宽度指示符用十进制整数指定输入数据的最大宽度,例如:scanf(“%3d”,&a);若输入12345,则仅把前3位数123赋值给整型变量a,其余部分驻留在键盘缓冲区。又如:scanf(“%3d%3d”,&a,&b);若输入数据12345,则把前3位123赋值给整型变量a,而把后两位45赋值给变量b。赋值抑制符“*”

赋值抵制符“*”表示输入项读入后不赋值给相应的变量,即跳过该输入值。

例如:scanf(“%d%*d%d”,&a,&b);

若输入101112↙

则把10赋值给变量a,11被读入但未被赋值给变量b,12被赋值给变量b。3.2C程序输入/输出操作的实现长度修正符

长度修正符h和l分别用于输入短整数和长整数,另外l还可加在格式转换符f前,用于输入double型变量的值。

例如:

doublex;scanf(“%lf”,&x);3.2C程序输入/输出操作的实现常见错误举例inta,b;floatx;scanf(“%d”,a);scanf(“a=%d\n”,&a);scanf(“%7.2”,&x)scanf(“%d%d”,&a,&b);12,34↙3.2C程序输入/输出操作的实现【例3.7】从键盘接收用户输入的圆的半径,计算并输出圆的周长和面积。#include<stdio.h>intmain(){constfloatpi=3.1415926; //定义const常量floatr;doublelength,area;

printf("Pleaseinputradiusofacicle:");

scanf("%f",&r); //输入圆的半径

length=2.0*pi*r; //计算圆的周长

area=pi*r*r; //计算圆的面积

printf("length=%f\n",length);//输出圆的周长

printf("area=%f\n",area); //输出圆的面积

return0;}主要内容C语句C程序输入、输出操作的实现算法简单程序设计举例实验三3.3算法数据结构算法程序+=N.Wirth著名论断:DonaldE.Knuth所说“计算机科学就是算法的研究”,3.3.1问题求解过程中算法的作用

利用计算机进行问题求解,根本上就是弄清楚两个基本问题,一是“做什么”,二是“怎么做”。

即What和How的问题。

算法设计回答的就是“怎么做”的问题。

对同一个问题,往往有不同的解题方法,各种方法有优劣之分。检索(查找)计算机是如何帮用户查找数据的?顺序检索“瞎子”找真币假币假币假币假币假币假币顺序检索顺序检索效率太低!无法满足应用要求!怎样提高检索效率?幸运52——猜价格【例3.8】序列A包含14个有序数据,如图3-2所示,分析顺序查找方法查找22的过程。0123456789101112136549328101235232227115【例3.9】假设序列A已排序存放,如图3-3所示,分析采用二分搜索法在其中查找22的过程。01234567891011121314568910121522232732357891011121312152223273235789121522李开复博士文章:《算法的力量》算法是计算机科学领域最重要的基石之一。把计算机的发展放到应用和数据飞速增长的大环境下,算法的重要性不是在日益减小,而是在日益加强。推荐阅读3.3.2算法的特点1、有穷性2、确定性3、可行性4、零个或多个输入5、一个或多个输出3.3.3算法的描述1、自然语言表示法【例3.10】磁带A录有大学英语听力,磁带B录有新概念英语听力,采用自然语言描述交换这两盘磁带内容。另准备一盘无用磁带C;将磁带A中的大学英语听力转录到C中;将磁带B中的新概念听力转录到磁带A中;将磁带C中的大学英语听力转录到磁带B中。2、伪代码表示【例3.10】磁带A录有大学英语听力,磁带B录有新概念英语听力,采用自然语言描述交换这两盘磁带内容。C←AA←BB←C3.3.3算法的描述3、流程图3.3.3算法的描述顺序结构——按照所述顺序处理;选择结构——又称分支结构,根据判断条件改变执行流程;循环结构——当条件成立时,反复执行给定的处理操作。(1)顺序结构(2)选择结构【例3.11】输入x,计算x的绝对值存入y中,最后输出y的值。请画出其算法流程。(3)循环结构【例3.12】用传统流程图描述计算的算法。4、N-S结构流程图5、用计算机语言表示算法【例3.14】求解的C语言算法。#include<stdio.h>intmain(){intsum,i;sum=0;i=1;while(i<=100) //当i<=100时,重复执行复合语句{sum=sum+i; //将sum与i相加,结果再存入sumi++; //将i的值加1,结果再存入i}printf("1+2+...+100=%d\n",sum); //输出结果return0;}1+2+3...+100=5050主要内容C语句C程序输入、输出操作的实现算法简单程序设计举例实验三3.4简单程序设计举例【例3.15】从键盘输入两个整数后输出,交换两个变量的值后再输出它们的值。例:交换变量的值

xy步骤:1x->temptemp=x;temp2y->xx=y;3temp->yy=temp;3.4简单程序设计举例【例3.15】从键盘输入两个整数后输出,交换两个变量的值后再输出它们的值。#include<stdio.h>intmain(){

inta,b,temp;

printf("Pleaseinputtwointeger(suchas10,20):");scanf("%d,%d",&a,&b)

温馨提示

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

最新文档

评论

0/150

提交评论