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

下载本文档

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

文档简介

第一章C语言概述

一、C语言及其学习特点1.为什么从C语言开始开发能力最强,应用最广泛操作系统开发、应用程序开发、单片机程序开发、网络程序设计……专业水平的试金石各种专业考试首选程序设计语言:研究生入学考试、程序员考试、等级考试……后续主干课程的重要基础数据结构、数据库程序设计、Java程序设计、可视化程序设计、网络编程……

如何学习C语言编程?编程似写作

先学“字词句”和“语法”,目标是“写作”。学习数据类型、控制结构、语法规则等——学语基掌握程序分析、算法与编程——写文章仅仅读书是不够的

程序是编出来的,程序是调出来——在编程实践中消化知识。没有天生的程序员初学者:有点难。没有学不会的,只有学不精的——除非自己放弃。出于蓝胜于蓝:超过你的老师完全可能。循次渐近很重要阅读/分析程序→摹仿编程→掌握常见程序模块→简单程序→复杂编程仅是起点,而非终点

从此编程与你相伴而行——真正的程序员从此起步。听课要求:切实掌握各章主要内容(预习/听课/消化/归纳)在预习基础上,听课为主,笔记为辅,课后弄懂课件和教材中的程序(会分析,会流利写出)考核方式:作业(书面/上机)、期中考、期未考、课程设计讲义下载:2/课件/C语言课件软件下载:

2/实用软件文件名turboc20.zip教师联系:陈绵献mianxian@21QQ:43286144二、C语言编程步骤从商业化的角度看,C编程步骤如下:

编写程序(写在纸上或输入到电脑上的源程序)

调试程序(修正错误,实现功能)

出售程序(生成的可执行文件)常用开发工具:

◆面向过程常用—TurboC(PC机版,简称TC)◆面向对象常用—C++/VisualC++(可视化,简称VC)最新:

为Windows和Web应用程序提供动态开发环境的VisualC++.NET(C#)

C语言程序加工流程C语言是一种通过编译程序处理的高级程序设计语言。所以其上机的处理流程可用以下示意图表示:例一:最简单的hello.c程序

用记事本编写/用TC直接编写

源程序(.c)———目标程序(.obj)———可执行程序(.exe)

(你编写的)

编译(中间产品)

连接(你出售的)

compilelink具体上机步骤如下:启动机器,稍候后出现:

login

(入网注册命令)

Enteryourloginname:jj03101

(输入用户名)

password:

*****

(输入用户密码)……(显示网络有关信息)

C>tc

(调用TurboC软件)

此时便出现TurboC初始屏幕(第8页图1.2所示)。

用户名:计教031班5号

jj03105(初始密码:jj031)

计应032班11号

jy03211(初始密码:jy032)

密码修改:

setpass——输入原密码——输入新密码——再输入新密码在你的机上如何安装TC?软件下载与解压

0/实用软件turboc20.zip95/实用软件(校外)目录(directory)设置

Includedirectories(头文件所在目录)Librarydirectories(库文件所在目录)Outputdirectories(输出文件所在目录)TurboCdirectories(TC文件所在目录)还有一个好东东:C语言学习系统/*给定半径,求圆的面积*/#definePI3.14159/*编译预处理——宏替换*/#include<stdio.h>/*编译预处理——文件包含*/#include<math.h>/*编译预处理——文件包含*/main()/*主函数*/{floatr,s;/*定义变量r、s类型为单精度实型*/

r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf("半径R=%f时,面积S=%f\n",r,s);/*输出结果*/}三、C程序的基本结构例一求圆面积程序

area.c/*给定半径,求圆的面积*/#definePI3.14159/*编译预处理——宏替换*/#include<stdio.h>/*编译预处理——文件包含*/#include<math.h>/*编译预处理——文件包含*/main()/*主函数*/{floatr,s;/*定义变量r、s类型为单精度实型*/r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf("半径R=%f时,面积S=%f\n",r,s);/*输出结果*/}例一(求圆面积程序area.c)分析注释部份P5这部分内容不会被编译,也不被执行

编译预处理程序编译、执行前系统自动进行的特殊处理特点:以#开头结束处无分号关于编译预处理(宏定义)

P39和P187#definePI3.14159#define—宏定义命令

PI—符号常量(宏名,最好用大写,以区别一般变量)

3.14159—宏体(可以是一个表达式,如3+4)作用:用简单符号代表宏体部份内容(编译时会先自动替换)意义:直观/多次使用/便于修改注意:#define可出现在程序的任一位置(作用范围:由此行到程序末尾)宏定义不是C语句,不必在行未加分号,否则会连分号一起置换。

关于编译预处理(文件包含)

P194#include<stdio.h>

stdio.h——“头文件”(标准前导文件)C语言是一种“装配式”语言,许多常规的工作如输入、输出、数学函数等,往往事先由人做成各种“程序模块”(库函数),存放在各种所谓“头文件”(.h)中。使用时只需进行以下处理——

◆#include“头文件名”

或

#include

<头文件名>

◆在程序的执行部分调用该库函数:函数名(参数)文件包含的作用,就是根据需要把相应的某个“头文件”的内容在编译时先整体嵌入所编的程序中。用户也可以将自己设计的程序模块等做成“头文件”,供其他程序“包含”。文件包含示意图#include<stdio.h>#include<math.h>……源程序area.c(用户编写)头文件stdio.h(系统提供)头文件math.h(系统提供)area.exe(可执行程序)stdio.hmath.h编译/连接

例一中,area.c文件本身只有12行,stdio.h有187行,

math.h有107行,实际上stdio.h本身还包括一个24行的头文件stdarg.h。“文件包含”是在编译后连接时“包含”进可执行程序的。比较:area.c1kb;

area.obj1kb;

area.exe26kbstdarg.hstdio.hstdarg.hmath.h使用“文件包含”功能的优点提高程序设计效率和程序可靠性减少程序员重复劳动量

TurboC提供了三百多个标准库函数,存放在若干个头文件中(常用库函数见P381-387)本章中:stdio.h标准输入/输出函数

math.h数学函数

stdlib.h

常用函数一个优秀的程序员不应是事无巨细都要从头做起的“工匠”,而应是一个“策划师”+“组装师”。所以,逐步熟悉并掌握常用函数等现有功能模块,是学习C程序设计的一个重要内容。/*给定半径,求圆的面积*/#definePI3.14159/*编译预处理——宏定义*/#include<stdio.h>/*编译预处理——文件包含*/#include<math.h>/*编译预处理——文件包含*/main()/*主函数*/{floatr,s;/*定义变量r、s类型为单精度实型*/

r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf("半径R=%f时,面积S=%f\n",r,s);/*输出结果*/}例一(求圆面积程序area.c)分析(续,主函数)

主函数的基本形式main(){

……

(函数体)}主函数

关于主函数

main()

{……}C语言是一种函数式语言,它的一个函数实际上就是一个功能模块——C程序的基本组成是函数。一个C程序是由一个固定名称为main的主函数和若干个其他函数(可没有)组成。一个C程序必须有一个、也只能有一个主函数。主函数在程序中的位置可以任意,但程序执行时总是从主函数开始,在主函数内结束。主函数可以调用其他各种函数(包括用户自己编写的),但其他函数不能调用主函数。主函数的一般形式:main(){

说明部分程序段(定义数据类型)执行部分程序段(给出操作指令)}

函数体说明部分(简单程序可能没有此部分,如P4例1.1):

floatr,s;/*定义变量r、s类型为单精度实型*/inta,b;/*定义变量a、b类型为整型*/执行部份:输入、赋值、计算、控制、输出等:

r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/printf("半径R=%f时,面积S=%f\n",r,s);/*输出结果*/其他函数标准库函数——只能调用。使用方法:

⒈先“包含”,即将该函数所在头文件包含在程序中。⒉后调用。调用方式:函数名(参数)例:#include<stdio.h>#include<math.h>main()

{

……

s=PI*pow(r,2);

……

printf(“半径R=%f时,面积S=%f\n”,r,s);

}说明:pow(x,y)求xy

(math.h中的标准数学函数)P382

printf(……);(stdio.h中的标准输出函数)P386其他函数自编(定义)函数:

(详见教材第8章)

⒈先定义(规定函数类型、函数名和函数功能)⒉后调用(使用所定义的函数实现其功能)

定义函数:

函数类型函数名(形式参数)

{函数体}

调用函数:函数名(参数)【示例】求三个数的平均值自定义函数示例floataverage(floatx,floaty,floatz)/*定义函数average()*/{floataver;aver=(x+y+z)/3;return(aver);}main()/*主函数*/{floata,b,c,ave;a=3.5;b=4.6;c=7.9;ave=average(a,b,c);/*调用自定义函数average()*/printf("average=%f",ave);}

自定义函数一般形式

函数类型函数名(形式参数){……(函数体)}/*给定半径,求圆的面积*/#definePI3.14159/*编译预处理——宏替换*/#include<stdio.h>/*编译预处理——文件包含*/#include<math.h>/*编译预处理——文件包含*/main()/*主函数*/{floatr,s;/*定义变量r、s类型为单精度实型*/

r=1.0;/*变量r赋初值*/s=PI*pow(r,2);/*计算圆面积s*/

printf("半径R=%f时,面积S=%f\n",r,s);/*输出结果*/}求圆面积程序area.c分析(续,语句)

关于语句特点:

均以分号结束;一个程序行可以有多个语句。语句组成了函数体。强烈建议:

按缩进格式书写语句。本示例程序中使用了:

①数据类型定义语句②赋值语句③输出语句关于语句:

①数据类型定义语句语句形式

变量类型关键字变量名;

floatr,s;

定义r、s为单精度实型变量

intr,s;

定义r、s为整型变量【注意】在C语言程序中,所有变量都要先定义后使用,否则就会出现编译错误提示,如:

Error:

Undefinedsymbol‘a’infunctionmain

Let’stry…变量类型关键字字符型(描述文字性的数据)char

数值型:

■整型(在机内是准确表示的)

int

■实型(在机内一般是近似表示的)

float(有效数字6位)

double(有效数字16位)变量名P40C语言标识符(变量名、符号常量名、函数名等)命名:

■组成:字母、数字、下划线

■开头:字母、下划线

■长度:≤32字符(TurboC)

【注意】大小写为不同字符(变量名一般小写,符号常量名一般大写),还要注意不得与关键字(P375)同名。关于语句:

②赋值语句作用:使变量获得具体的运算值。语句形式

变量名=表达式(常量、变量、函数、算式及其混合);

r=1.0;

/*变量r赋初值*/

s=PI*pow(r,2);

/*计算圆面积s*/

注意:函数pow()在头文件math.h中定义(见P382)。所以程序开头处必须加上一行所谓“文件包含”:

#include<math.h>变量赋初值亦可在数据类型定义时进行:

floatr=1.0,s;

把变量声明语句与赋值结合在一起的语句,术语上称为“初始化语句”。关于语句:

③输出语句作用:将运算结果送到显示器屏幕显示出来语句形式(详见P72-80)

printf(……);

printf("半径R=%f时,面积S=%f\n",r,s);

printf(“Hello,everyone!”);【注意】C语言本身没有输入、输出语句,其功能要借用有关函数来实现。

%f—格式字符串(见后)

\n—控制字符(转义字符)\n表示回车换行按定义输出动作或特殊字符(见P48表3.3)

引号中的其他部分照原样输出关于格式字符串表示该处将用printf语句引号外对应表达式的值替换后输出

例:若r=1,s=3.14

printf(“半径R=%f时,面积S=%f\n”,r,s);

输出结果:

半径R=1时,面积S=3.140000常用格式字符串:字符型:%c

单字符

%s

字符串数值型:%d

整数(十进制)

%f

实数(小数形式,默认为6位小数)

例一

intx=5;floaty=3;printf("a=%d,b=%f,c=%s",x,y,"abcdefg");输出结果:

a=5,b=3.000000,c=abcdefg

例二

intx=5;floaty=3;printf("a=%d,b=%f,c=%s",x+2,y*3,"123defg");输出结果:

a=7,b=9.000000,c=123defg

小结

1、C语言程序的基本结构一个C程序是由一个固定名称为main的主函数和若干个其他函数(可缺省)组成。其基本结构一般形式如右图所示。注:TC环境下C源程序的扩展名一般为.c(如area.c)编译预处理部分(可选)main(){说明部分/*变量定义等*/执行部分/*输入/输出/计算*/

}其他函数(可选,位置任意)

小结

2、C语言程序的基本特点C语言是一种函数式语言,其程序基本组成是函数每个C程序必须有一个、也只能有一个主函数main不管主函数在程序中的位置如何,程序执行总是从主函数开始所有变量必须先定义(规定数据类型)后使用每个语句必须用分号“;”结束(注意是“每个语句”而不“每行语句”)编译预处理命令不是语句(行末不能用分号结束)C语言本身没有输入/输出语句,其输入/输出功能须通过调用标准函数来实现使用系统提供的标准库函数或其他文件提供的现成函数时,必须使用“文件包含”(除了printf和scanf语句)。四、示例程序的完善

左铡的示例程序(求圆面积)有四个不足:每次运行后屏幕残留的显示内容和运行结果混在一起。如果要求多个半径r值时的面积s,每次都必须修改源程序并重新编译处理;如果半径r为负值,也会有正常的s值输出。输出结果的小数位数为6位,与习惯不符。为此,可将程序进行如下修改:#definePI3.14159#include<stdio.h>#include<math.h>#include<stdlib.h>main(){floatr,s;clrscr();/*清屏*/printf("请输入半径R=");scanf("%f",&r);if(r<0){printf("半径不能为负值!");exit(0);/*中止程序运行*/}s=PI*pow(r,2);printf("R=%.3f,S=%.3f\n",r,s);}#definePI3.14159#include<stdio.h>#include<math.h>main(){floatr,s;

r=1.0;s=PI*pow(r,2);printf("R=%f,S=%f\n",r,s);}示例程序area.c:/*改进后的求圆面积程序AREA.C*/#definePI3.14159#include<stdio.h>#include<math.h>#include<stdlib.h>

#include<conio.h>

main(){floatr,s;

clrscr();

/*清屏,在conio.h中定义*/printf("请输入半径R=");

/*人机对话提示语*/

scanf("%f",&r);

/*将键盘输入值存放在变量r对应的存储单元中*/if(r<0)

/*如果输入的半径值为负值*/{printf("输入出错,半径不能为负值!");/*显示出错提示*/exit(0);/*停止程序执行,返回操作系统*/}s=PI*pow(r,2);printf("半径R=%.3f时,面积S=%.3f\n",r,s);/*限制R,S小数位数*/}Let’stry……改进程序有关语句分析键盘输入函数

scanf(“%f”,&r);

功能:将键盘输入的值存放到变量r所对应的存储单元中。

&r变量r的存储单元地址

注意:scanf()函数本身不能带作为提示语的字符串,如

scanf(“请输入半径r=%f”,&r);

(结果将使r等于某个随机值)通常与printf()函数组合使用,实现“人机对话”功能。Example:……printf(“InputR=”);scanf(“%f”,&r);……改进程序有关语句分析(续)选择语句

if(条件表达式)语句或复合语句(用花括号括起);

功能:如果条件表达式的值为真,就执行指定语句或复合语句。

扩展形式:

if…else

语句(详见P91)

if(条件表达式)语句或复合语句;

else语句或复合语句;

注意:条件表达式必须用()括起,且不能跟分号。Example:

参见P5例1.3

#include<stdio.h>#include<conio.h>main(){inta,b,c;clrscr();/*清屏*/

printf("Inputa、b=");scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d",c);}intmax(intx,inty){intz;if(x>y)z=x;elsez=y;returnz;}改进程序有关语句分析(续)停止函数exit(0)

使程序正常停止,返回操作系统状态。括号中为整型数值,0—正常结束其他数值—出错类型(某些系统上在原程序结束后可将此值传给另一程序)输出格式P72r=%-m.nfm总位数(数值总长度小于m时左端补空格,

-m则为右端补空格),n小数位数上例中——r=%10.3f,s=%10.3f输出r=1.500,s=7.069r=%-10.3f,s=%-10.3f输出r=1.500,s=7.069r=%.1f,s=%.2f输出r=1.5,s=7.07(下一位小数四舍五入)

更多的改进给程序加上软件“封面”和“封底”封面——程序标题和编程者等封底——告别辞第一章作业一、上机编程:将求圆面积程序AREA.C修改成能求给定半径r的圆面积、周长、圆球面积和体积的新程序(包括软件“封面”和“封底”)。二、上机编程:执行后在屏幕上显示以下软件封面(其中XX处请用实际数据表示):

*****************************************欢迎使用**中学数学问题程序汇编V1.00*****************************************

程序设计:XX系XX专业XXXXXXX年XX月XX日选择菜单

a、一元二次方程求根

b、求任意半径圆、圆柱体和球体的(表)面积、体积

c、求n!

请选择(a、b或c):_熟记下列TC编译软件常用英语词汇:function函数statement语句missing丢失error出错parameter参数illegal非法的invalid无效的pointer指针character字符array数组string字符串constant常量syntax语法argument参数type类型definition定义compile编译call调用symbol标识符(变量名等)declaration说明、声明并将以下屏幕提示译为中文:CompilingE:\tc\abc.cErrorE:\tc\abc.c4:statementmissing;infunctionmainErrorE:\tc\abc.c3:Undefinedsymbol's'infunctionaa要求:作业第一、二题上机编程并提交给指导老师检查。作业第一题源程序还须写在作业本上上交。注意书写格式。其他要求一、C语言的数据类型C语言的数据类型

P38基本类型

字符型(char)1字节

整型—短整型(short

int

)2字节基本型(int)2字节(-32768~32767)长整型(longint

)4字节(±21亿)

实型—单精度(float)4字节6~7位有效数字

长单精度(longfloat)

8字节15~16位有效数字双精度(double)8字节15~16位有效数字

长双精度(longdouble)10字节

20位有效数字

可知对不同数据类型占用的存储空间:char<short<=int<long<=float<doubleLet’stry…结果显示:char:1字节

float:4字节求某一类型数据所占存储字节数,可用运算符:

sizeof(类型关键字)Example:main(){printf(“char:%d字节\n”,sizeof(char));printf(“float:%d字节\n”,sizeof(float));}注意事项整型≠整数

int的范围:-32768~+32767Example:

#include<stdio.h>#include<conio.h>

main(){inta;

clrscr();

printf(“Input:”);scanf(“%d”,&a);

printf(“a=%d\n”,a);}

运行结果:

Input:12345

a=12345Input:1234567

a=-10617

Why?!Because:

12345的补码是

00110000001110011234567的补码是

100101101011010000111

截去多余部份(超过2个字节的左边部分)后

其原码为

1010100101111001(-10617)参见教材P44“整型数据的溢出”。有趣的结果:

输入(Input:)输出(a=)327673276732768-3276832769-3276732770-32766-32768-32768-3276932767-3277032766可用下图表示:

327673276632765

……-32766-32767-32768有趣的结果注意事项数据存储形式

字符型按ASCII码存储,其余以补码存储

示意图

字符型(字符'a')

用一个字节存放该字符的ASCII值(ASCII值表见P374)

整型(十进制数25037)

用两个字节存放该数值的补码实型

尾数(补码)指数(阶码)

注:第一位均为符号位01100001011000011100110101100001……1010001010101011100110补充:二进制数的定点和浮点表示定点表示法——小数点位置是“固定的”定点数可用于表示整数。整数在机器中用补码表示。

对于inta=8,b=-8;0000000000001000符号位:0—正数1—负数10000000000010001111111111110111正数的原码=正数的补码负数的原码和补码按以下规则相互转换:符号位不变,数值位各位取反,未位加1。0000000000001000原码补码符号位数值位a=810=10002b=-810=-10002真值1111111111111000补充:二进制数的定点和浮点表示浮点表示法——小数点位置是“浮动的”。

在计算机中一个浮点数由两部分组成:阶码和尾数,阶码是指数,尾数是纯小数。浮点表示法可用于表示带小数的数。

(110.011)B=1.10011×2+10=11001.1×2-10=0.110011×2+11

即:N=数符×尾数×2阶符×阶码

尾数的位数决定数的精度阶码的位数决定数的范围

数符尾数阶符阶码

0110011011阶码和数符:0—正数1—负数注意事项整型和字符型均可为unsigned(无符号型)P43图3.4

即将符号位亦作为数值位(默认为signed)

此时int的范围0~65535char的范围0~255

Let’stry…?

在C程序中,字符型可与整型(≤255)互相通用

P50-51输出结果:a,b输出结果:97,98不变d,b100,98Example:(参见P50例3.6,ACII值见P374)main()main(){{charc1,c2;charc1,c2;c1=97;c2=98;c1=97;c2=98;printf(“%c,%c\n”,c1,c2);printf(“%d,%d\n”,c1,c2);}}

思考如果将例中char改成int,结果如何?如果将c1=97改为c1=97+3,结果如何?

Let’stry…二、常量整型常量P41

十进制数12-12l

或-12L700000ul

八进制数

012-012l

十六进制数0x12-0x12l实型常量P45

十进制形式123.452.0(必有小数点)

指数形式2.45e-41.13E3(e或E前为数,后为整数)

实型常量本身无单或双精度,其机内精度取决于赋给那类变量(影响有效数字位数,见P15示例)字符常量/字符串常量字符常量P48普通字符(可显示字符)

‘A’‘?’

(只能单字符单引号)

错误:‘ABC’“A”‘’’‘”’‘\’转义字符(在单引号或双引号中以\开头)

如回车符、单引号、反斜杠等在程序中这些符号用表3.3所示的“转义字符”表示。字符串(用双引号括起)“A”“?”(以‘\0’为字符串结束标志)注意:用char定义的字符变量只能接受字符常量,而不能接受字符串常量(C语言中无字符串变量)

chara=‘U’;charb=“U”;(b被置为某随机值)Example:main(){

charc1=‘a’,c2;

c2=98;printf(“%d,%d\n”,c1,c2);

}结果:

97,98Example:

main(){

charc1=“a”,c2;

c2=98;printf(“%d,%d\n”,c1,c2);

}结果:

-108,98若让c1分别等于“U”、“ABC”、“A”…结果不变随机值转义字符例题分析Example:main(){charch;ch=‘\362’;printf(“%c,%d”,ch,ch);}运行结果:

≥,-14ch=3628=24210=111100102

111100102化为原码为

10001110=-1410转义字符例题分析Example:#include<string.h>

main(){printf(“a\n\”\x41”);printf(“%d\n”,strlen(“a\n\”\x41”));}运行结果:

a

“A

4

注:strlen为求字符串字节数函数(不计结束标志‘\0‘)。转义字符例题分析Example:P49例3.5main(){printf(“__ab_c\t_de\rf\tg\n”);printf(“h\tI\b\bj___k”);}运行结果:__ab_c__ab_c___def_ab_c___def_______gdehh_______lh_______h______h______j___k8列8列8列什么时候要使用转义字符?

转义字符只在特殊情况下才使用:C程序中需要实现某些特定打印或显示动作时

如

printf(“123\t56\n”);C程序中需要打印或显示以下三个字符时

\

(斜杠)

"(双引号)'(单引号)

如

printf(“You’rea\”abadegg!\””);C程序中需要打印或显示ASCII表中非键盘字符时

如

printf(“Look

\16and

\x80

!”);注意:使用转义字符时,\后的八进制或十六进制数不应大于char类型所允许的范围(十进制值256)。

字符串常量有关问题‘A’与“A”的区别问题(判断正误):

charc=“China”;charc=‘China’;“China”占几个字节?‘\141’占几个字节?AA\0等于十进制数97即字符’a’三、变量赋值

P53

例:b=(a=3+5)a=b=c=d=3+5

(结果均为8)例:inta=b=c=d=3+5

(语法错误,除非b,c,d定义过)

正确:inta,b=a=3+5;

例:c=3+(a=5)*6

结果:c=33,a=5(一个语句可以有几个赋值运算)变量必须先定义后使用变量名必须符合标识符命名规则

P40四、数据间的转换(混合运算)数据的类型级别P54图3.10基本规则不同类型运算量参加运算,遵守“向高看齐”的类型一致化规则:将长度较短的运算量转换为长度较长的运算量,以保证不丢失信息。将实型常量赋给整型变量,将被自动取整

inta=7.999999;等效于inta=7;float型只要参加运算,均自动转为double。

main(){floati=3,j=4;printf(“%d\n”,sizeof(i+j));}/*结果为8(双精度)*/两个整型数相除,其值也一定是整型数(取商之整数部分)。3/2的值为1而非1.5强制类型转换P56

例一:(int)3.5的值是多少?例二:

main(){intx=5;floaty=3.5;

clrscr();/*clearscreen(清屏)*/

printf(“%d”,(int)y+x);}

结果是什么?8一般形式:

(类型名)(表达式)转换后表达式的数据类型为新的类型,但表达式中变量本身类型不变。3程序执行后y的类型是什么?五、算术运算符和算术表达式C语言运算符(13类)

P551、算术运算①算术运算符

+-*

/%++––

例:14%(-4)=2-14%(-4)=-220.4%2(出错)

例:若inta=7;floatx=2.5,y=4.7;则表达式

x+a%3*(int)(x+y)%2/4

的值是什么?

2.500000(1/4为0)

例:floatx,y;x%y;

(出错)五、算术运算符和算术表达式(续)②自反算术赋值运算符(复合的赋值运算符)

P62

+=-=*=/=

等解法:将b*=…看作b=b*(…),其余类推例:c=b*=a+3

相当于(1)a+3(2)b=b*(a+3)(3)c=b

例:若i、j的初值分别为3和4,则执行

j+=i-=1

后i、j的值为多少?

解题步骤:

i=i-1=3-1=2j=j+i=4+2=6结果:i=2,j=6关于优先级和结合方向:P56

C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行。如果在一个运算对象两侧的运算符的优先级别相同,则按规定的结合方向处理。

(各种运算符的优先级和结合性见P375附录Ⅲ)【例】设i、j初值分别为3和4,则执行j+=i-=1;后i,j的值为多少?【例】若x=7;则x+=x-=x+x的值是多少?

五、算术运算符和算术表达式(续)(i=2,j=6)(-14)解法:从右到左,先做x=x-(x+x)=-7,再做x=x+x=-14五、算术运算符和算术表达式(续)③自加、自减运算符

P57

++(自加运算符)--(自减运算符)用法:+1-1运算

a、前缀形式

inti=5;x=++i;y=i;

(x=6,i=6,y=6)

inti=5;++i;y=i;

(i=6,y=6)b、后缀形式

inti=5;x=i++;y=i;

(x=5,i=6,y=6)

inti=5;i++;y=i;

(i=6,y=6)

若对某变量自加/自减而不赋值,结果都是使该变量自身±1;

若某变量自加/自减的同时还要参加其他运算,则前缀运算是先变化后运算,后缀运算是先运算后变化。

注意:运算对象只能是整型变量,5++或(x+y)++均为错五、算术运算符和算术表达式(续)例一:main()

{

inta=100;

printf(“%d\n”,a);

printf(“%d\n”,++a);

printf(“%d\n”,a++);

printf(“%d\n”,a);

}运算结果:100101101102例二:若intx=3,y;求下列运算后y和x的值

y=x++-1;(24)

y=++x-1;(34)

y=x--+1;(42)分析思路:先对右边的表达式进行扫描,如果x++,先取x值完成表达式运算后再让x自加1,如果++x,则先将x自加1后再代入表达式进行其他运算例三:若inti=3求下列运算后y和z的值

y=(i++)+(i++)+(i++);y=9(3+3+3)

z=(++i)+(++i)+(++i);z=18(6+6+6)

分析思路:先对右边的表达式进行扫描,看是否需要先自加,如需要,就作若干次自加,然后再进行表达式的其他运算。思考:

y=(++i)+(i++)+(++i);y=15(5+5+5)五、算术运算符和算术表达式(续)④逗号运算

P63-64

C语言中逗号可作分隔符使用,将若干变量隔开

如

inta,b,c;

又可作运算符使用,将若干独立的表达式隔开,并依次计算各表达式的值。其一般形式

表达式1,表达式2,…,表达式n;逗号表达式的求解过程:先求表达式1的值,再求表达式2的值…,最后求表达式n的值。整个逗号表达式的值是最后一个表达式n的值。

在C语言所有运算符中,逗号表达式的优先级最低。

五、算术运算符和算术表达式(续)【例一】main(){intx,a;x=(a=3*5,a*4,a+5);printf(“x=%d,a=%d\n”,x,a);}【例二】main(){intx,a;

x=(a=3*5,a*4),a+5;

printf(“x=%d,a=%d\n”,x,a);}

运算结果:x=20,a=15运算结果:x=60,a=15【例三】main(){inta,b,x;x=(a=8,b=15,b++,a+b);printf(“a=%d,b=%d,x=%d\n”,a,b,x);}

运算结果:a=8,b=16,x=24五、算术运算符和算术表达式(续)⑤关系运算(比较运算)

P87

关系运算符:><>=<===!=

关系表达式:含有关系运算符的表达式特别注意a≤X≤b之类算式的正确写法:a<=x&&x<=b(错误写法:a<=X<=b)【例】若x=1000,则printf(“%d”,2<x<3)的结果是什么?(不管x为何值,结果恒为1)Why?【注意】关系表达式的值:真—1假—0;

C语言中还规定:非0—真0—假优先级:算术>关系>赋值>逗号

讨论:if(1<x<2)的条件为什么恒为真五、算术运算符和算术表达式(续)【例一】main(){intm=5;if(m++>5)printf(“m>5”);else{printf(“m=%d,”,m--);printf(“m=%d”,m--);}}运算结果:

m=6,m=5【例二】main(){intm=5;if(++m>5)printf(“m>5”);else{printf(“m=%d,”,m--);printf(“m=%d”,m--);}}运算结果:

m>5

五、算术运算符和算术表达式(续)⑥逻辑运算

P88

逻辑运算符:

&&(与运算符)运算符两边均为真时,结果为真

||(或运算符)运算符两边均为假时,结果为假

!(非运算符)将运算符右边真假倒置

逻辑运算符的任一端如果为非0数,则视为“真”,为0则视为假。

【例】printf(“%d”,!3+5)结果为5printf(“%d”,!0+5)结果为6

注意:!优先于关系运算符,与++、--同级。常用优先级:!、++、-->算术运算符>关系运算符>&&>||>赋值>逗号五、算术运算符和算术表达式(续)【例一】main(){inta=1,b=2,m=2,n=2;(m=a>b)&&++n;printf("%d\n",n);}【例二】main(){inta=1,b=2,m=2,n=2;(m=b>a)&&++n;printf("%d\n",n);}运行结果:n=2运行结果:n=3原因:

在&&和||的左边如果能判断出结果,则右边不再作运算。结论:在逻辑表达式的求解中,并不是所有的逻辑运算符都会被执行。只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。(P90)五、算术运算符和算术表达式(续)【例三】

有以下程序段:

inta,b,c;a=b=c=1;++a||++b&&++c;

问执行后a、b、c的值各是多少?

a=2,b=1,c=1五、算术运算符和算术表达式(续)【例四】编程判断任一给定年份是否闰年。符合以下条件的年份为闰年:

P91①能被4整除但不能被100整除;②能被4整除又能被400整除(只需考虑能被400整除的情况)main(){intyear;clrscr();printf("Inputyear=");scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0)printf("\n%disaleapyear!",year);elseprintf("\n%disn'taleapyear!",year);}五、算术运算符和算术表达式(续)⑦条件运算P96条件运算符:

…?…:…

(三元运算符,即需连接三个运算量)一般形式:

e1?e2:e3

(e1为条件表达式,e2,e3为任意类型表达式)功能:如果e1≠0(为真),运算结果为e2的值。如果e1=0(为假),则取e3的值。【例】分别令x=3,x=0,x=-5,求运行结果。本程序功能?main(){intx,y;printf(“Inputx=”);scanf(“%d”,&x);y=x>0?1:x<0?-1:0;/*结合方向:由右向左*/printf(“x=%d,y=%d\n”,x,y);}结果:x=3,y=1x=0,y=0x=-5,y=-11(x>0)y=0(x=0)-1(x<0)⑧sizeof运算符

sizeof运算符是一个单目运算符,用以计算操作数在内存中占用的字节数。它的操作数可

温馨提示

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

评论

0/150

提交评论