第3章-算法与简单C程序设计-2学时_第1页
第3章-算法与简单C程序设计-2学时_第2页
第3章-算法与简单C程序设计-2学时_第3页
第3章-算法与简单C程序设计-2学时_第4页
第3章-算法与简单C程序设计-2学时_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

高级语言程序设计揭安全jieanquan@163.com江西师范大学计算机信息工程学院高级语言程序设计——基于计算思维能力培养高级语言程序设计——基于计算思维能力培养第3章算法与简单C程序设计揭安全jieanquan@163.com江西师范大学计算机信息工程学院主要内容C语句C程序输入、输出操作的实现算法简单程序设计举例实验三本章思维导图C语句3.1表达式语句z=x*y+6;i++;空语句;复合语句

{ …}3.1C语句C程序输入/输出操作的实现3.23.2.1字符输入/输出通过调用标准库函数来实现#include<stdio.h>字符输出函数putchar(c)

输出一个字符c字符输入函数getchar()

无参数函数值为从输入设备接收的字符#include<stdio.h>intmain(){chara='n',b='i';intc=99;putchar(a-32);

//输出大写字母Nputchar(b);putchar(c);putchar(c+2);putchar('\n'); //输出换行符return0;}Nice

【例3.1】putchar函数应用举例。#include<stdio.h>intmain(){chara,b;a=getchar();b=getchar();putchar(a);putchar(b);return0;}AB↙ABAB↙A【例3.2】getchar函数应用举例。#include<stdio.h>intmain(){inta=65;longb=1234567;floatc=12.34567;printf("%c,%d,%6d,%-6d,%1d\n",a,a,a,a,a);printf("%ld,%8ld,%4ld\n",b,b,b,a);

//此处输出项列表比格式转换符多出一项printf("%f,%10f,%10.2f,%-10.2f\n",c,c,c,c,c);printf("%s,%8.6s,%-8.3s\n","Hello","Hello","Hello");return0;}【例3.3】格式输出程序示例。【例3.3】格式输出程序示例。printf()函数printf(“格式串”,表达式1,表达式2,…);3.2.2格式输入/输出格式转换控制字符表类型说明类型说明d以带符号的十进制形式输出整数(正数不输出符号)c以字符形式输出,只输出一个字符o以八进制无符号形式输出整数(不输出前导符0)s输出字符串x十六进制无符号整数(小写字母a~f)f以小数形式输出单、双精度数、默认输出6位小数X十六进制无符号整数(大写字母A~F)e十进制指数(小写e)u以无符号十进制形式输出整数E十进制指数(大写E)g,G选用%f或%e格式中输出宽度较短的一个格式在格式说明中,%和上述格式转换字符之间可以按以下顺序插入如下附加字符:%+、-、#m.nh、l格式字符↓↓↓↓↓↓开始符标志字符宽度

指示符精度

指示符长度

修正符格式转换字符printf函数附加字符表字符说

明标志字符-输出的数字或字符在域内向左对齐,右端补空格,缺省是左对齐+输出数据为正是冠以+号,为负时冠以-号,缺省时正数不输出+号#八进制输出时加前缀0,十六进制输出时加前缀0x宽度指示m指示输出项所占的最小宽度。当m小于数据实际宽度时,按实际宽度输出。例如,printf(“%3d”,1234);实际输出为:1234字符说

明精度指示.n对实数,表示输出n位小数;对字符串,表示截取的字符个数。例如,printf(“%6.2f”,12.3467);长度修正字母l用于长整数,可加在格式字符d,o,x,u之间字母h用于短整数,可加在格式字符d,o,x,u之间printf函数附加字符表(续)输出结果为:_12.35(_代表空格)例:printf("%6d\n",123);printf("%-6d\n",123);输出结果为:123123又如,printf(“%+d,%+d\n”,123,-123);输出结果为:+123,-123例:

若要输出八进制或十六进制,可以使用以下形式:printf(“%o,%x\n”,10,16);输出结果为:12,10例:#include<stdio.h>#include<stdio.h>intmain(){inta=97;longb=1234567;floatc=12.34567;printf("%c,%d,%6d,%-6d,%1d\n",a,a,a,a,a);printf("%ld,%8ld,%4ld\n",b,b,b,a);//此处输出项列表比格式转换符出多一项

printf("%f,%10f,%10.2f,%-10.2f\n",c,c,c,c,c);printf("%s,%8.6s,%-8.3s\n","Hello","Hello","Hello");return0;}【例3.3】格式输出程序示例。a,97,97,97,971234567,1234567,123456712.345670,12.345670,12.35,12.35Hello,Hello,Hel【例3.3】格式输出程序示例。编译程序不对输出项列表的项数与格式转换符个数进行检查,当输出项列表多于格式转换符时,多余的项将不被输出。反之,则可能出现运行时错误。此外,当格式转换符与输出项的类型不匹配时,编译程序也不做检查,但在运行时将得到不正确的运行结果。初写程序时要特别注意,不要误用%d输出float和double的表达式,同理,也不能用%f输出int型的表达式。提示

但%d可输出字符的ASCII码,反之,%c可以输出ASCII码值对应的字符。 scanf(“格式控制串”,地址列表);%*mh、l格式字符↓↓↓↓↓开始符赋值抑制符宽度指示符长度修正符格式转换字符scanf格式字符类型说明d输入有符号的十进制整数u输入无符号的十进制整数o输入无符号的八进制整数x,X输入无符号的十六进制整数(大小写作用相同)c输入单个字符s输入字符串。将字符串送到一个字符数组中,在输入时以非空格白字符开始,以第一个空白字符结束。字符串以串结束标志’\0’作为其最后一个字符scanf格式字符类型说明f输入float型实数,可以用小数形式或指数形式输入;输入double型实数,需用%lfe,E,g,G与f作用相同,e与f,g可以互相转换。注意,输入double数据需加前缀lscanf格式字符例如:inta;doubleb;scanf(“%d%lf”,&a,&b); 输入1212.34↙后变量a获得12,变量b获得12.34。scanf格式字符若将输入语句改成:scanf(“%d,%lf”,&a,&b);则输入格式应为:12,12.34↙scanf格式字符同理,scanf(“a=%d,b=%lf”,&a,&b);输入时应采用以下格式:a=12,b=12.34↙scanf格式字符#include<stdio.h>intmain(){inta;charb;

printf("PleaseinputanintegerandthenpressEnter:");scanf("%d",&a);printf("a=%d\n",a);

printf("PleaseinputancharacterandthenpressEnter:");scanf("%c",&b);printf("b=%c\n",b);return0;}PleaseinputanintegerandthenpressEnter:12↙a=12PleaseinputancharacterandthenpressEnter:b=方法1:增加getchar();方法2:改为scanf(“%c”,&b)【例3.4】scanf函数输入示例。宽度指示符用十进制整数指定输入数据的最大宽度,例如:scanf(“%3d”,&a);若输入12345,则仅把前3位数123赋值给整型变量a,其余部分驻留在键盘缓冲区。宽度指示符又如:scanf(“%3d%3d”,&a,&b);若输入数据12345,则把前3位123赋值给整型变量a,而把后两位45赋值给变量b。宽度指示符赋值抑制符“*”

赋值抵制符“*”表示输入项读入后不赋值给相应的变量,即跳过该输入值。

例如:scanf(“%d%*d%d”,&a,&b);

若输入101112↙

则把10赋值给变量a,11被读入但未被赋值给变量b,12被赋值给变量b。长度修正符

长度修正符h和l分别用于输入短整数和长整数,另外l还可加在格式转换符f前,用于输入double型变量的值。

例如:doublex;scanf(“%lf”,&x);常见错误举例inta,b;floatx;scanf(“%d”,a);scanf(“a=%d\n”,&a);scanf(“%7.2f”,&x)scanf(“%d%d”,&a,&b);12,34↙#include<stdio.h>intmain(){constfloatpi=3.1415926; //定义const常量floatr;doublelength,area;

printf("Pleaseinputradiusofacicle:");

scanf("%f",&r); //输入圆的半径【例3.5】修改例2.6,从键盘接收用户输入的圆的半径,计算并输出圆的周长和面积。

length=2.0*pi*r; //计算圆的周长

area=pi*r*r; //计算圆的面积printf("length=%f\n",length);//输出圆的周长printf("area=%f\n",area); //输出圆的面积return0;}【例3.5】修改例2.6,从键盘接收用户输入的圆的半径,计算并输出圆的周长和面积。1.设intx;,则下列选项中错误的输入语句是()。scanf("%d",x);scanf("%d",&x);scanf("%o",&x);scanf("%x",&x);ABCD提交单选题5分2.执行语句printf("|%9.4f|\n",12345.67);后的输出结果是()。|2345.6700||12345.6700||12345.670||12345.67|ABCD提交单选题5分3.若在下面程序运行时输入123456,程序的输出结果是什么?

[填空1]

[填空2]

作答#include<stdio.h>intmain(){inta,b;scanf("%2d%*2s%2d",&a,&b);printf("%d,%d\n",a,b);return0;}填空题10分算法3.3AlgorithmsDataStructuresPrograms+=N.Wirth著名论断:高德纳(DonaldE.Knuth):“计算机科学就是算法的研究”3.3算法3.3.1问题求解过程中算法的作用

利用计算机进行问题求解,根本上就是弄清楚两个基本问题,一是“做什么”,二是“怎么做”。

即What和How的问题。

算法设计回答的就是“怎么做”的问题。

对同一个问题,往往有不同的解题方法,各种方法有优劣之分。检索(查找)检索(查找)数据检索算法胡强查询结果:5条记录计算机是如何帮用户查找数据的?顺序检索序号班级名称姓名学号022级网络工程聂加望2208066047122级网络工程潘杰2208066048222级网络工程秦彪2208066049322级网络工程邱强22080660514

522级网络工程唐重喜2208066054012查询姓名为谭青的同学22级网络工程谭青2208066053

34422级网络工程谭青2208066053

序号班级名称姓名学号022级网络工程聂加望2208066047122级网络工程潘杰2208066048222级网络工程秦彪2208066049322级网络工程邱强2208066051

522级网络工程唐重喜2208066054012422级网络工程谭青2208066053

3456顺序检索查询姓名为邹婕的同学“瞎子”找真币假币假币假币假币假币假币顺序检索

超市若有10000种不同货品,每扫描一个条码时需要在10000种不商品中寻找这件商品的名称和价格。若1秒内查询1000次,查完全部货物耗时10秒。顺序检索顺序检索效率太低!无法满足应用要求!怎样提高检索效率?顺序检索猜价格二分检索123456….4096查询关键字15002048二分检索查询关键字15001024二分检索查询关键字15001536二分检索序号班级名称姓名学号022级网络工程聂加望2208066047122级网络工程潘杰2208066048222级网络工程秦彪2208066049322级网络工程邱强22080660514

522级网络工程唐重喜2208066054l=0查询学号为2208066053的同学22级网络工程谭青2208066053

422级网络工程谭青2208066053

r=5midl=3mid序号班级名称姓名学号022级网络工程聂加望2208066047122级网络工程潘杰2208066048222级网络工程秦彪2208066049322级网络工程邱强22080660514

522级网络工程唐重喜2208066054l=0查询学号为2208066052的同学422级网络工程谭青2208066053

r=5midl=3mid二分检索序号班级名称姓名学号022级网络工程聂加望2208066047122级网络工程潘杰2208066048222级网络工程秦彪2208066049322级网络工程邱强22080660514

522级网络工程唐重喜2208066054查询学号为2208066052的同学422级网络工程谭青2208066053

r=3l=3mid二分检索序号班级名称姓名学号022级网络工程聂加望2208066047122级网络工程潘杰2208066048222级网络工程秦彪2208066049322级网络工程邱强22080660514

522级网络工程唐重喜2208066054查询学号为2208066052的同学422级网络工程谭青2208066053

r=3l=4mid查找失败二分检索【例3.6】序列A包含14个数据,如图3-2所示,分析顺序查找方法查找22的过程。0123456789101112136549328101235232227115【例3.7】假设序列A已排序存放,如图3-3所示,分析采用二分搜索法在其中查找15的过程。012345678910111213145689101215222327323501234567891011121314568910121522232732357891011121312152223273235789121522【例3.7】假设序列A已排序存放,如图3-3所示,分析采用二分搜索法在其中查找15的过程。3.3.2算法的特点1、有穷性2、确定性3、可行性4、零个或多个输入5、一个或多个输出3.3.3算法的描述1、自然语言表示法2、伪代码表示3、流程图表示4、NS结构流程图表示5、用计算语言表示1、自然语言表示法另准备一盘无用磁带C;将磁带A中的大学英语听力转录到C中;将磁带B中的新概念听力转录到磁带A中;将磁带C中的大学英语听力转录到磁带B中。【例3.10】磁带A录有大学英语听力,磁带B录有新概念英语听力,采用自然语言描述交换这两盘磁带内容。2、伪代码表示C←AA←BB←C【例3.10】磁带A录有大学英语听力,磁带B录有新概念英语听力,采用自然语言描述交换这两盘磁带内容。3、流程图顺序结构——按照所述顺序处理;选择结构——又称分支结构,根据判断条件改变执行流程;循环结构——当条件成立时,反复执执行给定的处理操作。(1)顺序结构(2)选择结构【例3.9】输入x,计算x的绝对值存入y中,最后输出y的值。请画出其算法流程。(3)循环结构【例3.10】用传统流程图描述计算的算法。【例3.11】用传统流程图描述例3.7所述二分查找算法。4、N-S结构流程图用N-S流程图描述例3.10的算法如图3-16所示。5、用计算机语言表示算法#include<stdio.h>intmain(){intsum,i;sum=0;i=1;while(i<=100) //当i<=100时,重复执行复合语句{sum=sum+i; //将sum与i相加,结果再存入sumi++; //将i的值加1,结果再存入i}【例3.12】将例3.10求sum=的算法用C语言表示。printf("1+2+...+100=%d\n",sum); //输出结果return0;}1+2+3...+100=5050【例3.12】将例3.10求sum=的算法用C语言表示。5、用计算机语言表示算法3.4简单程序设计举例【例3.13】从键盘输入两个整数后输出,交换两个变量的值后再输出它们的值。例:交换变量的值

x

y步骤:1x->temptemp=x;temp2y->xx=y;3temp->yy=temp;#include<stdio.h>intmain(){inta,b,temp;

printf("Pleaseinputtwointeger(suchas10,20):");scanf("%d,%d",&a,&b);//输入两个整数printf("a=%d,b=%d\n",a,b);

temp=a; //利用中间变量交换两个整数a=b;b=temp;

printf("a=%d,b=%d\n",a,b);//输出交换后的变量值return0;}【分析】采用顺序结构程序设计,声明5个变量存放礼物的价格,并定义存放花费总和的变量sum和存放平均价格的变量average。依次输入每件礼物的价格存入相应的变量,计算所有价格之和存入sum,计算平均价格存入average后,输出总花费和平均价格。【例3.14】丁丁参加了访问北京的夏令营活动,回去前他为爸爸、妈妈、弟弟、好朋友小明和小西分别购买了一个小礼物。编写一个程序,帮助丁丁计算一共花费了多少钱,并计算礼物的平均价格。#include<stdio.h>intmain(){floatgift1,gift2,gift3,gift4,gift5; //变量声明floatsum,average;

printf("请输入买给爸爸的礼物价格:");//输入scanf("%f",&gift1);printf("请输入买给妈妈的礼物价格:");scanf("%f",&gift2);printf("请输入买给弟弟的礼物价格:");scanf("%f",&gift3);printf("请输入买给小明的礼物价格:");scanf("%f",&gift4);printf("请输入买给小西的礼物价格:");scanf("%f",&gift5);

sum=gift1+gift2+gift3+gift4+gift5; //计算总价average=sum/5; //求平均值

printf("总价:%.2f\n",sum);printf("平均价格:%.2f\n",average);

return0;}EAN13条形码是一种被广泛使用的商品条形码,EAN13标准码共13位数,由「国家代码」3位数,「厂商代码」4位数,「产品代码」5位数,以及「校正码」1位数组成。【例3.15】计算商品条形码的验证码。(1)国家号码由国际商品条码总会授权,我国的「国家号码」为「690-699」。(2)厂商代码由国家商品条码总会核发给申请厂商,占四个码,代表申请厂商的号码。(3)产品代码占五个码,是代表单项产品的号码,由厂商自由编定。(4)校正码占一个码,是为防止条码扫描器误读的自我检查。【例3.15】计算商品条形码的验证码。假设某EAN-13码各码代号如下:N1N2N3N4N5N6N7N8N9N10N11N12C已知,校证码C计算方法如下:C1=N1+N3+N5+N7+N9+N11C2=(N2+N4+N6+N8+

温馨提示

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

评论

0/150

提交评论