1996年,Bohra和Jacopini提出了结构化程序设计的三种基本结构:顺序结构、选择结构和循环结构。这三种基本结构可以作为表示一个良好算法的基本单元,通过它们可以组合成任何复杂的程序,正确使用这些结构将有助于设计出高度结构化的程序。本任务详细讲述顺序结构,选择结构和循环结构后续项目将详细介绍。
顺序结构是一种最简单、最基本的结构,其特点是完全按照语句出现的先后次序执行程序。如图2-8所示,它由程序段A和程序段B两个程序段组成,这两个程序段是按顺序执行的,即先执行A程序段,然后再执行B程序段。仅有一个入口(a点)和一个出口(b点),即只能从程序段的顶部进入并开始执行程序段中的语句,执行完毕后,也只能从程序段的底部退出程序段。
顺序结构是最常见的程序结构形式,在一般程序中大量存在。尽管一个C语言程序可以包含多种结构,但从主体上讲都是顺序结构。由main()的函数体中的第一条开始执行,顺序执行到main()的函数体的最后一条语句。下面介绍一些顺序结构程序设计的例子。
图2-8 顺序结构
【例2-23】对用户输入的任一整数(默认int),输出以下多项式的值。
y=x2+2x+3
算法分析
(1)由问题描述知,输入和输出都为整数,所以定义两个整型变量x和y。
(2)调用scanf()输入x的值。注意输入值的取值范围,不要使x和y的值溢出。
(3)计算表达式x2+2x+3得到y的值。
(4)调用printf()输出y的值。
【例2-24】输入三角形的三条边(实数),数据之间用逗号隔开,输出三角形的面积,结果保留2位小数。
算法分析
(1)由问题描述知,输入和输出都为实数,所以定义4个双精度型变量a、b、c和area分别表示三角形的三条边和三角形的面积。
(2)调用scanf()输入三条边的值。注意输入的三条边必须能够组成三角形,且三个数值用逗号隔开。
(3)计算公式p=(a+b+c)/2和area=sqrt(p*(p-a)*(p-b)*(p-c))得到三角形的面积。由于用到了中间变量p,所以还要定义一个双精度型变量p。公式中用到了数学函数sqrt(),所以要嵌入头文件math.h。
(4)调用printf()输出三角形面积area的值,保留2位小数。
源程序
【例2-25】计算并输出一元二次方程ax2+bx+c=0的两个实根,其中a、b和c的值由键盘输入,以空格隔开,假设a、b和c的值能保证方程有两个不相等的实根,即b2-4ac>0。按从大到小的顺序输出两个实根,每个数据占7列、小数点后保留2位小数,不足7列右对齐。
算法分析
(1)一元二次方程求根的方法为:
那么,可以得到:x1=p+q,x2=p-q(由于先输出大数,所以大数赋给x1)。因此,需要定义7个双精度型变量用来存放用户输入的3个数值、计算所需的中间值p和q以及2个实根x1和x2。
(2)调用scanf()输入a、b和c的值,以空格隔开,且保证b2-4ac>0。
(3)用公式计算出实根x1和x2。
(4)调用printf()输出x1和x2,注意数据输出的宽度和精确度。
源程序
【例2-26】从键盘任意输入两个整型变量的值,要求交换两个变量的值并输出。
算法分析
(1)由于变量被重新赋值后原来的值会丢失,所以要交换变量的值,还需要定义一个中间变量,用于保存其中一个变量的原值。因此,要定义3个整型变量a、b和temp。
(2)调用scanf()输入a和b的值。
(3)调用printf()输出交换前的数据。
(4)利用3条赋值语句进行交换。首先,temp=a;即先将a的原值暂存到temp中,然后a=b;将b的值赋给a,a被重新赋值,原值被新值替换,最后,b=temp;再将temp中所保存的a的原值赋给b。注意顺序不能变,否则会出错。当然,也可以先将b的原值暂存到temp中。
(5)调用printf()输出交换后a和b的值。
源程序
【例2-27】从键盘任意输入3个整数,输出其中的最大数。
算法分析
(1)定义4个整型变量,a、b、c和max,max用来保存a、b和c中的最大者。
(2)调用scanf()输入a、b和c的值。
(3)由于没有学习选择语句,根据所学的知识,可以用2个条件表达式求出最大值max。
首先通过max=(a>b)?a:b,把a和b中的较大者赋给max,然后用max=(max>c)?max:c,把max和c中的较大者赋给max。如此,max中存放的就是a、b和c中的最大者。
(4)调用printf()输出最大值max。
源程序
综合实训
简单多项式求值
编写程序,从键盘输入任一整数,输出以下多项式的值。
Y=2x2+3x+4
项目小结
本项目主要讲述C语言的字符集、标识符、基本数据类型、基本输入/输出函数、常用运算符及表达式,通过实例说明顺序结构程序设计思想。数据类型、运算符和表达式是构成程序的最基本部分,是学习任何一种编程语言的基础,也是本项目的重点。
C语言字符集由字母、数字、空格、标点和特殊字符组成。C语言标识符是由字母(A~Z,a~z)、数字(0~9)和下划线(_)组成的字符序列,其中第一个字符必须是字母或下划线。标识符是用来对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列,简单地说,标识符也就是一个名字。C语言中的标识符可分为关键词、预定义标识符和用户自定义标识符3类。
程序中用到的所有数据都必须指定其数据类型,数据有常量和变量之分,它们分别属于图2-2所示的类型。C语言不仅提供了多种基本数据类型,还提供了构造更加复杂的用户自定义数据结构的机制。
基本的输入/输出,也可称为标准输入/输出,主要是针对计算机的标准输入设备键盘和标准输出设备显示器而言的。C语言本身没有提供基本的输入/输出语句,而是提供了若干个标准输入/输出函数:字符数据的输入/输出函数getchar()和putchar(),格式输入/输出函数scanf()和printf(),字符串输入/输出函数gets()和puts()。使用标准输入/输出库函数时要用到“stdio.h”(standard input&output)文件,因此源文件开头应有以下预编译命令:#include<stdio.h>或#include"stdio.h"。
C语言提供了丰富的运算符,可以进行各种不同的运算,如算术运算、逻辑运算、关系运算等。表达式是用运算符、括号将操作数连接起来的,符合C语言语法规则的式子。操作数包括常量、变量和函数等。
顺序结构是一种最简单、最基本的结构,其特点是完全按照语句出现的先后次序执行程序。顺序结构是最常见的程序结构形式,在一般程序中大量存在。尽管一个C语言程序可以包含多种结构,但从主体上讲都是顺序结构。由main()的函数体中的第一条开始执行,顺序执行到main()的函数体的最后一条语句。
课后习题
一、单项选择题
1.以下字符串为标识符的是( )。
A._MY B.2_2222 C.short D.LINE 5
2.下列符号可以作为变量名的是( )。
A.+a B.*p C._DAY D.next day
3.设c是字符变量,则以下表达式正确的是( )。
A.c=666 B.c='c'C.c="c"D.c="abcd"
4.23+'m'+3.6-123.45/'b'的结果是( )型数据。
A.char B.double C.int D.long int
5.若变量已正确赋值,以下符合C语言语法的表达式是( )。
A.a=a+7;B.a=7+b+c,a++C.int(12.3%4)D.a=a+7=c+b
6.整型变量x=1,y=3,经下列计算后,x的值不等于6的表达式是( )。
A.x=(x=1+2,x*2)B.x=y>2?6:5
C.x=9-(--y)-(--y)D.x=y*(int)(4.8/2)
7.若定义int m=7,n=12;则能得到值为3的表达式是( )。
A.n%=(m%=5)B.n%=(m-m%5)
C.n%=m-m%5 D.(n%=m)-(m%=5)
8.以下程序的运行结果是( )。
A.6,6,11 B.5,6,11 C.5,6,12 D.6,6,12
9.以下程序的运行结果是( )。
A.1 B.0 C.2 D.3
10.以下程序的运行结果是( )。
A.0 B.1 C.2 D.3
11.以下说法正确的是( )。
A.输入项可以为一个实型常量,如scanf("%f",3.5)
B.只有格式控制没有输入项也能进行正确输入,如scanf("%d")
C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f)
D.当输入数据时,必须指明变量的地址,如scanf("%f",&f)
12.若a为整型变量,则以下语句( )。
a=-2L;
printf("%d\n",a);(www.xing528.com)
A.赋值不合法B.输出值为-2
C.输出为不确定值D.输出值为2
13.若x和y均定义为int型,z定义为double型,以下scanf()函数调用语句不合法的是( )。
A.scanf("%d%lx,%le",&x,&y,&z);B.scanf("%2d*%d%lf",&x,&y,&z);
C.scanf("%x%*d%o",&x,&y);D.scanf("%x%o%6.2f",&x,&y,&z);
14.若a、b、c均定义为int型,要给它们输入数据,正确的输入语句是( )。
A.read(a,b,c);B.scanf("%d%d%d",a,b,c);
C.scanf("%D%D%D",a,b,c);D.scanf("%d%d%d",&a,&b,&c);
15.若有定义和语句:
int n=10;
printf("%\n",n);
其输出结果是( )。
A.输出10 B.输出一空行C.没有输出D.编译不通过
16.若a是float型变量,b是unsigned型变量,以下输入语句中合法的是( )。
A.scanf("%6.2f%d",&a,&b);B.scanf("%f%n",&a,&b);
C.scanf("%f%3o",&a,&b);D.scanf("%f%f",&a,&b);
17.字母a的ASCII码为97,则下列语句的运行结果为( )。
char a='a';
a--;
printf("%d,%c\n",a+'2'-'0',a+'3'-'0');
A.b,c B.a--运算不合法,故有语法错
C.98,c D.格式描述和输出项不匹配,输出无定值
18.若k1、k2、k3、k4均为int型变量,为了将整数10赋给k1和k3,将整数20赋给k2和k4,则对应以下scanf()函数调用语句的正确输入方式是( )。
scanf("%d%d",&k1,&k2);
scanf("%d,%d",&k3,&k4);
A.1020 B.10 20 C.10,20 D.10 20
1020 10 20 10,20 10,20
19.有如下程序,输入数据12345 678↙后,x的值是________,y的值是________。
①A.12345 B.123 C.45 D.345
②A.45.000000 B.45678.000000 C.678.000000 D.123.000
20.有如下程序,输入数据25,13,10↙后,正确的运行结果是( )。
A.x+y+z=48 B.x+y+z=35
C.x+y+z=38 D.不确定值
21.有如下程序,输入数据12 345↙后,x的值是_________,y的值是_________。
①A.12 B.123 C.12345 D.0
②A.12.000000 B.345.000000 C.12345.000000 D.0.000000
22.有如下程序,输入数据9876543210↙后,程序的运行结果是( )。
A.a=98,b=765,c=4321 B.a=10,b=432,c=8765
C.a=98,b=765.000000,c=4321.000000 D.a=98,b=765.0,c=4321.0
23.以下程序的运行结果是( )。
A.|3.1415|B.|3.0|C.|3|D.|3.|
24.以下程序的运行结果是( )。
A.|000003|B.|3.1415|C.|00003.0|D.|3|
25.以下程序的运行结果是( )。
A.|3|B.|000003|C.|3.1415|D.|3.0|
26.以下程序的运行结果是( )。
A.11,10 B.9,10 C.010,9 D.10,9
27.以下程序的运行结果是( )。
A.10,10 B.9,9 C.9,10 D.10,9
二、填空题
1.以下程序的运行结果是________。
2.以下程序的运行结果是_________。
3.以下程序的运行结果是_________。
4.以下程序的运行结果是_________。
5.以下程序的运行结果是________。
6.以下程序的运行结果是_________。
7.以下程序输入123456↙后,其运行结果是_________。
8.以下程序输入ABC↙后,其运行结果是_________。
9.以下程序输入100↙后,其运行结果是________。
10.以下程序输入x=1.23,y=50↙后,其运行结果是_________。
11.以下程序的运行结果是_________。
12.以下程序的运行结果是_________。
13.以下程序的运行结果是_________。
14.以下程序的运行结果是_________。
三、编程题
1.编写一个程序,求出任一输入字符的ASCII码。
2.编写一个程序,输入一个字符,依次输出其前导字符、该字符和后续字符。
3.编写一个程序,输出任意一个十进制整数对应的八进制数和十六进制数。
4.编写一个程序,从键盘输入圆锥体的半径r和高度h,计算其体积。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。