版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
相关的C语言知识主讲教师:李显良Tel:QQ:4520664621.计算机语言计算机语言是根据计算机工作特点而编制的,是规那么和符号的集合,是与计算机交流的工具。22.程序程序——是可以被连续执行的假设干条指令的集合,即程序是计算机指令的序列。软件——程序的集合33.计算机语言的开展
计算机语言按其使用方式可分为低级语言和高级语言:低级语言包括机器语言和汇编语言。机器语言和汇编语言是围绕特定计算机而设计的语言,因此难于掌握和记忆。因为低级语言的种种缺点,于是产生了高级语言。43.计算机语言的开展高级语言采用完全符号化的描述形式,用类似于自然语言的形式描述对问题的处理过程。高级语言只是要求人们向计算机描述问题的求解过程,而不必关心计算机的内部结构。
5
面向过程语言6面向对象语言FORTRANBASICCPASCALCOBOLLISPC++C#VisualCVisualBASICJava系统软件设计具有图形功能科学计算商用人工智能计算机高级语言的分类4.
程序设计7程序设计=数据结构+算法+方法+工具程序是用计算机语言对所要解决的问题中的数据以及处理问题的方法和步骤所做的完整准确的描述。数据结构数据类型对求解问题的数据描述:数据结构对求解问题的过程的描述:算法5.程序设计步骤81.
分析问题,建立数学模型2.
确定数据结构3.
确定算法,描述算法4.
编制程序,调试程序5.
运行结果算法的根本特征:1有穷性:一个算法应包含有限的操作步骤,而不是无限的。2确定性:算法中的每一个步骤都应当是确定的,而不应当是模糊不清的。3有效性:算法中的每一个步骤都应该能有效的执行,并得到确定的结果。4有零个或多个输入:在执行算法时需要从外界取得必要的信息。5有一个或多个输出:算法的目的就是解决问题,而问题解决的结果就是输出。910三、算法的表示1流程图表示法图形符号起止框判断框处理框输入/输出框注释框流向线连接点1标识符
程序员定义的名字:函数名,变量名等。2定义规那么①只能由字母(A--Z,a--z)、数字(0--9)或下划线(_)组成。②必须以字母或下划线开头。③不能使用保存字。语言程序设计
C标识符例如:
sumarray_1_num1SUM
1numnum-1
边_a
π-3intSUM与sum是两个不同的标识符。C语言区分大小写字母。注意正确:错误:语言程序设计
CC语言程序的结构例如1仅由main()函数构成的C语言程序。voidmain(){printf(“ThisisaCprogram.\n”);}1总体结构一个完整的C语言程序由假设干个函数组成。必须有且只能有一个主函数main()函数。没有、有一个或多个假设干个其它函数。语言程序设计
C例如2由main()函数和1个其它函数max()构成的C语言程序。intmax(intx,inty){return(x>y?x:y);}voidmain(){intnum1,num2;scanf(“%d”,&num1);scanf(“%d”,&num2);printf(“max=%d\n”,max(num1,num2));}函数主函数语言程序设计
C函数是C语言程序的根本单位main()函数的作用,相当于网站的主页;其它函数的作用,相当于超链接的网页。被〔超链接〕调用的函数可以是系统提供的库函数,也可以是用户自己设计的自定义函数。
C语言程序总是从main()函数开始执行,不考虑其在程序中的位置。当主函数执行完毕时,程序也就执行完毕。
习惯上,将主函数main()放在最前头语言程序设计
C1数据类型
C语言的数据类型是指数据的存在形式及数据之间的联系。2C语言的数据类型
数据表示及数据运算
数据类型总表C数据类型基本类型构造类型指针类型空类型void字符类型char整型实型单精度型float双精度型double数组类型结构体struct短整型short长整型long基本整型int数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作语言程序设计第二章数据描述C在程序中所有数据都必须规定其数据类型根本数据类型<>类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsigned
int0~65535320~4294967295unsigned
longunsigned
short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例:语言程序设计第二章数据描述C一、变量的概念
变量是指在程序的执行过程中其值可以发生变化的量。变量与常量#definePI3.14voidmain(){floatr,s;s=12.5;r=sqrt(s/PI);printf(“半径为:%f”,r);}变量二、变量的四要素
变量名类型值存储单元1变量名变量名:是变量的标识符。注意:遵循标识符的命名规那么。一般使用小写字母,不超过8个字符。如:sum,num_12变量的类型类型不同存储不同3变量的值。4变量的存储单元
整型变量存放形式。inti;/*定义为整型变量*/i=10;/*给i赋以整数10*/内存中实际存放的情况。实际上,数值是以补码表示的-10的补码-111三、变量的定义在C语言中,要求对所有用到的变量作强制定义,也就是“先定义,后使用”。例:
chara1,a2=‘a’;(可以赋初值,但inta=b=c=3;错)
inta=4,b;(指定变量a、b为整型)
floatx,y,z=10.7;
unsignedintc,d;(指定变量c、d为无符号短整型)
longe,f;(指定变量e、f为长整型)1定义格式:
类型说明符变量名列表;四、说明
整型数据溢出:在turboc中一个int型变量的范围:-32768---32767,32767+1,会出现什么情况?例:整型数据的溢出。
voidmain()
{inta,b;
a=32767;b=a+1;printf("%d,%d",a,b);}
结果:32767,-32768解决方法?–
浮点型变量1.浮点型数据在内存中的存放形式:4个字节(32位)。小数位多:精度高指数位多:数值范围大2.浮点型变量的分类
4B单精度(float型):接收7位有效数字
8B双精度(double型):15位有效数字
16B长双精度型(longdouble):一般18位例:
floatx,y;(指定x、y为单精度浮点数)
doublez;(指定z为双精度浮点数)3.浮点型数据的舍入误差由于有限的存储单元,提供有限有效数字,有效位以外的数字将被舍去。由此可能会产生一些误差。例如,a加20的结果显然应该比a大。请分析下面的程序:例
浮点型数据的舍入误差。voidmain()
{floata,b;
a=123456.789e5;
b=a+20;
printf("%f,%f\n",a,b);
}b应为结果:a和b的值都是,可以看到前8位是准确的,把20加在后几位上,是无意义的。应当防止将一个很大的数和一个很小的数直接相加或相减,用程序计算1.0/3*3的结果并不等于1。
字符变量一个字符型变量只能放一个字符。字符变量的定义形式如下:
char
c1,c2;
c1='a';c2='b';
一个字符变量在内存中占一个字节。存储单元中放什么?。
字符型数据和整型数据之间可以转换,但有个条件:0----255(1个字节)。
一个字符数据:字符形式输出整数形式输出可以对字符数据进行算术运算
c='a'+11;d='c'+'d';字符数据与整型数据可以互相赋值。如:
inti,s;charc;i='a';c=97;s=i+c;编译程序根据变量定义为其分配指定字节的内存单元…...地址inta=1,b=-3,c;Scanf(“%d”,&c);abc2字节2字节2字节地址地址…...内存1-3
随机数<>变量初始化:定义时赋初值例:inta=2,b,c=4;floatdata=3.67;charch=‘A’;intx=1,y=1,z=1;
intx=y=z=1;变量的使用:先定义,后使用例1intstudent;stadent=19;//Undefinedsymbol‘statent’infunctionmain
例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain
变量定义位置:一般放在函数体开头voidmain(){inta,b=2;floatdata;a=1;data=(a+b)*1.2;printf(“data=%f\n”,data);}变量定义可执行语句voidmain(){inta,b=2;a=1;floatdata;data=(a+b)*1.2;printf(“data=%f\n”,data);}例:向字符变量赋以整数。
#include<stdio.h>voidmain(){charc1,c2;c1=97;c2=98;printf("%c,%c\n",c1,c2);printf("%d,%d\n",c1,c2);
}
程序运行时输出如下:a,b97,98例
大小写字母的转换。
#include<stdio.h>voidmain(){charc1,c2;
c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c
%c",c1,c2);}运行结果为
ABprintf("%c,%d\n",c1+1,c1);printf("%c,%d\n",c2+1,c2);运行结果为
B,65C,66一、概念常量:在程序的执行过程中,值不能变化的量。
常量#definePI3.14voidmain(){floatr,s;s=12.5;r=sqrt(s/PI);printf(“半径为:%f”,r);}常量二、种类1一般常量:一个数或字符。123〔整〕、‘A’〔字符〕、4.6、-1.23〔实〕2符号常量:用一个标识符表示一个常量。PI、PRICE一般常量符号常量符号常量的使用:
注意①定义语句在函数的外部:在首部的上面。②标识符一般使用大写字母,变量用小写,
且不与程序中的其它标识符相同。
定义格式:
#define标识符常量例:#definePI3.14#defineG9.8
注意:符号常量不同于变量,它的值在其作用域(本例中为主函数)内不能改变,也不能再被赋值。如再用以下赋值语句给PI赋值是错误的。PI=3.9;表示方法
十进制整数:0~9,+,-
如:a=123,-543,0
八进制整数:
0~7,+、-,以数字0开始。如:a=0123,054
十六进制整数:
0~9、A~F,+、-,以0x开始。如:a=0x123,0xa1三、常量类型及表示方法1整型常量类型根本整型:值在-32768~+32767〔2个字节〕短整型:值在-32768~+32767〔2个字节〕长整型:值在-2147483648~+2147483647〔4个字节〕无符号整型:值在0~+65536〔2个字节〕
长整型数的表示:在整型常量的后面加一个字母l或L。如:345L
无符号整型数的表示:在整型常量的后面加一个字母U。如:234u(1)一个整数,如果其值在-32768~+32767范围内,认为它是int型,它可以赋值给int型和longint型变量。(2)一个整数,如果其值超过了上述范围,而在-2147483648~+2147483647范围内,那么认为它是长整型,可以将它赋值给一个longint型变量。2实型常量表示:十进制小数形式:由数字、小数点、+、-组成。如:3.14159,-2.767指数形式:由数字、小数点、+、-、字母e或E组成。aen等价于a×10n如:1.2345e-19,0.3215E+23标准化的指数形式:在字母e或E之前的小数局部中,小数点左边应有一位(且只能有一位)非零的数字〔输出时〕类型
单精度float:有效数位为7位。(32bit)
双精度double:有效数位为15位。(64bit)
表示时:默认为double型,可在数的后面加字母f或F表示float型。
1.5f13.456F2.423.6753字符常量表示
用单引号(即撇号)括起来的一个字符。如:’a’,’3’,’A’特殊形式的字符常量(转义字符)
以“\”开始的一个字符序列,代表特殊的含义。如:“\n”
表示一个换行符这是一种“控制字符”也称转义字符,在屏幕上是不能显示的。字符常量
字符常量的值:该字符的ASCII码值<转义字符及其含义:转义字符含义\n\v\r\a\‘\ddd\t\b\f\\\“\xhh转义字符含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如‘\101’-----------‘A’‘\012’-----------’\n’‘\376’-----------’’‘\x61’-----------’a’‘\60’-----------’0’‘\483’----------(
)例:‘A’-------’\101’-------’\x41’--------65如‘A’——65,‘a’——97,
‘0’——48,‘\n’——10如‘a’‘A’‘?’‘\n’‘\101’转义字符:反斜线后面跟一个字符或一个代码值表示例转义字符举例
voidmain(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}运行结果:(屏幕显示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’<字符常量与字符串常量不同4.字符串常量定义:用双引号(“”)括起来的字符序列存储:每个字符串尾自动加一个‘\0’作为字符串结束标志hello\0例字符串“hello”在内存中aa\0例‘a’“a”例空串“”\0例:charch;ch=“A”;例:charch;ch=‘A’;语言程序设计第二章数据描述C例如:10+'a'+1.5-8765.1234*'b'是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规那么按图所示。各类数值型数据间的混合运算横向向左的箭头表示必定的转换(只要运算〕纵向的箭头表示当运算对象为不同类型时转换。不同类型数据间的转换隐式转换什么情况下发生运算转换------不同类型数据混合运算时赋值转换------把一个值赋给与其类型不同的变量时输出转换------输出时转换成指定的输出格式函数调用转换------实参与形参类型不一致时转换运算转换规那么:不同类型数据运算时先自动转换成同一类型<>doublefloatlongunsignedintchar,short低高说明:必定的转换运算对象类型不同时转换例charch;inti;floatf;doubled;ch/i+f*d-(f+i)intintdoubledoubledoubledoubledoubledoubleintintdoubledoubledoubledoubledoubledouble10+‘a’+i*f-d/l例inti;floatf;doubled;longl;<>强制转换:转换得到所需类型的中间变量,原变量类型不变.(int)(x+y)(显式转换)一般形式:〔类型名〕〔表达式〕例(int)x%y(double)(3/2)(int)3.6例voidmain(){floatx;inti;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);}结果:x=3.600000,i=3int(x+y)精度损失问题较高类型向较低类型转换时可能发生运算符和表达式C运算符算术运算符:(+-*/%++--)关系运算符:(<<===>>=!=)逻辑运算符:((!&&||)位运算符:(<<>>~|^&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数:(sizeof)强制类型转换:(类型)分量运算符:(.->)下标运算符:([])其它:(()-)<>算术运算符和表达式根本算术运算符:+-*/%结合方向:从左向右优先级:负号:----->*/%----->+-(2)(3)(4) 说明:“-”可为单目运算符时,右结合性两整数相除,结果为整数%要求两侧均为整型数据例5/2=-5/2.0=例5%2=-5%2=1%10=
5%1=5.5%2<>例a=5/2=2
f=-5/2.0=-2.5例5%2=1
-5%2=-11%10=
1
5%1=
05.5%2()自增、自减运算符++--作用:使变量值加1或减1种类:前置++i,--i(先执行i=i+1或i=i-1,再使用i值〕后置i++,i--(先使用i值,再执行i=i+1或i=i-1〕例j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;<>//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4说明:++--不能用于常量和表达式,如5++,(a+b)++++--结合方向:自右向左优先级:-++-------->*/%----->+-
(2)(3)(4)例-i++-(i++)i=3;printf(“%d”,-i++);//-3
例j+++k;(j++)+k;例-i++i=3;printf(“%d”,-i++);
优先级及结合性
优先级:按运算符执行的先后顺序。
++,--,-(负号运算)*,/,%+,-
例:3*5+100/3
高低153348运算规那么:按运算符的优先级由高到低计算。相邻的同级运算符按结合性计算。结合性:相邻两个同级运算符的运算顺序。种类:左结合:自左至右计算。右结合:自右至左计算。根本运算:双目运算符%,*,/,+,-左结合。100%15/3单目运算符!,++,-右结合1+!5-++i
算术表达式的写法
注意运算符的写法:乘、除、乘方例如:3A3*A
括号的使用:只能使用小括号,表示运算次序。
适当使用内部函数:例如:e-3+sin300EXP(-3.0)+SIN(3.14/6)所有字符写在同一行上。(x+y)/(x-y)类型转换的几种情况:(1)实型赋给整型:舍弃小数局部。例如:intaa=15.0/2(2)整型赋给实型:小数局部用0补充。例如:floatxx=15/2(3)字符型赋给整型:将ASCII码值放到整型变量低8位中,高8位补0。假设字符最高位为1,高8位补1。(4)整型赋给字符型:取低八位赋值。(5)将一个double型数据赋给float变量时,截取其前面7位有效数字〔注意数值范围不能溢出〕如:floatf;doubled=123.456789e100;f=d;出现溢出的错误。不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。{Inta=13,b=6;floatc;c=a/b;printf(“c=%f\n”,c);}C=2.000000例:有符号数据传送给无符号变量。
#include<stdio.h>voidmain()
{unsignedinta;
intb=-1;
a=b;
printf("%u",a);}“%u”是输出无符号数时所用的格式符。运行结果为:65535
赋值运算符和表达式简单赋值运算符符号:=格式:变量标识符=表达式作用:将一个数据〔常量或表达式〕赋给一个变量复合赋值运算符种类:+=-=*=/=%=《=》=&=^=|=含义:exp1op=exp2
exp1=exp1opexp2a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3<>例a=3;d=func();c=d+2;说明:结合方向:自右向左优先级:14左侧必须是变量,不能是常量或表达式赋值表达式的值与变量值相等,且可嵌套赋值转换规那么:使赋值号右边表达式值自动转换成其左边变量的类型例3=x-2*y;a+b=3;例floatf;inti;i=10;f=i;那么f=10.0例inti;i=2.56;//结果i=2;例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)<>//表达式值为5,a,b,c值为5//b=5;a=5//表达式值11,c=6,a=11//表达式值10,a=10,b=4,c=6//表达式值5,a=5,b=10,c=2例:a=12;a+=a-=a*a例:inta=2;a%=4-1;a+=a*=a-=a*=3;<>//a=-264等价于a=a+(a=a-(a*a))//a=0等价于a=a+(a=a*(a=a-(a=a*3)))逗号运算符和表达式形式:表达式1,表达式2,……表达式n结合性:从左向右优先级:15逗号表达式的值:等于表达式n的值(最后表达式值〕用途:常用于循环for语句中例a=3*5,a*4a=3*5,a*4,a+5例x=(a=3,6*3)x=a=3,6*a例a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);<>//a=15,表达式值60//a=15,表达式值20//赋值表达式,表达式值18,x=18//逗号表达式,表达式值18,x=3//1,2,3//3,2,3例:#include<stdio.h>voidmain(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}运行结果:x=3<>关系运算符和表达式关系运算符种类:<<===>=>!=结合方向:自左向右优先级别:<<=>>===!=优先级6(高)优先级7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)关系表达式的值:是逻辑值“真”或“假”,用1和0表示例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c<>//表达式值1//表达式值1//表达式值0//d=1//f=0关系运算注意:<>例假设a=0;b=0.5;x=0.3;那么a<=x<=b的值为0例5>2>7>8在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);那么a=2例‘a’>0结果为‘A’>100结果为10关系运算注意:例注意区分“=”与“==”inta=0,b=1;if(a=b)printf(“aequaltob”);elseprintf(“anotequaltob”);例应防止对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)<1e-60ab!a!ba&&ba||b真假真假假假真真逻辑运算符和表达式逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算量:0表示“假”,非0表示“真”,
!(-5)7&&(-8)
运算结果:0表示“假”,1表示“真”,<>真假假假假假真真假假真真真假真真!(2)&&(11)||(12)高低例a<=x&&x<=b
a>b&&x>ya==b||x==y!a||a>b优先级:结合方向:!:从右向左&&:从左向右||:从左向右<>//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’<>值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0)))值为1!(2)&&(11)||(12)高低优先级:结合方向:!:从右向左&&:从左向右||:从左向右短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符<>例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=1条件运算符与表达式一般形式:expr1?expr2:expr3例如:a>b?a:b功能:相当于条件语句,但不能取代一般if语句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0例x=(a==b)?’Y’:’N’y=(x%2==1)?1:0y=(x>=0)?x:-xx=(c>=‘a’&&c<=‘z’)?c-’a’+’A’:c条件运算符可嵌套
如x>0?1:(x<0?-1:0)优先级:13结合方向:自右向左
如a>b?a:c>d?c:da>b?a:(c>d?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型<>例x?‘a’:‘b’//x=0,表达式值为‘b’;x‡0,表达式值为‘a’x>y?1:1.5//x>y,值为1.0;x<y,值为1.5
例2.12sizeof运算符举例,程序如下:#include<stdio.h>voidmain(){inti;floatf;printf("%d%d\n",sizeof(i),sizeof(f));printf("%d%d\n",sizeof(long),sizeof(double));}求字节数运算符一般形式:sizeof〔类型名/变量名〕功能:求类型名/变量名的字节数结果:2448
高优先级运算符功能结合性
低!逻辑非从右到左++、--自增、自减从右到左(类型名)强制类型转换从右到左sizeof求字节数从右到左*、/、%乘、除、整数求余从左到右+、-加、减从左到右>、>=、<、<=大于、大于等于小于、小于等于从左到右==、!=等于、不等于从左到右&&逻辑与从左到右||逻辑或从左到右?:条件运算符从右到左=、+=、-=、*=、/=、%=赋值、运算并赋值从右到左,逗号运算符从左到右运算符的优先级【专题】控制流if语句的三种形式“一选一”
if语句的一般格式:
if(表达式)
内嵌语句A;任何表达式常用的有关系表达式和逻辑表达式单个语句或复合语句假设表达式值为真(即为非0值),执行图3.1中的内嵌语句A(块语句或单个语句);否那么,不执行任何操作。然后结束if语句,执行下一语句。图3.1“一选一”逻辑图
表达式A入口出口真假例如:
if(x>y)printf(“%d”,x);
注意:如果是多条语句作为内嵌语句A则要花括号括起来,否则就把离它最近的一条语句看作是它的内嵌语句A例1:#include<stdio.h> voidmain() {intx=5,y=4;if(x>y){printf(“%d”,x); printf(“%d”,y);} }例2:#include<stdio.h> voidmain() {intx=5,y=4;if(x>y)printf(“%d”,x); printf(“%d”,y); }〔2〕运行结果:54例3:#include<stdio.h> voidmain() {intx=4,y=5; if(x>y) printf(“%d”,x); printf(“%d”,y); }〔3〕运行结果:5〔1〕运行结果:54“二选一”
if语句的一般格式:
if(表达式)
内嵌语句A;else
内嵌语句
B;假设表达式值为真,即为非0值,执行图3.2中的内嵌语句A(块语句或单个语句);否那么,执行图3.2中的内嵌语句B。然后结束if语句,执行下一语句。表达式A入口出口
图3.2“二选一”逻辑图
真B假例如:
if(x>y)printf(“%d”,x);elseprintf(“%d”,y);
if(表达式1)
语句1;elseif(表达式2)
语句2;else
语句3;
真假假真表达式1
语句1
语句2
语句3表达式2图3.4if嵌套结构的流程图
“嵌套式”
if语句的一般格式:
内嵌if语句注意:else与前面最近的且未配对的if配对.1、请读程序:
#include<stdio.h>main(){floatx,y;scanf(“%f”,&x);if(x<0.0)y=0.0;elseif((x<5.0)&&(x!=2.0))y=1.0/(x+2.0);elseif(x<10.0)y=1.0/x;elsey=10.0;printf(“%f\n”,y);}假设运行时从键盘上输入2.0〔回车〕,那么该程序输出结果是A、0.000000B、0.250000C、0.500000D、1.000000答案:Cswitch语句〔多分支〕适用于根据一个表达式的值就可确定走哪个分支的情况。switch〔表达式〕{常量表达式1:语句1常量表达式2:语句2┋常量表达式n:语句ndefault:语句n+1}例:成绩分档:switch(score/10){case10:printf(“A”);case9:printf(“B”);case8:printf(“C”);case7:printf(“E”);case6:printf(“F”);default:printf(“G”);}
注:应使用break.switch(score/10){case10:printf(“A”);break;case9:printf(“B”);break;case8:printf(“C”);break;case7:printf(“E”);break;case6:printf(“F”);break;default:printf(“G”);}while(表达式){
循环体;}任何表达式常用的是关系表达式和逻辑表达式单个语句或复合语句【专题】控制流--while语句〔一般格式〕:/*计算1+2+3+...+10的和*/#include<stdio.h>voidmain(){intsum=0,n=1;printf("***运行结果***\n");
while(n<=10){sum=sum+n;
n=n+1;}
printf("1+2+3+...+9+10=%d\n",sum);}***运行结果***
1+2+3+...+9+10=55赋循环初值循环体循环变量增值循环条件循环终值【稳固while语句的使用】
printf("1+2+3=%d\n",sum);}#include<stdio.h>voidmain(){intsum=0,n=1;while(n<=3){sum=sum+n;
n=n+1;}
1n<=31sum2n123下面利用求1+2+3,分析程序的运行4/*计算1+2+3的和(程序运行)*/#include<stdio.h>voidmain(){intsum=0,n=1;331while(n<=3){sum=sum+n;n=n+1;}
11n<=32sumn123
printf("1+2+3=%d\n",sum);}4/*计算1+2+3的和(程序运行)*/#include<stdio.h>voidmain(){intsum=0,n=1;64while(n<=3){sum=sum+n;n=n+1;}
133111n<=32sumn
printf("1+2+3=%d\n",sum);}1234/*计算1+2+3的和(程序运行)*/#include<stdio.h>voidmain(){intsum=0,n=1;while(n<=3){sum=sum+n;n=n+1;}
133111n<=32sumn
printf("1+2+3=%d\n",sum);}1234046运行结果:1+2+3=6【练习】答案:〔1〕D1、定义如下变量:
intn=10;
那么以下循环的输出结果是
while(n>7)
{n--;
printf(“%d\n”,n);
}
A)10B)9C)10D)9
9898
8787
76do{循环体;}while(表达式);任何表达式常用是关系表达式和逻辑表达式分号结束【专题】控制流--dowhile语句〔一般格式〕:
例编写下述功能程序:应用dowhile语句计算1+2+3+...+9+10的和。#include<stdio.h>voidmain(){intsum=0,n=1; printf("***运行结果***\n");do{sum+=n;
n++;}while(n<=10);
printf("1+2+3+...+9+10=%d\n",sum);}【稳固dowhile语句的使用】#include<stdio.h>voidmain(){intsum=0,n=1;do{sum+=n;
n++;}while(n<=3);
2n1s1n<=3123/*计算1+2+3的和(程序运行)*/下面,分析程序的运行do{sum+=n;
n++;}while(n<=3);
2n/*程序运行:计算1+2+3的和*/#include<stdio.h>voidmain(){intsum=0,n=1;1231s1n<=3133/*程序运行:计算1+2+3的和*/#include<stdio.h>voidmain(){intsum=0,n=1;123
printf("1+2+3=%d\n",sum);}do{sum+=n;n++;}while(n<=3);
2n1s1n<=3133640【练习】答案:〔1〕**1、下面程序段的运行结果是():x=2;do{printf(“*”);x--;}while(!x==0);1、下面程序的运行结果是:______
main()
{inty,a; y=2;a=1;
while(y!=-1)
{do{a*=y;a++;}while(y--);a++;}
printf(“%d,%d”,a,y);}答案:2,-1【while与dowhile嵌套练习】:【专题】控制流--for语句for(表达式1;表达式2;表达式3){
循环体;}
[一般格式]:
表达式1;while(表达式2){
循环体;表达式3;}
例编写下述功能程序:应用for语句计算1+2+3+...+9+10的和。printf("***运行结果***\n");for(sum=0,n=1;n<=10;n++)sum+=n;
printf("1+2+3+...+9+10=%d\n",sum);}#include<stdio.h>voidmain(){ intsum,n;【稳固for语句的使用】/*计算1+2+3的和*/#include<stdio.h>voidmain(){intsum,n;for(sum=0,n=1;n<=3;n++)sum+=n;
1sumn1n<=3112324下面,分析程序的运行printf(“1+2+3=%d\n”,sum);}【稳固for语句的使用】for(sum=0,n=1;n<=3;n++)sum+=n;
/*计算1+2+3的和*/#include<stdio.h>voidmain(){intsum,n;31sumn1n<=312123134printf("1+2+3=%d\n",sum);}【稳固for语句的使用】/*计算1+2+3的和*/#include<stdio.h>voidmain(){intsum,n;for(sum=0,n=1;n<=3;n++)sum+=n;
1sumn1n<=3113212331644printf("1+2+3=%d\n",sum);}【稳固for语句的使用】/*计算1+2+3的和*/#include<stdio.h>voidmain(){intsum,n;for(sum=0,n=1;n<=3;n++)sum+=n;
1sumn1n<=31132123361044printf("1+2+3=%d\n",sum);}【稳固for语句的使用】【练习】1、以下程序的输出结果是()
main()
{inta;
for(a=1;a<=10;a++)
if(a%3==0)
a+=3;
printf("%d\n",a);}
(A)10(B)11(C)12(D)13答案:〔1〕D【稳固for语句的使用】1、下面程序的运行结果是:_____
#include<stdio.h>
main()
{inti,j;
for(i=4;i>=4;i--)
{for(j=1;j<=i;j++)putchar(‘#’);
for(j=1;j<=4-i;j++)putchar(‘*’);
putchar(‘\n’); }
}【练习】【稳固for语句的使用】2、下面程序的运行结果是〔〕
main()
{inti,j,n=0;for(i=0;i<2;i++)for(j=0;j<2;j++)if(j>=i)n+=1;n++;printf(“%d\n”,n);}A、4B、2C、1D、0答案:〔1〕####(2)A
continue语句是有条件地截断循环体中的局部语句,使其不执行。[格式]continue;[作用]终止本次循环,进入下一次循环。[注意]1)continue只能出现在循环语句的循环体中。
2)Continue往往与if语句联用【专题】控制流--continue语句#include<stdio.h>voidmain(){ inti,sum=0; for(i=1;i<7;i++) { if(i%2==0)continue;
sum+=i; } printf("sum=%d\n",sum);}
【注释】遇到continue那么结束本次循环进入下一次循环。本例子中如果i为偶数,执行continue语句,结束执行本次循环的其它语句,即不执行sum+=i;语句,转至for语句的表达式3,即执行i++;。【稳固其他控制语句--continue】答案:2,5,8,11,14下面程序的运行结果是:______main(){
inti=1;
while(i<=15)
if(++i%3!=2)
continue;
else
printf(“%d,”,i);
printf(“\n”);}【练习】:【稳固其他控制语句--continue】
break语句是有条件地跳出循环。
break;[格式][作用]结束循环,转向执行循环后面的语句。[注意]1)break只能出现在switch语句或循环语句的循环体中。
2)多重循环嵌套的情况下,break语句只能跳出break所在的循环,即离break最近的那重循环。【专题】控制流--break语句例,#include<stdio.h>voidmain(){inti,sum=0;for(i=0;;) {i++; if(i%2==0)continue;
if(i>=10)break;/*有条件地跳出循环*/ sum+=i;} printf("sum=%d\n",sum);}【注释】遇到break那么结束整个循环。本例子中当i=11时,执行break语句,跳出for语句。【稳固其他控制语句--break】:【本程序实现的功能是求1+3+5+7+9的和】1:先判断a与b是否相等,如果a等于b那么继续判断b与c是否相等,相等那么打印a=b=c;如果a不等于b那么打印a!=bif(a==b)if(b==c)printf(“a==b==c”);elseprintf(“a!=b”);错误的修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);【练习】1、请读程序并写出结果:#include<stdio.h>voidmain(){inta=2,b=-1,c=2;if(a<b)if(b<0)c=0;elsec++;printf(“%d\n”,c);}
2、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是(
)
if(a<b)
if(c<d)x=1;
elseif(a<c)
if(b<d)x=2;
elsex=3;
elsex=6;
elsex=7;
A.1
B.2
C.3
D.61〕22〕B【练习】【练习】答案:〔1〕D1、下面程序段的运行结果是():
#include<stdio.h>main(){inty=10;do{ y--; }while(--y);printf("%d\n",y--);}A)-1B)1C)8D)0
【练习】1、设j为int型变量;那么下面for循环语句的执行结果是〔〕for(j=10;j>3;j--){if(j%3)j--;--j;--j;printf(“%d”,j);}A、63B、74C、62D、732、输出结果是〔〕main(){inti,j;for(j=10;j<11;j++){for(i=9;i<=j-1;i++)
printf(“%d”,j);}}A、11B、10C、9D、1011答案:(1)B(2)B1、以下程序执行后sum的值是〔〕
#include<stdio.h>main()
{inti,sum;
for(i=1;i<4;i++)sum+=i;
printf("%d\n",sum);
}A)10B)6C)不确定D〕01、以下程序的输出结果是〔〕
#include<stdio.h>main()
{intx=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d%d",x--,y);}A)10192B)9876C)10990D)101091答案:D【练习】答案:B1、下面程序的运行结果是:______main(){inta,b;
for(a=1,b=1;a<=100;a++)
{if(b>=20) break;
if(b%3==1) {b+=3;continue;}
b=-5; }
printf(“%d\n”,a);}A.7B.8C.9D.10
【练习】:数组[案例]从键盘上任意输入10个整数,要求按从小到大的顺序在屏幕上显示出来。排序的方法有很多,此题采用冒泡法。冒泡法的根本思想:通过相邻两个数之间的比较和交换,使排序码〔数值〕较小的数逐渐从底部移向顶部,排序码较大的数逐渐从顶部移向底部。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026水利水电工程施工企业安管人员考试(项目负责人·B类)历年参考题库含答案详解
- 2026桥隧工(官方)-初级工1参考试题库历年考点答案详解
- 2026教师职称-河北-河北教师职称(基础知识、综合素质、初中生物)历年参考题库含答案详解3套试卷
- RAG问答助手引擎设计课程设计
- 异常行为检测方案设计案例课程设计
- 冲压模具课程设计周志
- 超市给排水课程设计
- DNA序列比对工具深度评测课程设计
- 博物馆教学课程设计
- PM预警系统传感器设计课程设计
- Unit 1 Section A 1a-1d 课件(内嵌视频)2026-2027学年人教版英语九年级上册
- 新版小学英语新人教版PEP五年级上册全册教案(2026秋)合集
- 洁净厂房环境监测风险评估报告
- 《新媒体营销》课件-项目一 新媒体营销认知
- 1.【川教版】《生命 生态 安全》三年级上册 全册课件
- 山水林田湖草沙生态保护修复工程验收规范DB41-T 2549-2023
- 寄生虫病防治技能竞赛试题及答案
- 素养与情操-美术鉴赏的意义
- SH/T 3075-2024 石油化工钢制压力容器材料选用规范(正式版)
- 矿井通风与安全-金属非金属矿山
- 软件著作权合作协议
评论
0/150
提交评论