第4章 最简单的C程序设计-顺序程序设计_第1页
第4章 最简单的C程序设计-顺序程序设计_第2页
第4章 最简单的C程序设计-顺序程序设计_第3页
第4章 最简单的C程序设计-顺序程序设计_第4页
第4章 最简单的C程序设计-顺序程序设计_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计柯式镇测井研究中心讲义与备忘

wksz@89733317(O)139103808702/4/20231第4章顺序结构程序设计2/4/202324.0程序结构回顾AB顺序结构即按照语句书写顺序执行的程序结构。(1)顺序结构2/4/20233…k=k2k≠k1…kkk=kkk=k1kA1A2BAk图3-4多分支选择结构真(非0)假(0)AB条件图3-3双分支选择结构(2)选择结构示意图选择结构又称为分支结构,是指有条件地选择要执行的程序段。2/4/20234假(0)真(非0)A条件真(0)假(0)A条件(3)循环结构当条件成立时,反复执行程序段A,否则不执行。先执行程序段A,再判断条件是否为“真”;若为“真”,再执行A,如此反复,直到条件为“假”(0)为止。2/4/202354.1C语句概述C语言编写的程序由若干条C语句组成。C语句是专门用来向计算系统发出的操作指令,它用于完成一定的操作任务。每条C语句经编译后产生若干条机器指令。归纳如下:(1)C程序对数据的处理是通过“语句”的执行来实现的。(2)一条语句完成一项操作(或功能)。(3)一个为实现特定目的的程序应包含若干条语句。程序举例:voidmain(void){floata,b,c;a=1.5;scanf(“%f”,&b);c=a+b;printf(“c=%f\n”,c);}2/4/20236表达式语句(表达式;)简单语句函数调用语句(函数名(参数表);)空语句(;)C语言数据操作复合语句({一条或多条语句})语句条件语句(if语句,switch语句)结构化语句while语句循环语句do_while语句for语句流程控制语句break语句限定转向语句continue语句非结构化语句return语句非限定转向语句(goto语句)C语句的分类:2/4/202374.1.1简单语句1.表达式语句由表达式组成的语句称为表达式语句语句格式:表达式;分号(;)是语句结束的标志功能:计算表达式或改变变量的值。分类:运算符表达式语句赋值语句2/4/20238运算符表达式语句运算符表达式后跟一个分号组成例:5;i++;语句的功能是,变量i的值增1。a=3,b=a+2,c=a+1;/*由三个赋值语句组成的逗号表达式语句。*/

(1)a+b; /*算术表达式语句,计算a与b之和。*/2/4/20239赋值语句赋值表达式后跟一个分号组成(2)例:x=y+z;/*计算y+z的和并赋值给变量x.。*/

x=2;y=3;2/4/2023102.函数调用语句由函数调用表达式后跟一个分号组成格式:函数名(参数列表);分类:标准库函数用户定义函数标准库函数调用原则:(1)要在程序中包含相应的头文件(2)调用的一般形式:函数名(参数列表);2/4/202311标准函数调用的目的(1)如数学函数,为了得到函数的返回值。这类函数的调用一般出现在表达式中,作为表达式语句的一部分。(2)为了完成某项任务,而不是为了得到返回值。调用这类函数时,就直接用函数调用语句。例:scanf("%f",&x);printf("%f",x);例如:y=a*cos(w*x)+c;2/4/2023124.1.2复合语句一对大括号{}包围若干条语句组成。格式:{[数据说明部分;]执行语句部分;}注意:(1)在复合语句中的“内部数据描述语句”中定义的变量,是局部变量,仅在复合语句中有效。(2)复合语句结束的“}”之后,不需要分号。(3)复合语句可以出现在任何数据操作语句可以出现的地方。2/4/2023134.1.3空语句空语句就是一个分号。格式:;功能:执行该语句不做任何操作,一般用于延迟时间。2/4/202314控制语句,完成一定的控制功能。C有9种控制语句:①if()~else~(条件语句)②for()~(循环语句)③while()~(循环语句)④do~while()(循环语句)⑤continue(结束本次循环语句)⑥break(中止执行switch或循环语句)⑦switch(多分支选择语句)⑧goto (转向语句)⑨return(从函数返回语句)这9种语句中的括号()表示其中是一个条件,~表示内嵌的语句。4.1.4流程控制语句2/4/2023154.2赋值运算符、赋值表达式

和赋值语句一、赋值运算符赋值符号“=”就是赋值运算符,其作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。

2/4/202316二、类型转换

如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。不同类型的整型数据间的赋值:按存储单元中的存储形式直接传送。

1将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=3.56”的结果是使i的值为3。2/4/202317类型转换(1)2将整型数据赋给单、双精度实型变量时,数值不变,但以浮点数形式存储到变量中,如将23赋给f1oat变量f,即f=23,先将23转换成23.00000,再存储在f中。如将23赋给double型变量d,即d=23,则将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到d中。3将一个double型数据赋给float变量时,截取其前面7位有效数字,存放在float变量的存储单元(32位)中。将一个float型数据赋给double变量时,数值不变,有效数字扩展为16位,在内存中以64位存储。2/4/202318类型转换(2)4字符型数据赋给整型变量时,由于字符只占一个字节,而整型变量为2个字节,因此将字符数据(8位)放到整型变量低8位中。有两种情况:(1)如果所用系统将字符处理为无符号的量或对unsignedchar型变量赋值,则将字符的8位放到整型变量低8位,高8位补零;(2)如果所用系统(如TurboC)将字符处理为带符号的量(即signedchar),若字符最高位为0,则整型变量高8位补0;若字符最高位为1,则高8位全补1。这称为“符号扩展”,这样做的目的是使数值保持不变。5将int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。2/4/202319类型转换(3)6将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,如果int型数据为正值(符号位为0),则longint型变量的高16位补0。如果int型变量为负值(符号位为1),则long型变量的高16位补1,将整型数的16位送到long型低16位中,以保持数值不改变。反之,若将一个longint型数据赋给一个int型变量,只将longint型数据中低16位原封不动送到整型变量。7将unsignedint型数据赋给longint型变量时,不存在符号扩展问题,只需将高位补0即可。将一个unsigned类型数据赋给一个占字节数相同的整型变量,将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。如:unsignedinta=65535;intb;b=a;将a送到b中,由于b是int型,第1位是符号位,b的值为-1。该部分自学!2/4/202320例有符号数据传送给无符号变量#include<stdio.h>voidmain(){unsigneda;intb=-1;a=b;printf(“%u”,a);}运行结果为655352/4/202321三、复合赋值运算符在赋值符“=”之前加上其它运算符,可以构成复合赋值运算符。凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。C语言规定可以使用10种复合赋值运算符:+=,-=,*=,/=,%=(复合算术运算符)<<=,>>=,&=,^=,|=(复合位运算符)。例如:a+=3 等价于a=a+3:相当于使a进行一次自加(3)的操作;x*=y+8等价于x=x*(y+8)x%=3等价于x=x%3C采用这种复合运算符,一是为了简化程序,使程序精练;二是为了提高编译效率。2/4/202322四、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”,其一般形式为〈变量〉〈赋值运算符〉〈表达式〉如“a=5”是一个赋值表达式。对赋值表达式求解的过程是:将赋值运算符右侧的“表达式”的值赋给左侧的变量。赋值表达式的值就是被赋值的变量的值。上述一般形式的赋值表达式中的“表达式”又可以是一个赋值表达式。如:a=(b=5)括弧内的“b=5”是一个赋值表达式,它的值等于5,因此“a=(b=5)”相当于“a=5”,a的值等于5,整个赋值表达式的值也等于5。赋值运算符按照“自右而左”的结合顺序。2/4/202323四、赋值表达式(续)赋值表达式也可以包含复合的赋值运算符。如a+=a-=a*a也是一个赋值表达式。如果a的初值为12,此赋值表达式的求解为:①先进行“a-=a*a”的运算,它相当于a=a-a*a=12-144=-132。②再进行“a+=-132”的运算,相当于a=a+(-132)=-132-132=-2642/4/202324五、赋值语句赋值语句:赋值表达式加上一个分号构成赋值语句。C语言的赋值语句具有其它高级语言中赋值语句的一切特点和功能。但也应当注意到它们的不同:(1)C语言中的赋值号“=”是一个运算符,其它语言中的赋值号不是运算符;(2)关于赋值表达式与赋值语句,其它多数高级语言没有“赋值表达式”这一概念。赋值表达式可以被包括在其它表达式之中,例如:if((a=b)>0)t=a;(正确)if的条件中不能包含赋值语句:if((a=b;)>0)t=a;(错误)2/4/2023254.3数据输入输出的概念

及在C语言中的实现(1)所谓输入输出是以计算机主机为主体而言的:从计算机向外部输出设备(如显示器、打印机、磁盘等)输出数据称为“输出”;从外部设备(如键盘、磁盘、显示器、扫描仪等)向计算机输入数据称为“输入”。(2)C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。在C的标准函数库中提供了一些输入输出函数,如printf函数和scanf函数,在使用时,不要认为它们是C语言的“输入输出语句”。printf和scanf不是C语言的关键字,而是两个函数;2/4/202326数据输入输出的概念

及在C语言中的实现(续)(3)C提供的函数以库的形式存放在系统中,它们不是C语言文本中的组成部分,因此,各函数的功能和名字,在不同的计算机系统中可能有所不同。有些通用的函数(如printf和scanf等),各种计算机系统都提供,成为各种计算机系统的标准函数;(4)在使用标准库函数时,要用预编译命令“#include”将“stdio.h”文件包括到用户源文件中。即#include<stdio.h>或#include“stdio.h”stdio.h是standardinput&output的缩写,包含了与标准I/O库有关的变量定义和宏定义。在需要使用标准I/O库中的函数时,应在程序前使用上述预编译命令。2/4/2023274.4数据输入输出2/4/202328一、字符数据的输入输出1putchar函数(字符输出函数)putchar函数的作用是向终端输出一个字符,例如:putchar(c);输出字符变量c的值。c可以是字符型变量或整型变量。2/4/202329例输出单个字符#include<stdio.h>voidmain(){chara,b,c;a=‘B’;b=’O’;c=’Y’;putchar(a);putchar(b);putchar(c);}运行结果:BOY也可以输出其它转义字符,如:putchar(‘\101’) (输出字符‘A’)putchar(‘\’’) (输出单引号字符’)putchar(‘\015’)(使输出回车,不换行)参看p48表2/4/2023302

getchar函数(字符输入函数)此函数的作用:从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为getchar()函数的值就是从输入设备得到的字符。请注意,getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。2/4/202331例:输入单个字符#include<stdio.h>voidmain(){charc;c=getchar();putchar(c);}#include<stdio.h>voidmain(){putchar(getchar());}getchar函数得到的字符可以赋给一个字符变量getchar函数得到的字符作为表达式的一部分2/4/202332二、格式输入输出printf函数——格式输出函数printf函数的作用是向终端(或系统默认的输出设备)输出若干个任意类型的数据(printf可以输出多个数据,且为任意类型)。scanf函数——格式输入函数用来从外部输入设备向计算机主机输入数据的函数;getchar函数只能用来输入一个字符,用scanf函数可以用来输入任何类型的多个数据。2/4/202333printf函数——格式输出函数printf函数的作用是向终端(或系统默认的输出设备)输出若干个任意类型的数据(printf可以输出多个数据,且为任意类型)。2/4/202334例:圆半径radius=1.5,求圆周长和圆面积

#include“stdio.h”voidmain(){floatradius,length,area,pi=3.1415926;

radius=1.5;

length=2*pi*radius; /*求圆周长*/

area=pi*radius*radius; /*求圆面积*/

printf(“radius=%f\n”,radius); /*输出圆半径*/

printf(“length=%7.2f,area=%7.2f\n”,length,area);/*输出圆周长、面积*/

}程序运行结果如下:radius=1.500000length=9.42,area=7.07 2/4/202335(1)printf函数的一般形式printf(格式控制,输出表列)①“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括三种信息:(A)格式说明,由“%”和格式字符组成,如%d,%f等。它的作用是将输出的数据转换为指定的格式输出。

格式说明总是由“%”字符开始!(B)普通字符,即需要原样输出的字符。(C)转义字符,如'\n'就是转义字符,输出时产生一个“换行”操作。②“输出表列”是需要输出的一些数据,可以是表达式。

printf(“a=%d,b=%d\n”,a,a+3);由于printf是函数,因此,“格式控制”字符串和“输出表列”实际上都是函数的参数。可以表示为printf(参数1,参数2,参数3,….,参数n)printf函数的功能是将参数2~参数n按参数1给定的格式输出。2/4/202336(2)printf函数的格式字符①d格式符,用来输出十进制整数。(A)%d,按整型数据的实际长度输出。(B)%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。如printf(“%4d,%4d”,a,b)若a=123,d=12345,则输出结果为123,12345(C)%ld,输出长整型数据。如longa=135790;printf(“%ld”,a);如果用%d输出,就会发生错误,对long型数据应当用%ld格式输出。对长整型数据也可以指定字段宽度,如将上面printf函数中的“%ld”可改为“%81d”。一个int型数据可以用%d或%ld格式输出。2/4/202337(2)printf函数的格式字符(续)②o格式符,以8进制数形式输出整数。由于是将内存单元中的各位的值按八进制形式输出,因此输出的数值不带符号,即将符号位也一起作为八进制数的一部分输出。③x格式符,以16进制数形式输出整数。④u格式符,用来输出unsigned型数据,即无符号数,以十进制形式输出。一个有符号整数(int型)也可以用%u格式输出;反之,一个unsigned型数据也可以用%d格式输出。按相互赋值的规则处理。unsigned型数据也可用%o或%x格式输出。2/4/202338例4.3无符号数据的输出#include<stdio.h>voidmain(){unsignedinta=65535;

intb=-2;printf(“a=%d,%o,%x,%u\n”,a,a,a,a);printf(“b=%d,%o,%x,%u\n”,b,b,b,b);}运行结果为:a=-1,177777,ffff,65535b=-2,177776,fffe,655341111111111111111111111111111111000000000000000101111111111111101加1按位取反2/4/202339(2)printf函数的格式字符(续)⑤c格式符,用来输出一个字符。如:charc=’a’;printf(“%c”,c);一个在0~255范围内的整数,可以用字符形式输出。在输出前,将该整数转换成相应的ASCII字符;反之,一个字符数据可用整数输出。2/4/202340(2)printf函数的格式字符(续)⑥s格式符,用来输出一个字符串。(A)%s,例如printf(“%s”,“CHINA”)输出“CHINA”字符串(不包括双引号)。(B)%ms,输出的字符串占m列,若字符串长度大于m,则突破m的限制,将字符串全部输出。若串长小于m,则左补空格;(C)%-ms,若串长小于m,则在m列范围内,字符串向左靠,右补空格。(D)%m.ns,输出占m列,但只取字符串中左段n个字符。这n个字符输出在m列的右侧,左补空格。(E)%-m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则m自动取n值,即保证n个字符正常输出。2/4/202341(2)printf函数的格式字符(续)⑦f格式符,用来输出实数(包括单、双精度),以小数形式输出:(A)%f,不指定字段宽度,由系统自动指定,使整数部分全部如数输出,并输出6位小数。应当注意,并非全部数字都是有效数字。

单精度实数的有效位数一般为7位,双精度有效数字为16位,给出6位小数。(B)%m.nf,指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。(C)%-m.nf与%m.nf基本相同,输出的数值向左端靠,右端补空格。2/4/202342f格式字符举例#include<stdio.h>voidmain(){floatx,y;doublea,b;x=111111.111;y=222222.222;a=1111111111111.111111111;b=2222222222222.222222222;printf(“x+y=%f\n”,x+y);printf(“a+b=%f\n”,a+b);}运行结果为:x+y=333333.328125a+b=3333333333333.3330102/4/202343(2)printf函数的格式字符(续)⑧e格式符,以指数形式输出实数:(A)%e,不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数,指数部分占5位(如e+002),其中“e”占一位,指数符号占一位,指数占3位。数值按标准化指数形式输出(即小数点前必须有而且只有一位非零数字)。则用%e格式输出的实数占13列宽度!(不同系统的规定略有不同!)(B)%m.ne和%-m.ne,m,n和“-”字符含义与前相同。n指数据的小数部分(又称尾数)的小数位数。2/4/202344f格式与e格式输出举例#include<stdio.h>voidmain(){floatfn=123.456;printf(“%f,%10f,%10.2f,%.2f,%-10.2f\n”,fn,fn,fn,fn,fn);printf(“%e,%10e,%10.2e,%.2e,%-10.2e\n”,fn,fn,fn,fn,fn);}输出结果:123.456001,123.456001,□□□□123.46,123.46,123.46□□□□

1.234560e+002,1.234560e+002,□1.23e+002,1.23e+002,1.23e+002□□:代表“空格”2/4/202345printf格式字符格式字符说明d以带符号的十进制形式输出整数(正数不输出符号)o以8进制无符号形式输出整数(不输出前导符0)x,X以16进制无符号形式输出整数(不输出前导符0x)u以无符号10进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出单、双精度数,隐含输出6位小数e,E以标准指数形式输出单、双精度数,数字部分小数位数为6位。用e时指数以“e”表示,用E时指数以“E”表示。g,G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。用G时,若以指数形式表示,则指数以大写表示。2/4/202346关于printf函数的其它说明(1)务必注意数据类型与对应格式说明的匹配,否则将会出现错误;(2)除X、E、G外,其它格式字符必须用小写字母;(3)d、o、x、u、c、s、f、e、g等字符,如果用在“%”后面就作为格式符号;(4)如果想输出字符“%”,应该在“格式控制”字符串中用连续俩个%表示,如:printf(“%f%%”,1.0/3)2/4/2023472scanf函数——格式输入函数在程序中给计算机提供数据,可以用赋值语句,也可以用输入函数。可使用scanf()函数,通过键盘输入多个数据。(1)一般形式scanf(格式控制,地址表列)“格式控制”的含义同printf()函数相似;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。普通字符在输入有效数据时,必须原样一起输入。2/4/202348例:用scanf函数输入数据

#include<stdio.h>voidmain(){inta,b,c,a1,b1,c1;scanf(“%d,%d,%d”,&a,&b,&c);scanf(“%d%d%d”,&a1,&b1,&c1);printf(“%d,%d,%d\n”,a,b,c);printf(“%d,%d,%d\n”,a1,b1,c1);}&a、&b、&c中的“&”是“地址运算符”,&a指a在内存中的地址。scanf函数的作用是:按照a、b、c在内存的地址将a、b、c的值存进去。2/4/202349关于scanf(“%d%d%d”,&a,&b,&c);“%d%d%d”表示要按十进制整数输入3个数据;输入数据时,在两个数据之间以一个或多个空格间隔,也可以用Enter键、Tab键;用“%d%d%d”格式输入数据时,不能用逗号作为两个数据间的分隔符。345 合法!45 合法!3,4,5

不合法!2/4/2023502scanf函数(续)(2)格式说明和printf函数中的格式说明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符。①

对unsigned型变量所需要的数据可以用%u,%d或%o、%x格式输入;②可以指定输入数据所占列数,系统自动按它截取所需数据;scanf(“%3d%3d”,&a,&b);③输入数据时不能规定精度:scanf(“%7.2f”,&a);是不合法的。

2/4/202351scanf

格式

字符格式字符说明d用来输入十进制整数u用来输入无符号的十进制整数o用来输入八进制整数x,X用来输入十六进制整数c用来输入单个字符s用来输入字符串,将字符串送到一个字符数组中,在输入时以非空白字符开始,以第一个空白字符结束。字符串以串结束标志‘\0’作为其最后一个字符f用来输入实数,可以用小数形式或指数形式输入e,E,g,G与f作用相同,e与f、g可以互相替换(大小写作用相同)2/4/202352(3)使用scanf函数应注意的问题①scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名;scanf(“%d,%d”,a,b);(错误!!!)scanf(“%d,%d”,&a,&b);(正确)②如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时务必原样输入:若scanf(“%d,%d”,&a,&b);输入时应为:3,4若scanf(“a=%d:b=%d:c=%d”,&a,&b,&c);输入时应为:a=3:b=4:c=6③在用“%c”输入字符时,空格字符和“转义字符”作为有效字符输入。④在输入数据时,遇以下情况时该数据认为结束:遇空格,或按“回车”或“跳格”(Tab)键;遇宽度结束,如“%3d”,只取3列;

遇非法输入。2/4/202353提高人机交互性建议:为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。

例如,将scanf("num1=%d",&num1);改为:printf("num1=");scanf("%d",&num1);使用scanf函数时的建议2/4/2023544.5程序举例在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。在顺序结构程序中,一般包括以下几个部分:1

温馨提示

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

评论

0/150

提交评论