C语言高级语言程序设计(一)PPT教学课件-第一章 C语言基础(一) .ppt_第1页
C语言高级语言程序设计(一)PPT教学课件-第一章 C语言基础(一) .ppt_第2页
免费预览已结束,剩余131页可下载查看

下载本文档

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

文档简介

高级语言程序设计(一) (c programming),c程序设计基础,2,参考书,参考书: c程序设计语言,b.w.kernighan, d.m.ritchie, 机械工业出版社,徐宝文等译 从问题到程序程序设计与c语言引论,裘宗燕编著,机械工业出版社 c语言教程,孙玉芳,孟庆昌编著,c程序设计基础,3,作业、答疑及考试,网址: 用户名:学号,密码:学号的最后四位 请登录后尽快修改密码!填写其它个人信息 统一上机时间、地点: 周四下午七八节(2-14周),实验楼705,c程序设计基础,4,作业要求及考核,必须在规定时间内提交; 一定要按照题目要求提交,比如:输入、输出数据格式(必须完全一致),提交文件名称等等; 严禁抄袭! 考核方式:作业占10%,期中占30%,期末占60。,c程序设计基础,5,课程大纲,上课学时:24 115周 实验学时:24 先修课程:计算机导论 课程目标:在4060分钟内编写并调试通过、能正确运行、一般在4050行有效代码以内的程序。,c程序设计基础,6,学习方法:培养自学能力,课前预习、课堂积极思考 课后上机: 先实验:课堂讲的知识点、程序 后作业 掌握程序设计的唯一途径:,7080学时,上机实践(实验、编程)! (try!),相当一部分同学建立程序设计思路的过程比较慢; 程序设计风格差; 解决问题的速度慢; 难以建立比较好的编程模式; 放弃较难的知识点,高级语言程序设计(一)往届学生存在的问题,通过调查具有上述问题的同学发现: 大多数同学具有学习的欲望; 课题上能够认真听讲,也基本上能够听懂; 课下能够保证足够的时间去做作业。,高级语言程序设计(一)问题的原因,高级语言程序设计(一)实践性强!,高级语言程序设计(一)实践性强!,程序实验环节!,高级语言程序设计(一) (c programming),第一讲:c语言基础(一),c程序设计基础,12,本章目标,了解c语言的历史及现状; 初步了解c程序的结构; 掌握简单的标准输入/输出; 知道在某个操作系统环境下(windows)一个c程序的编写过程; 掌握变量、常量、简单数据类型、类型转换、表达式及常用的c语言运算符; 掌握运算符优先级及结合律; 掌握选择、循环等控制结构; 掌握程序测试和调试方法。,c程序设计基础,13,为什么要学c程序设计,c语言仍是目前广泛使用的编程语言,主要特点: 表达能力强,支持结构化程序设计; 语言简洁; 代码效率高: c编写的程序仅比用汇编语言编写的程序相差20%; 可移植性好; 特别适合编写操作系统、编译程序、数据库系统、嵌入式软件及图形/图象处理等对性能要求高的软件; c语言是目前广泛流行的面向对象语言c+、c#及java的基础,c程序设计基础,14,c语言历史,c语言的产生与unix操作系统是密不可分的: unix由bell lab的k.thompson和d.m.ritchie最先在1969年开发的o.s.(它的前身是mit和ae开发的multies)。 1970年,v1,v2版在pdp-7机上用汇编语言实现 1971年v3 pdp11/23 ; 1972年v4 pdp11/45 1972年,d.m.ritchie开发出新语言c。(c b bcpl cpl单数据型语言) 1973年,ritchie和thompson用c改写了unix核心(90%)即v5,c程序设计基础,15,c语言历史(续),c语言的发展经历三个阶段: 第一阶段:78年以前,c称为unix c,即c被看成unix的一部分。 第二阶段:78年d.ritchie的c程序设计语言出版到88年ansi c(标准c)标准出现。此c又称为k&r c。 第三阶段:88年ansi c标准(89年3月批准)。,cpl 1968 c.strachey,小测试,本课程的名称? a. c语言 b. c语言程序设计 c. 高级程序设计语言 d. 高级语言程序设计,c程序设计基础,16,c程序设计基础,17,一个简单的c程序:在屏幕上显示一行正文,例 /* file: hello.c */ #include main( ) printf(“hello, worldn”); ,#include为一条预处理指令,当程序中用到输入/输出函数时,应在文件开始处加上该指令。,main为一函数名。 由 括起来的部分为函数体。 函数名为一标识符。,printf为一条输出语句,在c语言中分号(;)为语句的结束符。 printf为标准i/o库中标准输出函数。 “” 为一字符串常量。 n为c语言转义字符,表示回车。,/* */ 为注释,不可嵌套,例 更标准的格式 /* file: hello.c */ #include int main( ) printf(“hello, worldn”); return 0; ,c程序设计基础,18,c程序结构,一个c程序由一系列外部说明和函数组成; 一个c程序可由一个或多个函数组成,但其中必有一个(也只能有一个)命名为main(主函数),其它函数可由用户任取名字。程序运行时必须从main开始,但main函数在程序中的前后位置没有关系 ; 一个函数由局部变量说明及语句序列组成; 组成c程序的各个函数可在一个源文件上,也可以分放在多个文件上(函数不能跨文件),每个源文件可单独编译。c源文件必须以.c作后缀(.h为c程序的头文件) ;,19,c程序的编辑、编译和运行,开始,c程序设计基础,20,在windows下使用vc编写及运行c程序,c程序设计基础,21,项目名,程序存储位置,注意:不要使用默认的存储位置,否则很难找到写的程序!,console模式,c程序设计基础,22,c程序设计基础,23,c程序设计基础,24,给出c源文件名,c程序设计基础,25,编辑c程序,c程序设计基础,26,c程序设计基础,27,编译compile,编译及连接build,编译及连接信息,运行execute,c程序设计基础,28,运行结果:显示在控制台窗口内,实验:上述步骤需要多作几次练习: 1、在不同位置创建项目; 2、查看创建后自动生成几个文件; 3、试着修改显示的文字.,c程序设计基础,29,在unix(linux)下编写及运行一个c程序,cc -o执行文件名 c 文件名 o :指定执行文件名,缺省为a.out c :产生.o文件如:s1.c, s2.c s3.c组成一个c程序, 则有: cc c s1.c cc c s2.c cc o s s1.o s2.o s3.c,c程序设计基础,30,程序设计与程序设计语言,程序设计语言(programming language): 用来表达程序的计算机能够执行的人工语言。如,fortran, c, c+, java, c#等。 程序设计(programming): 为计算机解决问题所需的分析、设计、编写及调试程序过程。(the process of planning, writing, testing, and correcting the steps required for a computer to solve a problem or perform an operation.),c程序设计基础,31,另一个简单的c程序:整数求和,int 为整数数据类型说明符,其为一个 关键字。 a,b,c,sum为变量,其为 标识符。,例 #include int main( ) /* c1_2.c */ int a, b, c, sum; a =1; b = 2; scanf(“%d”, ,a = 1;为赋值语句,其中1为数字常量,=为赋值运算符。,scanf为标准输入函数,在此从键盘上读入一个整数存入变量c中。 在此,printf将变量sum内容显示到屏幕上。,+为算术运算符。 return返回一个值给操作系统。通常程序正常结束返回一个0值。,c程序设计基础,32,标识符,在c语言中标识符定义为:由字母( 或_ )开头的字母( 或_ )数字串。 标识符在c语言中可作为变量名、常量名、函数名、参数名、类型名、枚举名和标号等。,c程序设计基础,33,判断下面哪些是非法的标识符?,beijing c_programming a8673 8a673 _1024 sin(25) num num_of_stdudent a1,c程序设计基础,34,c语言对字母大小写敏感,name name name 是互不相同的3个标识符,c程序设计基础,35,关键字,int auto goto if float static return else char extern break while short register continue for long do unsigned switch double case struct default union void enum typedef sizeof const signed,已经被系统使用的标识符,具有预先定义好的特殊意义,不能作为普通名字。,c程序设计基础,36,define, undef, include, ifdef, ifndef, endif, 及line,虽不是关键字,但是最好把它们看作关键字,它们主要用于c预处理程序中。,关键字(续),c程序设计基础,37,数据类型,注意:在c语言中,没有bool(布尔)类型,它用非0值表示真(true),用0表示假(false)。,整型 短整型 长整型 无符号整型 单精度浮点型 双精度浮点型 字符型,c程序设计基础,38,变量与变量说明,用来存储程序运行中的数据。 在c中,所有变量必须先说明(定义)后使用; 说明方式: 存贮类型 数据类型 变量(列)表; 例: int lower, upper, step; char c, line100; double x; double pi = 3.1415926;,c程序设计基础,39,变量属性,double salary = 1500.23;,变量的类型,变量的名字,变量的值,变量的存储位置(地址) 例如: 0x00222000,c程序设计基础,40,变量赋值,c语言用赋值运算符为变量赋值,赋值运算符用等于符号“=”表示,double r; r = 3.2;,double r = 3.2;,赋值语句,变量的初始化,c程序设计基础,41,常量(文字量、字面量),1)整型常量(缺省为int 类型, 十进制、八进制、十六进制、long整型常量) 2)浮点常量(缺省是double类型) 如:23.15 3. -8e-3 -125e+4 6.7f,c程序设计基础,42,3)字符常量(char类型) 用一对单引号括起来单个字符称为字符常量,如: a, b, ? , 一个字符常量的值是该字符在机器字符集(通常是 ascii字符集)中的编码值, 它是一个整数值。 如上,在ascii字符集中a的值为65,b的值为98,?的值为63。,转义字符:,c程序设计基础,43,4)字符串常量,用一对双引号括起来的字符串称为字符串常量,如: “the c programming language” 注意:所有字符串均以0结束(编码值为0的字符),因此,“x”和x不同,末尾的0由编译程序自动添加。 “x” x 字符串中可以有转移字符: printf(“welcome nto nbeijing!n”);,c程序设计基础,44,简单的c程序:整数求和,例 #include main( ) /* c1_2.c */ int a, b, c, sum; a =1; b = 2; scanf(“%d”, ,c程序设计基础,45,标准输入、标准输出,标准输入(stdin):通常指键盘 标准输出(stdout):通常指显示器 在windows等图形界面的操作系统中,输入、输出信息一般被显示在一个窗口中,在vc的console编程模式下,显示标准输入、输出信息的窗口为控制台窗口。,c程序设计基础,46,标准输出函数:,printf ( 格式描述串, 其他参数1,其他参数k); 格式描述串是一字符串,其中的转换控制字符(以%开始)决定了其他参数的输出格式和个数;其它字符原样输出。,c程序设计基础,47,例:,double x = 3.5; double y = 4.5; double sum; sum = x+y; printf (“sum: %f”, sum ); printf(“%fn%fn%f”,x, y, sum);,在控制字符前还可以加数字,如: %4d :输出最小域宽为4个字符的整数。 %6.2f :输出最小域宽为6个字符的浮点数,并且小数点占两位。,标准输入/输出:常见问题(续),输出域宽和实际输出长度,输入格式:%6.2f 输出数据:3.14159,屏幕显示,域宽为六个字符,输出数据若小于输出域宽,则右对齐输出,其它部分填空格;若输出数据长度多于给定域宽,则按实际数据输出。,c程序设计基础,49,标准输入函数:,scanf ( 格式描述串, 其他参数1,其他参数k); 格式描述串是一字符串,其中的转换控制字符(以%开始)决定了其他参数的个数和输出格式;其它字符要必须原样输入。,c程序设计基础,50,例:,输入一整数: int n; scanf( “%d”, ,若不带 ?,程序崩溃!,标准输入/输出:常见问题,如何输出多个数据?,int x=2; int y=3; printf ( “%d + %d = %d ”, x, y, x+y );,输出结果: 2+3=5,如何输入多个数据?,int n; float r; scanf( “%d%f”, ,输入多个数据时,用空格或回车换行分隔这些数据,但在格式字符串中不用给出空格或回车换行符。,实验!,c程序设计基础,52,标准输入/输出:常见问题,float r; scanf( “r=%f”,必须原样输入非转换字符,double r; scanf( “r=%f”,scanf( “r=%lf”,一个输入例子: r=3.14 (3.14将被读入到变量 r中),double r; scanf( “r=%lf”,标准输入/输出:常见问题(续),输入格式控制串末尾含有空白字符(如空格或n),例: int a,b; scanf(“%d%dn”,what happened?,回车换行符无法读入! 建议格式串的末尾不要有n或空格符。,实验:,实验一:练习程序的编辑、编译、运行过程; 实验二:实验前面所有的程序; 实验三:下面的输出会出现什么情况: int a=5; double b=2.5; printf (“%f”, a ); printf ( “%d” , b );,c程序设计基础,54,c程序设计基础,55,一个例子:计算圆的面积及周长,例 #include main() double radius, area, perimeter; scanf(“%lf”, ,c程序设计基础,56,表达式与运算符,在c语言中,由运算符(operators)及运算对象(operands)构成的式子称为表达式(expression),如:x + y *z 在c语言中,一个表达式后跟一个分号可构成一条语句: ; 称为表达式语句 如: a = b+c; n = 5; x+;,c程序设计基础,57,算术运算符,算术运算符: +, - , * , / , % 在算术运算时,注意整除问题,如: double f; f = 3 / 2;,f = ?,f 值为 1.0 而不是1.5, 若要f为1.5,则应写为: f = (double)3 / 2; 或者: f = 3.0/2; f = 3/2.0;,实验,98%10 = 8 98/10 = 9,c程序设计基础,58,类型转换,c语言类型转换通常是自动的- 隐式(自动)类型转换:如果一个运算符,有不同类型的运算对象,那么“较低”类型会自动转换成“较高”类型。 1)自动转换方向:,如,n+1.5结果将为double类型,赋值运算符右边表达式的类型会自动转换为赋值运算符左边变量类型,如: int x; x = 2.5; 函数调用的自动类型转换,类型转换(续),实验,c程序设计基础,60,类型转换(续),强制类型转换(cast)- 显式类型转换 () 如: int x; x = (double) 5 / 2;,发生了几次类型转换?,一元运算符:优先级高于二元运算符,3次!,实验,c程序设计基础,61,类型转换(续),不同数据类型之间的转换 1)浮点数与整数的相互转换: 2)无符号整数与整数的相互转换: 一般整数(int)和无符号整数(unsigned)混合使用,则简单整数转换成无符号整数。 3)字符与整数的相互转换: 可以用整数的地方就可以用字符。 而整数转换成字符时,超出8位就将高位丢掉。,实验,字符与整数,注意: 1、字符实际上是一特殊的整型,因此字符经常与整型进行混合运算。 char ch= a; int x = ch +1; 2、字符的ascii编码规则:az az 09都是依次按照升序编码的。 例如: a编码为:97 b编码为:98 z编码为:122 a编码为:65 b编码为:66 z编码为:90 0编码为:48 9编码为:57,区分: 1 1,字符与整数:举例,问题描述:从标准输入读入一字母,输出其对应的ascii值。 输入样例: b 输出样例: 98,问题分析: 输入? 大写或小写字母 输入的若不是字母,怎么办? 输出? 对应的ascii值, char ch;,题目没说明,不考虑, int ascii;,字符与整数:举例,#include int main() char ch; int ascii; scanf ( “%c”, ,#include int main() char ch; scanf ( “%c”, ,?,实验!,c程序设计基础,65,增(减)量运算符,增(减)量运算符:+,- 依据运算符与运算对象间的位置,分为前置和后置运算 前置运算是先进行增减量,再取其值。 后置运算是先取其值,再进行增减量运算。 如: n = 5; n = 5; x = +n; x = n+; 结果: ? 结果:?,x: 6, n: 6,x: 5, n: 6,像+,-这类只要求一个运算对象的运算符又称为单目运算符(unary operators)。+,-运算符在有些书中称为自增(减)运算符。,实验,c程序设计基础,66,赋值运算符,赋值运算符: = , += , -= , /= , %= , *= , = , = , ,结合律:右结合,?,c程序设计基础,67,赋值运算符(续),赋值运算符优点: 表达式简明扼要,如: bfreelist_frow-b_back += 2; 编译程序产生效率高(其用一个运算符完成其它语言中须多个运算符才能完成的功能。如:x += n只有一个运算符,而x = x+n则有两个运算符) 注意: y *= n+1; 等价于 y = y*(n+1);,而不是y = y*n+1;,c程序设计基础,68,运算符优先级及结合律,c程序设计基础,69,运算符优先级及结合律(续),可以使用()运算符来改变表达式中运算符的计算次序。如: (x+y) / 12 if( (x = n) 0) while( (c = getchar() ) != eof) 风格建议:在由多个运算符组成的表达式中应使用( )来明确计算次序,这样更加清晰,可读性好,不易出错。例如: a = b+ + +c; 与 a = ( b+ ) + ( +c );,问题1.1,问题描述:“判断某学生成绩是否及格(大于等于60为及格,否则不及格)” 输入形式:从控制台(或标准输入、键盘)输入一个整数,表示学生成绩。 输出形式:在屏幕(或标准输出)上输出pass或fail,分别表示及格、不及格。 样例1: 输入样例:36 输出样例:fail 样例2: 输入样例:80 输出样例:pass 样例说明:从键盘输入成绩36,输出fail表示不及格;从键盘输入80,输出pass表示及格。,问题1.1:问题分析,输入:学生成绩;类型:整型; 功能:学生成绩值与60进行比较,大于或等于60则及格,否则不及格; 输出:字符串“pass”或“fail”;,问题1.1:解题步骤,解决问题1.1的步骤可描述为: 读入学生成绩值 如果 该成绩值大于或等于60 输出信息“pass” 否则 输出信息“fail”,解题步骤表示,解题步骤即可以用自然语言表述(如前),也可用用半结构化语言表示,如: read 学生成绩值 if 成绩值 = 60 print “pass” else print“fail”,条件:关系运算符及逻辑运算符,关系运算符:, =, =, =, != 逻辑运算符:&, |, !,注意:在c语言中,没有bool(布尔)类型,它用非0值表示真(true),用0表示假(false)。因此,在c中,任何一个表达式都可用为条件。,关系和逻辑表达式的值为:1(真)或 0(假),a & b 若公式a为0,则公式b不必求值,结果一定为0。 a | b 若公式a为非0,则公式b不必求值,结果一定为非0。,例如: (5 = 3) | ( x = 5) (2 = 3) & ( x = 7),条件(续),一些常见的条件例子: 判断整形变量n的值为一个0到10之间的值: ( 0 = n & n = 10) 判断字符变量c是字母: ( a = c & c = z) | (a = c & c = z) 判断某年是平年还是闰年(闰年为能被4整除但不能被100整除,或能被400整除): ( ( y % 4 = 0 ) & ( y % 100 != 0 ) ) | ( y % 400 = 0 ),注意: 条件表达式 “0 = n = 10” 不能得到预期结果,实验,选择结构:if语句,if(表达式) 语句 if(表达式) 语句1 else 语句2,任何一个表达式都可用为条件,表达式的值为0表示假,非0表示真。,选择结构:if语句(续),例: if(ab) max=a; else max=b;,if(ab) max=a; min=b;,if(ab) max=a; min=b; ,实验,称为:复合语句,选择结构:if语句(续),注意:在if嵌套中,省略else会产生二义性。如: if ( score = 60 ) if ( score 80 ) n+; else m+; 即else与前面最接近的不带else的if相对应。若要使上面的else与第一个if相匹配,可使用。如: if ( score = 60 ) if ( score 80 ) n+; else m+;,实验,问题1.1:代码实现与测试,根据其算法描述,我们很容易将问题“判断学生成绩是否及格”的解决转换为相应的程序。,程序设计的常用方法为首先给出问题的解题步骤(算法),然后将其编程序实现。,如何判断程序解决了相应问题?可用下面输入数据来测试(检验): 75(输出应为“pass”) 30(输出应为“fail”) 60 (输出应为“pass”)- 特殊数据,需要一个整型变量存储成绩值 (数据结构),实验,条件运算符(?:)与条件表达式,条件运算符(三目运算符):?: 条件表达式: ? : 先计算表达式1,若其值为非零,则整个表达式结果为表达式2的值,否则就为表达式3的值。 例:计算a和b的最大值 if( a b) z = a; else z = b; 等价于: z = ( a b) ? a: b;,例1-1a /*判断学生成绩是否及格*/ #include main( ) int score; scanf(“%d”, ,实验,问题1.2,问题: “判断某学生成绩对应的五级评分成绩” 问题分析: 输入:学生成绩;类型:整型; 输出:a(优)、b(良)、c(中)、d(及格)、e(不及格); 处理:学生成绩值分别与90,80,70,60进行比较,以判断其为优、良、中、及格和不及格中哪一等级;,问题1.2:解题步骤,解决该问题的步骤如下: 读取学生成绩值 如果该成绩值大于或等于90 输出信息“优” 否则 如果该成绩值大于或等于80 输出信息“良” 否则 如果该成绩值大于或等于70 输出信息“中” 否则 如果该成绩值大于或等于60 输出信息“及格” 否则 输出信息“不及格”,变量定义:需要一个整型变量用于存放输入的学生成绩。,问题1.2:代码实现与测试,读取学生成绩值 如果该成绩值大于或等于90 输出信息“优” 否则 如果该成绩值大于或等于80 输出信息“良” 否则 如果该成绩值大于或等于70 输出信息“中” 否则 如果该成绩值大于或等于60 输出信息“及格” 否则 输出信息“不及格” 步骤,例1-2 /*判断学生成绩对应的五级评分*/ #include main( ) int score; scanf(“%d”, ,嵌套if结构,测试数据为: 95 90 85 80 75 70 65 60 55,实验,多路选择:if_else if,例1-2a /*判断学生成绩对应的五级评分*/ #include main( ) int score; scanf(“%d”, ,一种更好的风格!,实验,多路选择:if_else if(续),注意:不当的判断顺序可能造成程序错误的执行结果,如: #include main( ) int score; scanf(“%d”, ,下面程序功能与1-2a相同,但效率要低。 #include int main( ) int score; scanf(“%d”, ,实验,程序员常犯如下三类语法错误 使用未定义变量名; 遗漏语句结束符(“;”) 遗漏块语句结束符(“”) 下面通过示例来说明如何利用编译信息判断及定位语法错误。,程序设计实践:编译(语法)错误及定位,在vc下,编译错误提示信息为: “error c2065: xxx : undeclared identifier”,在vc下,编译错误提示信息为: “error c2146: syntax error : missing ; before identifier printf”,如,遗漏最后函数结束符,在vc下,编译错误提示信息为: “fatal error c1004: unexpected end of file found”,程序设计实践:编译(语法)错误及定位(续),编译结果,程序设计实践:编译(语法)错误及定位(续),光标定位到错误行,然后根据英文错误提示修改错误。,双击某个错误信息,遗漏分号错误!,程序设计实践:编译(语法)错误及定位(续),标识符未定义错误!,程序设计实践:编译(语法)错误及定位(续),错误信息提示并不完全准确,所以不能完全依赖信息提示,遗漏花括号错误!,问题1.3,问题: 从n个整数中找到最小的整数并输出。 输入形式:先从控制台输入整数个数,然后在下一行上输入整数,以空格隔开; 输出形式:向控制台输出最小的整数。 样例输入: 5 89 56 -12 0 128 样例输出: -12,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 读入data; 若x大于data x=data; 若没有结束,则: 否则: 输出x;,问题1.3:解题步骤细化,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 读入data; 若x大于data x=data; 若没有结束,则: 否则: 输出x;,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设计数器m,表示已经读入的整数个数; m初始化为0; 读取n; x初始化为读入的第一个整数; 如果mn: 读入data; 若x大于data x=data; m+; 否则: 输出x;,c程序设计基础,93,c程序设计基础,93,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设已经读入m个整数; m初始化为0; 读取n; x初始化为读入的第一个整数; 如果mn: 读入data; 若x大于data x=data; m+; 否则: 输出x;,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设已经读入m个整数; m初始化为0; 读取n; 读取第一个data,并赋给x; m+; 如果mn: 读入data; 若x大于data x=data; m+; 否则: 输出x;,问题1.3:解题步骤继续细化方法1,c程序设计基础,94,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设已经读入m个整数; m初始化为0; 读取n; x初始化为读入的第一个整数; 如果mn: 读入data; 若x大于data x=data; m+; 否则: 输出x;,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设已经读入m个整数; m初始化为0; 读取n; 如果mn: 读入data; 若m=0,则: x=data; 若x大于data x=data; m+; 否则: 输出x;,问题1.3:解题步骤继续细化方法2,循环结构:while语句,while(表达式) 语句,简单语句或 复合语句,可以是任何表达式,一般情况下是关系表达式,问题1.3:代码实现,#include main() int m,n,data,x; m=0; scanf(“%d“, ,while循环语句,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设已经读入m个整数; m初始化为0; 读取n; 如果mn: 读入data; 若m=0,则: x=data; 若x大于data x=data; m+; 否则: 输出x;,实验,思考:若if判断改为 下述语句是否可以? if ( x data | m = 0 ),循环结构:while语句(续),例:从键盘读入字符后输出,并最后输出读入字符的个数。 输入样例: hello! welcome! 输出样例: hello! welcome! 16,步骤分析: 计数器初始化为0 读入一个字符 输出最新读入的字符 计数器加1; 若 没有结束 若 结束 输出计数器结果,字符输入函数,int getchar( );,从标准输入读入并返回一字符,int ch; ch = getchar( );,通常定义一整型变量保存输入的字符,字符输出函数,putchar( int ch );,例: putchar( a); int ch; ch = getchar( ); putchar( ch );,向标准输出设备以字符形式输出ch,遇到结束时返回eof 。eof是标准库中定义的符号常量,一般为-1,在新的一行输入ctrl+z后打回车键表示输入结束,循环结构:while语句(续),例:从键盘读入字符后输出,并输出读入字符的个数。 #include main( ) int ch,n=0; ch = getchar( ) while( ch!= eof ) putchar(ch); n+; ch = getchar( ) printf(“n%d”,n); ,#include main( ) int ch,n=0; while( (ch=getchar() ) != eof ) putchar(ch); n+; printf(“n%d”,n); ,1)程序如何结束? ctrz 2)为何程序运行: hello hello,实验,解题步骤: 计数器初始化为0 读入一个字符ch; ch不等于eof: 输出最新读入的字符; 计数器增1; 读入下一个字符; 否则:输出计数器。,解题步骤: 计数器初始化为0 读入一个字符 输出最新读入的字符 计数器加1; 若 没有结束 若 结束 输出计数器结果,多输出了一个结束符!,循环结构:for语句,for(表达式1;表达式2;表达式3) 语句 其等价于: 表达式1; while(表达式2) 语句; 表达式3; ,通常用来初始化循环变量,循环的终止条件,通常根据循环变量是否满足某个条件来终止循环。,通常用来改变循环变量,循环结构:for语句(续),例1-3a #include main( ) int m,n,data,x; scanf(“%d”, ,循环变量,#include main() int m,n,data,x; m=0; scanf(“%d“, ,实验,循环结构:for语句(续),for特别适合于循环次数固定或有固定步长的循环,如下面是一个循环十次的循环: for( i=0; i10; i+) 当然也可以用于其它方面。,循环结构:for语句(续),注意:从语法上讲,表达式中任一个都允许省略,但分号不能省。 如: for ( ; (c = getchar( )!= eof ; ) 语句s; for ( ; ; ) 语句s; 当表达式2不出现时,则认为条件为真,循环永远下去(无穷循环)。 因此, while(a) b; 等价于 for(; a; ) b;,实验,例:输入m,求 的结果并输出。,问题分析: 输入:输入整数m 处理: 从1到m依次求出每个数的平方并相加 输出:平方和的结果,解题步骤:,1、输入上限值m; 2、初始化变量n和sum; 3、若n小于等于m: 3.1 求n的平方并累加到sum; 3.2 n增1; 4、输出结果sum。,#include main( ) int m,n, sum; scanf(“%d”, ,解题步骤: 1、输入上限值m; 2、初始化变量n和sum; 3、若n小于等于m : 3.1 求n的平方并累加到sum; 3.2 n增1; 4、输出结果sum。,#include main( ) int m,n, sum; scanf(“%d”, ,#include main( ) int m,n, sum; scanf(“%d”, ,实验,c程序设计基础,109,循环结构:do_while语句,do 语句 while (表达式); 作用类似于while,但do_while是否终止,其判定条件是在循环体之后,即它总是先执行一次循环体,再判断表达式的值是否为真。,c程序设计基础,110,循环结构:do_while语句(续),总的说来,while(for)循环是在顶上测试循环终止条件,而do_while是在每次通过循环体之后,在底部进行测试,所以循环体至少要进行一次。 注意:do_while与pascal语言中的repeatuntill不同- 其布尔表达式为false时继续循环,若为true时,终止循环。,c程序设计基础,111,问题1.3,问题: 从n个整数中找到最小的整数并输出。 输入形式:先从控制台输入整数个数,然后在下一行上输入整数,以空格隔开; 输出形式:向控制台输出最小的整数。 样例输入: 5 89 56 -12 0 128 样例输出: -12,#include main() int m,n,data,x; m=0; scanf(“%d“, ,设整数个数为n; 设最小整数为x; 设当前读入的整数为data; 设已经读入m个整数; m初始化为0; 读取n; 读入data; 若m=0,则: x=data; 若x大于data x=data; m+; 如果mn,则: 否则: 输出x;,实验,c程序设计基础,113,循环结构,三种循环主要的用途: for通常用于固定步长的循环 while通常用于循环条件在头部判断的循环 do_while通常用于至少循环一次的循环,问题1.4,问题:“某班有n名学生,输入学生个数以及每个学生成绩,并判断其成绩是否及格,在判断学生成绩过程中,如果输入的学生成绩不合法(如大于100或为负数)则给出错误提示,并终止程序运行”。 问题分析: 首先要判断所读入的成绩值是否非法,如果非法,则给出错误信息并退出处理;否则继续处理。,解题步骤: 1.读入学生人数n,初始化变量m为0 2.while m小于n 2.1 读入一学生成绩值到变量score中 2.2 如果变量score值大于100或小于0: a.输出错误信息 b.退出循环 2.3 判断score值,输出“pass”或“fail” 2.4 变量m加1 3.结束,break和continue语句(续),break:迫使程序从包含它的最内层循环体或switch语句中跳出(循环只能跳出一层)。 continue:迫使包含它的最内层循环体立即执行下一次循环(不管现在程序执行到何处)。, while() break; , while() continue; ,break和continue语句,/*判断某班学生成绩对应的五级评分*/ #include main( ) int m,n, score; scanf(“%d”, ,实验,break和continue语句(续),例:统计非数字字符数。 main( ) int count; char c; count = 0; while( c = getchar( ) != eof) if( c = 0 ,不用continue语句同样可以实现该程序: main( ) int count; char c; count = 0; while( c = getchar( ) != eof) if( c 9) count+; printf(“non digital character: %dn”, count); ,实验,控制结构,计算机语言提供三种方式来控制算法的执行:顺序(sequence)、选择(selection)和循环(loop)。,语句,c语言语句分成简单语句和构造语句两类。 简单语句 1)表达式语句 赋值表达式语句,如: x= z+3; 其它表达式语句,如:+x; -y; 函数调用语句等,如:printf(“%d”,x+y); 2)转移语句 goto 标号; break; continue; return; return (表达式); 3)空语句 ;,语句(续),构造语句 1)选择(条件)语句 if语句,if_else语句 2)循环语句 for语句 while语句 do_while语句 3)开关语句 switch语句(包括case语句) 4)复合语句 * 注意:后没有分号(;),这与单个语句不同。,程序设计实践:测试(testing),如何验证一个程序解决了问题(即实现了所要的功能),可分析每个输入数据的范围,然后对每个数据从下面几个方面来考虑测试数据: 正常数据(范围内,如问题1.1中的75),以确定程序做了该做的事; 边界数据(范围边界,如问题1.1中的6

温馨提示

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

评论

0/150

提交评论