




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六讲 我们学会了什么-函数与程序结构本讲内容l 再说缓冲与非缓冲输入的区别l 变量构成变量的要素字符与字符串字符串的基本操作-练习三第一题 除模取余的问题-练习四第二题再说数组再说结构l c语句练习四第一题-多路分支语句switch()for()语句与while()语句的异同幂级数求和-练习四第五题循环与递推-练习四第六题l 单词排序函数与程序结构C语言生长树二进制与数据类型变量说明与存储地址输入输出函数数组类型与结构变量逻辑运算if-else结构for()结构程序设计初级阶段while()结构switch()结构函数结构程序设计基础要点是了解变量与变量的存储结构C头文件说明的标准功能函数c
2、的运算表达式组成C程序的基本结构语句书写c程序的风格我们学会了这些内容- c程序要素C程序函数标准函数自定义函数输入出函数数学函数c语句系统函数用C语句编写的程序体if语句循环语句:for、while开关语句:switch变量整数型变量:int字符型变量:char浮点型变量:float布尔型变量:boolVC已经有的,通用功能的标准库函数在程序头部用#include说明也就是头文件程序员为特定功能编写的函数变量为什么会有不同的类型?缓冲输入非缓冲输入使用非缓冲输入c=getche();switch(c)计算机对输入字符实时处理使用缓冲输入scanf(%s,array);if(strcmp(ar
3、ray,hi!=0) 计算机检测到结尾符之后才对输入字符串处理非缓冲处理方式缓冲处理方式HHII!00c“n”是字符串的结尾符号,表示一个字符串的结束int main(void)char num20,name40,sex,birthday12; printf(输入学号:n); scanf(%s,num); printf(输入姓名:n);scanf(%s,name); printf(输入性别:n);scanf(%c,&sex); printf(输入出生年月:n);scanf(%s,birthday); printf(OK!n); return(0);scanf函数格式控制与输入地址表列输
4、入参数是一个字符,需要取得其地址性别字符输入的时候自动读进来一个结束符“0”,使之程序无法正常输入字符l原因是缓冲区内滞留着前一个字符串的结束符号“0”fflush(stdin);fflush()是清除缓冲区函数输入参数是字符串,字符串名字就是地址变量存储方式内存空间int i_p;逻辑定义编译的时候给i_ip分配地址单元2000i_p=10;运行时给i_p赋值10变量一定有一个内存地址,占用相应的单元。不同类型的变量占用的内存字节数不同。变量名和内存地址是等效的,给变量赋值,也就是往其对应的地址单元存入数据。i_p=10;就是把10存储到地址是2000的内存中在程序看来,操作地址2000单元
5、和操作i_p变量是一回事每一个变量在内存对应着一个唯一的地址字符串与字符的区别l一个字符变量在内存中占用一个字节 .l字符串由字符和结束标志组成,在内存需要占用一段连续的区域. l字符与字符串的区别是,字符串必须有一个结束标志,即数字零.l结尾标志记为NULL或0(注意字符0的ASCII码是45,即00100000). l字符串常量CHINA存放在内存中的情况是: CHINA0在内存中占用了6字节存储,不是5字节 l 字符a和字符串a的区别是:l 字符a :1字节(值为97)l 字符串a:2字节(值为97,0)97097如何对字符串赋值?l不能像赋值给变量一样将一个字符串赋值给数组,比如: c
6、har name20;name=”;l字符串的赋值必须是一种操作,比如:变量声明时的初始化操作 char name20”; 使用strcpy()库函数从键盘输入cinname;练习三第一题 l从键盘读入一个人名字的汉语拼音(字符串长度不超过40字节),求: 把字符串传递给另一个字符型数组s,然后输出s到屏幕; 计算字符串的长度(库函数是strlen(s),s是字符串名,头部文件是string.h),并输出到屏幕。需要说明一个字符串需要占用的内存长度是41个字节对字符串赋值,以及求输入字符个数,是字符串的基本操作了解库函数与头部文件的关系做题步骤 变量声明:char name40,s40; 输入
7、字符串:cinname;把name内容复制到s-怎样使用库函数?字符串长度是什么意思?-s中实际有多少个字符#include#include#include int main(void)char name40,s40,n;coutinput of name:name;strcpy(s,name);n=strlen(s);coutn=n; s=sendl;return(0);函数getch()所需的头文件cin所需的头文件操作字符串所需的头文件说明2个字符类型数组,准备接受字符串输入字符串将字符数组name的内容复制到字符数组sstrcpy(a,b)是库函数,它使用string.h头文件,将字符
8、串b复制到字符串a.引号“”内的信息将被原样输出没有引号,输出的就是变量n,s的值函数返回语句,这里暂不需要考虑使用库函数strlen()求s内的字符个数并赋给变量n还有什么解法?#include#include#include int main(void)char name40,s40,n;coutinput of name:name;for(int i=0; namei!=0; i+)si=namei;si=0;/s内字符串的结束标志coutn=i; s=sendl;getch();return(0);函数getch()所需的头文件cin所需的头文件操作字符串所需的头文件说明2个字符类型数
9、组,准备接受字符串从第一个字符开始只要没到达字符串尾部,就持续循环退出循环时,i的值也是字符的个数每次循环将数组name的一个字符复制到数组s给s内的字符串打上结尾符号这段程序说明了操作字符串内单个字符的方法练习四第二题 l译密码。为使报文保密,往往按一定规律将其转换为密码,收报人再按约定的规律将其译为原文。l设加密规律为:将字母变成其后的第四个字母,如A变为E,a变为e。空格不变。请编制一个程序,要求有两个选项,分别是:v 选项1:加密。输入一行字符,将其变为密码并输出到屏幕上。v 选项2:解密。输入一行字符,将其翻译为原文并输出到屏幕上。并列的选项用switch()结构关键是结尾的4个字母
10、如何转换成头部?AB Z656690ab z9798122if(字符97)字符=(字符-65+4) % 26+65;else 字符=(字符-97+4)%26+97;字符在26个字母中的位置调整后的位置如超出26,则从字母中的零位置开始还原成ASCII码本题考察同学对并列分支的处理,以及除模取余在程序中的应用.加密图解解密的情况是否相同?关键是头部的4个字母如何转换成尾部?AB Z656690ab z9798122if(字符97)字符=(字符-65+ 22 )%26+65;else 字符=(字符-97+ 22)%26+97;字符在26个字母中的位置调整后的位置如小于1,则从字母尾部的位置开始回找
11、(26-4)还原成ASCII码解密图解解密的时候减去4对应的字符位置,对于模为26来说,相当于加上26-4=22时间是10:10分,现把时钟调整到8:10分,即减去2个小时,有两种办法:逆时针方向回拨时针(相当于减法)2圈,使之指向8:10分; 顺时针方向正拨时针10圈(相当于加法),同样也能让时钟正确的指向8:10分. 时钟是12进制,模是12。10加10,进位溢出后余8,相当于10减2。即,减去一个数,等效于加上它的补码。2的补码=模-2 int main(void)char s40,ch; int i,k;docoutinput of s:s; coutselect 1:加密 or 2:
12、解密k; switch(k)case 1:for(i=0;si!=0;i+)if(si97)si=(si-65+4)%26+65; else si=(si-97+4)%26+97;si=0;/s内字符串的结束标志couts=sendl;break; case 2:for(i=0;si!=0;i+)if(si97)si=(si-65+22)%26+65; else si=(si-97+22)%26+97;si=0;/s内字符串的结束标志couts=sendl;break; coutExit? :E or otherch;while(ch!=E);coutclosedendl;return(0);
13、给s内的字符串打上结尾符号减去4等于加上4的补码22(模=26)若满足ch !=E的条件,程序继续循环数组逻辑说明与元素排列结构int s10=11,12,13,14,15,16,17,18,19,20;逻辑说明了一个名字为s的整型数据类型的数组,长度为10计算机的内存s0123456789数组s占用的长度,顺序排列下标从零开始s0 s1 s2 s3 s4 s5 s6 s7s8 s9通过定义数组的方法,把同类型的一组变量说明成一个对象s,通过下标变化,可以找到、并操作数组中的任何一个元素变量。编译后分配内存空间si是下标i单元的内容11121314151617181920int main()i
14、nt x=0,age10=19,18,19,20,21,18,20,20,19,20;for(int i=0;i=20)x+;coutx=x=20 x值加一计数age数组的10个元素中,有5个大于、等于20练习四第一题计算机语言与程序设计选课名单中有自动化系、土木系的同学,并且自动化系同学中还有留学生。请分析学号与系别的关系,设计一个程序,要求如下三个功能入口:输入一个学号,给出他所属的系别,如果是自动化系的同学,请注明是否是留学生;输入系别检索信息(自动化系、土木系),给出该系的选课学生人数;输入“留学生”或“中国”,程序给出留学生选课人数或者是中国学生选课人数; 序号学号姓名系别10301
15、56梁金鉴土木工程系2030204周晋宇土木工程系并列的选项用switch()结构如果,这是if-else语句结构检索,这也是if-else语句结构本题考察同学如何描述对象的数据类型,可以用各种基本数据类型,但更方便的是结构体程序使用何种类型的数据?不同数据变量的封装一个客观个体有多种属性性别: char sex;姓名:char name40;身份证号:char paper40;身高:int high;职业:char metier40;c语言中的多种数据类型用来描述一个客观物体的多种属性本例是教师个体具有的多个属性char sex;年龄:int age;int age;int high;cha
16、r name40;char metier40;char paper 40;把教师个体抽象成一新的变量类型抽象说明:struct类型: teacher该类型包含的基本数据: structteacher新定义的组和变量类型用结构封装数据struct cake char name40; int cost; ;struct cake A4;逻辑说明一个名字为cake的结构类型计算机的内存cake中包含一个字符串name结构说明cake中还有一个整型变量说明一个名字为A的数组A的类型是cake结构类型通过定义结构的方法,把不同类型的一组变量说明成一个对象A0A1A2A3数组A占用的长度,顺序排列name
17、40 costAname40 cost name40 cost name40 costcake结构类型数组A的每一个元素,包含有2个成员分量name,cost操作结构元素分量的方法是:A,或者是Ai.cost结构变量名成员分量名struct studentchar name40;char code40;char Dept40; 序号学号姓名系别1030156梁金鉴土木工程系2030204周晋宇土木工程系本题程序要处理的对象定义一个结构类型来封装要处理的对象数据struct student array10;说明一个student结构类型、名字为array的数组结构数组array最大长
18、度可以是10个元素结构数组也可以通过初始化进行赋值struct student array10=梁金鉴,030156,土木系,周晋宇,030204,土木系,高翔,030184,土木系,韩雪,030187,土木系,全朱姬,03W101,自动化系,赵盈芳,03W102,自动化系,郑世强,031569,自动化系,张丹,031602,自动化系,田丰,031603,自动化系,郑训雄,03W103,自动化系;用分割结构数组每一个元素每一个元素的分量之间用逗号分割结构体数据的初始化方法与普通数组初始化完全类似switch()语句 switch(k)case 1: break; case 2: break;
19、case 3: break; 并列条件选择根据k的数值进行条件匹配如果满足k=1条件,执行case 1后的程序语句若k !=1,2,n执行循环体外的程序用break退出switch()cout1:检索系 2:某系人数 3:国籍k;switch(k) case 1: coutendlstudent code?s; for(i=0;i10;i+)if(strcmp(s,arrayi.code)=0) coutarrayi.Dendl; break; case 2: x=0; coutendl自动化 or 土木?s; for(i=0;i10;i+)if(strcmp(s,
20、arrayi.Dept)=0)x+; cout选课人数=xendl; break; case 3: x=0;coutendl留学生 or 中国?s; for(i=0;i10;i+)ch=arrayi.code2; if(ch=W)x+; if(strcmp(s,留学生)=0)cout留学生数=xendl; else cout中国学生数=10-xk; switch(k)case 1: break; case 2: break; case 3: break; cinc; while()不用设置初值while()只有一个循环条件如果满足循环条件,则执行循环体执行循环体外的程序在while()的循环体
21、内,设置循环条件若不满足循环条件(c =E)for( ; c !=E; cinc;) cink; switch(k)case 1: break; case 2: break; case 3: break; 若不满足循环条件(c =E)for()要设置循环变量for()要设置初值for()也有一个循环条件如果满足循环条件,则执行循环体执行循环体外的程序练习四第五题在数值计算中,函数y=ex的值通常根据泰勒展开表达式得到,即: 为计算误差,一般按其上界估计,即计算误差为 要求计算误差小于10-4,请给出e, e2, e3的计算值,并给出相应的计算项N。2311()2 !3 !(),0,(1)!Nx
22、NxxxexoNoxN( )o1(1 ) !NxN一个循环计算过程每次循环,都有一个计算误差,随N增大而趋向于零因此,我们只要在每次循环中计算误差的值,当它1.e-5);printf(N=%d,e(%.2f)=%.4fn,i,j,sum);return(0);.! 212xxex1+xxii !1)!(Nx1N练习四第五题x是浮点类型,结果才能是浮点数条件成立?逻辑真逻辑假do-while的程序体do-while语句与while()语句的异同do cink; switch(k)case 1: break; case 2: break; case 3: break; cinc; while(c
23、!=E)先进入循环体无论是否满足循环条件,首先执行循环体语句若c =E,逻辑假执行循环体外的程序输入循环体条件走出循环体前,检查是否满足循环体条件。dowhile至少执行一遍循环体语句而条件不满足时while()或者for()一遍也不执行练习四第六题杨辉三角结构特点是,每行首尾的数字是1,中间的每个数正好是该数两肩上的两个数之和。求用C编程,打印一个i(0in;顶点 (2*n-1)/2的两个肩是什么?每行长度都是2*n-1第i层(0,1,n-1)前部有n-1-i个空格0000000000j0列1列2列 3列9列第i层上,从j=n-1-i开始设置元素i层上的xj等于i-1层的xj-1+xj+1j
24、的步长是2第i层上最后一个元素位置是n-1+i01int main(void)int i,j,n,pro21;printf(输入参数n:n);scanf(%d,&n);for(i=0;i2*n+1;i+)proi=0;pro(2*n-1)/2+1=1;for(i=0;in;i+)for(j=0;jn-1-i;j+)printf( );while(j0 ? strcpy(c0,p1):strcpy(c0,p0); strcmpi(c0, p2)0 ? strcpy(c0,p2):c0; strcmpi(c0, p3)0 ? strcpy(c0,p3):c0; strcmpi(c0, p4
25、)0 ? strcpy(c0,p4):c0; if(strcmpi(c0, p0)=0)strcpy(p0, zzzzzzzzzzzz); else if(strcmpi(c0, p1)=0)strcpy(p1, zzzzzzzzzzzz); else if(strcmpi(c0, p2)=0)strcpy(p2, zzzzzzzzzzzz); else if(strcmpi(c0, p3)=0)strcpy(p3, zzzzzzzzzzzz);else strcpy(p4, zzzzzzzzzzzz); printf(%sn,c0);输入5个元素“?”是条件运算符,条件表达式的一般形式为:表
26、达式1? 表达式2:表达式3; truefalseif(strcmpi(p0,p1)0)strcpy(c0,p1);else strcpy(c0,p0);找出5个元素中的a1,剔除输出最小元素只是设置为无穷大,不是删除数组元素/在剩余4个单词中寻找最小元素strcmpi(p0, p1)0?strcpy(c0,p1):strcpy(c0,p0);strcmpi(c0, p2)0?strcpy(c0,p2):c0;strcmpi(c0, p3)0?strcpy(c0,p3):c0;strcmpi(c0, p4)0?strcpy(c0,p4):c0;if(strcmpi(c0, p0)=0)strc
27、py(p0, zzzzzzzzzzzz);else if(strcmpi(c0, p1)=0)strcpy(p1, zzzzzzzzzzzz); else if(strcmpi(c0, p2)=0)strcpy(p2, zzzzzzzzzzzz); else if(strcmpi(c0, p3)=0)strcpy(p3, zzzzzzzzzzzz); else strcpy(p4, zzzzzzzzzzzz);printf(%sn,c0);/在剩余3个单词中寻找最小元素strcmpi(p0, p1)0?strcpy(c0,p1):strcpy(c0,p0);strcmpi(c0, p2)0?s
28、trcpy(c0,p2):c0;strcmpi(c0, p3)0?strcpy(c0,p3):c0;strcmpi(c0, p4)0?strcpy(c0,p4):c0;if(strcmpi(c0, p0)=0)strcpy(p0, zzzzzzzzzzzz);else if(strcmpi(c0, p1)=0)strcpy(p1, zzzzzzzzzzzz); else if(strcmpi(c0, p2)=0)strcpy(p2, zzzzzzzzzzzz); else if(strcmpi(c0, p3)=0)strcpy(p3, zzzzzzzzzzzz); else strcpy(p4
29、, zzzzzzzzzzzz);printf(%sn,c0);寻找剩余元素中的最小者步骤和前面的完全一样不断地剔除已经找到的最小者/在剩余2个单词中寻找最小元素strcmpi(p0, p1)0?strcpy(c0,p1):strcpy(c0,p0);strcmpi(c0, p2)0?strcpy(c0,p2):c0;strcmpi(c0, p3)0?strcpy(c0,p3):c0;strcmpi(c0, p4)0?strcpy(c0,p4):c0;if(strcmpi(c0, p0)=0)strcpy(p0, zzzzzzzzzzzz);else if(strcmpi(c0, p1)=0)s
30、trcpy(p1, zzzzzzzzzzzz); else if(strcmpi(c0, p2)=0)strcpy(p2, zzzzzzzzzzzz); else if(strcmpi(c0, p3)=0)strcpy(p3, zzzzzzzzzzzz); else strcpy(p4, zzzzzzzzzzzz);printf(%sn,c0);/找到剩余的1个单词strcmpi(p0, p1)0?strcpy(c0,p1):strcpy(c0,p0);strcmpi(c0, p2)0?strcpy(c0,p2):c0;strcmpi(c0, p3)0?strcpy(c0,p3):c0;strcmpi(c0, p4)0?strcpy(c0,p4):c0;printf(%sn,c0);return 0; 结构不好,题意为将来的函数结构做准备int main(void) char c020,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 动物苗定价方案(3篇)
- 心理补偿方案文案(3篇)
- 办公行政费用管理制度
- 学校篮球训练管理制度
- 公司隐患上报管理制度
- 小学卫生健康管理制度
- 诉讼审计方案(3篇)
- 再次实施闭环管理制度
- 医院非法集资管理制度
- DB62T 4482-2021 果园防雹网设计及架设技术规程
- 养牛场项目可行性研究报告
- 2025公需课《人工智能赋能制造业高质量发展》试题及答案
- 2025年三级安全培训考试试题附参考答案【考试直接用】
- 宇宙起源与演化历史探讨
- 马家滩镇杨家圈湾村滩羊生态牧场基础设施建设项目报告书
- 2024年高考江苏卷生物试题解析版
- 基于BIM的建筑行业工程项目施工质量管理与改进报告
- 福建省莆田市2025届高三下学期第四次教学质量检测试生物试题(含答案)
- 2025-2030中国连续油管行业市场发展趋势与前景展望战略研究报告
- 2025年安全生产月主题培训课件:如何查找身边安全隐患
- 2025年注册建筑师建筑防水设计试题试卷
评论
0/150
提交评论