程序设计基础(C语言)(第2版)(微课版) 课件 刘颖 第1-5章 C语言概述-循环结构_第1页
程序设计基础(C语言)(第2版)(微课版) 课件 刘颖 第1-5章 C语言概述-循环结构_第2页
程序设计基础(C语言)(第2版)(微课版) 课件 刘颖 第1-5章 C语言概述-循环结构_第3页
程序设计基础(C语言)(第2版)(微课版) 课件 刘颖 第1-5章 C语言概述-循环结构_第4页
程序设计基础(C语言)(第2版)(微课版) 课件 刘颖 第1-5章 C语言概述-循环结构_第5页
已阅读5页,还剩298页未读 继续免费阅读

下载本文档

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

文档简介

第1章C语言概述目录CONTENTSC语言的发展历史C语言的特点C语言的关键字与标识符C语言的简单实例1.11.21.31.41.5集成开发环境C语言的发展历史1.1

C语言的发展历史C语言之父C语言的发展历史C语言之父01C语言之父——丹尼斯

里奇(D.M.Ritchie)1972年11月C语言诞生1978年11月贝尔实验室正式发布C语言1982年ANSI开始制定C语言标准1989年12月ANSI完成C标准制定(ANSIC或C89)1990年09月ISO采纳ANSIC为国际标准(ISOC或C90)1999年08月1995年ISO开始对

C语言进行修改1999年推出新的C语言标准(C99)2011年12月ISOC11,2018年ISOC18最新:2024年ISOC23C语言的发展历史02C语言的特点1.2

C语言的特点语言简洁具有结构化的控制语句可移植性好允许直接访问物理地址目标代码质量高程序执行效率高数据类型丰富C语言的关键字与标识符1.3

C语言的关键字与标识符标识符关键字01数据类型关键字voidcharshortintunsignedsignedlongfloatdoublestructunionenum控制类型关键字ifelseswitchcasedefaultdowhileforbreakcontinuegotoreturn存储类型关键字autoregisterstaticextern其他关键字constsizeoftypedefvolatile关键字关键字:有特殊含义和特定用途的标识符。C语言关键字绝大多数是由小写字母构成的字符序列标识符02用来对各种用户定义对象如变量、函数、数组、文件等进行命名。C语言规定,标识符由字母、数字或下划线组成,它的第一个字符必须是字母或下划线。标识符中同一个字母的大写与小写被看作是不同的字符。如a和A是互不相同的标识符。C语言的简单实例1.4

C语言的简单实例简单实例C函数基本结构C程序的基本结构C程序书写格式简单实例01【例1.1】在屏幕上输出一串字符“知识点亮人生,学习成就未来!欢迎进入C语言的世界!”。程序如下:#include<stdio.h>intmain(){printf("知识点亮人生,学习成就未来!欢迎进入C语言的世界!\n");return0;}程序运行结果:简单实例01【例1.2】输入两个整数,求两数之和。程序如下:#include<stdio.h>intmain(){ inta,b,sum; /*定义变量*/ scanf("%d%d",&a,&b); /*输入变量的值*/ sum=a+b; /*求和*/ printf("sum=%d\n",sum); /*输出两数的和值*/ return0;}程序运行结果:1281sum=93#include<stdio.h>intsum_f(intx,inty) /*定义函数sum_f,形式参数x、y为整型*/{ ints; /*定义整型变量s*/ s=x+y; /*将x与y相加求和,并存入变量s之中*/ returns; /*返回,并将s的值作为函数运算结果带回本函数被调用之处*/}intmain(){ inta,b,sum; /*定义变量*/ scanf("%d%d",&a,&b); /*输入变量的值*/ sum=sum_f(a,b); /*调用函数sum_f求出a、b之和,存入变量sum之中*/ printf("sum=%d\n",sum); /*输出两数的和值*/ return0;}简单实例01【例1.3】输入两个整数,求两数之和。(求和功能使用自定义函数完成)23sum=5程序运行结果:C程序的基本结构02C程序由函数构成,函数是C程序的基本单位(1)一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其它函数。(2)被调用的函数可以是系统提供的库函数,也可以是用户根据需要自己编写设计的函数。(3)main函数是每个程序执行的起始点。C程序的基本结构02C语言源程序源文件1源文件2预处理命令函数1函数2…函数n…源文件mC函数的基本结构03一个函数由函数首部和函数体两部分组返回值类型函数名(函数参数){

[声明部分]:定义本函数所用的变量

[执行部分]:由若干条语句组成命令序列}函数首部(函数头)函数体C程序书写格式04C程序由函数构成,函数是C程序的基本单位(1)一行可以写几个语句,一个语句也可以写在多行上。(2)C程序没有行号。(3)每条语句的最后必须有一个分号“;”表示语句的结束。(4)使用“/**/”或“//”可以对C程序中的任何部分作注释,可以提高程序可读性,使用注释是编程人员的良好习惯。集成开发环境1.5

集成开发环境C语言程序的执行过程VisualC++2010学习版的安装与使用主流集成开发环境主流集成开发环境01(1)Code::BlocksCode::Blocks是一款免费、跨平台的C/C++集成开发环境,它适合初学者和有一定开发经验的开发者使用,可以方便地构建和运行C语言程序。(2)EclipseEclipse是一款免费、跨平台的集成开发环境,支持多种程序设计语言,它提供了丰富的插件,开发者可以根据需要添加各种功能。(3)Dev-C++Dev-C++是基于Windows系统的适合初学者使用的轻量级C/C++集成开发环境,安装与调试方便,支持多种语言,是适合C语言初学者的集成开发环境。(4)VisualStudio系列VisualStudio系列是微软公司开发的可视化程序开发工具,支持多种程序设计语言。(1)下载地址:(学习通C语言课程——资料)https:///s/1j0FWPCfM5oxEUEKmDxOLdQ

提取码:2o6k(2)安装:运行Setup.hta文件

VisualC++2010学习版的安装02(3)注册:帮助—注册产品VisualC++2010学习版的工作界面02VisualC++2010学习版的使用介绍021、新建项目:直接点击“新建项目…”或者选择菜单【文件】—【新建(N)】—【项目(P)…】在“新建项目”对话框中“已安装的模板”选项卡中选定“VisualC++”选项,并选定“Win32控制台应用程序”项目类型,然后确定项目存储的位置,最后输入项目名称。VisualC++2010学习版的使用介绍02点击“下一步”VisualC++2010学习版的使用介绍02点击“完成”VisualC++2010学习版的使用介绍022、添加源程序:在“解决方案资源管理器”选项卡中,鼠标右键单击“源文件”,在弹出菜单中选择【添加(D)】—【新建项(W)…】VisualC++2010学习版的使用介绍02在“新建项”对话框中,选择文件类型为“C++文件(.cpp)”,确定源文件存储位置,并输入文件名,扩展名为“.c”,最后点击【添加】按钮VisualC++2010学习版的使用介绍023、编辑源程序代码:在程序代码编辑区输入源程序代码VisualC++2010学习版的使用介绍024、编译:点击主菜单项【生成(B)】,在下拉菜单中单击【编译(M)】,对源文件进行编译VisualC++2010学习版的使用介绍025、连接:点击主菜单项【生成(B)】,在下拉菜单中单击【生成解决方案(B)】,对项目进行连接VisualC++2010学习版的使用介绍026、执行:点击主菜单项【调试(D)】,在下拉菜单中单击【开始执行(不调试)(H)】,执行程序VisualC++2010学习版的使用介绍02运行窗口VisualC++2010学习版的使用介绍02①如果看不到“生成”菜单,可选择“工具”→“设置”→“专家设置”命令打开。②也可用“Ctrl+F5”组合键完成“编译→连接→执行”的过程,如果“输出”区显示失败信息,则根据提示信息进行修改后使用快捷键。③设置程序编辑区的字体、字号与颜色。可选择“工具”→“选项”命令,在弹出的“选项”对话框中选择“字体和颜色”命令,可更改程序编辑区的字体、字号与颜色。

注意C语言程序的执行过程03用户编辑源文件.c文件编译目标文件.obj文件连接可执行文件.exe文件执行结果出错出错出错AI赋能:解锁未来用AI大模型查询常用的AI平台及其特点,以及它们各自具有的独特功能和应用场景。AI大模型求知

课后作业:1、完成教材课后习题2、观看常见错误视频THANKS第2章C语言基础45目录CONTENTSC语言的数据类型常量和变量运算符与表达式数据类型转换2.12.22.32.446C语言的数据类型2.147C语言的数据类型常用编码方式和存储格式为什么要设置数据类型C语言规定的数据类型48为什么要设置数据类型?01要使计算机能够通过程序来完成特定任务,首先要解决的是数据的存储问题,包括数据的存储编码格式、存储二进制数位,不同数据之间存在的某些联系等等。C语言提供了多种数据类型,用以适应不同情况的需要。数据类型不同,它所表达的数据范围、精度和所占据的存储空间均不相同。49常用编码方式和存储格式02存储长度:在计算机中使用一定长度的存储单元(通常是字节的倍数)来存储数据。常用编码方式:原码、反码、补码、ASCII码…常用存储格式:定点型、浮点型…存取数据必须先确定数据的编码方式、存储格式和所占的存储长度,C语言中把这三者结合起来,给出几种固定的形式,这些形式就是最基本的数据类型。50C语言规定的数据类型03枚举类型(enum)数据类型基本类型构造类型指针类型(*)空类型(void)字符型(char)浮点型整型(short,int,long,unsigned)双精度(double/longdouble)单精度(float)结构体(struct)数组([])共用体(union)51常量和变量2.252常量和变量什么是常量和变量符号常量直接常量变量变量的定义及初始化53什么是常量和变量?01常量:指在程序运行中,其数值不能被改变的量常量分为直接常量和符号常量变量:指以标识符为名字,其值可以改变的量变量代表计算机内存中的某一存储空间,变量的类型决定了该存储空间的长度和其中存放数据的编码方式及存储格式。变量的类型也决定了该存储空间中存放数据的数据形式和取值范围。54C语言的常量55直接常量02整型常量浮点型常量字符型常量字符串型常量直接常量分类030104010256直接常量021、十进制形式:与数学上的整数表示相同例如:12,-100,0整型常量012、八进制形式:在数码前加数字0例如:012=1*81+2*80=10(十进制)3、十六进制形式:在数码前加0X例如:0x12=1*161+2*160=18(十进制)注意!

*

八进制的数码范围为0~7;018

*

十六进制的数码除了数字0~9外,

还使用英文字母a~f(或A~F)表示10~15。如:0x1e√57直接常量021、十进制小数形式:由数字和小数点组成例如:3.4,4.,.3浮点型常量022、指数形式:十进制小数+e(或E)+十进制数整数例如:12.5e-6

表示12.5×10-6

注意!

小数点不能单独出现;0.√.0√.

e或E的两边必须有数,且其后面必须为整数;如:6E0.2

e5

浮点型常量只能用十进制形式表示58直接常量021、用单引号括起来的一个字符例如:‘A’、

‘1’、’?’字符型常量032、用单引号括起来的由反斜杠(\)引导的转义字符例如:‘\n’、

‘\t’、’\101’、'\0x41'字符形式含义\n换行\t横向跳格(Tab)\v竖向跳格\b退格\r回车\\反斜杠\′单引号\”双引号\xhh1到2位16进制ASCII码值所代表的字符\ddd1到3位8进制ASCII码值所代表的字符注意!字符A的ASCII码为:65D(十进制)=41H(十六进制)=101Q(八进制)∴字符A可以表示为‘A’、’\x41’、’\101’59直接常量02字符串常量04字符串常量:是用一对双引号括起来的字符序列。

注意:每个字符串的后面都有一个‘\0’结束符。如:“SHANGHAI”,“AbcdeFGHijk”,“Howareyou”。60符号常量03符号常量:是用标识符来表示一个数据;在程序中不能给它赋值。

定义形式:

#define标识符常量数据例如:#definePI3.14159

在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。如:2*2.3*PI

就等价于2*2.3*3.14159。61变量04

变量是指以标识符为名字,其值可以改变的量。

变量代表计算机内存中的某一存储空间,该存储空间中存放的数据就是变量的值。

在同一程序块中,变量不能被重复定义。

使用变量时必须“先定义,后使用”。62变量04整型变量浮点型变量字符型变量基本变量分类0301010263变量04整型变量01整型变量分类根据数据所占的存储长度的不同分为:int、short、long;同样存储长度的数据又分unsigned、signed;故可组合出六种类型。整型变量的值域由机器中数据的存储长度决定标准C中,有short(2字节)≤int(2字节)≤long(4字节)

关键字

所占位数

取值范围

short16-32768~32767

int16-32768~32767long32-2147483648~2147483647unsignedshort160~65535unsigned160~65535unsignedlong32 0~42949672956465int与unsignedint互转举例int-1原码反码补码

unsignedint=215+214+……+20=32768+16384+8192+4096+2048+1024+512+256+128+64+32+16+8+4+2+1=65535100000000000000111111111111111101111111111111111变量04浮点型变量02浮点型变量的分类及值域关键字字节数取值范围精度(位)float43.4×10-38~

3.4×10386~7double81.7×10-308~

1.7×1030815~16longdouble161.7×10-4932~

1.7×10493218~1966变量04字符型变量03关键字:char

每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)67变量的定义及初始化05变量初始化在定义变量的同时给变量一个初始值。变量定义的语法规定可扩展为:<数据类型名><变量名>[=常量]{,<变量名>[=常量]};

例:定义形式<数据类型名><变量名>{,<变量名>};例如:inta,b,c;

floatx,y;charc1,c2;或intc1,c2;定义变量就是在内存中划出一块相应类型的存储空间存放该变量的值。自己设定,满足标识符的规定。如:int,float,char;不可省inta=5,b=3;√

inta=b=c=3;

inta,b,c;a=b=c=3;√

68程序运行结果为:

x+k=40,y+k=10

变量根据作用域的不同可分为局部变量和全局变量,根据存储方式的不同可分为静态存储变量和动态存储变量,这些我们将在后面章节中详细介绍。变量的定义及初始化05#include<stdio.h>intmain(){intx,y,z,w;

/*定义x,y,z,w为整型变量*/unsignedintk;/*定义k为无符号整型变量*/x=10;y=-20;k=30;z=x+k;w=y+k;

printf("x+k=%d,y+k=%d\n",z,w);

return0;}69运算符与表达式2.3

70运算符与表达式运算符分类关系运算符及表达式算术运算符及表达式逻辑运算符及表达式赋值运算符及表达式位运算及其他运算符71运算符分类01赋值运算符按位运算符其它运算符算术运算符关系运算符逻辑运算符关系运算符按位运算符关系运算符表达式:是由操作数和运算符组成的序列72算术运算符及表达式02 3-5 1-1 -3 3*5 ab错误 a.b错误 3/5=0 3./5=0.6 3/5.=0.6

+:加法/正号-:减法/负号*:乘法/:除法%:取余或模 3+5 1+1 +3a%b=a-n*b(a、b必须为整型,n为a/b的值)5%(-3)=5-(-1)*(-3)=2(-12)%(-5)=(-12)-2*(-5)=-2算术运算符0173随堂练1:-11%3=答案:=-11-(-3)*3=-2算术运算符及表达式02算术运算符的优先级和结合性02优先级:+(正号)-(负号)*/%+-结合性:自右向左(+正号、-负号)自左向右(*、/、%、+、-)结合性是指同级运算时运算符的结合方向。如a#b#c(#代表某一运算符)若先运算a#b,再将其结果与c运算,称为左结合性;从左至右运算规则若先运算b#c,再将a与其结果运算,则称右结合性;从右至左运算规则74算术运算符及表达式02算术表达式03

例:已知:

floata=2.0;intb=6,c=3;

求解:

a*b/c-1.5+’A’+abs(-5)=?12.0/34.0-1.52.5+65(int)67.5572.575算术运算符及表达式02自增与自减运算符(重点和难点)04++i,--i先增(减)1,再使用ii++,i--先使用i,再增(减)1(1)单独使用时++i;等价i++;等价i=i+1;(2)j=++i;(3)j=i++;若i的初始值为3i=4;j=4;i=4;j=3;注意:自增自减运算符的操作数必须为一个变量76算术运算符及表达式02自增与自减运算符(重点和难点)04结合性:自右向左分析:(1)++、--、+(正号)、-(负号)是同级运算符,结合方向:自右向左。(2)-i++等价于-(i++)(3)对于括号内的自增运算,又要先使用i,再使i增加1。优先级:第2级(单目运算)77你比他高吗?马云比王健林有钱吗?平均分及格了吗?结果是实数吗?工资是否达到个税条件?有没有重复数值?78关系运算符及表达式03关系运算符及表达式03关系运算符01<:小于,5<3,3<5<=:小于等于,5<=3,3<=5,与数学上(≤)不同>:大于,5>3,3>5>=:大于等于,5>=3,3>=5,与数学上(≥)不同==:等于,5==3,与数学上(=)不同!=:不等于,5!=3,与数学上(≠)不同79关系运算符及表达式03关系表达式02用关系运算符将表达式连接起来的式子优先级结合方向:自左向右表达式的值:关系成立,即为真,结果为1;关系不成立,即为假,结果为0;算术运算符<<=>>=高低==!=高低8003一般关系运算要求关系运算符连接的两个运算对象为同类型数据a+b>3*c两个算术表达式的值作比较(a<=b)==(b>c)两个关系表达式的值作比较你比他高吗?X>Y马云比王健林有钱吗?M<W平均分及格了吗?S>=60结果是实数吗?(INT)X!=X工资是否达到个税条件?X>5000有没有重复数值?X==A81关系运算符及表达式03男子征兵基本条件:必须年满18岁,身高168以上,高中以上学历,视力5.0以上(如硕士以上学历视力3.0以上即可)某工厂出门规则:8点以后,有出门条或安保人员判断闰年:能被4整除但是不能被100整除或者能被400整除a和b中,至少有一个是大于c82逻辑运算符及表达式04逻辑运算符及表达式04逻辑运算符01!:逻辑非,一元运算符运算规则:取反,真假,假真&&:逻辑与。又称逻辑乘。运算规则:两个操作数均为真,结果为真。||:逻辑或。又称逻辑加。运算规则:只要两个操作数有一个为真,结果为真。83逻辑运算符及表达式04逻辑表达式02用逻辑运算符将表达式连接起来的式子。优先级关系运算符高低&&逻辑与算术运算符高低!逻辑非高低高低||逻辑或结合性!:自右向左&&、||:自左向右84男子征兵基本条件:必须年满18岁,身高168以上,高中以上学历,视力5.0以上(如硕士以上学历视力3.0以上即可)age>=18&&shengao>=168&&(xueli==“gaozhong”&&shili>=5.0||shili>=3.0&&xueli==“shuoshi”)某工厂出门规则:8点以后,有出门条或安保人员time>=8&&(chumentiao==1||anbaoyuan==1)判断闰年:能被4整除但是不能被100整除或者能被400整除year%4==0&&year%100!=0||year%400==0a和b中,至少有一个是大于ca>c||b>c85逻辑运算符及表达式04逻辑运算符及表达式04特别注意:03在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。(1)a&&b&&c例:a=0;b=1;c=2;d=a++&&b++&&--c;d=(a++)&&(b++)&&(--c);运算结果:d=0,a=1,b=1,c=2求解方法:只有a为真(非0),才需要判断b的值,只有a和b都为真,才需要判断c的值。只要a为假,就不必判断b和c,运算立即中止。86逻辑运算符及表达式04(2)a||b||c求解方法:只要a为真(非0),就不必判断b和c;只有a为假,才判断b;a和b都为假,才判断c。例:a=0;b=1;c=2;d=a++||b++||--c;d=(a++)||(b++)||(--c);

运算结果:d=1,a=1,b=2,c=287赋值运算符及表达式05赋值运算符=(数学上的等号)赋值表达式语法形式:

<变量>=<表达式>求值规则:将“=”右侧表达式的值赋给左侧的变量结合性:自右至左

优先级:第14级88赋值运算符及表达式05例:分析以下各个表达式(1)x=(y=12)/4y值为12,x值为3,表达式的值为3(2)x=y=12/4y值为3,x值为3,表达式的值为3(3)(x=y)=12/4语法错误。该赋值运算符左边不是变量,而是一个表达式89赋值运算符及表达式05复合赋值运算符*=、/=、%=、+=、-=、<<=、>>=、&=、Λ=、¦=共10个,由赋值运算符与算术、位运算符组成。复合运算符是一个运算符,但功能上,是两个运算符功能的组合。例:a+=ba*=b+c随堂练1:a=2;a+=a*=a;以上语句执行结束之后,变量a的值是什么?相当于a=a+b相当于a=a*(b+c)优先级、结合性与赋值符相同90位运算符0691&(按位与运算符)运算规则:两个二进制位都为1时,结果才为1。|(按位或运算符)运算规则:两个二进制位都为0时,结果才为0。^(按位异或运算符)运算规则:两个二进制位相同为0,相异为1。~(按位取反运算符)运算规则:二进制位由0变1,1变0。<<(左移运算符)运算规则:各二进制位全部左移若干位,高位丢弃,低位补0。>>(右移运算符)运算规则:各二进制位全部右移若干位无符号数,高位补0;有符号数,各编译器的处理方法不一样,有的补符号位的值(算术右移),有的直接补0(逻辑右移)。92(1)~3=-4D3D=00000011B=1111110010000011+1=10000100=-4(2)3&5=1D00000011B

00000001B(3)3^5=6D该表达式的计算过程如下:

00000011B^00000101B

00000110B转十进制有符号数&00000101B例:测试代码#include<stdio.h>intmain(){intnum=3,result;result=~num;//按位取反

printf("~3的结果:%d\n",result);return0;}93(4)3|5=7D该表达式的计算过程如下:

00000011B|00000101B

00000111B(5)5<<25D二进制补码:00000101B左移两位,高位丢弃两位,低位补两个0得到结果:00010100所以,表达式5<<2的值为20。(6)5>>25D二进制补码:00000101B右移两位,低位丢弃两位,高位补两个0(假设采用算术右移)得到结果:00000001所以,表达式5>>2的值为1。其它运算符07语法形式:子表达式1,子表达式2,…,子表达式n求值规则:从左至右依次计算各子表达式的值优先级:最低结合性:自左至右(左结合性)表达式的值:最后一个子表达式的值。1、逗号运算符及逗号表达式94其它运算符例4:

表达式

aby

y=a=4,b=5,a+b;454y=(a=4,b=5,a+b);459y=(a=4,b=5),a+b;455

1、逗号运算符及逗号表达式9507形式:sizeof变量名sizeof(类型名/变量名)功能:求变量或某种数据类型所需的字节数。运算结果:整型数结合性:自右至左(右结合性)

优先级:第2级(单目运算)2、sizeof运算符其它运算符9607其它运算符2、长度运算符sizeof9707

例2.4海纳百川,有容乃大——sizeof运算符的使用 #include<stdio.h> intmain() {shorta;floatb;doublec; printf("a=%d,b=%d\n",sizeof(a),sizeof(b)); printf("c=%d\n",sizeofc); //sizeof后面跟变量名时,变量名外括号可以省略 printf("a=%d,b=%d\n",sizeof(short),sizeof(float)); printf("c=%d\n",sizeof(double));//sizeof后面跟类型名时,类型名必须用括号括起来 return0;

}用大模型了解海纳百川,有容乃大其它运算符3、条件运算符优先级:算术>逻辑>条件

>赋值>逗号结合性:

自右至左C语言中唯一的一个三目运算符9807其它运算符3、条件运算符有两个符号:?、:,它与三个操作数组成三元运算。一般形式:<表达式1>?<表达式2>:<表达式3>求值规则和表达式的值:求解表达式1真(非0)求解表达式2假(0)求解表达式3表达式的值9907x=a

>=0?a∶-a该表达式其实质上是一个赋值表达式,由于条件运算符的优先级别高于赋值运算符,所以将先进行条件表达式的运算,再进行赋值表达式的运算。该表达式运算的意义是,若a>0,将a的值赋给x;否则,将-a的值赋给x。100其它运算符063、条件运算符101当多个条件表达式嵌套使用时,每个后续的“:“总是与前面最近且没有配对的“?“相联系。例如:a>b?a:c>d?c:d相当于:a>b?a:(c>d?c:d)如果a=6、b=8、c=12、d=24,则条件表达式的值。3、条件运算符——条件表达式嵌套07其它运算符其它运算符3、条件运算符——特别说明条件表达式中的表达式2和表达式3可以是数值表达式、赋值表达式或函数表达式;如:

max=a>b?(a=5):b;a>b?printf(“a大于b”):printf(“a不大于b”);右结合性a>b?a>=c?a:c:b>=c?b:c等价于

a>b?(a>=c?a:c):(b>=c?b:c)表达式1和表达式2、表达式3的类型不同时,条件表达式的类型为后者类型中较高的类型。如:

5?'x':'y'表达式类型为字符型

a>b?4.5:6表达式类型为浮点型

4.5或6.010207

inta,b; a=3; b=!++a?a*2:a*3; printf("%d,%d\n",a,b); a=a?++a:++b; printf("%d,%d\n",a,b); printf("%d\n",a==a?a+5:b-1?a+1:b+2);输出结果为:4,125,1210103其它运算符举例07数据类型转换2.4

104数据类型转换赋值转换自动转换强制类型转换105数据类型转换C语言允许整型、浮点型、字符型数据进行混合运算。三种转换方式:自动转换赋值转换强制转换106自动转换(隐式转换)01intunsignedintlongintdoublefloatchar,short存储长度较短存储长度较长总趋势:107自动转换(隐式转换)01例6:intx=2;floaty=1.6;charc='A';c+x*y=?65(char)2(int)1.6(float)3.2(double)68.2(double)108赋值转换02有效位不同,补充小数位例:floatf=123456789;123456792.000000(7位)Doublef=123456789;123456789.000000(15位)(1)浮点型整型(字符型)取整数部分,去掉小数部分(2)整型、字符型浮点型109例:intn=123.456;printf(“%d",n);输出:123赋值转换02(3)对char、int、short、long、unsigned型数据赋值符右边数据(a位)赋值符左边变量(b位)a=b原样照赋:如short赋给inta>b截断高a-b位,送低b位:如long赋给inta<b无符号数据或正数:低位照赋,高a-b位全补0有符号数据:低位照赋,高a-b位符号扩展110111a>b:截断高a-b位,送低b位a<b:正数,低位照赋,高a-b位全补0例如,假设有以下程序段:intb;chara;b=321;a=’A’;表达式b=a的计算过程如图2-4所示:例如,假设有以下程序段:inta;charb;a=321;b=’A’;表达式b=a的计算过程如图2-4所示:010000010100000100000001a=321b=a010000010100000100000000a=’A’b=a强制转换03形式:(类型名)表达式注意:强制类型转换时,并不改变操作数子表达式中变量的值和类型。例:inta=2,b=5;(float)b/a2.5(float)(b/a)2.0112AI赋能:解锁未来了解C语言在我国大飞机研发上的应用。AI大模型求知

了解C语言在我国大飞机研发上的应用。AI大模型求知

与AI对话

按教材P25步骤完成操作课后作业:1、完成教材课后习题2、观看常见错误视频THANKS第3章顺序结构程序设计目录CONTENTS程序的灵魂—算法C语言基本语句数据的输入和输出顺序结构程序设计3.13.23.33.4程序的灵魂—算法3.1程序的灵魂——算法算法概述算法的描述结构化程序设计方法算法是对问题求解过程的操作步骤的描述,是为解决一个或一类问题给出的一个确定的、有限的操作序列。算法概述01算法概述01“算法”就是能让程序员编写出可靠、高效的计算机程序的“菜谱”按菜谱做菜的流程按算法解决问题的流程解决一个问题可以用不同的方法和步骤,因而针对同一问题的算法也有多种原材料开始结束开始结束问题:找出1到1000之间能被9整除的数(考虑最优算法)算法1:

设x=9

输出x的值

将x的值加9

判断x的值是否超过1000,没有超过则回到步骤

,否则算法结束。

共需执行加法111次算法2:

设x=1

x除以9,若余数为0,则x能被9整除,输出x的值

将x的值加1

判断x的值是否超过1000,没有超过则回到步骤

,否则算法结束。

共需执行除法和加法各1000次算法3:

设x=1

输出x*9的值

将x的值加1

判断x*9的值是否超过1000,没有超过则回到步骤

,否则算法结束。

共需执行乘法112次,加法111次算法概述01算法独立于任何程序设计语言,同一算法可以用不同的程序设计语言来实现,因此,算法才是根本。算法1用Python语言实现:x=9whilex<=1000:print(x)x=x+9算法1用C语言实现:#include<stdio.h>intmain(){intx=9;while(x<=1000){printf("%d\n",x); x=x+9;}return0;}算法概述01SymbolNameFunctionStart/EndAnovalrepresentsastartorendpoint.ArrowsAlineisaconnectorthatshowsrelationshipbetweentherepresentativeshapes.Input/outputAparallelogramrepresentsinputoroutput.ProcessArectanglerepresentsaprocess.DecisionAdiamondindicatesadecision.流程图的符号算法的描述02结构化程序设计方法03自顶向下、逐步求精、模块化顺序结构:输入秒数,转化成对应的“小时:分:秒“形式输出选择结构:求两个数中的最大数。循环结构:计算1+2+3+……+100的和输入总秒数xs=0计算小时h计算分钟m计算秒数s显示h:m:s输入第一个数a输入第二个数ba>b?输出第二个数b输出第一个数aYi=1i<=100s=s+ii=i+1Y输出sNN程序的结构C语言基本语句3.2C语言基本语句表达式语句控制语句函数调用语句复合语句空语句表达式语句01表达式语句可分为运算符表达式语句和赋值表达式语句,其作用是计算表达式的值或改变变量的值。由表达式加上“;”组成的语句称为表达式语句。它的一般形式为:表达式;表达式语句01赋值表达式语句z=x+y;/*先计算x+y的值,再将值赋给z*/x=2;/*将x赋值为2*/x=x*sin(x);/*先计算表达式x*sin(x),再将值赋给x*/运算符表达式语句x+y;/*加法运算语句,不保留运算结果*/i++;/*自增运算语句,使i的值加1*/--i;/*自减运算语句,使i的值减1*/02C语言有丰富的标准函数库,可提供各类函数供用户调用(参见附录)。标准库函数完成预先设定好的任务,可直接调用,不需要用户再编写程序。函数调用语句是由函数调用表达式后加上“;”组成。它的一般形式为:函数名(参数列表);函数调用语句例如:scanf(“%d”,&a);/*输入函数调用语句,输入变量a的值*/printf(“中国是一个伟大的国家”);

/*输出函数调用语句,原样输出引号中的字符串*/02调用标准库函数时,应注意:(1)程序中要包含相应的头文件例如:#include<stdio.h>或#include“stdio.h”

/*文件名可放在尖括号中或双引号中*/(2)调用函数有的是为了得到函数返回值,这类函数的调用出现在表达式中,不作为函数调用语句,而作为表达式语句的一部分。

得到函数返回值y=3*sin(x)+10;y=cos(2.6);在表达式中调用函数,实际是转而去执行一段预先设计好的程序,求得结果后返回到调用点。

完成相应任务printf(“%6.4f”,a);调用printf不是为了得到返回值,而是为了完成结果输出的任务。函数调用语句控制语句032控制语句用于控制程序流程,以实现程序的各种结构方式,C语言共有11个控制语句,分为三类:分类语句形式功能说明条件判断语句if()……条件语句,用于分别实现单/双/多分支选择结构():表示判断条件……:表示内嵌语句if()…else…if()…elseif()…else…switch()…case…多分支选择结构循环执行语句while()……循环语句,用于实现循环结构do……while()for()……转向语句break改变循环执行状态语句——提前终止循环

continue改变循环执行状态语句——提前结束本次循环

goto改变循环执行状态语句——提前终止多重循环

return从函数返回语句

复合语句043注意!(1)复合语句中每条语句都必须以“;”结尾,右花括号“}”后不能有分号。(2)允许多条语句写在同一行:如上例也可写为{c=a;a=b;b=c;}。把多个语句用“{}”括起来组成的一个语句称为复合语句。在程序中应把复合语句看作是单条语句而不是多条语句。{c=a;a=b;b=c;}该复合语句完成了变量a,b的交换。空语句05空语句用一个分号表示一般形式为:;空语句占一个简单语句位置,执行该语句不做任何操作。程序中空语句可用来作空循环体。数据的输入和输出3.3

C语言基本语句格式数据的输入/输出输入和输出的概念及实现字符数据的输入/输出输入输出的概念及实现01输入/输出是相对计算机主机而言的输出:从计算机向外部输出设备(如显示器、打印机等)输出数据输入:从外部输入设备(如键盘、鼠标等)向计算机输入数据注意!C语言本身不提供输入/输出语句,输入输出功能由C语言的标准输入输出(I/O)库函数提供。其对应头文件为“stdio.h”。字符数据的输入/输出02C语言标准I/O函数库提供了putchar()和getchar()两个函数来分别实现对于单个字符的输出与输入。字符数据的输入/输出02(1)单个字符输出函数putchar()

putchar()函数是向标准输出设备输出一个字符,其调用格式为:

putchar(ch);其中ch为一个字符变量或常量。putchar()函数的作用等同于printf("%c",ch);例3.1#include<stdio.h> intmain() { intA=65; putchar('A'); /*输出大写字母A*/putchar(A); /*变量A的值为65,输出对应在ASCII中的字符A*/putchar('\x41'); /*x41为十六进制数表示形式*/putchar('\101'); /*101为八进制数表示形式*/return0; } 输出:AAAA字符数据的输入/输出02例#include<stdio.h>intmain(){intc;chara;c=98;a='B';putchar(c);putchar('\n');putchar(a);

putchar('\n');return0;}

输出:bB对于可视字符直接输出,而对控制字符则直接执行控制功能,不在屏幕上显示。字符数据的输入/输出02(2)单个字符输入函数getchar()

getchar()是字符输入函数,其功能是从标准化输入设备上输入一个字符。其调用的一般形式为:getchar();通常把输入的字符赋给一个字符型变量,构成赋值语句,例如:chara;a=getchar();#include<stdio.h>intmain(){chara;a=getchar();putchar('a');putchar('=');putchar(a);return0;}字符数据的输入/输出02例3.2接受用户从键盘输入字符,并输出。字符数据的输入/输出02注意!(1)getchar函数只接受单个字符,输入多于一个字符时,只接收第一个字符。如教材例3.2输入65,则输出:a=6。(2)getchar函数值可赋给一个字符变量,也可赋给一个整型变量。如教材例3.2第4行也可定义为:inta;(3)执行getchar()输入字符时,键入字符后需敲回车键,程序才会响应继续执行后续语句。(4)putchar函数只能用于单个字符输出格式数据的输入/输出03(1)

格式输出函数printf()函数格式:printf(“格式控制字符串”[,输出项列表]);

“格式控制字符串”:用双引号括起来的字符串。

它一般包括两部分,即格式字符串和非格式字符串(需原样输出)两部分组成,它的作用是控制输出项的格式和输出一些提示信息。

如果只有非格式字符串,则输出项列表省略。例

printf(“面朝大海,春暖花开”);只有非格式字符串原样输出:面朝大海,春暖花开格式数据的输入/输出03例输出结果为:x的值为65,x对应ASCII字符为A(换行)格式数据的输入/输出03说明!(1)格式字符串与输出项列表在数量和类型上要按顺序一一对应。(2)格式字符串由%开始,并以格式字符结束,用于指定各输出项的输出格式。格式字符串用法说明%d输出带符号的十进制整数,正数的符号省略如:intx=65; printf("%d",x);输出:65%u以无符号的十进制整数形式输出如:intx=-1; printf("%u",x);输出:65535%o以无符号的八进制整数形式输出,不输出前导符o如:intx=65; printf("%o",x);输出:101%x或%X以无符号的十六进制整数形式输出,不输出前导符ox如:intx=65; printf("%x",x);输出:41%c输出一个字符如:intx=65; printf("%c",x);

输出:A%s输出字符串如:charx[]="china"; printf("%s",x);

输出:china%f以十进制小数形式输出实数(包括单、双精度),整数部分全部输出,小数输出6位(四舍五入,不足添零)。如:floatx=4.8;print(“%f”,x);输出:4.800000doublex=4.6786786;print(“%f”,x);输出:4.678679%e或%E以数形式输出实数,要求小数点前必须有且仅有一位非零数字如:floatx=0.06; printf("%e",x);输出:6.000000e-002%g或%G自动选取f或e格式中输出宽度较小的一种使用,且不输出无意义的0如:floatx=0.0600; printf("%g",x);输出:0.06%%输出百分号%函数printf()的常用格式字符串(3)格式修饰符:在%与格式字符中间还可插入格式修饰符,用于对输出格式进行微调,如指定数据域宽、小数位数、左对齐等格式数据的输入/输出03格式修饰符用法说明英文字母l表示以长整型输出整数或以双精度输出浮点数英文字母h表示以短整型输出整数指定域宽m(m为整数)指定输出项所占列数当m为正整数,数据宽度小于m时,在域内右靠齐,左边用空格补足;数据宽度大于m时,按实际宽度全部输出。当m为负整数,则输出数据在域内左靠齐显示精度.n(n>=0)n为正整数,位于域宽m之后,表示为m.n对于浮点数,用于指定输出小数位数对于字符串,用于指定从字符串左侧开始截取的子串字符个数%m.n表示输出实数共占m个字符位置(包括小数点),其中n位小数注意!函数printf()的格式修饰符例3.3:格式输出示例

#include<stdio.h>

intmain()

{

intx=65535;

floaty=123.1234567;

doublez=12345678.1234567;

charw='p';

printf("x=%hd,%ld,%6d\n",x,x,x);

printf("y=%f,%lf,%8.2lf\n",y,y,y);

printf("z=%f,%lf,%5.4lf\n",z,z,z);

printf("w=%c,%8c,%-8c\n",w,w,w);

return0;

}格式数据的输入/输出03例

运行时输入:x=10,y=20非格式字符串部分“x=,y=”部分需原样输入格式数据的输入/输出03(1)

格式数据输入函数scanf()函数格式:scanf(“格式控制字符串”,参数地址列表);“格式控制字符串”:

用双引号括起来的字符串,包括格式字符串和非格式字符串两部分。格式字符串和printf函数相同,非格式字符串和printf函数相对(在printf中照原样输出,在scanf中照原样输入)格式数据的输入/输出03说明!(1)格式字符串与参数地址列表在数量和类型上要按顺序一一对应(2)格式字符串由%开始,并以格式字符结束,用于指定各输入项的格式。格式字符串用法说明%d输入十进制整数%o输入八进制整数%x输入十六进制整数%c输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入%s输入字符串,遇空白字符(包括空格、回车、制表符)时,系统认为读入结束;(但在开始读之前遇到空白字符会被系统跳过)%f或%e输入实数,以小数或指数形式输入均可%%输入一个百分号%函数scanf()的常用格式字符串(3)格式修饰符:与printf()类似,在函数scanf的%与格式字符中间也可以插入格式修饰符格式数据的输入/输出03格式修饰符用法说明英文字母l表示输入长整型数(如%ld)或双精度浮点数(如%lf)英文字母h表示输入短整型数或单精度浮点数。指定域宽m(m为整数)用十进制整数指定输入数据的宽度(即字符数),若输入字符数超出指定值,超出部分被截去。如:scanf("%5f",&Pi);

printf("%f",Pi);输入:3.1415925/*只是把3.141这5个字符存储在了变量中,其余部分被截去*/输出:3.141000。函数scanf()的格式修饰符(4)scanf()函数没有精度控制,即用scanf输入实型数据时不能规定精度

如:scanf(%.2f”,&pi);/*非法的格式控制字符串*/

(5)在输入字符数据时,若格式控制字符串中没有指定分隔符,则所有输入的字符均为有效字符(包括空格)。

如:scanf("%c%c%c%c%c",&a,&b,&c,&d,&e);

输入:HiChina↙

输出:HiCh/*把H存储在变量a中,i存储在变量b中,空格存储在变量c中,C存储在变量d中,h存储在变量e中,剩余部分被截去*/

(6)在输入字符串时,如果输入空格,则认为输入已结束。

如:

charx[]="";

scanf("%s",x);

printf("%s",x);

输入:JohnSmith↙

输出:John

/*scanf()只把John存储在字符数组x中,空格后的Smith被截去*/格式数据的输入/输出03

#include<stdio.h>

intmain()

{

charuserResponse;

printf("教育的本质不在增添知识,而在唤醒灵魂\n");

printf("同意吗?请输入Y/N:");

scanf("%c",&userResponse);

printf("userResponse=%c\n",userResponse);

return0;

}例3.4教育的本质——利用scanf()与计算机交互格式数据的输入/输出03顺序结构程序设计举例3.4

例3.5:港珠澳大桥是世界上最长的跨海大桥,全长55千米,请输入车辆行驶时速,计算行驶通过港珠澳大桥所用的时间。 #include<stdio.h> intmain() { intl=55; floats,time; printf("请输入时速:"); scanf("%f",&s); time=l/s; printf("用时%.2f小时通过港珠澳大桥!",time); return0; }用大模型了解港珠澳大桥例:输入一个华氏温度,输出对应的摄氏温度。输出取1位小数。转换公式为注意数学表达式到C语言表达式的转换#include"stdio.h"intmain(){floatc,f;scanf("%f",&f);c=5.0/9*(f-32);printf("%.1f\n",c);return0;}例:输入圆的半径,输出圆的周长和面积#include<stdio.h>intmain(){floatr,l,s;scanf("%f",&r);l=2*3.1415*r;s=3.1415*r*r;printf("\n圆的周长为:%6.2f",l);printf("\n圆的面积为:%6.2f",s);return0;}程序运行时输入:2.4↙程序运行结果:圆的周长为:15.08圆的面积为:18.10#include<stdio.h>intmain(){floatr;scanf("%f",&r);printf("\n圆的周长为:%6.2f",2*3.1415*r);printf("\n圆的面积为:%6.2f",3.1415*r*r);return0;}变量l和s,程序可改如下所示,运行结果一样:#include"stdio.h"intmain(){

inta,b,t;

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

printf("a=%d,b=%d\n",a,b);/*观察原来的值*/t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);

/*观察交换后的值*/return0;}例:输入两个整数a、b,将它们交换,例如a为3,b为5,交换后a为5,b为3。两两交换例3.6:输入三个字符,将它们反向输出也可用格式数据输入/输出函数实现,程序可改如下所示,运行结果一样:#include<stdio.h>intmain(){charch1,ch2,ch3;ch1=getchar();ch2=getchar();ch3=getchar();

putchar(ch3);putchar(ch2);putchar(ch1);putchar('\n');return0;}#include<stdio.h>intmain(){charch1,ch2,ch3;

scanf("%c%c%c",&ch1,&ch2,&ch3);

printf("%c",ch3);printf("%c",ch2);printf("%c\n",ch1);return0;}

#include<stdio.h>#include<math.h>intmain(){floata,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf("x1=%5.2f\nx2=%5.2f\n",x1,x2);return0;}AI赋能:解锁未来了解《黑神话:悟空》主要采用的开发语言,了解C与C++的异同。AI大模型求知

与AI对话

输入三位正整数,反向输出,如:输入356,输出653。课后作业:1、完成教材课后习题2、观看常见错误视频THANKS第4章选择结构程序设计

温馨提示

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

评论

0/150

提交评论