3.4 顺序程序设计
到目前为止,已经学习了数据的输入、处理和输出的一般方法,也就具备了编写简单程序的基本条件。下面结合实例,学习简单的程序设计。
所谓简单的程序设计,就是在进行程序设计时,只使用表达式语句和函数调用语句,不涉及复合语句和控制语句等。这样的程序称为“顺序程序”,这是结构最为简单、也是最基本的一类程序,程序中的语句按照排列的先后顺序依次执行。
【例3.6】 输入一个大写字母,转化为小写字母输出。
分析:单字母的输入、输出可以用getchar、putchar函数,也可以用scanf、printf函数。
在字符编码集中,大写字母和小写字母的编码相差32,因此,小写字母=大写字母+32。
算法用N-S图表示,如图3.3所示。
图3.3 将大写字母转化为小写字母
程序如下:
1 #include <stdio.h> 2 void main() 3 { char c; 4 printf("输入一个大写字母:"); /* 输入提示 */ 5 c=getchar(); 6 c=c+32; /* 大写字母转化为小写字母 */ 7 printf("对应的小写字母为:"); 8 putchar(c); 9 }
试试看,如果输入的不是大写字母,结果是不是很可笑呢?能不能对输入数据进行限制:如果输入的不是大写字母,就不执行转换和输出呢?答案当然是肯定的,不过需要引入选择结构,详见第4章。
【例3.7】 输入a、b、c的值,设b2-4ac>0且a≠0,输出一元二次方程ax2+bx+c=0的实根。
分析:对于一元二次方程ax2+bx+c=0,如果b2-4ac>0且a≠0,则方程有两个实根:
因此,只要输入的系数满足要求,就可以求得该一元二次方程的两个不同的实根。当然,在求根公式中,需要进行求平方根的运算,可以使用数学函数库中的平方根函数sqrt来完成。
N-S图如图3.4所示。
图3.4 求一元二次方程的根
程序如下:
1 #include "stdio.h" 2 #include "math.h" 3 void main() 4 { float a,b,c,disc,x1,x2,p,q,a2; 5 printf("Please Input a、b、c:"); /* 输入提示 */ 6 scanf("%f%f%f",&a,&b,&c); /*输入系数a、b、c*/ 7 disc=b*b-4*a*c; 8 a2=2*a; 9 p=-b/a2; 10 q=sqrt(disc)/a2; 11 x1=p+q; 12 x2=p-q; 13 printf("Roots of equation%.1f*x^2+%.1f*x+%.1f are:\n",a,b,c); 14 printf("x1=%.3f\nx2=%.3f\n",x1,x2); 15 }
运行结果为:
Please Input a、b、c:1 5 4↙ Roots of equation 1.0*x^2+ 5.0*x+4.0 are: x1=-1.000 x2=-4.000
【例3.8】 已知三角形的两条边及其夹角,求其第三边长度。
分析:根据题目给定的条件,数学上利用余弦定理求第三边的长度。方法是:若给定的两条边是a和b,夹角为α,则第三边的长度c为:
程序中,α用标识符alpha代表。
N-S图如图3.5所示。
图3.5 利用三角形的两条边及其夹角求其第三边长度
程序如下:
1 #define PI 3.14 /* 定义符号常量PI */ 2 #include "stdio.h" 3 #include "math.h" 4 void main() 5 { float a,b,c,x,y; 6 float alpha; 7 printf("Input a、b、alpha:"); /* 输入提示 */ 8 scanf("%f,%f,%f",&a,&b,&alpha); /* 输入三角形的两条边及夹角 */ 9 x=alpha*PI/180; /* 将alpha由度转换成弧度 */ 10 y=a*a+b*b-2*a*b*cos(x); /*利用余弦定理求第三边的长度 */ 11 c=sqrt(y); 12 printf("c=%7.3f\n",c); 13 }
运行情况为:
Input a、b、alpha:3,4,90↙ (注:按程序要求,采用逗号分隔数据) c=4.998