《第一章 C语言概述(1)》由会员分享,可在线阅读,更多相关《第一章 C语言概述(1)(39页珍藏版)》请在金锄头文库上搜索。
1、程序设计实践程序设计实践l任任 课课 教教 师师蔡蔡 庆庆 华华 l邮箱邮箱1课程介绍课程介绍l程序设计实践程序设计实践是是C C语言程序设计语言程序设计课程课程的延续的延续l在在C C语言教学中因课时限制,对程序设计的深语言教学中因课时限制,对程序设计的深度没有较多要求。本课程是使学生在掌握度没有较多要求。本课程是使学生在掌握C C语语言语法的基础上,培养学生程序设计能力,言语法的基础上,培养学生程序设计能力,编写具有良好风格的程序,并能解决一定难编写具有良好风格的程序,并能解决一定难度的问题。度的问题。l北京大学程序在线测评系统北京大学程序在线测评系统Http:/Http:/ 1. 掌握掌
2、握vcvc+编程环境编程环境能能够够使使用用该该环环境境进进行行基基于于控控制制台台输输入入输输出出及及文文件件输输入入输输出出的的C C及及C+C+程程序序的的源源代代码码编编辑辑、编编译译连连接接、调试和运行调试和运行2. 2. 巩固和增强程序设计和代码实现能力巩固和增强程序设计和代码实现能力高高精精度度计计算算、日日期期的的处处理理、字字符符串串的的处处理理、链链表表的的概概念念、实实现现和和应应用用、枚枚举举和和递递归归的的求求解解方方法法、动态规划、模拟、数制转换等。动态规划、模拟、数制转换等。3授课方式授课方式1.课上讲授、练习及测验课上讲授、练习及测验2.复习、自学和书面作业复习
3、、自学和书面作业3.上机实践和上机作业上机实践和上机作业(40%)4.期末上机考试期末上机考试(60%)5.课程资源课程资源 ftp:/219.231.49.2484第一章第一章 C/C+语言概述语言概述l程序的基本框架程序的基本框架l变量变量lC语言数据类型语言数据类型l常量常量l运算符和表达式运算符和表达式l注释注释l分支语句分支语句l循环语句循环语句l函数函数l标准输入输出标准输入输出l 全局变量和局部变量l 数组l 字符串l 指针l 结构l 文件读写l C语言标准库函数l 命令行参数l C/C+编码规范5程序的基本框架#include 源程序文件源程序文件#include 系统头文件系
4、统头文件全局变量定义全局变量定义void main() 类型类型 子函数名(形参)子函数名(形参) /* 源程序文件源程序文件 */类型类型 子函数名子函数名(形参形参)类型类型 子函数名子函数名(形参形参)6变量l变量的定义变量的定义int number ;int numberofstudent=80 ;注:在注:在VC环境中,变量定义和执行语句可交叉!环境中,变量定义和执行语句可交叉!P33 例程例程1.12.1.cppl变量的赋值变量的赋值number=36 ;局部变量未赋值时,其值是随机的!局部变量未赋值时,其值是随机的!l变量的引用变量的引用变量名变量名(以字母下划线开头,由字母、数
5、字和下划线构成以字母下划线开头,由字母、数字和下划线构成)变量中存储的数据可参与表达式的运算,或赋值给其他变量变量中存储的数据可参与表达式的运算,或赋值给其他变量7数据类型数据类型lint 基本整型基本整型,32位位llong 长整型长整型,32位位lshort 短整型短整型,16位位lunsigned int 无符号基本整型无符号基本整型lunsigned short 无符号长整型无符号长整型lunsigned long 无符号短整型无符号短整型lchar 字符型字符型lunsigned char 无符号字符型无符号字符型lfloat 单精度符点型单精度符点型ldouble 双精度符点型双精
6、度符点型lbool 布尔类型布尔类型(true和和false)8常量常量l基本常量基本常量整型常量整型常量l65 0101 0x41实型常量实型常量l3.14 1.8E5字符常量字符常量 lA n 123 x41 字符串常量字符串常量l“ABC” “Xybnf787123”l符号常量(无参宏)符号常量(无参宏)#define PI 3.149运算符和表达式l算术运算符算术运算符加加+ 减减 乘乘* 模模% 除除/ 自增自增+ 自减自减-l赋值运算符赋值运算符简单赋值简单赋值 = 复合算术赋值(复合算术赋值(+= = *= /= %=)复合位运算赋值(复合位运算赋值(&= |= = =)l关系运
7、算符关系运算符大于大于 大于等于大于等于= 小于小于 小于等于小于等于= 等于等于= 不等于不等于!=l逻辑运算符逻辑运算符与与& 或或 | 非非 !与与& 或或 | 运算符短路现象运算符短路现象10运算符和表达式l位运算符位运算符按位与 & 按位或 | 按位异或 取反 左移 :有符号数高位补符号,低位丢弃有符号数高位补符号,低位丢弃 无符号数高位补零,低位丢弃无符号数高位补零,低位丢弃x xy yx x&y yx x| |y yx x y y y y0 00 00 00 00 01 10 01 10 01 11 10 01 10 00 01 11 11 11 11 11 11 10 00 0
8、11运算符和表达式lsizeof 运算符运算符求某变量占用内在的字节数求某变量占用内在的字节数sizeof(变量名变量名) sizeof(类型名类型名)l类型强制转换运算符类型强制转换运算符(类型名类型名)例:将实数例:将实数f保留两位小数保留两位小数 (int)(100*f+0.5)/100.0类型自动转换(赋值时表达式转换成变量类型)类型自动转换(赋值时表达式转换成变量类型)l运算符的优先级运算符的优先级P16 表表1-1结合性:左结合,右结合结合性:左结合,右结合(单目、三目和赋值运算)12优先级优先级运算符运算符解解 释释运算对象个数运算对象个数结合方式结合方式1( ) - .括号(函
9、数等)括号(函数等) 数组数组通过指针访问成员通过指针访问成员 访问成员访问成员由左向右由左向右2! + -+ - * &(类型类型) sizeof()逻辑非逻辑非 按位求反按位求反增量增量(加加1) 减量减量(减减1)正负号正负号 取值取值 取地址取地址类型转换类型转换 求内存字节数求内存字节数1(单目运算符单目运算符)由右向左由右向左3* / %乘乘 除除 取模取模2(双目运算符双目运算符)由左向右由左向右4+ -加加 减减2(双目运算符双目运算符)由左向右由左向右5按位左移按位左移 按位右移按位右移2(双目运算符双目运算符)由左向右由左向右6 = 小于小于 小于等于小于等于 大于大于 大
10、于等于大于等于2(双目运算符双目运算符)由左向右由左向右7= !=等于等于 不等于不等于2(双目运算符双目运算符)由左向右由左向右8&按位与按位与2(双目运算符双目运算符)由左向右由左向右9按位异或按位异或2(双目运算符双目运算符)由左向右由左向右10|按位或按位或2(双目运算符双目运算符)由左向右由左向右11&逻辑与逻辑与2(双目运算符双目运算符)由左向右由左向右12|逻辑或逻辑或2(双目运算符双目运算符)由左向右由左向右13? :条件运算条件运算3(三目运算符三目运算符)由右向左由右向左14= += -= *= /= %= &= = |= =各种赋值各种赋值2(双目运算符双目运算符)由右向
11、左由右向左15,逗号(顺序)逗号(顺序)2(双目运算符双目运算符)由左向右由左向右13注释注释l多行多行 /* */l单行单行 / 14if分支语句分支语句if 语句语句(单分支、双分支、多分支单分支、双分支、多分支)if (表达式表达式) 语句语句/语句组语句组if (表达式表达式) 语句语句/语句组语句组1 else 语句语句/语句组语句组2if (表达式表达式1) 语句语句/语句组语句组1 else if (表达式表达式2) 语句语句/语句组语句组2 else if (表达式表达式3) 语句语句/语句组语句组3 else 语句语句/语句组语句组n15switch 语句语句switch(开
12、关表达式) case 常量1: 语句/语句组1; case 常量表达式2: 语句/语句组2; case 常量表达式n: 语句/语句组n; default : 语句/语句组n+1; break 语句的作用switch分支语句分支语句16循环语句循环语句lfor语句语句for(初始条件表达式;循环控制表达式;循环操作表达式) 语句/语句组 for (i=n2=n3=0; i0) sum= sum + i*i; i-; 18循环语句循环语句ldo while语句语句do 语句语句/语句组语句组; while (表达式表达式) ;int i=4;int sum=0;do sum=sum + i*i;
13、i-; while (i0) ;19循环语句循环语句lbreak语句语句强行结束循环,转向执行循环语句的下一条语句。强行结束循环,转向执行循环语句的下一条语句。lcontinue语句语句对于对于forfor循环,跳过循环体其余语句,转向循环操作表达循环,跳过循环体其余语句,转向循环操作表达式的计算;对于式的计算;对于whilewhile和和do-whiledo-while循环,跳过循环体其余循环,跳过循环体其余语句,转向循环条件的判定。语句,转向循环条件的判定。20实验题(一)1.求求s的值的值s=1/3+(2/5)+(3/7)+.+(49/99)+(50/101) 2.将一个正整数分解质因数
14、,例如:输入将一个正整数分解质因数,例如:输入90,打印出,打印出 902*3*3*53.在小于在小于500的素数中的素数中,输出最大的输出最大的5个素数的和。个素数的和。 4.将一个素数的各位数字顺序颠倒后仍然是素数叫可逆素数。将一个素数的各位数字顺序颠倒后仍然是素数叫可逆素数。输出输出100500之间全部的可逆素数。之间全部的可逆素数。5.编写一个程序,要求输出图案。编写一个程序,要求输出图案。6.抓交通肇事犯:一辆卡车违反交通规则,抓交通肇事犯:一辆卡车违反交通规则, 撞人后逃跑,现场有撞人后逃跑,现场有3人目击事件,但都人目击事件,但都 没完全记住车号。甲说:没完全记住车号。甲说:“牌
15、照的前两位数字是相同的牌照的前两位数字是相同的”,乙说:乙说:“牌照的后两位数字是相同的,但与前两位不同牌照的后两位数字是相同的,但与前两位不同”,丙是位数学家,他说:丙是位数学家,他说:“四位车号刚好是一个整数的平方四位车号刚好是一个整数的平方”。请根据以上线索求出车号。请根据以上线索求出车号。 08888888808888888810188888810188888821012888821012888832101238832101238843210123443210123421函数函数函数的定义函数的定义返回值类型返回值类型 函数名函数名(类型类型 参数名参数名1,类型,类型 参数名参数名2
16、) 语句语句1; 语句语句2; return 返回值返回值 ; /若为若为void类型,则不用返回语句类型,则不用返回语句 函数的调用函数的调用调用形式:函数名调用形式:函数名(实际参数表实际参数表)调用的应用形式:调用的应用形式:(1)函数调用语句;函数调用语句;(2)出现在表达出现在表达式中;式中;(3)作为另一个函数调用的实际参数作为另一个函数调用的实际参数22判断判断m是否为素数是否为素数定义函数时要指定定义函数时要指定函数名、形参、返回值类型函数名、形参、返回值类型及函数体语句及函数体语句int prime( int m) int i; if (m=1) return 0; for
17、( i=2;iC, A-B, C-B, A-C, B-A, B-C, A-C27#include void move(char getone, char putone) printf(%c-%cn,getone,putone); void hanoi(int n,char one,char two,char three) if(n=1) move(one,three); else hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); main() int m; printf(Input the number o
18、f disks:); scanf(%d,&m); printf(The steps to moving %3d disks:n,m); hanoi(m,A,B,C); 28标准输入输出标准输入输出l输出语句输出语句printfint printf( const char * , .); 返回值返回值:成功打印的字成功打印的字符数;返回负值为出错符数;返回负值为出错格式控制符:格式控制符: %- + 0 # 整数整数1.整数整数2l或或h 格格式字符式字符l流输出对象流输出对象cout 表达式表达式 endl格式字符格式字符含义d或i以十进制形式输出一个带符号整数o以八进制形式输出一个无符号整数
19、X,x以十六进制输出一个无符号的整数u以十进制输出一个无符号的整数f表示以小数形式输出带符号的实数(包括单、双精度)E,e表示以指数形式输出带符号的实数G,g表示选择%f或%e格式输出实数(选择占宽度较小的一种格式输出)c表示输出一个单字符s表示输出一个字符串注:大写字母表示输出中的字母为大写29标准输入输出标准输入输出l输入语句输入语句scanf#include int scanf ( const char * , .);第一个参数是格式字符串,后面的参数是变量的第一个参数是格式字符串,后面的参数是变量的地址,函数作用是按照第一个参数指定的格式,地址,函数作用是按照第一个参数指定的格式,将数
20、据读入到后面的变量中将数据读入到后面的变量中格式字符串:格式字符串:%输入数据宽度输入数据宽度m长度长度 类型类型返回值:返回值: 0成功读入的数据项个数;成功读入的数据项个数; 0 没有项被没有项被赋值;赋值; EOF 第一个尝试输入的字符是第一个尝试输入的字符是EOF(结束结束)l流输入对象流输入对象cincin 变量变量30全局变量和局部变量全局变量和局部变量l局部变量局部变量在函数内部定义的变量在函数内部定义的变量作用域仅限于函数内或复合语句内l全局变量全局变量在所有函数之外定义的变量在所有函数之外定义的变量默认初值为031例程例程 1.11.cpp1. int n1 = 5, n2
21、= 10; 2. void Function1() 3. 4. int n3 =4; 5. n2 = 3; 6. 7. void Function2() 8. 9. int n4; 10. n1 = 4; 11. n3 = 5; /编译出错编译出错 12. 13. int main() 14. 15. int n5; 16. int n2; 17. if( n1 = 5 ) 18. int n6; 19. n6 = 8; 20. 21. n1 = 6; 22. n4 = 1; /编译出错编译出错 23. n6 = 9; /编译出错编译出错 24. n2 = 7; 25. return 0; 2
22、6. 32存储属性存储属性 动态存储动态存储 静态存储静态存储 存储类型存储类型 register(寄寄存器存器)auto(自动自动)static(static(静静态态) ) extern(extern(外外部部) )存储位置存储位置 寄存器寄存器 主主 内内 存存 生存期生存期 动态生存期动态生存期 永久生存期永久生存期 作用域作用域 局局 部部 局部或全局局部或全局 全全 局局 变量的存储方式33数组数组l一维数组一维数组类型名类型名 数组名数组名元素个数元素个数; int an100; 数组元素的表示:数组名数组元素的表示:数组名下标下标下标从下标从0开始开始34数组数组l数组的初始化
23、数组的初始化类型名类型名 数组名数组名常量表达式常量表达式值,值值,值 int a10=0,1,2,3,4,5,6,7,8,9;l数组越界数组越界35排序(选择法)排序(选择法)#include void sort (int a , int n) int i , j; for( i = 0; i n -1; i+ ) int t=i; for( j = i+1; j n; j + ) if( aj a t ) t = j; if (i!=t) int x = ai; ai = at; at = x; 36例:设例:设例:设例:设A A是含有是含有是含有是含有n(nn(n1)1)个元素的整型数组
24、,编写一个个元素的整型数组,编写一个个元素的整型数组,编写一个个元素的整型数组,编写一个求求求求A A中中中中n n个整数的平均值的递归算法。个整数的平均值的递归算法。个整数的平均值的递归算法。个整数的平均值的递归算法。float average(int a,int m) if (m=1) return a0; else return (am-1+average(a,m-1)*(m-1)/m; void enter (int a,int n) int i; printf(please input %d numbers:n,n); for(i=0;in;i+) scanf(%d,&ai); vo
25、id print (int a,int n) int i; for(i=0;in;i+) printf(%4d,ai); printf(n); 思考题:求思考题:求n个数中的最大数(递归)个数中的最大数(递归)37例:给定一个整型数组例:给定一个整型数组例:给定一个整型数组例:给定一个整型数组bnbn ,b b中连续的相等元素构成的子中连续的相等元素构成的子中连续的相等元素构成的子中连续的相等元素构成的子序列称为平台。试设计算法,求出序列称为平台。试设计算法,求出序列称为平台。试设计算法,求出序列称为平台。试设计算法,求出b b中最长平台的长度。中最长平台的长度。中最长平台的长度。中最长平台的
26、长度。int length(int b , int n) int i,p,q; i=0;p=0; while(in) q=1; i+; while (ip) p=q; return p;思考题:找出思考题:找出bnbn 中最长平台的首末位置。中最长平台的首末位置。381.1.编写函数,找出编写函数,找出2 210001000中所有满足条件的数:各位数字都是中所有满足条件的数:各位数字都是素数,且各位数字之和也是素数。素数,且各位数字之和也是素数。 2.2.编写递归函数,求编写递归函数,求2+(2+4)+(2+4+6)+.+(2+4+6+.+20) 2+(2+4)+(2+4+6)+.+(2+4+
27、6+.+20) 3.3.编写函数,从键盘输入年份,判断是否是闰年。编写函数,从键盘输入年份,判断是否是闰年。 4.4.用递归算法求两个自然数的最大公约数和最小公倍数。用递归算法求两个自然数的最大公约数和最小公倍数。5.5.排序算法(子函数形式,排序算法(子函数形式,n n个数)个数)选择排序、冒泡排序、交换排序选择排序、冒泡排序、交换排序6. 6. 查找算法(子函数形式,查找算法(子函数形式, n n个数中找个数中找x x)顺序查找、折半查找顺序查找、折半查找7. 7. 验证歌德巴赫猜想:任何一个大于验证歌德巴赫猜想:任何一个大于6 6的偶数均可表示成两个的偶数均可表示成两个素数之和素数之和,输出全部可能的结果。例如输入输出全部可能的结果。例如输入2424,输出:,输出:24=5+1924=5+19,24=7+1724=7+17,24=11+13 24=11+13 实验题实验题(二)39