




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章顺序结构程序设计3.1程序设计概述3.2C语句3.3赋值语句
3.4数据输入输出在C语言中的实现3.5格式化输入输出函数3.6字符输入输出函数3.7顺序程序设计举例
3.1程序设计概述
3.1.1基本概念
1.程序
从自然语言的角度来讲,程序是对解决某个问题的方法和步骤的描述;从计算机的角度来讲,程序是用某种计算机能理解并执行的计算机语言描述解决问题的方法和步骤。计算机程序主要描述两部分内容:问题的每个对象及它们之间的关系,即数据结构的内容;对这些对象的操作规则,即求解的算法。因此,程序 = 算法 + 数据结构。
2.程序设计
程序设计就是分析、解决问题的方法和步骤,并将其记录下来的过程。从计算机的角度来讲,必须用计算机语言记录下来,即用某种程序设计语言来设计计算机执行的指令序列,经过调试,使计算机能正确完成特定的任务。简单地说,程序设计就是设计和编写程序的过程。
3.结构化程序设计
结构化程序设计方法是指用结构化编程语句来编写程序。它把一个复杂的程序分解成若干个较小的过程,每个过程都可以单独地设计、修改、调试;其程序流程完全由设计人员控制,用户可以按照设计人员设计好的程序处理问题。在结构化程序设计中,仅有三种基本的控制结构用于构造程序:顺序结构、选择结构和循环结构。
4.面向过程程序设计
面向过程程序设计致力于用计算机能够理解的逻辑来描述需要解决的问题和解决问题的具体方法和步骤。编程时不仅要说明做什么,还要非常详细地告诉计算机如何做,即必须考虑程序代码的全部流程。
5.面向对象程序设计
面向对象编程在设计程序时,考虑的是如何创建对象以及创建什么样的对象,克服了面向过程程序设计过分强调求解过程的细节、程序不易重复使用的缺点。面向对象程序设计引入了许多新的概念,提出了比面向过程程序设计语言更高级的面向对象程序设计语言,这些概念和语言使得开发应用程序变得更容易,耗时更少、效率更高。程序代码大部分都包含在类和对象中,使独立的应用程序有了良好的封装性。3.1.2算法
1.算法的概念
算法是对特定问题求解方法和步骤的一种描述。算法是解决“做什么”和“怎么做”的问题。程序中的操作语句,实际上就是算法的体现。显然,不了解算法就谈不上程序设计。做任何事情都有一定的步骤,这些步骤都是按一定的顺序进行的,缺一不可,次序错了也不行。从事各种工作和活动,必须预先想好进行的步骤,即确定算法,然后去实现这个算法以达到目的。在计算机处理实际问题的过程中,“操作步骤”的确定是根据处理方案具体列出计算机操作的步骤。例如:确定了用某种排序方法(冒泡法)对一个班级的一批数(成绩总分)进行排序,但计算机仍然不能立即进行运算,还需将处理方案具体化,写出一步一步如何执行。对于同一个问题,可以有不同的解题方法和步骤。例如,求1+2+3+4+…+100,有人可能先进行1加2,再加3,再加4,……,一直加到100;而有的人采取这样的方法:100+(1+99)+(2+98)+…+(49+51)+50=50×100+50=5050。
2.算法的特性
(1)有穷性。
(2)确定性。
(3)可行性。
(4)输入。
(5)输出。
3.算法的表示方法
流程图是指用来描述计算机程序结构的示意图,它是描述计算机程序结构的有效工具。流程图一般使用如图3-1所示的标准图符来表示各种操作。图3-1常用流程图符号用图符表示算法,直观形象,易于理解,各种图符的说明见表3.1。
3.2C语句
1.说明语句
说明语句用来定义程序所使用的变量及其类型。例如:
int
a,b;
floatc,d;
chare='A';
2.表达式语句
表达式语句由表达式加上分号“;”组成。其一般形式如下:
表达式;
例如:
c=a+b
是一个表达式,而
c=a+b;
就是一个表达式语句。执行表达式语句就是计算表达式的值。例如:
x=y+z;
/*赋值语句*/
y+z;
/*加法运算语句,但计算结果不能保留,
无实际意义*/
i++;/*自增1语句,i值增1*/
3.函数调用语句
使用一个函数的功能叫做函数调用,如使用函数scanf、printf、sqrt等都叫做函数调用。函数调用语句是由一次函数调用加一个分号构成。例如:
scanf("%d%d",&a,&b);
printf("Sum=%d\n",s);
4.复合语句
复合语句是由一对花括号“{}”括起来的一组语句,其一般形式如下:
{
语句1;
语句2;
…
语句n;
}例如:
{
temp=a;
a=b;
b=temp;
}
复合语句作为一个语句对待,也就是说,单个语句可以使用的地方,复合语句就可以使用。
5.空语句
空语句只由一个分号构成。例如:
;
空语句一般用在程序的某个位置上,按需求出现,但在功能上并不执行任何实际操作。比如用于循环语句中的循环体,可以实现延时功能。
3.3赋值语句
(1)由于在赋值符“=”右边的表达式也可以是一个赋值表达式,因此,下述形式
变量=(变量=表达式);
是成立的,从而形成嵌套。
将其展开之后的一般形式如下:
变量=变量=…=表达式;
例如:
a=b=c=d=e=5;按照赋值运算符的右结合性,因此实际上等效于:
e=5;
d=e;
c=d;
b=c;
a=b;
(2)在变量说明中给变量赋初值和赋值语句的区别:给变量赋初值是变量说明的一部分,赋初值后的变量与其后的其他同类变量之间仍必须用逗号间隔,而赋值语句则必须用分号
结尾。
例如:
inta=5,b,c;
而将5赋给a的赋值语句为
a=5;
在变量说明中,不允许连续给多个变量赋初值。例如,下述说明是错误的:
inta=b=c=5;
必须写为
inta=5,b=5,c=5;
赋值语句允许连续赋值。
(3)赋值表达式和赋值语句的区别:大多数高级语言没有“赋值表达式”,仅有“赋值语句”的概念。在C语言中,赋值表达式可以包含在其他表达式中,如下述语句是合法的:
if((x=y+5)>0)z=x;按照语法规定,if后面的()内是一个条件,如可以是if(x>0)…,这里,x的位置上是表达式x=y+5,该语句的功能是:首先将y+5赋给x,再判断x的值是否大于0。
下述语句是非法的:
if((x=y+5;)>0)z=x;
“x=y+5;”是语句,不能出现在表达式中。
3.4数据输入输出在C语言中的实现
一个完整的计算机程序通常包括数据输入、数据处理、数据输出三部分。所谓的输入输出是以计算机为主体而言的,即输出是指由主机向外设(如显示器、打印机等输出设备)输出数据,输入是指外设(如键盘、磁盘等输入设备)向主机输入数据。
C语言本身不提供输入输出语句,数据的输入输出操作是由系统提供的库函数来实现的。C语言提供的函数以库的形式存放在系统中,它们不是C语言文本中的组成部分。没有输入输出语句就可以避免在编译阶段处理与硬件有关的问题,可以使编译系统简化,而且通用性强、可移植性好,对各种型号的计算机都适用,便于在各种计算机上实现。
3.5格式化输入输出函数
3.5.1格式化输出函数printf()
格式化输出函数printf()是C语言中使用频率最高的输出库函数,可以输出任何类型的多个数据,是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf()函数之前必须包含stdio.h文件。
1.函数调用的一般形式
printf( )的一般形式如下:
printf("格式控制",输出列表)
圆括号内由两部分组成,中间用逗号间隔。其中,输出列表可以是常量、变量、函数和表达式等。当输出项多于一个时,其间要用逗号分隔。
(1)格式说明符:由“%”和格式字符组成,例如“%c”,如表3.2所示,它指定输出项的输出格式。
(2)转义字符:以反斜线“\”开头,后面跟一个或几个字符。例如“\n”、“\t”等。转义字符用来控制光标的位置。
(3)普通字符:除了上述两种字符以外的其他字符,将按原样输出。
(4)输出项的个数与格式说明符的个数相同。例如printf()函数的使用:
printf("%d,%c,%f\n",-34,'A',35.7);/*输出项是常量*/
printf("Aver=%f\n",aver);
/*输出项是变量*/
printf("%d\n",-i++);/*输出项是算术表达式*/
printf("%d\n",fabs(disc)<1e-10);/*输出项是关系表达式*/
printf("%d\n",a&&b++&&++c);/*输出项是逻辑表达式*/
printf("%f\n",x>=0?x:-x); /*输出项是条件表达式*/
printf("%d\n",(n=3,n++,n+=2,n+2));/*输出项是逗号表达式*/
printf("\n%d,%x,%X",y,y,y);/*后两项以十六进制输出*/
printf("\n%d,%o",y,y);/*后一项以八进制输出*/
【例3.1】将一个整数分别按d、o、u、x格式输出。
源程序如下:
main()
{
inta=2010;
printf("%d,%o,%u,%x",a,a,a,a)
}
程序输出:
2010,3732,2010,7da
2.附加格式说明符
为了使显示输出的数据更符合人们的实际要求,函数printf( )的格式以%开始,以一个格式字符结束,中间用附加格式说明符设置输出的宽度、对齐方式和小数位数等,如表3.3、表3.4所示。
3.说明
(1)必须按输出项的类型选择对应的格式说明符,否则将导致输出错误。例如:
printf(“%u,%d\n”,-1,3.5);
的输出结果是:
65535,0
之所以这样,是因为输出项的类型与所选择的格式说明符不相符(-1是int型,应使用%d;而3.5是double型,应使用%f或%e)。输出数据时不能实现不同类型之间的自动转换,而是根据所选格式说明符按数据的存储映像进行输出。
(2)使用函数printf()时,可以没有输出项,常用作提示信息。例如:
printf("Enterdata:");
printf("Enterayear:\n");
(3)如果想输出百分号字符(%)本身,要在格式控制部分连续写两个%。例如:
printf("%d%%\n",10);
输出结果为
10%
(4)对大多数C编译系统,函数printf()输出项的计算顺序是从右至左,而输出顺序是从左至右。例如:
inti=3;
printf("%d,%d\n",i,i++);
输出结果不是
3,3
而是
4,3
【例3.2】格式输出函数printf()。
源程序如下:
#include<stdio.h>
main()
{
inta=1;
charb='A';
floatc=3.14159;
printf(''a=%db=%cc=%f'',a,b,c);
}
输出结果:
a=1b=ac=3.1415903.5.2格式化输入函数scanf()
1.函数调用的一般形式
scanf的一般形式如下:
scanf("格式控制",地址项列表)圆括号内由两部分组成,中间用逗号间隔。其中,地址项是指在变量的前面加上取地址运算符(&)。当地址项的个数多于一个时,其间要用逗号分隔(不是逗号运算符)。用双引号括起来的格式控制部分最好由格式说明符组成。最经常使用的格式说明符如表3.5所示,一定要根据变量的类型来选择相应的格式说明符。并且,地址项的个数要与格式说明符的个数相同。
【例3.3】scanf()函数的使用。
源程序如下:
inta;
floatx;
scanf("%d%f",&a,&x);
当程序执行到scanf()函数时,要求从键盘输入数据。如:
121.5↙
2.附加格式说明符
和函数printf()相似,scanf()也是以%开始,以一个格式字符结束,中间使用附加格式说明符,如表3.6所示。
3.说明
(1)“*”符:用以表示该输入项读入后不赋予相应的变量,即跳过该输入值。例如:
scanf("%d%*d%d",&a,&b);
当输入为1 2 3时,把1赋予a,2被跳过,3赋予b。
(2)宽度:用十进制整数指定输入的宽度。例如:
scanf("%5d",&a);
当输入
12345678
时,只把12345赋予变量a,其余部分被截去。
又如:
scanf("%4d%4d",&a,&b);
当输入
12345678
时,将把1234赋予a,而把5678赋予b。
(3)长度:长度格式符为l和h。l表示输入长整型数据(如%ld)和双精度浮点数(如%lf),h表示输入短整型数据。
(4) scanf函数中没有精度控制。例如:
scanf("%5.2f",&a);
是非法的。不能企图用此语句输入小数为2位的实数。
(5) scanf中要求使用变量地址,如使用变量名则会出错。例如:
scanf("%d",a);
是非法的,应改为
scanf("%d",&a);
才是合法的。
(6) C编译在碰到空格、Tab、回车或非法数据时即认为该数据结束。例如:
scanf("%d"a);
当输入
12A
时,A为非法数据,即a所代表的存储单元中的值为12。
(7)在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。例如:
scanf("%c%c%c",&a,&b,&c);
当输入为
def
时,则把 '
d'赋予a,''赋予b,'
e' 赋予c。
只有当输入为
def
时,才能把 'd' 赋予a,'e' 赋予b,'f' 赋予c。
(8)如果在格式说明字符串中有除格式字符和格式修饰符之外的其他字符,在输入数据时还应输入与这些字符相同的字符。例如:
scanf("%c%c%c",&a,&b,&c);
则输入时各数据之间应该加入空格。
又如:
scanf("%d,%d,%d",&a,&b,&c);其中用非格式符“,”作间隔符,故输入时应为
5,6,7
再如:
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入应为
a=5,b=6,c=7
(9)如输入的数据与输出的类型不一致,虽然编译时能够通过,但结果将不正确。例如:
main()
{
inta;
printf("inputanumber\n");
scanf("%d",&a);
printf("%ld",a);
}运行结果:
inputalonginteger
1234567890
47317714
由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入数据不符。需修改程序如下:
main()
{
longa;
printf("inputalonginteger\n");
scanf("%ld",&a);
printf("%ld",a);
}运行结果:
inputalonginteger
1234567890
1234567890
当输入数据改为长整型后,输入、输出数据相等。
【例3.4】从键盘输入两个字符串,然后分别输出。
源程序如下:
#include<stdio.h>
main()
{
char*p,str[20],a[20];
p=a;
scanf("%s",p);/*从键盘输入字符串*/
scanf("%s",str);
printf("%s\n",p);/*向屏幕输出字符串*/
printf("%s\n",str);
}运行结果:
Student
Student1
Strudent
Strudent1
【例3.5】给多个字符变量赋值。
源程序如下:
#include<stdio.h>
main()
{
charchar1,char2;
scanf("%c",&char1);
scanf("%c",&char2);
printf("char1=%c,char2=%c",char1,char2);
}运行结果:
as
char1=a,char2=s
【例3.6】输入一个两位正整数,输出其十位数和个位数。
分析:解决此题的关键有两点,一是如何保证输入的数据是两位正整数,可使用条件运算符;二是如何将两位正整数的十位数和个位数分离出来,可以采用除10取整得到十位数,除10取余得到个位数。源程序如下:
main()
{
unsignedu;
scanf("%u",&u);
(u>=10&&u<=99)?printf("%u,%u\n",u/10,u%10):
printf("Dataerror\n");
}其中的条件表达式语句指明:若是两位正整数,则输出十位数和个位数;否则,输出Dataerror(数据错误)。
运行此程序,输入56,则显示:
5,6
若执行此程序时,输入324,则输出:
Dataerror
3.6字符输入输出函数
3.6.1字符输出函数putchar()
putchar()函数是字符输出函数,其功能是在屏幕的当前光标位置输出单个字符。
1.函数调用的一般形式
putchar()函数的一般形式如下:
putchar(字符变量)例如:
putchar('A'); /*输出大写字母A*/
putchar(x); /*输出字符变量x的值*/
putchar('\101'); /*输出字符A*/
putchar('\n'); /*换行*/
2.说明
(1)字符输出函数putchar()也可以输出转义字符。控制字符则执行控制功能,不在屏幕上显示。例如:
putchar('\n'); /*换行*/
(2)使用字符输入、输出函数前必须使用文件包含命令:
#include<stdio.h>
或
#include"stdio.h"
(3)返回值:如果输出成功,则返回输出的字母,否则返回EOF。EOF是在头文件“stdio.h”中定义的符号常量,其值为
-1。返回值可以用来检测函数执行是否正确,也可以直接作为数据参加运算。
【例3.7】有如下程序:
#include<stdio.h>
main()
{
intx=68;
chary='B';
putchar('A');
putchar(y);
putchar('\n');
putchar(67);
putchar(x);
}
该程序的输出结果:
AB
CD3.6.2字符输入函数getchar()
getchar()函数的功能是从键盘上输入一个字符。其调用的一般形式如下:
getchar();
通常把输入的字符赋予一个字符变量,构成赋值语句,如:
charc;
c=getchar();
【例3.8】输入单个字符。
源程序如下:
#include<stdio.h>
voidmain()
{
charc;
printf("inputacharacter\n");
c=getchar();
putchar(c);
}运行时,屏幕显示:
inputacharacter
等待输入,当输入
a
时,执行程序,则屏幕输出:
a
【例3.9】从键盘输入任意一个字符,然后显示输出。
分析:对于字符的输入和输出,可以使用格式化的输入、输出函数来实现,也可以使用字符输入、输出函数来完成。
方法1:使用格式化输入、输出函数。
main()
{
charch;
scanf("%c",&ch);
printf("%c\n",ch);
}
执行此程序时,若输入$,则显示:
$方法2:使用字符输入、输出函数。
#include<stdio.h>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025合作合同范本供参考
- 2025安置房买卖合同书范本
- 2025全国合同范本
- 湖南省郴州市多校联考2024-2025学年高三下学期4月综合性模拟考试英语试题(含解析无听力音频有听力原文)
- 广东省广州市2024-2025学年高一下学期期中考试英语试题
- 2025年疆维吾尔自治区阿勒泰地区中考二模历史试题(含答案)
- 湖北省恩施市龙凤初中2024-2025学年八年级下学期期中道德与法治考试题(无答案)
- 环保设备融资租赁合同协议
- 电子软件租赁合同协议
- 现价出售房屋合同协议
- 《企业财务决算报表》课件
- 图书馆读书会服务合同
- 排水工程(下)重点
- 基于STM32单片机的智能停车场车位管理系统的设计与实现
- 《土地管理法解析》课件
- 大数据开发工程师招聘面试题与参考回答(某世界500强集团)2025年
- 养老院查房巡视管理制度
- 按摩店技师免责协议书
- 声音与情绪管理
- 直播中控转正述职报告
- 史宁中:义务教育数学课标(2022年版)解读
评论
0/150
提交评论