《C语言第1章练习题课件.ppt》由会员分享,可在线阅读,更多相关《C语言第1章练习题课件.ppt(111页珍藏版)》请在三一办公上搜索。
1、,哈尔滨工业大学(威海),C Programming Language,C 语言程序设计,C语言的祖师爷Dennis M. Ritchie,http:/www.cs.bell-,Ritchie漫画像,C is quirky, flawed, and an enormous success.,C诡异离奇、缺陷重重,却获得巨大成功,Who am i?,姓名:徐永东联系方式:手机:15898972972Email: (推荐使用Email方式交流答疑)ftp:/172.17.17.17/课件/徐永东 用户名:test (pub),密码:123456(提交作业和实验报告),Hu r u?,用过计算机吗?
2、用来干什么?学过编程吗?哪些语言?,课程特点,紧密围绕在以C语言为核心的课中央周围,进行计算机科学的启蒙教育,重点在于程序设计乐趣与能力重于知识,考试是?,成绩是!自学、自主、自信、自乐人人做“稀饭”,课程说明,课程性质:必修课学时安排:42 30考核方式:笔试 70%实验 20%+平时10%平时要求:出勤 作业课程网站:见介绍,课堂帮规,不碍他人,为所欲为可随时进入,不可任意外出可大声喧哗,不可窃窃私语可伏案小睡,不可鼾声大作可眉来眼去,不可动手动脚喧哗有奖,自由万岁藐视教师,鄙视书本,课外帮规,人手一书,不要重样禁止提问,大方讨论说出你对问题的看法思想共享,程序保密藐视教师,鄙视书本,必备
3、知识,中文阅读,英文查字典www浏览,下载,搜索收发emailWindows基本操作文件管理,忠告,不要溺爱本课,而冷落其它!,程序演示welcome.c,程序演示welcome.c,程序演示pro1.c,程序演示pro1.c,程序演示music1.c,程序演示music1.c,程序演示music.c,程序演示music.c,程序演示fk.c,程序演示fk.c,程序演示连连看,C语言的四种常用编程环境,DOS状态下:Turbo C 2.0, Turbo C&C+ 3.0Windows状态下:WIN-TC, Visual C+ 6.0, Visual C+.Net,Turbo C 2.0,Tur
4、bo C & C+ 3.0,WIN-TC,Visual C+ 6.0 (可视化的),编程语言的发展史人与计算机的对话,两个说不同母语的人的对话方式:一方学另一方的语言双方都学习一种第三方语言人与计算机的对话方式:计算机学习人的语言(自然语言理解)人学习计算机的语言学习第三方语言,机器语言,计算1+1,101110000000000100000000000001010000000100000000,汇编语言,BASIC语言,PRINT 1+1,C语言,#include main()printf(%dn, 1+1);,C语言的创世纪,一切从一个叫“Space Travel”的电子游戏开始为了让他的
5、游戏能在PDP-7上运行,Ken Thompson用汇编语言给PDP-7写了一个操作系统UNIX汇编太不好用了,Thompson需要高级语言试验了一些高级语言,包括Fortran,都不理想他在BCPL基础上,自己设计了一个B语言UNIX开始发展,B也不够用了Dennis Ritchie加入,把B改造成C开始用C重写UNIX,流行语言排行榜,C语言与程序设计是计算机专业和非计算机专业的一门技术基础选修课程,大学一年级或大二年级开设。 通过本课程的学习使学生更好地了解和应用计算机,培养学生应用计算机独立解决问题的能力,让学生真正掌握一门使用计算机的语言工具,为学生今后无论是从事计算机或非计算机工作
6、都奠定了良好的、扎实的计算机语言基础。,你应该知道,本课程的性质、目的与任务,我们将遵照国家教委考试中心制定的 “二级C语言考试大纲” 来进行教学,所以在内容上紧扣大纲考试要求,在语言上力求通俗易懂、循序渐进。,你应该知道,你应该知道,自主学习重视上机实践上机要求禁做与课程学习无关的事情看懂编译信息,逐步学会各种调试方法算法及程序代码在上机前搞定,本课程学习方法,讲,课,顺,序,请打开课本。,第一章 简单C语言设计,简单的C程序实例,/* 一个简单的C程序实例 */*purpose: I have a dreamauthor : Zhang Weigangcreated: 2008/06/30
7、 21:18:08*/#include #include void main(void)int nNumber1;nNumber1 = 1;printf(“Hello C language!n”);printf(“I have a dream that one day I will be skillful in C programming!n”);printf(“I have a dream that one day I will be a famous computer scientist!n”);printf(“I have a dream that one day I will solv
8、e the Goldbachs conjecture problem and” “prove that %d + %d = %d by using C!n”, nNumber1, nNumber1, 2);printf(“I hava a dream today!n”);,Hello C language!I have a dream that one day I will be skillful in C programming!I have a dream that one day I will be a famous computer scientist!I have a dream t
9、hat one day I will solve the Goldbachs conjecture problem and prove that 1 + 1 = 2 by using C!I hava a dream today!,X1,起止端点,输入/输出,一般处理,预定义处理,条件判断,连接点,流程线,注释框,用程序流程图来描述程序,End,程序流程图描述刚才的程序,简单的C程序实例,/* 一个简单的C程序实例 */*purpose: I have a dreamauthor : Zhang Weigangcreated: 2008/06/30 21:18:08*/#include #in
10、clude void main(void)int nNumber1;nNumber1 = 1;printf(“Hello C language!n”);printf(“I have a dream that one day I will be skillful in C programming!n”);printf(“I have a dream that one day I will be a famous computer scientist!n”);printf(“I have a dream that one day I will solve the Goldbachs conject
11、ure problem and” “prove that %d + %d = %d by using C!n”, nNumber1, nNumber1, 2);printf(“I hava a dream today!n”);,注释,打开另一个文件,主函数名,变量声明语句,赋值语句,函数调用语句,C程序结构,Hello C language!I have a dream that one day I will be skillful in C programming!I have a dream that one day I will be a famous computer scientis
12、t!I have a dream that one day I will solve the Goldbachs conjecture problem and prove that 1 + 1 = 2 by using C!I hava a dream today!,C程序结构,简单程序扩展,计算器解决方案,(1) 变量声明:声明的变量用于存放数据;(2) 变量初始化:通过变量赋值或通过键盘输入给出; (3) 输出结果:将结果输出到屏幕或窗口;(4) 在对变量初始化时,要保证作除法运算有意义,即保证除数不为零;(5) 取余运算仅对于整数有意义。,计算过程实现及分析,#include #incl
13、ude void main(void)int lOperator,rOperator;/* 定义两个整型变量,用于存放左右操作数 */int nResult1,nResult2,nResult3,nResult4,nResult5;/* 定义五个整型变量,用于存放结果 */lOperator = 4;rOperator = 5;nResult1= lOperator+rOperator;/* 计算lOperator与rOperator相加并将和存入nResult1中 */nResult2= lOperator-rOperator;/* 计算lOperator与rOperator相减并将差存入n
14、Result2中 */nResult3= lOperator*rOperator;/* 计算lOperator与rOperator相乘并将积存入nResult3中 */nResult4= lOperator/rOperator;/* 计算lOperator与rOperator相除并将商存入nResult4中 */nResult5= lOperator%rOperator;/* 算lOperator与rOperator的模并将余数存入nResult5中 */printf(“ %d “, nResult1); /* 将和显示在屏幕上 */printf(“ %d “, nResult2);/* 将差
15、显示在屏幕上 */printf(“ %d “, nResult3);/* 将积显示在屏幕上 */printf(“ %d “, nResult4);/* 将商显示在屏幕上 */printf(“ %d “, nResult5);/* 将余数显示在屏幕上*/,关于基本整型,int long int unsigned int float double char,常用的数据类型与存储方式,数组 文件 结构体 共用体,void,数据类型(Data Type),数据类型多型遍地走,安知我多大?,数据为什么要区分类型?不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类,基本数据
16、类型,int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数,数据类型修饰符,shortshort int,短整数,一般2个字节长。通常简写为shortlonglong int,长整数,一般是4个字节长。通常简写为longlong double,长双精度(高精度)浮点数,一般是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修
17、饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),1 byte,在16位环境中(DOS),占用 2 个字节的空间,1 byte,int,-3276832767,在32位环境中(Windows等),占用 4 个字节的空间,1 byte,int a; a=9;,1 byte,Do you know,-9 ?,a,9,2000,变量名,地址编号,2001,原码: 用二进制的最高位表示数符 用 0,表示正数 用 1,表示负数 数值部分则为 真值的绝对值,常用的 有三种表示方法,原码,机器数,反码,补码,补码: 则先将其表示成原码,然后除符
18、号外,再逐位取反 (即0变1,1变0)最后再加上1。,例如: 求 2 的补码(即-2在内存中的储存方式),1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0,原码,负数以补码形式存储,反码,补码,1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1,1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0,x-y=x+(-y),补码: 神奇地化减法为加法。,例如: 求 7-6 = 7+(-6),0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1,7,-6补码,结果=1,1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0,0 0 0 0 0 0
19、 0 0 0 0 0 0 0 0 0 1,超出取值范围会怎样?,TC2中int的范围是-215215-1如果我们给它一个小于-215或者大于215-1的数会如何呢?,小蛇能吞下大象吗?,溢出(Overflow)造成的危害,一台安装了Windows 95/98的机器,如果连续运行49.7天没有重新启动,可能死机 原因:Windows自启动时刻起,有一个计数器,记录系统已经运行了多少毫秒。这个计数器是个unsigned long 类型的变量unsigned long的最大值是:4294967295一天有 24*60*60*1000 = 86400000毫秒4294967295 / 86400000
20、 = 49.71026961805当49.7天的时候,此计数器会溢出,引起死机,使用变量要注意,不要对变量所占的字节数想当然用sizeof获得变量或者数据类型的长度sizeof(int);,2_Sizeof,1 byte,在计算机中占用 4 个字节的空间,1 byte,1 byte,1 byte,float,此空间只能用于存放 实型数据 (即32位二进制数),小数部分(包括符号)3个字节,指数部分(包括指数的符号)1字节,以指数形式存储,例如: float x;,指数形式:0.31415926E1,1 byte,3 byte,小数部分,指数,数符,x=3.1415926;,x,0.314159
21、26E1,1 byte,char,用于表示字符型数据 在计算机中占用 1 个字节的空间,例如:char ch;,ch=a;,单引号,双引号, a ,“student”,American Standard Code for Information Interchange,ASCII 码,a - 97 (ASCII),例如:,27=128,0-9, A-Z, a-z 及各种运算符号、标点和控制符号,变量与常量,常量(常数)不动如山是一种在程序中保持固定类型和固定值的数据。,变量我的地盘我做主是在程序执行过程中可以改变、赋值的量。是由编程人员自己定义的。,变量的的命名规则,lOperator,rOp
22、erator,nResult为变量标识符,变量的名字遵循标识符的命名规则:(1) 由英文字母、数字和下划线组成,其必须以英文字母或下划线开头;(2) 不允许使用关键字作为标识符的名字;(3) 标识符命名应做到“见名知意”;(4) 标识符区分大小写。,变量声明的一般形式,类型说明符 变量名标识符1,变量名标识符2,.;int lOperator,rOperator;,技巧:在使用变量时,必须遵循”先定义、后使用”的原则。,关键字,关键字(Keyword)又称保留字,它们是C语言中预先规定的具有固定含义的一些单词,例如:int, return等。C语言提供的关键字总共有32个,详见附录C。,C程序
23、常见符号分类,关键字(Keyword) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 标识符(Identifier)系统预定义标识符用户自定义标识符函数名、变量名 运算符(Operator): 详见P17 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data)变量(Variable)常量(Constant),计算过程实现及分析,#include #include void main(void)int lOperator,rOperator;/* 定义两个整型变量,
24、用于存放左右操作数 */int nResult1,nResult2,nResult3,nResult4,nResult5;/* 定义五个整型变量,用于存放结果 */lOperator = 4;rOperator = 5;nResult1= lOperator+rOperator;/* 计算lOperator与rOperator相加并将和存入nResult1中 */nResult2= lOperator-rOperator;/* 计算lOperator与rOperator相减并将差存入nResult2中 */nResult3= lOperator*rOperator;/* 计算lOperator
25、与rOperator相乘并将积存入nResult3中 */nResult4= lOperator/rOperator;/* 计算lOperator与rOperator相除并将商存入nResult4中 */nResult5= lOperator%rOperator;/* 算lOperator与rOperator的模并将余数存入nResult5中 */printf(“ %d “, nResult1); /* 将和显示在屏幕上 */printf(“ %d “, nResult2);/* 将差显示在屏幕上 */printf(“ %d “, nResult3);/* 将积显示在屏幕上 */printf(
26、“ %d “, nResult4);/* 将商显示在屏幕上 */printf(“ %d “, nResult5);/* 将余数显示在屏幕上*/,有关表达式与表达式语句,表达式由函数、变量、运算符、常量等组成,每个表达式都有具体的数值。表达式+分号构成了表达式语句。(1) 简单赋值运算符记为“=”,它的作用是将一个表达式的值赋给一个变量。由“=”连接的式子称为赋值表达式。其一般形式为:变量=表达式(2) 赋值运算符是右结合性运算符。如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。,有关表达式与表达式语句,(3) 如果赋值运算符两边的数据类型不相同,系统将自动进行类型
27、转换,即把赋值号右边的类型换成左边的类型。(4) 在程序中常常需要对变量赋初值,以便使用变量。在定义时赋以初值的方法,称为初始化。为了方便,在变量说明中赋初值的一般形式为:类型说明符 变量1 = 值1,变量2 = 值2,;,有关算术运算符,(1) 描述数据运算的特殊符号称为运算符。 (2) 算术运算符的优先级:当不同优先级的运算符进行混合运算时,按照由高到低运算符的优先级进行计算。(3) 算术运算符的结合性:同一优先级的算术运算符进行混合运算时,结合性是按自左至右,即先左后右。,技巧:在数值运算时,一般先考虑运算符的优先级,再考虑结合性。,计算过程实现及分析,#include #include
28、 void main(void)int lOperator,rOperator;/* 定义两个整型变量,用于存放左右操作数 */int nResult1,nResult2,nResult3,nResult4,nResult5;/* 定义五个整型变量,用于存放结果 */lOperator = 4;rOperator = 5;nResult1= lOperator+rOperator;/* 计算lOperator与rOperator相加并将和存入nResult1中 */nResult2= lOperator-rOperator;/* 计算lOperator与rOperator相减并将差存入nRes
29、ult2中 */nResult3= lOperator*rOperator;/* 计算lOperator与rOperator相乘并将积存入nResult3中 */nResult4= lOperator/rOperator;/* 计算lOperator与rOperator相除并将商存入nResult4中 */nResult5= lOperator%rOperator;/* 算lOperator与rOperator的模并将余数存入nResult5中 */printf(“ %d “, nResult1); /* 将和显示在屏幕上 */printf(“ %d “, nResult2);/* 将差显示在
30、屏幕上 */printf(“ %d “, nResult3);/* 将积显示在屏幕上 */printf(“ %d “, nResult4);/* 将商显示在屏幕上 */printf(“ %d “, nResult5);/* 将余数显示在屏幕上*/,有关函数printf(),rintf 函数调用的一般形式为:,rintf(“格式控制字符串”,输出表列);,结果分析,编译运行程序compute.c,显示程序运行结果,如图1-12所示。,图1-12 compute.c程序运行结果,格式输出函数,格式输出函数printf(格式控制字符串, 输出参数表);输出若干个任意指定类型的数据例子:printf(
31、“Hello, World!n”);printf(“%d,%dn”,a,b);printf(“sum=%dn”,sum);,格式输出函数,printf(a=%d b=%f, a, b);,函数名,输出表列,普通字符,格式控制格式说明:%普通字符原样输出,x = 34; y = 3.14;Printf(“x =%d,y=%fn”, x, y);,输出:x = 34,y = 3.14,%d 以带符号十进制整数输出%o 以八进制无符号整数输出(无前导0)%x 以十六进制无符号整数输出(无前导0 x)%u 以十进制无符号整数输出%c 以字符形式输出单个字符%s 输出一个字符串%f 以小数形式输出浮点数
32、(6位小数)%e 以标准指数形式输出(6位小数)%g 选用%f,%e中输出宽度较小的一种格式,rintf格式字符(P315),l 长整型整数,加在d、o、x、u前L long double型数,加在f、e、g前m 表示数据占用的最小宽度(例如:%3d) 数据宽度大于m,按实际宽度输出 数据宽度小于m时,补空格n 对实数表示输出n位小数(例如:%5.3d) 对字符串表示最多输出的字符个数- 改变输出内容的对齐方式 缺省为右对齐,rintf附加格式说明符,整型数据的输出,rintf(格式控制,输出参数表);格式控制说明- %.%d: 以十进制形式输入、输出整数%o: 以八进制形式输入、输出整数%x
33、: 以十六进制形式输入、输出整数,#include void main() printf(“%d, %o, %xn”, 10, 10, 10); printf(“%d, %d, %dn”, 10, 010, 0 x10); printf(“%d, %xn”,012, 012);,运行结果:10, 12, a10, 8, 1610, a,#include void main() int a, b; scanf (“%o %d”, ,输入17 17,运行结果17f 17,已知:b的ASCII码98#include main() printf(“%c,%dn”,b, b); printf(“%c,%
34、dn”,98, 98); printf(“%c,%dn”,97, b-1);,运行结果b 98b 98a 97,关于实型,实型家族包括: 单精度型(float)和双精度型(double)。实型的取值范围与值的精度与机器有关,一般float占4字节(32位),提供7位有效数字;double占8字节,提供15-16位有效数字。,程序清单1-3 division.c,/* 一个关于除法运算符的程序实例 */*purpose: 验证/运算符的操作数都为整数或有个为实数的结果是不同的author : Wangweicreated: 2008/07/10 15:19:20*/#include #inclu
35、de void main(void)printf(“ %d,%dn “, 20/7, -20/7);printf(“ %f,%fn “, 20.0/7, -20.0/7);,注意:,求余运算符(%)要求参与运算的量均为整型,运算的结果等于两数相除后的余数。两整数相除结果仍为整数,小数部分全部舍去,并非四舍五入。,实型数据的输出,float和double使用相同的格式控制说明%f 以小数形式输出浮点数,保留6位小数%e 以指数形式输出 1位整数.5位小数e 3位指数,#include Void main() float f = 123.45; double d = 3.1415926; prin
36、tf(“%f, %en”, f, f); printf(“%f, %en”, d, d); printf(“%5.3f, %5.2f, %.2fn”, d, d, d);,一共5位,小数3位,小数点一位,运行结果为:123.450000, 1.23450e+023.141593, 3.14159e+003.142, 3.14, 3.14,#include main()float f1 = 100.15799, f2 = 12.55, f3 = 1.7;int n1 = 123, n2 = 45, n3 = 6; printf(printf WITHOUT width or precision
37、specifications:n);printf(%fn%fn%fn, f1, f2, f3);printf(%dn%dn%dn, n1, n2, n3);printf(printf WITH width and precision specifications:n);printf(%5.2fn%6.1fn%3.0fn, f1, f2, f3);printf(%5dn%6dn%3dnn, n1, n2, n3);,再看一个例子,1.2.4深入解读,1. 细节的解读数据是程序处理的对象,数据可以依其本身的特点进行分类。 在程序中,我们使用变量这个抽象实体来存储计算机中的数据,变量的使用要遵从先声
38、明后使用的规则。当为不同的变量赋值的时候,就必须使用赋值运算符。,程序清单overflow.c 程序1-4,/* 一个关于整数溢出的程序实例 */*purpose: 数据超过表示范围就会溢出author : Yan Jianencreated: 2008/07/10 15:58:22*/#include #include void main(void) short int iNum;iNum=32767;iNum=i_num+1;printf(“ num=%dn “, iNum);,查看一下结果是什么,思考一下为什么会出现这种情况呢?,2. 如何解决一个问题,第一步,分析问题。 第二步,给出解
39、决问题的方法和步骤。 第三步,代码编写。 第四步,正确性验证。,3. 编程风格的问题,程序清单1-5style.c /* 一个代码风格混乱的程序实例 */*purpose: 代码混乱的弊端author : Yan Jianencreated: 2008/07/10 16:21:23 */#include #include long b, c=2800, d, e, f2801, g;void main(void)for(; b-c; ) fb+ = 10000/5;for(; d=0, g=c*2; c-=14, printf(“%.4d”,e+d/10000), e=d%10000) for
40、(b=c;d+=fb*10000,fb=d%-g,d/=g-,-b;d*=b);getch();,能读懂吗?,#include /* 对 fahr = 0, 20, ., 300 打印华氏温度与摄氏温度对照表 */main() int fahr, celsius; int lower, upper, step; lower = 0; /* 温度表的下限 */ upper = 300; /* 温度表的上限 */ step = 20; /* 步长 */ fahr = lower; while (fahr = upper) celsius = 5 * (fahr-32) / 9; printf(%d
41、t%dn, fahr, celsius); fahr = fahr + step; ,代码风格,1_F2C1,有关编程风格,非技术性风格要求:程序代码的布局,包括注释和格式控制的使用;变量和函数的命名规则与标准;代码书写习惯等内容;(1) 选择合适的名字 对函数、常量和变量的命名,要采用统一的格式或长度要求 。(2) 运行缩进规则 。(3) 多行书写 。(4) 适当的使用注释 。,有关编程风格,技术性风格要求包括程序结构的选择、程序语句的使用以及编程技巧等方面内容,要求读者随着学习内容的不断深入,仔细研究C语言的技术特点,在实践中探索、改进。,1.3 VC+6.0编译环境简介,1.3.1 VC
42、+6.0的安装与启动VC+6.0的安装过程,详见附录B。安装好VC+6.0后,按照开始程序Microsoft Visual Studio6.0Microsoft Visual C+6.0即可启动VC+6.0。,1.3.2源程序录入,(1) 建立工作目录(2) 建立工程项目 (3) 新建C源程序,图1-15 New对话框中创建项目图1-16 New对话框中创建源文件,1.3.3编译、连接和运行,(1) 编译 组建(Build)编译(Compile),快捷键Ctrl+F7,如图1-17所示(图中1)。,编译或组建结果,1编译快捷键,1编译菜单,2组建菜单,2组建快捷键,3执行菜单,3执行快捷键,1
43、.3.3编译、连接和运行,(2) 连接:组建(Build)组建(Build),快捷键F7,如图1-17所示(图中2)。成功后,生成CompT.exe可执行文件。(3) 链接建立exe:组建(Build)执行(Execute),快捷键Ctrl+F5,如图1-17所示(图中3)。运行没有问题,可弹出一命令行窗口,显示结果。 (4) 编译、连接和运行的含义,1.3.4调试,(1) 设置断点,单击此处添加或删除断点,设置好的断点,(2) 开始调试,或单击此处,运行至断点,(3) 单步运行,(4) 自动查看变量,1.3.5 退出编译环境,(1)关闭在菜单中选择:文件(File)关闭工作空间(Close WorkSpace)。 (2) 退出在菜单中选择:文件(File)退出(Exit)。,1.4本章小结,知识的层面(1) 函数是C语言的基本单位(2) 注释的使用(3) 预处理指令#include(4) 空白符与分隔符(5) 数据类型与变量的声明(6) 算术运算符和赋值运算符(7) VC+6.0编译环境,方法的层面,(1) 分析问题的方法通过学习简易计算器的设计与实现,初步了解了软件制作的过程:功能分析,解决方案(画出流程图),代码编写。(2) 编程风格的培养计算机程序设计是一门艺术,不仅仅体现在程序本身的算法选择、结构设置以及编程技巧等方面。,