C语言课件(精华版)_第1页
C语言课件(精华版)_第2页
C语言课件(精华版)_第3页
C语言课件(精华版)_第4页
C语言课件(精华版)_第5页
已阅读5页,还剩623页未读 继续免费阅读

下载本文档

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

文档简介

计算机根底教学系列课程C语言程序设计课程性质:大学生公共根底课程(必修课)学时:讲课34课时;实验64(课内32/课外32)学分:2学分总评成绩=平时成绩40%+期末成绩60%平时成绩:成绩1(作业、考勤10%)+成绩2(单元测验15%)+成绩3(实验报告15%)期末成绩:期末理论机考60%C语言程序设计第一章C语言的开展、特点与程序结构第二章根本数据类型、运算符和表达式第三章根本语句与顺序结构第四章选择结构第五章循环结构第六章数组第七章函数第八章指针第十章结构体第十二章文件C语言程序设计推荐参考书:谭浩强主编《C程序设计》〔第二版〕北京:清华大学出版社第一章C语言的开展、特点与程序开发根本知识1.1C语言的开展与特点1.2程序设计的根本方法1.3算法的概念及其表示1.4C语言的根本结构1.5应用程序的开发步骤和运行过程下一章目录习题

C语言是一门优秀的程序设计语言C语言是在1973年由美国贝尔实验室开发的。1983年,ANSI为C语言制定了新的标准,称为ANSIC,并于1989年最终完成。目前使用较多的版本有ANSIC,BorlandC,TurboC,MicrosoftC/C++,VisualC++等。C语言的开展WUCCC语言是结构化程序设计语言功能强大,具有丰富的数据类型及运算符。简洁紧凑,使用方便灵活。C语言具有自我扩充能力C语言具有汇编语言的功能可移植性好WUCCC语言的特点程序的概念程序是计算机解决问题所需的一系列指令的集合。著名计算机科学家NikiklausWirth提出了“算法+数据结构=程序”的公式程序就是在数据的某些特定的表示方式和结构的根底上,对抽象算法的具体描述。1.2程序设计的根本方法程序=数据结构+算法+程序设计方法+语言工具数据结构是数据的类型和数据的组织形式。算法是为解决一个问题而采用的方法和有限的步骤。程序设计方法确定语言和编程环境WUCC面向过程的程序设计所谓面向过程的程序设计,是指利用面向过程的语言工具(如Pascal、Fortran和C语言等)进行程序开发的各项活动。基本思想:把一个需要求解的复杂问题分为若干个模块来处理,每个模块处理一个子问题;设计时遵循自顶向下、逐步细化、模块化设计和结构化编码的原则。优点:编程简单、结构性强、可读性好;遵循这种结构的程序只有一个入口和一个出口。缺点:存在数据与程序模块的别离和程序的可重用性差等问题。WUCC面向对象的程序设计ProgramDesigninCLanguage面向对象的程序设计将一些新的理念和结构化程序设计中好的思想相融合,提供了一种全新的程序设计方法。基本思想将一个需要解决的问题分解为一系列实体(对象),然后围绕这些对象建立数据和函数;函数的功能决定了该对象的行为。规定一个对象的函数可以访问另一对象的函数,但一个对象的数据不能应用于另一对象的函数中。几个基本概念:三类机制:类、对象、属性、事件、方法封装、继承、多态1.3算法及其表示算法的特性有穷性一个算法的操作步骤应当是有限的;确定性

算法中的每一个步骤应当有确定的意义,不能

有二义性;有效性算法中的每一个步骤应当正确、可行,并且能

有效地执行;有零个或多个输入

执行算法时需要从外界获取的信息;有一个或多个输出

执行算法后应当得到正确的结果。算法举例【例1.1】输入三个数,然后输出其中最大的数。(1)输入变量x,y,z的值(2)比较x和y,如果x>y,那么x送max;否那么y送max。(3)比较max与z,如果z>max,那么将z送max。(4)输出max,max即为最大数。算法对同一个问题,算法是不唯一的,例如:求和

1+2+3+……+100

(1)=(…(((1+2)+3)+4)+…+100

)(2)=(1+100)×50一个好的算法应该是:正确、易读、效率高。

算法的表示方法常用的算法描述方法有:自然语言描述、伪代码、流程图、N-S图、PAD图等。

1.

自然语言就是用人们日常使用的语言来描述或表示算法的方法。英语和程序设计语言混合使用称为伪代码。

Begin

{算法开始}inputx,y,zifx>ythenmax=xelsemax=yifz>maxthenmax=zprintmaxend{算法结束}2.

用伪代码表示算法用一些图框和方向线表示算法的图形表示法。特点:直观形象,易于理解,便于检查和交流。常用流程图符号及含义如下:

起止框处理框判断框输入或输出框流程线连接点3.

用流程图表示算法流程图:

【例1.1】对任意给定的三个整数x,y,z,求出其最大值。开始读入x,y,zmaxxmaxzmaxyz>max?输出max结束TFx>y?TF读入x,y,zx>yFTmaxxmaxyTFz>maxmaxz打印max单元的值

例:对任意给定的三个整数x,y,z,求出其最大值。

4.

用N-S流程图表示算法结构化程序设计C语言是结构化程序设计语言,有三种根本结构。顺序结构选择结构循环结构实践证明,任何复杂的算法都可以用这三种根本结构来描述。程序设计的目标在正确的前提下,其重要性排列次序依次为:可读、可维护、可移植和高效。顺序结构

矩形框—用于表示顺序结构。执行时按语句的先后顺序执行。先执行语句A,再执行语句B。ABAB顺序结构的流程图顺序结构的N-S图选择结构〔分支结构〕根据条件的真或假选择执行不同的操作内容。当条件成立执行语句A,否那么执行语句B。条件ABTF条件T

FA

B选择结构的流程图选择结构的N-S图循环结构(1)当型〔while型循环〕当条件成立,执行循环体,否那么跳出循环体。

条件

语句块条件语句块TFL形框——用于表示循环结构(2)直到型循环〔do-while型循环〕首先执行循环体,假设条件不成立继续执行循环体,直到条件成立为止。

语句块

条件语句块条件FT【例1.2】在屏幕上显示一行文字“WelcometoC!”。#include<stdio.h>void

main()/*定义主函数*/

{

printf(“WelcometoC!\n”);}

程序运行结果:

WelcometoC!

函数〔Function〕C程序包含一个或多个函数,其中必须有一个main()圆括号指示一个函数{}包含函数体,}表示main函数结束printf(“Welcome”);printf(“to

C!\n”);printf(“Welcome\nto\nC!\n”);程序运行结果:

WelcometoC!程序运行结果:WelcometoC!

注释/*

文本

*/

或//

不被执行以提高程序的可读性语句〔Statement〕必须以;结尾格式输出函数printf()。调用标准函数,显示引号中的内容。#include<stdio.h>voidmain(){inta,b,sum;//声明局部,定义变量类型a=123;b=456;//执行局部,赋值语句sum=a+b;//执行局部,赋值语句 printf(“sum=%d\n”,sum);//执行局部,输出语句 }程序运行结果:sum=579 赋初值计算输出①②③④定义变量【例1.3】求两个整数的和函数体包括变量说明局部语句执行局部//文件包含预处理命令//将标准输入输出头文件包含到源程序中预编译命令void

main()主函数{函数体开始声明部分执行部分}函数体结束

#include<stdio.h>

voidmain(){inta,b,c;

//定义变量类型printf(“inputtwonumbers:\n”);//提示

scanf(“%d,%d”,

&a,

&b);

//输入变量c=max(a,b);

//调用求最大值的函数printf(“max=%d\n”,c);

}

intmax(x,y)intx,y;

{intz;if(x>y)z=x;elsez=y;return(z);}【例1.4】求两个数中的较大值程序由两个函数组成:main函数和max函数。运行程序屏幕显示提示信息;键盘输入a、b的值;屏幕显示c的值。inputtwonumbers:123,456↙max=456一个C程序由一个或多个函数组成,其中必须有一个主函数main()。程序执行时总是从主函数开始,main()可以置于程序的任何位置。程序中需有预处理命令(如#include<stdio.h>

),预处理命令通常放在程序的最前面。分号是C语句结束的标志,每个语句和数据定义后必须有一个分号。预处理命令、函数头和花括号“}”之后不能加分号。C语言程序根本结构C程序书写灵活,一行可以写几个语句,一个语句可以写在多个程序行上。#include<stdio.h>voidmain(){inta,b,sum;

a=123;b=456;sum=a+b;printf(“sum=%d\n”,sum);}C语言本身没有输入输出语句,输入输出的操作是由库函数scanf()和printf()等函数完成的。

1.4.2C语言程序根本结构

C程序严格区分大小写。一般变量、语句等用小写字母书写;符号常量等用大写字母书写。标识符、保存字之间必须至少加一个空格以示分隔。函数C语言的函数有两种:标准库函数和用户定义的函数。用户自定义函数,可有可无,数目不限。如例1.4中的int

max(intx,

inty)C语言提供的库函数,

如输出函数printf()和输入函数scanf()。函数定义:

函数头+函数体函数头:

说明函数的类型、名字、参数及参数的类型。

intmax(intx,inty)#include<stdio.h>

voidmain(){inta,b,sum;

a=123;b=456;sum=a+b;printf(“sum=%d\n”,sum);}函数体函数头函数体:由“{}”括起,包括变量声明和执行局部。函数定义1.4.3C语言的字符集、关键字和标识符字符集:C语言允许使用字符的集合字符集的组成:26个小写字母abcdefghi......z26个大写字母ABCDEFG......Z

10个数字

0~9

其他符号+-*/=,

._:

;?\”’~|&^

!

%#()

[]{}<>空格(SPACE)

制表符(Tab)C语言的关键字关键字:C语言中预定的具有特定含义的词,也称保存字。共有32个。分四类:类型说明:int,long,float,…。语句定义:if…else,while,for…。存储类:auto,static,…。长度运算符:sizeof标识符标识符:用来标识变量、符号常量、数组、函数的名字。组成:只能由英文字母、数字和下划线组成。第一个字符不能是数字,只能是字母或下划线。VC6.0中有效长度为1~255个字符。例如:

x,m1,average,k123,_1,…

5AN,WA-11,alot

,$11,π,β,α,…

×√注意:标识符严格区分大小写例如:ABC,abc是不同的标识符不能和C语言的关键字、用户定义的函数名以及系统库函数同名。C的“.h”头文件中经常使用以下划线开头的内部变量名,因此用户最好防止使用这类标识符。取名应尽可能见名知意。如:alfa,aver,pi,bata等。例:以下各标识符组中,合法的用户标识符分别为:(1)A)PAdB)scanfC)voidD)4aP#Da10maxtemp(2)A)

b-b

B)

CCP

C)

hiy

D)

_isw

abc

float

<fr>

INT(3)A)

_0123

B)

del_word

C)

list

D)

keep%

ssiped

signed*jerwind√√√分隔符分隔符分隔符主要有逗号和空格两种。逗号用于分隔变量或参数,空格用于分隔单词(在关键字和标识符之间必须用空格分隔)。例如:int

a,

b,

c;

max(x,y,z)1.5应用程序的开发过程

应用程序开发阶段:分析解决问题的性质、特点、目标以及数据来源及其特征等。

需求分析确定解决问题的方法和步骤,建立数学模型和确定相应的求解方法。

确定算法确定应用程序结构,设计出每个模块的数据结构和算法,画出流程图等。

程序设计根据确定的算法,用计算机语言(如C语言)编写源程序。

编写程序在一定的开发环境下调试和运行程序,得出程序运行结果。

调试程序1.5应用程序的开发过程编辑编译连接运行编辑器file.cfile.cpp编译器file.obj连接器file.exeLibrariesCPU装载程序RAM建立、修改、保存源文件生成目标文件生成可执行文件运行可执行文件1.5应用程序的开发过程在VisualC++6.0环境下,开发和运行C程序的步骤如下:1.启动VC

“开始”→“程序”→“Microsoft

VisualC++6.0”

即可启动VC6.0。2.编辑、建立源文件。3.编译、连接和运行源程序。习题1.一个C语言程序是由___组成

a)主程序b)子程序c)函数d)过程2.一个完整的C语言的程序

a)至少包含一个主函数

b)至少包含一个主函数与一个子函数

c)必须由一个主函数与一个以上的子函数组成

d)

必须由一个主函数与一个子函数组成√√习题3.

C语言程序的执行总是从___。

a)

main函数的入口开始

b)编译预处理命令开始

c)源程序的第一个函数开始

d)源程序的第一行语句开始√习题4.在C语言的源程序中,主函数的位置__。a)必须在源程序的最后b)任意c)必须在源程序的开头5.一个函数一般由两局部组成,它们分别是__和__。6.函数体使用_____符号开始,使用_____符号结束。√函数头函数体{

}习题7.C程序的每条语句的结束标志是_____符号。8.在C程序中,注释以____符号开始,使用____符号结束。9.算法是__________________________。10.表示算法的常用方法有_____、_____、_____等。11.结构化程序的三种根本结构是_____、______、______。;

/**/解决某一问题所采取的方法和步骤自然语言流程图伪代码顺序结构选择结构循环结构12.判断下述说法是否正确。如不正确,说明理由。a)printf函数总是从新行的起始位置开始打印。b)计算时机把/*和*/之间的注释文本打印到屏幕上。c)所有的变量在使用前都必须予以声明。d)C语言认为变量number和NuMbEr是相同的。e)声明语句可放在函数体中的任何位置。f)打印三行输出的C语言程序必须用三条printf语句。g)printf函数的格式控制串中使用转义字符\n会把光标定位到屏幕上下一行的开始位置。√×××××√§2.1数据与数据类型§2.2常量、变量和标准函数§2.3根本运算符及其表达式第二章数据类型、运算符和表达式下一章上一章目录习题整型:包括有、无符号的根本整型、短整型、长整型实型:包括单精度实型、双精度实型float,double字符型:用于表示和存储ASCII字符。char

2.1数据类型基本类型构造类型指针类型空类型自定义是C语言数据类型的根本型,其值不可再分解为其他类型。一种特殊的数据类型,其值为某个量的内存地址。一种无返回值函数的数据类型。void用新的类型名替代已有类型名使用。用typedef定义一种由单种或多种数据类型构造而成的数据类型。数组结构共用体枚举类型C语言的根本数据类型

2.2常量、变量和标准函数2.2.1

常量

2.2.2变量

2.2.3标准函数

下一节第二章目录习题

常量常量在程序执行期间其值保持不变的量C语言有以下几种类型的常量:整型常量实型(浮点型)常量字符常量字符串常量

有三种形式:十进制整数:八进制整数:由数字0

开头十六进制整数:由前缀0x

0X

开头1.整型常量如:

014-0110177777如:0x110XAFBDE

√0X00FFH

如:

11,-13,0,

65535,

√1,000

21/3

104

54.10*3

0199××整数又可分为:长整型整数:用后缀L/l表示。

012L,65536L,0XCL无符号整数:用后缀U/u表示。

017u,

0xfdbU无符号长整数:用后缀UL/ul表示。15uL实型常量又称实数,指带有小数局部的数。C语言中的实数是以十进制表示的,有两种表示形式:十进制小数形式:由数字、数符和小数点组成。例:0.123,.123,123.,0.0,-2.5,…指数形式:

又称科学记数法。用E(或e)表示以10为底的指数。

如:100000000→1×108→1E+80.0000125→1.25×10-5→1.25E-05

0.91×10-3

0.91E-03尾数局部指数局部字母E/e前必须有数字,而E后面的阶码必须为整数。

2.

实型常量——浮点数例:以下不合法的指数形式:①单独的小数点和单独的指数局部如:.E-5E10②阶码只能是整数,不能带小数点。如:1234E1.52.E6.5e〔2*3)E-35*E4③1012不能写成E12,必须写成:1E121.0E123.字符常量字符常量:是用单引号括起来的一个字符

如:‘a’,‘A’,‘9’,‘+’,‘?’,‘’

合法

“a”,‘99999’,‘’

非法在内存中,字符常量以ASCII码存储,一个字符占一个字节。由于字符常量是按整数存储的,可以像整数一样在程序中参与相关的运算。如:‘a’-32;

//执行结果97-32=65

‘9’-9;

//执行结果57-9=48以“\”开头的字符序列,有特定的含义。如:‘\\’表示输出一个反斜杠符‘\”’表示输出一个双引号\ddd〔ddd表示八进制的ASCII码〕\xhh〔hh表示十六进制的ASCII码〕例:‘\n’(回车换行)→‘\12’→‘\xa’‘A’→‘\101’→‘\x41’注:‘\0’或‘\000’是代表ASCII码为0的字符,即空字符(NULL),表示整数0。转义字符【例2.1】转义字符的应用

#include

<stdio.h>

void

main()

{

printf(“a\tb\nc\bd\100\x40\n”);

}

abd@@输出到显示屏字符串常量:用一对双引号括起的字符序列。例:

“CHINA”,“a”,“$12.5”,“”,

“w\x53\\\np\103q”

字符串长度:字符串中所有字符的个数系统自动在每个字符串的末尾加上一个空字符NULL,即’\0’

作为字符串的结束。’\0’是一个ASCII码为0的字符。例:“CHINA”在内存中所占的字节为:4.字符串常量字符常量由单引号括起来,字符串常量由双引号括起来。

字符串常量和字符常量的主要区别:字符常量只能是单个字符,字符串常量可以含有多个字符。字符常量占一个字节,字符串常量占的字节数等于字符个数加1。比较:’A’与”A”的区别假设输出的字符串中含双引号(”),那么要使用转义字符(\”)。例:printf(“hesaid\“Iamastudent.\”\n”);输出:hesaid“Iamastudent.”‘A’A占一个字节“A”A占两个字节\05.符号常量符号常量:用标识符表示的常量格式:

#define

标识符常量功能:用该标识符代表后面的常量值例:

#define

PI3.1415926

#define

STAR

‘*’预处理命令#define也称为宏定义,一个#define命令只能定义一个符号常量,用一行书写,不用分号结尾。

#include

<stdio.h>

#define

PI

3.1415926

//用预处理命令定义符号常量

voidmain(){floatr,

area,

l

;//定义变量类型为实型

scanf(“%f”,

&r);//输入r的值

area=PI*r*r;

l=2*PI*r;

printf(“area=%f\nl=%f\n”,

area,

l

);}【例2.2】求半径为r的圆面积和圆周长说明:符号常量名习惯用大写字母表示该命令通常放在文件头在程序中,符号常量不允许重新赋值。例:#define

PI

3.1415926

PI=5.6;

×或scanf(“%f

”,

&PI);×5.符号常量2.2.2变量变量概述整型变量实型变量

字符型变量

变量的初始化

int

x=23;23FF022BytesRAM变量概述变量:在程序执行期间其值可以改变的量变量在使用之前必须被声明每一个变量有名字,类型,长度和值。对变量赋值过程是“覆盖”过程,用新值去替换旧值。从内存中读出变量的值,该变量保持不变。90x=90;printf(“%d”,x);定义变量的形式:

类型说明符变量名表;例:inta,b;/*定义两个整型变量a和b*/charc;/*定义字符型变量c*/floatf1,f2;

//定义单精度实型变量f1和f2变量概述变量类型〔type〕变量名〔name〕是一个标识符1.整型变量─用来存放整型数据的变量整型变量的分类表与操作系统、编译系统、机器字长有关。有符号的整数─最高位是符号位正整数在内存中以二进制原码形式存放。负整数在内存中以二进制补码的形式存放。有符号正整数10

0000000000001010符号位0000000000001010RAM有符号负整数

-101111111111110110符号位1111111111110110RAM-10的原码100000000000101011111111111101011111111111110110按位取反加1后得到-10的补码无符号整数无符号整数的所有二进制位全部用来存放数值,不能存放负数。

无符号整数65535u11111111111111111111111111111111RAM例:求50的三次方#include<stdio.h>voidmain(){shortintx;x=50*50*50;printf(“%d\n”,x);}程序运行结果为:-6072〔错〕将以上程序改为:#include<stdio.h>voidmain(){

intx

;

x=50*50*50

;

printf(“%d\n”,

x);}运行结果:125000因此,在定义整型变量时,要注意数据类型允许的数值范围。用来存放实型数据的变量分单精度型、双精度型和长双精度型三类

2.实型变量#include<stdio.h>voidmain(){floatf;//f为单精度实型变量

doubled;//d为双精度实型变量

f=33333.33333;

d=33333333333333.333333;

printf(“f=%f\nd=%f\n”,f,d);

}输出结果:

f=33333.332031

d=33333333333333.332000【例2.3】实型变量的使用无效数字f;3.字符变量用来存放字符常量的变量例:

char

c1,

c2,

c3

;

c1=‘A’;

c2=‘\n’;

c3=97;

每个字符变量分配一个字节用于存放一个字符。(存放的是字符的ASCII码值)字符数据与整型数据可相互赋值,直接运算。可以把字符变量按整型量输出,也允许把整型量按字符量输出。‘A’的ASCII码(值)为65‘\n’的ASCII码(值)为100100000100001010c1c2

#include

<stdio.h>

voidmain(){int

a=‘b’;

//给一个整型变量赋一个字符值

char

c1=97;

//给一个字符变量赋一个整数值c1=c1-32;//将小写字母转换为大写字母

printf(“%d%d\n”,

a,

c1);

printf(“%c%c\n”,

a,

c1);}输出结果:

9865bA【例2.4】字符型变量的使用注意:只能将一个字符常数赋给一个字符变量,不能把一个字符串常量赋予字符变量。例:charc=“abc”;在C语言中没有字符串变量〔但可以用一个字符数组来存放一个字符串常量〕×4.变量的初始化在说明变量的同时给变量赋初值格式:

类型说明符变量=常数;例:

int

a=5;

//定义并初始化

char

c1=‘a’,

c2=‘B’;

doublearea,r=23.e-2

;int

x=10,

y=10,z=10

;

//不能写成intx=y=z=10;inta;a=5;

//赋初值2.2.3标准函数

C编译系统提供的库函数包括:输入输出函数、数学函数、字符和字符串函数等。数学函数x为弧度,doublex,doublesin(x)cos(x)sin(x)

cos(x)exp(x)log(x)log10(x)fabs(x)pow(x,y)sqrt(x)area=√s(s-a)(s-b)(s-c),s=(a+b+c)/2#include<stdio.h>

#include<math.h>

【例2.5】求三角形面积//预编译命令,将系统提供的数学函数//作为头文件包含到用户源文件中voidmain(){doublea,b,c,s,area;scanf(“%lf,%lf,%lf”,

&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“theareais%6.2f\n”,area);}运行本节介绍算术运算符赋值运算符逗号运算符逻辑运算符条件运算符求字节运算符位逻辑运算符位移动运算符位自反运算符强制类型转换运算符指针运算符下标运算符分量运算符基本运算符位运算符特殊运算符C运算符2.3运算符和表达式2.3.1

算术运算符与算术表达式2.3.2

不同数据类型的转换与运算

2.3.3

关系运算符与关系表达式2.3.4

逻辑运算符与逻辑表达式2.3.5

条件运算符与条件表达式2.3.6

赋值运算符与赋值表达式

2.3.7

逗号运算符与逗号表达式2.3根本运算符及其表达式1.根本算术运算符算术运算符用于各类数值运算。包括根本算术运算符、自增运算符、自减运算符。下表为根本算术运算符。

1在C语言中,规定了运算符的优先级和结合性。优先级:

C语言中,运算符的优先级共分为15级。1级最高,15级最低。表达式求值时,先做优先级高的操作。如:

d=a+b*c;当运算符的优先级别相同时,运算次序由结合性决定。结合性:左结合性(先左后右)例:

d=3*5/4;

右结合性(先右后左)例:

d=a=3;/运算符①整数相除截去余数,此运算为整除。5/2=2〔≠2.5〕1/3+1/3+1/3=0②对于浮点数那么为通常意义的除法5.0/2.0=2.51./3+1./3+1./3=1%模运算符用于计算两个数相除后得到的余数。如:

a%b

求a除以b以后得到的余数。运算对象只能是整型量,其结果也是整型量。

如:

5%2=13%3=03%5=3

‘A’%2=13.0+10.0%5

所得结果的符号与运算符左侧操作数的符号相同×-5%2=-15%-2=12.自增、自减运算符例:x=10;y=++x;此时,y=11假设:x=10;y=x++;那么y=10在这两种情况下,x都被置为11。K=3;j=5;i=3;m=(++k)*j;n=(i++)*j;例:m=k=204n=i=154【例2.7】自增、自减运算符的使用。#include<stdio.h>voidmain(){inti=6,a,b;printf(“%d\n”,

++i

);printf(“%d\n”,

i++

);a=--i;printf(“%d\n”,a);b=i--;printf(“%d\n”,b);printf(“%d\n”,

-i++);printf(“i=%d\n”,i);}i=?7777-67注意:自增、自减运算只能用于变量,不能用于常量和表达式。例:

i++

为合法的运算

++6,++(a+b)

为非法的运算自增、自减运算符是两个+或两个-的一个整体,中间不能有空格。如果有多于两个+或两个-连写的情况,那么编译首先识别前两个+或-为增量或减量运算符。表达式x+++y等价于(x++)+y自增、自减运算符的运算顺序是右结合,因此对-i++应理解为:-(i++),而(-i)++是非法的。

例:

i=3;

printf(“%d”,-i++);

输出:-3【例2.8】自增、自减运算符的使用#include

<stdio.h>

voidmain(){inti,j,

k

;

i=1;

j=1;

k=i+++j;

printf(“i=%d,j=%d,k=%d\n”,i,j,k);}程序运行结果:i=2,j=1,k=2k=(i++)+j;由算术运算符和括号将运算对象(如常量、变量、函数等)连接起来的一个有值的式子。例:‘A’*2-sqrt(4.)/-d(d=2)表达式求值的优先次序:〔〕函数+、-*、/、%+、-高低3.算术表达式①“/”号,如:→(a+b)/(c+d)②“*”不能省略,如:2(a+b)

→2*(a+b)

③括号只能使用圆括号,且成对出现,不能使用[]和{}。如:

a[x+b(y+c)]→

a*(x+b*(y+c))

书写问题:⑴LN(-X)→例:将以下数学式子写成C算术表达式log(sqrt(a+x*x

)-x

)⑵

│a│e-st→abs(a)*exp(-s*t)⑶

→sqrt(fabs(sin(x*3.14/180)))⑷

xy→pow(x,

y)A>3*x^n/(2*x-1)B>3*x**n/(2*x-1)C>3*pow(x,n)*(1/(2*x-1))D>3*pow(n,x)/(2*x-1)例:与数学式子3乘以x的n次方除以(2x-1)对应的C语言表达式是____。√2.3.2不同数据类型间的转换与运算在C程序中,当不同类型的量进行运算时,要转换成同一种类型然后再进行运算。例:

10+‘a’+1.5-8765.1234*‘b’转换方式:

自动转换:数据类型自动由低级向高级转换。强制转换:将表达式的运算结果强制转换成指定的数据类型。自动类型转换这种类型转换由编译系统自动完成转换规那么:floatdoublelongunsignedintcharshort低高说明:1.横向的箭头表示必定的转换。2.纵向的箭头表示当运算对象类型不同时转换的方向。例:floatf=3.5;intn=6;longk=21;doubless=f*n+k/2;强制类型转换格式: 〔数据类型说明符〕(表达式〕注意:强制转换属单目运算,运算优先级为2。强制转换得到的是中间结果类型,原变量类型不变。数据类型说明符和表达式都必须加括号(单个变量除外)例:intx,y;floatz;(float)(x+y);(int)z+x;(float)(5%3);(将5%3的值转换为float型)#include<stdio.h>voidmain(){int

x=8;

float

f=6.85;

printf(“(float)x=%f,x=%d\n”,(float)x,x

);

printf(“(int)f=%d,f=%f\n”,(int)f

,f

);}【例2.12】强制类型转换的应用(float)x=8.000000,x=8(int)f=6,f=6.850000X,f的类型并未改变2,%4,f

);2.3.3关系运算〔比较运算〕即比较两个量的大小,比较的结果为“真”或“假”。例:a>3如果a=8,那么结果为“真”;如果a=1,那么结果为“假”。1.关系运算符2.关系表达式用关系运算符将两个表达式连接起来的式子。格式:

<表达式1><关系运算符><表达式2>

其中:表达式1和表达式2可以是任意表达式。例:

m+n<=20,测试此关系是否成立,成立为真,不成立为假。成立——关系表达式的值为1;不成立——关系表达式的值为0。例:

5>(4<5)

‘a’>‘b’+3

(a=4)>=(b=6)5>2>7>8000值为:

1例2.13读程#include<stdio.h>voidmain(){int

a,b,c;

a=b=c=10;

a=b==c;

printf

(“%d,%d,%d\n”,

a

,b,c);

a==(b=c++*2

);

printf

(

“%d,%d,%d\n”,

a

,b,c);

a=b>c>=100

;

printf

(

“%d,%d,%d\n”,

a,b,c);

}输出结果:1,10,101,20,110,20,11关系运算的缺乏关系表达式只能表达简单的关系,如:sum>=1500y!=z即只能对一个条件进行测试。而以下关系:0<x<5那么不能用关系表达式表示。x>0&&x<5

逻辑运算符与逻辑表达式1.逻辑运算符

C逻辑运算符逻辑运算真值表特点:

全真为真,

其余为假。

特点:全假为假,

其余为真。逻辑非!逻辑与&&逻辑或‖2.逻辑表达式用逻辑运算符将表达式连接起来的式子。形式:[<表达式1>]<逻辑运算符><表达式2>表达式1和表达式2可以是任何表达式如:

5>3&&2||4-!’a’逻辑表达式的值整数1:true

0:false判断时,0代表“假”,非0即表示“真”。将下面的条件用C语言的逻辑表达式表示例1:1≤x≤10且x≠7

x>=1&&x<=10&&x!=7例2:y能被4整除,但不能被100整除或y能被400整除。

y%4==0&&y%100!=0||y%400==0运算顺序:()→!→算术运算→关系运算→&&→||→赋值运算例:假设a=2,b=‘a’,c=5,f=3.0c>3&&8<4-!0f/3&&a-b!(b-‘a’)(a=7)>6&&(b=-1)>60110逻辑与和逻辑或运算符具有短路能力逻辑与:

(表达式1)

&&

(表达式2)

&&

只有表达式1的值为“真”时才求表达式2的值

如:x=y=-1;

++x&&++y;

/*x=?y=?*/0-1短路表达式逻辑或:

(表达式1)

||

(表达式2)

||…只有表达式1为假时才判断表达式2的值

例:

voidmain(){int

num=3;5>4||(num=0);

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

输出:

num=3条件运算符:

?:

三目运算符、右结合、13级。条件表达式:

<表达式1>?<表达式2>:<表达式3>执行过程:2.3.5条件运算符与条件表达式

例:

max=(a>b)?a∶b;

max=a>b?a∶b

;说明:在程序中常把条件表达式的值赋给某个变量,

如:

①将ch中字母转换为小写字母

char

ch=getchar();

ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch

;

②将x的绝对值赋给y

y=x>=0

?

x

:-x

;在条件表达式中,各表达式的类型可以不同,此时,条件表达式值的类型为表达式2和表达式3中较高的类型。

如:

x>y

?1∶1.5

条件表达式的值为浮点型说明:说明:条件运算符可以嵌套,这种嵌套是右结合的。

例:

inta=15,b=20,c=25,d=30,e;

e=a>b?c:c>d?b:d;()e=30例2.15读程,写出运行结果。#include<stdio.h>voidmain(){int

a=1,

b=1,

c=1;

a=a+b

;

b=b+c

;

c=c+a

;

printf(“(1)%d\n”,a>b?a

:b

);

printf(“(2)%d\n”,

a>c?a--:c++);

(a>=b>=c)?printf(“a\n”):printf(“b\n”);

printf(“(4)%d,

%d,

%d\n”,a,b,c

);}运行结果:(1)2(2)3b(4)2,2,4例2.16:任意输入三个数,输出最大值。#include<stdio.h>voidmain(){int

a,b,c,max

;

scanf(“%d%d%d”,

&a,

&b,

&c);

max=a>=b?

a>=c?a

:c:

b>=c?b:c;

printf(“最大数为:%d\n”,max);}程序运行如下:

25-748↙最大数为:48

(())赋值运算符分两种:简单赋值运算符:

=复合赋值运算符:如+=、-=、*=、/=、%=

等优先级14,右结合性。赋值表达式:由赋值运算符连接起来式子作用:将表达式的值赋给变量赋值运算符和赋值表达式简单赋值运算符为“=”;由“=”连接的式子为(简单)赋值表达式。格式:<变量>=<表达式>作用:把右边表达式的值,赋给左边的变量。例:k=i+++--j(i=2,j=3,k的值为)x=(a=5)+(b=8)(x的值为〕d=e=2.1执行顺序是:先计算,再赋值。413

1.简单赋值运算符和赋值表达式例:指出以下赋值表达式的错误

⑴-s=x+y⑵5=n⑶a=a*3=2

⑷w=3.64E2.1/5.87⑸cos(β)=a/sqrt(a*a+b*b)

⑹y=int(i)⑺k=12.3%4⑻a=a+7;赋值运算的类型转换,规那么为:实型数据赋给整型变量时,只取整数局部。如:inti=1.5*2/2;

(x的值为0.000000)

整型数据赋给实型变量时,以浮点形式取值。(i值为1

)如:

floatx=1/4+1/4+1/4;字符型数据赋给整型变量时,

整型变量的高位补的数与char的最高位相同,低八位为字符的ASCII码值。整型数据赋给字符型时,只把低8位赋给字符变量。如:

K=‘A’

(k值为65)k:

0000000001000001例2-13:void

main(){short

intx=300;

chary;y=x;

printf(“y=%dy=%c\n”,y,y);}

输出结果:

y=44y=,x:

0000000100101100y2.复合赋值符及表达式复合赋值运算符是在简单赋值运算符前加双目运算符构成。

共10种:+=,-=

*=、/=、%=

等。例:

c=c+3

c+=3

x*=y+7

x=x*(y+7)

设x,y,z的初始值分别为:10,20,30

x+=y+=z*z

x=x+(y=y+z*z)结果为:

930

t

的值为5t+=t-=t*t

t=t+(t=t-t*t)

结果为:

-40

例2-14void

main(){inta,b,c;

a=b=c=5;printf(”a=%d,b=%d,c=%d\n”,a,b,c);

a=(b=4)+(c=6);printf(”a=%d,b=%d,c=%d\n”,a,b,c);a+=b+c;printf(”a=%d,b=%d,c=%d\n”,a,b,c);

a+=a-=a*=a;printf(”a=%d\n”,a);}运行结果:a=5,b=5,c=5a=10,b=4,c=6a=20,b=4,c=6a=0

逗号运算符运算符:

,

”优先级15级最低,左结合用逗号运算符将各表达式连接起来的式子为逗号表达式。格式:如:a=3*5,

a*10,

a+8

求解过程:先求表达式1的值,再求表达式2的值,最后求表达式n的值,表达式n的值作为整个逗号表达式的值。逗号运算符和逗号表达式<表达式1>

,

<表达式2>

,…,<表达式n>

例:逗号表达式的应用

#include<stdio.h>

voidmain(){int

a=2,b=4,c,y;y=(c=a*b,b+c);

printf(“y=%d\n”,y);}输出结果:y=12例:1)

(a=3*5,a*4),

a+52)a=5,

a*=a

,

a+53)

int

a,

b;

a=2,

b=5,

a++,b++,

a+b;4)

intx=10,y=3,z;

printf(“%d\n”,z=(x%y,x/y));203093说明:

(1)用一个逗号表达式语句,可代替多个赋值语句,如a=0;b=1;c=2;可写成:a=0,

b=1,

c=2;

(2)在变量说明和函数参数表中逗号只是起分隔符作用

printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,

b,

c),b,c);例:交换变量a,b的值。

a=1.0,

b=2.0

1.02.02.01.02.01.0

void

main(){floata,b,c;a=1.0;b=2.0;printf(“a=%fb=%f”,a,b);

c=a;a=b;

b=c;printf(“a=%fb=%f”,a,b);

}abcaabbyx①②

2.01.01.01.02.0习题1.下面四个选项中,均是合法整型常量的选项是()。A)160B)-0xcdfC)-01

温馨提示

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

评论

0/150

提交评论