C语言程序设计课件:顺序结构流程及应用_第1页
C语言程序设计课件:顺序结构流程及应用_第2页
C语言程序设计课件:顺序结构流程及应用_第3页
C语言程序设计课件:顺序结构流程及应用_第4页
C语言程序设计课件:顺序结构流程及应用_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

顺序结构流程及应用第一节标识符与关键字第二节基本数据类型第三节常量与变量第四节常用运算符和表达式第五节数据的输出和输入第六节程序算法基础第七节顺序结构程序设计第八节项目任务:软件用户界面设计第一节标识符与关键字一、基本字符一个C程序也可以看成是由C语言的基本字符按一定的规则组成的一个序列。C语言中使用的基本字符包括:任何程序设计语言都规定了自己的一套基本符号和词汇,C语言也不例外。数字字符:0-9大小写英文字母:a-z,A-Z其他可打印字符:!#%^&+-*/_(下划线)=<>/\|.,:?;"'()[]{}空白字符:空格符、换行符、制表符等二、标识符程序中用来标识变量名、函数名、数组名、数据类型名等的有效字符序列称为标识符。简单地说,标识符就是一个名字。在C语言中,标识符的命名规则为:① 有效字符:只能由英文字母(A~Z、a~z)、数字(0~9)和下划线(_)三类符号组成,但第一字符必须是字母或下划线。② 有效长度:随系统而异,但至少前8个字符有效;如果超长,则超长部分被舍弃。③ C语言的关键字(或称保留字)不能用做标识符。例如,下面的标识符是合法的:sum、DAY、n2、_average、a_5、student_2_name下面是不合法的标识符:num-1、a#3、2stud、!sum_2、number.3【建议】定义标识符应做到“见名知意”,以增加程序的可读性。三、标识符关键字关键字又称为保留字,是C语言编译系统所固有的、具有专门意义的标识符。C语言的关键字有32个,一般用作C语言的数据类型名或语句名,如表2.1所示。表2.1C语言关键字typedefvoidautoexternunsignedforlongdefaultstaticregisterCharbreakconstwhileshortiffloatswitchdoubleContinueenumgotostructelsevolatilereturnintcasesignedsizeofuniondo【说明】所有关键字的字母均采用小写,关键字不能再作为用户的常量、变量、函数和类型等的名字。第二节基本数据类型C语言提供了极其丰富的数据类型,在这些数据类型中除被称为基本数据类型的整型、实型和字符型外,数组、结构体、共用体和枚举类型是由基本数据类型组合成的构造类型,而指针是一种使用灵活的数据类型。1.数据现实生活中有大量的数据需要管理。例如,每个班级中学生的姓名、性别、照片、出生日期、入学成绩等。从计算机学科的角度来说,数据是指能被计算机存储和处理、反映客观事物的符号,计算机处理的数据不仅有数字、字符、符号,还有图像、声音等。2.数据类型在C语言中,数据类型分为基本类型、构造类型、指针类型和空类型四类。构造类型又分为数组类型、结构类型、共用类型和枚举类型。基本类型又分为数值型和字符型两类。数值型又分为整型和实型两类。例如,姓名、性别等是字符型数据,入学成绩等是可以进行数学运算的数值型数据。如图2.1所示。图2.1C语言的数据类型C语言对不同类型的数据规定了不同的组织形式和运算方法,对不同类型的数据在内存中分配不同长度的存储空间。本章只介绍基本数据类型中的整型、实型和字符型,其余类型将在以后各章节中陆续介绍。一、整型数据数值型数据可以分为整型和实型两类。整型数是不带小数点的数,根据整型数的数值范围和是否带有符号,可以进一步把整型数细分为短整型、整型、长整型、无符号短整型、无符号整型、无符号长整型。它们的类型标识符、数值范围和在内存中占用的字节数如表2.2所示。表2.2整型数据分类名称类型说明符数值范围长度短整型short-32768~327672字节整型int-32768~327674字节长整型long-2147483648~21474836474字节无符号短整型unsignedshort0~655362字节无符号短整型unsignedint0~655362字节无符号长整型unsignedlong0~42949672954字节二、实型数据实型数就是数学中的实数,主要用来处理带小数点的数。根据实型数的数值范围,可以进一步把实型数细分为单精度型和双精度型两类。它们的类型标识符、数值范围和在内存中占用的字节数如表2.3所示。表2.3实型数据分类名称类型说明符数值范围长度单精度型float约-3.4×1038~3.4×10384字节双精度型double约-1.7×10308~1.7×103088字节三、字符型数据字符型数据可分为字符和字符串两类。字符是用一对单引号括起来的一个字符,字符串是用一对双引号括起来的一个或多个字符。例如,'z'和'Z'都是字符数据,而"abcde"和"CFREE"则是字符串。字符数据的类型标识符为char,它在内存中占用1个字节。第三节常量与变量对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量。在程序中,常量可以不经说明而直接引用,而变量则必须先定义后使用。一、常量在程序执行过程中,其值不能被改变的量称为常量。在C语言中,常量不需要类型说明就可以直接使用,常量的类型由常量本身隐含决定的。如12、0、-7为整型常量,3.14、-2.8为实型常量,‘a’、‘b’、‘c’则为字符型常量,‘abcdfr’、‘C-FREE’则为字符串常量。这些常量称为直接常量,一般从其字面形式即可判别。有时为了使程序更加清晰和便于修改,用一个标识符来代表常量,即给某个常量取个有意义的名字,这种常量称为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量其中#define也是一条预处理命令(预处理命令都以“#”开头),称为宏定义命令,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。【案例2-1】符号常量的使用。程序代码如下:#definePI3.14main(){floatarea,r;r=10;area=r*r*PI;printf("r=10aera=%f\n",area);r=5;area=r*r*PI;printf("r=5aera=%f\n",area);}运行结果:r=10aera=314.000000r=5aera=78.500000【注意】符号常量也是常量,它的值在其作用域内不能改变,也不能再被赋值。二、变量在程序执行过程中,其值可被改变的量称为变量。一个变量必须有一个名字,在内存中占据一定的存储单元,在该存储单元中存放变量的值。1.变量的定义在C语言中,变量必须强制定义,即“先定义,后使用”,定义变量语句的一般形式如下:数据类型变量列表;变量定义时必须遵守标识符的命名规则。例如:sum、average、_total、Class、day、month、student_name、tan、li_ling是合法的变量名,Zhang-sun、student's、263.com、$123、#33、3D64是不合法的变量名。【案例2-2】定义变量的语句举例。inta; /*定义a为整型变量*/intx,y; /*定义x、y为整型变量*/longn1,n2,n3 /*定义n1、n2、n3为长整型变量*/floatsum1,sum2; /*定义sum1、sum2为单精度型变量*/doubled1,d2; /*定义d1、d2为双精度型变量*/charch1,ch2; /*定义ch1、ch2为字符型变量*/【提示】变量名应简单易记、见名知意。我们常用有含义的英文单词作变量名,如price,grade,total等,从变量名就可以大体了解该变量的作用。2.变量的赋值定义了变量后,才能给变量赋值。给变量赋值的操作由赋值运算符“=”来完成,给变量赋值语句的一般形式为:变量名=表达式;例如在案例2-1中,r是单精度型变量,它在程序运行过程分别赋以值10和值5。【说明】①给变量赋值时要特别注意赋值号左边只能是变量名,不能是其它表达式。②变量名和变量值是两个不同的概念。变量名在程序运行的过程中不会改变,而变量值则可以发生变化。3.变量的初始化C语言提供了灵活的定义变量和给变量赋值的方式。我们可以先定义变量,再给变量赋值。也可以在定义变量时对变量进行赋值,也称变量初始化。就像下面的语句一样:inta=1,b=5;charch1='c',ch2='C';floatx1,x2=3.5;其中,第1条语句定义a、b为整型变量,且给变量a赋值为1,变量b赋值为5。第2条语句定义ch1.ch2为字符型变量,且给变量ch1赋值为'c',变量ch2赋值为'C'。第3条语句定义x1.x2为单精度型变量,但只给变量x2赋值为3.5。第四节常用运算符和表达式运算是对数据进行加工的过程,用来表示各种不同运算的符号称为运算符。参加运算的数据称为运算对象或操作数。用运算符把运算对象连接起来的式子称为表达式。C语言的运算符相当丰富,应用范围很宽广,可完成C语言中的除了控制语句和输入输出语句以外的几乎所有的基本操作。C的运算符分类见表2.4。表2.4C语言的运算符运算符种类运算符运算符种类运算符算术运算符+、-、*、/、%自增、自减运算符++、--关系运算符>、<、==、>=、<=、!=逻辑运算符!、&&、||运算符种类运算符运算符种类运算符位运算符<<、>>、-、|、^、&赋值运算符=及其扩展赋值运算符条件运算符?:逗号运算符,指针运算符*、&求字节数运算符Sizeof强制类型转转换运算符(类型)分量运算符.、->下标运算符[]一、算术运算符和算术表达式(一)算术运算符C语言的算术运算符包括基本算术运算符和自增、自减运算符。1.基本算术运算符基本算术运算符如表2.5所示。表2.5基本算术运算符运算符名称举例运算功能+加法运算X+y求x与y的和-减法运算X-y求x与y的差*乘法运算x*y求x与y的积/除法运算x/y求x与y的和商%求余(或模)法运算X%y求x除以y的余数【案例2-3】运行下面的程序,观察并分析基本算术运算符的用法。#include<stdio.h>main(){inta=20,b=5;printf("A=20B=5\n");printf("A与B的和是:%d\n",a+b);printf("A与B的差是:%d\n",a-b);printf("A与B的积是:%d\n",a*b);printf("A除以B的商是:%d\n",a/b);

printf("A除以B的余数是:%d\n",a%b);}2.强制类型转换运算符强制类型转换可以将一个表达式转换成所需的类型。其格式为:(类型名)表达式例如:(float)a /*将a转换成float型*/(int)(x+y) /*将x+y的值转换成int型*/(int)x+y/*将x的值转换成int型*/注意:①强制类型转换不能写成float(a)。②(int)x+y是将x转换成int型。而(int)(x+y)是将x+y的值转换成int型3.自增、自减运算符自增、自减运算符是单目运算符,即仅对一个运算对象施加运算,运算结果仍赋予该运算对象。表2.6列出了自增、自减运算符的种类和功能。表2.6自增、自减运算符【案例2-4】运行下面的程序,观察并分析自增和自减运算符的运算规则#include<stdio.h>main(){inta,b,c,d,e,f,g,h;a=5;b=5;c=5;d=5;e=a++;f=++b;g=c--;h=--d;printf("a的初值=5\te=a++值为%d\ta=%d\n",e,a);运算符名称举例等价于++加1i++或++ii=i+1--减1i--或--ii=i-1printf("b的初值=5\tf=++b值为%d\tb=%d\n",f,b);printf("c的初值=5\tg=c--值为%d\tc=%d\n",g,c);printf("d的初值=5\th=--d值为%d\td=%d\n",h,d);}运行结果:a的初值=5 e=a++值为5a=6b的初值=5 f=++b值为6 b=6c的初值=5 g=c--值为5 c=4d的初值=5 h=--d值为4 d=4从本例的操作结果可以看出,表达式a++与++a的值不同,表达式a--与--a的值也不同。对于a++,系统先计算表达式的值,再进行a增1的运算;而对++a,则先进行a增1的运算,再计算表达式的值。类似地,a--是先计算表达式的值,再进行a减1的运算;而对--a,则先进行a减1的运算,再计算表达式的值。【注意】自增运算符(++)或自减运算符(--)只能用于变量,而不能用于常量或表达式。(二)算术表达式用算术运算符、圆括号将运算对象(或称操作数)连接起来的符合C语法规则的式子,称为C算术表达式。其中运算对象可以是常量、变量、函数等。1.算术表达式的书写形式C算术表达式的书写形式与数学中表达式的书写形式是有区别的,在使用时要注意以下几点:C表达式中的乘号不能省略。例如:数学式b2-4ac,相应的C表达式应写成b*b-4*a*c。C表达式中只能使用系统允许的标识符。例如:数学式πr2相应的C表达式应写成3.1415926*r*r。C表达式中的内容必须书写在同一行,不允许有分子分母形式,必要时要利用圆括号保证运算的顺序。例如:数学式相应的C表达式应写(a+b)/(c+d)。C表达式不允许使用方括号和花括号,只能使用圆括号帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。2.算术运算符的优先级和结合性优先级:是指当一个表达式中如果有多个运算符时,则计算是有先后次序的,这种计算的先后次序称为相应运算符的优先级。结合性:是指当一个运算对象两侧的运算符的优先级别相同时,进行运算(处理)的结合方向。按“从右向左”的顺序运算,称为右结合性;按“从左向右”的顺序运算,称为左结合性。表2.7中给出了算术运算符的优先级和结合性。在算术表达式中,若包含不同优先级的运算符,则按运算符的优先级别由高到低进行运算;若表达式中运算符的优先级别相同时,则按运算符的结合方向(结合性)进行运算。表2.7算术运算符的优先级和结合性二、关系运算符和关系表达式(一)关系运算符关系运算是对两个操作数之间进行比较的运算符,其运算结果为逻辑值或“布尔”(boolean)值,其值只有两种可能“真”或“假”,C语言提供了六种关系运算符,如表2.8所示。运算种类结合性优先级++、--从右到左高↓低*、/、%从左向右+、-从左向右表2.8关系运算符运算符名称示例运算功能运算符名称示例运算功能>大于a>ba大于b>=大于等于a>=ba大于等于b<小于a<ba小于b<=小于等于a<=ba小于等于b==等于a==ba等于b!=不等于a!=ba不等于b【注意】表中的双字符运算符必须连着写,中间不能有空格或其它符号。关系运算用于对两个数据进行比较,判断比较的结果是否符合指定的条件。能用关系运算符进行比较的数据类型有:整型、字符型和实型,字符串则不能用关系运算符作比较。

用关系运算符比较整型或实型数据时,按照数值的大小进行比较;比较字符型数据时,按照字符的ASCII码进行比较。(二)关系表达式用关系运算符将运算对象连接起来的有意义的式子,称为关系表达式。关系表达式中的运算对象可以是C语言中任意合法的表达式(包括常量、变量、函数等)。例如,a>=b、(a=1)>(b=2)等都是合法的关系表达式。对关系表达式运算时,要注意关系运算符的优先级和关系表达式的值。1.关系运算符的优先级按优先级可以把关系运算符分成两组。①>(大于)、>=(大于或等于)、<(小于)、<=(小于或等于)。②==(等于)、!=(不等于)。同组关系运算符的优先级相同,第①组关系运算符的优先级高于第②组。例如,“==”与“!=”的优先级相同。“>”的优先级高于“==”。对相同优先级的关系运算符,按从左到右的顺序进行运算。2.关系表达式的值生活中,用关系运算符比较两个数据得到的结果只有两种:关系成立或关系不成立。在C语言中,运算结果只有一个整数值:0或者1。即如果比较的关系成立,表达式的值为1;如果比较的关系不成立,表达式的值为0。例如,121>6的值是1,而'a'>'z'的值是0。三、逻辑运算符和逻辑表达式(一)逻辑运算符逻辑运算可以表示运算对象的逻辑关系。表2.9给出了C语言中逻辑运算的种类、功能及运算规则。表2.10给出了逻辑运算真值表,说明了当参加逻辑运算的对象为不同组合时,各种逻辑运算得到的结果。表2.9逻辑运算符运算符名称举例功能运算规则!逻辑非!a非a当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”;&&逻辑与a&&ba&&b当且仅当两个运算量的值都为“真”时,运算结果为“真”,否则为“假”||逻辑或a||ba或b当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”表2.10逻辑运算真值表ab!a!ba&&ba||b非0非00011非0001010非01001001100(二)逻辑表达式用逻辑运算符将运算对象连接起来的有意义的式子称为逻辑表达式。逻辑表达式中的运算对象可以是C语言中任意合法的表达式。下面的3个表达式都是合法的逻辑表达式。①!9②(x>2)&&(x<15)③('a'=='a')||(9>16)【思考】请参照逻辑运算真值表,写出上述3个表达式的结果值(设定表达式②中X的值为10)。【案例2-5】运行下面的程序,观察并分析逻辑运算符的运算规则#include<stdio.h>main(){inta,b,c;a=3;b=4;c=5;printf("请写出下面各逻辑表达式的值");printf("a+b>c&&b==c的值为%d\n",a+b>c&&b==c);printf("a||b+c&&b-c的值为%d\n",a||b+c&&b-c);printf("!(a>b)&&!c||1的值为%d\n",!(a>b)&&!c||1);printf("!(a+b)+c-1&&b+c/2的值为%d\n",!(a+b)+c-1&&b+c/2);}四、赋值运算符和赋值表达式(一)赋值运算基本的赋值运算符是=,由赋值运算符组成的表达式称为赋值表达式。其一般形式为:变量名=表达式;赋值的含义是指将赋值运算符右边的表达式的值存放到以左边变量名为标识的存储单元中,例如:y=X+3假设X的值为6,则将6与3的和9放到变量y所标识的存储单元中,即y的值为9。赋值符号“=”不同于数学中使用的等号,它没有相等的含义。例如x=x+1;的含义是取出变量x中的值加1后,再存入变量x中去。(二)复合赋值运算符在赋值号=之前加上某些特定运算符,可构成复合赋值运算符,复合赋值运算符包括+=、-=、*=、/=、%=等运算符,例如:i+=j+10等价于i=i+(j+10)x*=3等价于x=x*3p%=2等价于p=p%2可以看出,复合赋值运算符的优先级与赋值运算符的优先级相同,且结合方向也一致。【案例2-6】运行下面的程序,观察并分析赋值运算符的运算规则#include<stdio.h>main(){inta=10; printf("请注意观察下面表达式的值\n");printf("a+=2等价于a=a+2,它的值为%d\n",a+=2);printf("a-=2等价于a=a-2,它的值为%d\n",a-=2);printf("a*=2等价于a=a*2,它的值为%d\n",a*=2);printf("a/=2等价于a=a/2,它的值为%d\n",a/=2);}五、逗号运算符和逗号表达式在C语言中,逗号运算符即“,”,可以用于将若干个表达式连接起来构成一个逗号表达式。其一般形式为:表达式1,表达式2,...,表达式n;求解过程为:自左至右,先求解表达式1,再求解表达式2,……,最后求解表达式n。表达式n的值即为整个逗号表达式的值。例如:1.a=3*5,a*4式=60a=162.a=3*5,a*4,a+5式=20a=53.a=3,a++,a+5式=9a=44.x=(a=3,6*3)x=18a=35.x=a=3,a--,6*a式=12a=2x=3第五节数据的输出和输入数据是程序处理的对象,输入输出操作是程序设计中不可缺少的部分。把数据从计算机外部设备送入计算机内部的操作称为“输入”,把数据从计算机内部送到计算机外部设备(如显示器、打印机、磁盘等)上的操作称为“输出”。C语言的输入输出操作是通过函数来实现的,称为“标准输入输出函数”。C语言提供的最基本的输入输出函数包括:scanf/printf(格式输入/格式输出)、getchar/putchar(字符输入/字符输出)和gets/puts(字符串输入/字符串输出)。在使用这些函数时要在程序的开头写上调用头文件的命令行:#include<stdio.h>一、printf函数printf函数是C语言提供的标准输出函数,printf函数的一般调用格式为:表2.11printf函数常用的格式字符printf(“格式控制符”,输出项列表);其中,“格式控制符”指定数据输出的格式,通常由格式符、普通字符和转义字符组成。普通字符按原样输出,转义字符按其意义进行操作,格式符由%及一个格式字符组成,它指定对应输出项的输出格式。常用的格式字符及其含义如表2.11所示。格式字符说明d按带符号的十进制形式输出整数(正数不输出符号)u按带符号的十进制形式输出整数(正数不输出符号)f按小数形式输出实数(默认输出6位小数)e按指数形式输出实数(默认输出6位小数)g按e和f格式中输出宽度较短的一种输出(不输出无意义的0)o按八进制无符号形式输出整数(不输出前导0)x按十六进制无符号形式输出整数(不输出前导0)c按字符型输出(只输出一个字符)s按字符串输出(可以输出多个字符)【案例2-7】运行下面的程序,观察并分析printf函数格式符用法。#include<stdio.h>main(){inta; /*定义a为整型变量*/floatb; /*定义b为单精度数*/a=321; /*给变量a赋值123*/b=321.456; /*给变量b赋值123.456*/printf("使用格式字符d输出:%d\n",a); /*按十进制形式输出整数*/printf(“使用格式字符u输出:%u\n”,a); /*按无符号十进制形式输出整数*/printf("使用格式字符o输出:%o\n",a); /*按八进制无符号形式输出整数*/printf("使用格式字符x输出:%x\n",a); /*按十六进制无符号形式输出整数*/printf("使用格式字符c输出:%c\n",a); /*按字符型输出一个字符*/printf("使用格式字符f输出:%f\n",b); /*按小数形式输出实数*/printf("使用格式字符e输出:%e\n",b); /*按指数形式输出实数*/printf("使用格式字符g输出:%g\n",b); /*按e和f格式中较短的一种输出*/}在%与控制字符d、u之间插入字符“l”或“h”,可以指定用long型或short型格式显示数据。添加l或h的格式字符如表2.12所示。表2.12添加l或h的格式字符二、scanf函数scanf函数是C语言提供的标准输入函数,该函数的一般调用形式为:scanf(“"格式控制符”,输入项列表);其中,“格式控制符”指定输入数据的格式,通常由格式符和输入分隔符组成。scan函数常用的格式字符及其含义如表2.13所示。格式字符说明ld按带符号的十进制形式输出长整型数(正数不输出符号)hu按无符号的十进制形式输出短整型数lf按小数形式输出双精度数表2.13scanf函数常用的格式字符格式字符说明d输入十进制整型数u输入无符号的十进制整数f按小数形式或指数形式输入实数e与f的作用相同o按八进制形式输入整数(可以带前导0,也可以不带前导0)x按十六进制形式输出整数(可以带前导0x,也可以不带前导0x)i输入带前导0的八进制整数或带前导0x的十六进制整数c输入一个字符x输入字符串(可以输入多个字符)【说明】调用scanf函数输入长整型数时,要在%与格式符d之间添加字符l,输入双精度数时,也要在%与格式符f之间添加字符l。否则可能出现错误的输入结果。【案例2-8】运行下面的程序,观察并分析scanf函数格式符用法。#include<stdio.h>main(){inta,b;printf("请输入两个整数:");scanf("%d%d",&a,&b); /*输入两个整数*/printf("a=%d\tb=%d\n",a,b);}【提示】C语言默认空格是数据之间的分隔符,按Enter键则表示输入结束。【试一试】将程序的第五行修改为“scanf("%d,%d",&a,&b);”,如何才能正确输入?以上操作说明,如果在scanf函数的格式控制符之间插入了其它字符作为数据之间的分隔符,则输入数据时要原样输入这些分隔符,否则将产生输入错误。为了减少输入错误,建议在相应的printf语句中增加输入数据的提示。三、getchar函数与putchar函数getchar函数可以从键盘输入一个字符,putchar函数可以输出一个字符,这两个函数的说明存放在头文件“stdio.h”中。1.getchar函数getchar函数调用的一般形式为:getchar();【函数功能】从标准输入设备(一般是键盘)上输入一个可打印的字符。此函数没有参数。它将输入字符的ASCII码值作为函数的返回值。使用时,通常将该函数的返回值赋给一个字符型变量。2.putchar函数putchar函数调用的一般形式为:putchar(字符);【函数功能】从标准的输出设备(通常是显示终端)上输出一个字符。【参数说明】“字符”指定输出的字符,它可以是字符型变量、字符常量或字符的ASCII码值。在使用这两个函数时,要用include命令将头文件“stdio.h”包括到用户的源文件中。【案例2-9】输入三个小写字母,把它们转换成大写字母输出。分析:输入字符可以使用getchar函数,输出字符可以使用putchar函数。由于小写字母的ASCII码值比对应大写字母的ASCII码值大32,所以把小写字母转换为对应的大写字母可以通过ASCII码值与32相减实现。#include"stdio.h"main(){charch1,ch2,ch3;ch1=getchar(); /*输入一个字符*/ch2=getchar();ch3=getchar();ch1=ch1-32; /*把小写字母转换成大写字母*/ch2=ch2-32;ch3=ch3-32;putchar(ch1); /*输出一个字符*/putchar(ch2);putchar(ch3);printf("\n转换完成!\n");}运行程序时如果输入小写字母boy,程序将输出大写字母BOY。【注意】getchar函数并不是从键盘输入一个字符就将该字符送给字符变量,而是等到输入完一行字符按Enter键后,该行字符被输入缓冲区,然后第1个getchat函数从缓冲区中按照输入的先后顺序读第1个字符赋给字符变量,第2个getchat函数从缓冲区中依次读第2个字符赋给字符变量,如此类推下去。第六节程序算法基础一、什么是算法人们做任何事情都有一定的方法和程序,如开会的议程、工作的流程等都是程序。在程序的指导下,人们可以有秩序地、有效地完成每一项工作。随着计算机的普及,“程序”逐渐被专业化,它通常物指:为了让计算机完成特定任务(如解决某一问题或控制某一过程)而设计的指令序列。从程序设计的角度来看,程序=数据+算法。所谓“数据”泛指计算机要处理的对象,包括数据的类型、数据的组织形式和数据之间的相互关系,这些又被称为数据结构;所谓算法泛指对各类问题进行分析,确定解决问题的具体方法和步骤。对于面向过程的程序设计语言如C、Pascal、FORTRAN等语言,主要关注的是算法。学习高级语言的重点,就是掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。下面通过例子来介绍如何设计一个算法:【案例2-10】输入三个数,然后输出其中最大的数。分析:定义三个变量A、B、C,将三个数依次输入到A、B、C中,另外,再准备一个MAX装最大数。由于计算机一次只能比较两个数,我们首先把A与B比,大的数放入MAX中,再把MAX与C比,又把大的数放入MAX中。最后,把MAX输出,此时MAX中装的就是A、B、C三数中最大的一个数。算法可以表示如下:1)输入A,B,C。2)若A>B,则MAX←A;否则MAX←B。3)若C>MAX,则MAX←C。4)输出MAX,MAX即为最大数。这样的算法已经可以很方便地转化为相应的程序语句了。从该例中可以看出,遇到问题时首先分析题目,然后寻找一种实现这个问题所要完成功能的方法,这种方法的具体化就称为算法。因此可以说,算法是由一套明确的规则组成的一些步骤,它指定了操作顺序并通过有限个步骤来解决问题、得出结果。一个算法应具有以下5个特性:(1)有穷性一个算法必须总是在执行有限个操作步骤和在可以接受的时间内完成其执行过程。也就是说,对于一个算法,要求其在时间和空间上均是有穷的。(2)确定性算法中的每一步都必须有明确的含义,不允许存在二义性。(3)有效性算法中描述的每一步操作都应能有效地执行,并最终得到确定的结果。(4)输入一个算法有零个或多个输入数据。(5)输出一个算法应该有一个或多个输出数据。执行算法的目的是为了求解,而“解”就是输出因此没有输出的算法是毫无意义的。二、算法的描述算法的表示方法很多,常用的有自然语言、传统流程图、N-S结构图、伪代码等。1.用自然语言描述自然语言就是人们日常使用的语言,可以是中文、英文等。用自然语言表示算法通俗易懂,但一般篇幅冗长,表达上往往不易准确,容易引起理解上的“歧义性”。所以,自然语言一般用于算法较简单的情况。2.用传统流程图描述传统流程图是一组规定的图形符号、流程线和文字处理来表示各种操作、算法的方法,美国标准化协会ANSI规定了一些常用的流程图符号,如表2.14所示。表2.14传统流程图常用符号符号符号名称含义起止框表示算法的开始和结束输入输出框表示输入输出操作处理框表示对框内的内容进行处理判断框表示对框内的内容进行判断连接点用于将画在不同地方的流程线连接起来,表示两个具有同一标记的“连接点”应连接成一个点指向线表示流程的方向用流程图表示的算法直观形象,比较清楚地显示出各个框之间的逻辑关系,因此得到广泛使用。每一个程序编制人员都应当熟练掌握流程图,会看会画(软件专业水平考试、软件专业资格考试也采用这种流程图表示)。下面给出3种基本结构及与其对应的流程图。顺序结构:其对应的流程图见图2.2。分支结构:其对应的流程图见图2.3和图2.4。循环结构:其对应的流程图见图2.5和图2.6。

图2.2顺序结构图2.3分支结构一图2.4分支结构二3.N-S结构图描述针对传统流程图存在的问题,美国学者I.Nassi和B.Shneiderman于1973年提出一种新的结构化流程图形式,即简称为N-S结构图。Chapin在1974年对其进行了进一步扩展,因此,N-S结构图又称为Chapin图或盒状图。N-S结构图的目标是开发一种打破结构化基本构成元素的过程设计表示。其主要特点是完全取消了流程线,不允许有随意的控制流,全部算法写在一个矩形框内,该矩形框以3种基本结构(顺序、选择、循环)描述符号为基础复合而成。这种结构图作图简单,占面积小,一目了然,因而很受欢迎。图2.5循环结构一图2.6循环结构二三种基本结构对应的N-S图如图2.7所示。

(a)顺序结构(b)分支结构(c)循环结构图2.7三种基本结构对应的N-S图4.用伪代码表示伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章一样,自上而下地写下来,每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。例如,“输出x的绝对值”的算法可以用伪代码表示如下:ifxispositivethenprintxelseprint-x它好像一个英语句子一样好懂,在西方国家用得比较普遍。也可以用汉字伪代码。例如:若x为非负数正输出x否则输出-x也可以中英文混用,例如:ifx为非负数正

printxelseprint-x将计算机语言中的关键字用英文表示,其他的可用汉字。总之,以便于书写和阅读为原则,用伪代码写算法并无固定的、严格的语法规则,只要把意思表达清楚,并且把书写的格式写成清晰易读的形式即可。在以上几种表示算法的方法中,具有熟练编程经验的专业人士喜欢用伪代码,初学者喜欢用流程图或N-S图,因为它比较形象,易于理解。本书主要使用N-S图表示算法。第七节顺序结构程序设计C语言是结构化程序设计语言,结构化程序设计用顺序结构、选择结构和循环结构来构造程序。顺序结构是结构化程序设计中最简单、最常见的一种程序结构,它是按照语句出现的顺序依次执行,不发生流程的跳转。顺序结构程序一般由输入、处理、输出三个部分组成,下面我们通过几个样例介绍一下如何编制程序。【案例2-11】输入任意三个整数,求它们的和与平均值。分析:这是一个简单的顺序结构程序,三个数是程序的输入项,和及平均值是程序的两个输出项,其算法可以表示如下:输入用三个数,可用scanf语句完成;计算它们的和及平

温馨提示

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

评论

0/150

提交评论