赞
踩
练习环境
windows 10 Visual Studio 2017
习题
3.3
N-S流程图用以下流程图符号。
(1)顺序结构。顺序结构用图3.4形式表示。表示执行完A操作后,接着执行B操作。
(2)选择结构。选择结构用图3.5表示。当p条件成立时执行A操作,p不成立则执行B操作。
图3.2可以改用N-S流程图表示,如图3.6所示。
(3)循环结构。循环结构可用图3.7形式表示。图3.7表示当p1条件成立时反复执行A操作,直到p1条件不成立为止。
输出1到10的算法,用N-S流程图表示如图3.8所示。它的流程与图3.3相同。
(1)顺序结构。各操作步骤是顺序执行的,如图3.10所示,虚线框内是一个顺序结构。其中A和B两个框是顺序执行的,即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。
(2)选择结构。选择结构又称为判断结构或分支结构,根据是否满足给定的条件而从两组操作中选择- -种操作,如图 3.11所示。虚线框内是一个选择结构。此结构中必包含一个判断条件p(以菱形框表示),根据给定的条件p是否成立而选择执行A组操作或B组操作。p所代表的条件可以是x<0或x>y,a+b<c+d等,详见第4章。
(3)循环结构。它又称为重复结构,即在一定条件下反复执行某一部分的操作。图3.13所示的就是一-种循环结构。执行过程是:当给定的条件p成立时,执行A操作,执行完A后,再判断条件p是否成立,如果仍然成立,再执行A,如此反复执行A,直到某一次p条件不成立为止,此时不执行A,而脱离循环结构。
putchar的作用是输出字符变量c的值
#include <stdio.h>
int main()
{
char a, b, c; //定义三个字符型变量
a = 'B', b = 'O', c = 'Y';
//putchar = put character
putchar(a); //向显示器输出字符B
putchar(b);
putchar(c);
putchar('\n');
return 0;
}
运行结果
变更
#include <stdio.h>
int main()
{
int a, b, c; //定义三个整型变量
a = 66, b = 79, c = 89;
//putchar = put character
putchar(a); //向显示器输出字符B
putchar(b);
putchar(c);
putchar('\n');
return 0;
}
运行结果
结论: putchar©中的c可以是字符变量或整型变量(其值在字符的ASCII码范围内),当然也可以是字符常量或整型常量,如putchar( ‘B’)或putchar( 66)。
#include <stdio.h>
int main()
{
char a, b, c;
a = getchar();
b = getchar();
c = getchar();
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return 0;
}
运行结果
(输入BOY,输出BOY)
说明:在用键盘输入信息时,并不是在键盘上敲一个字符,该字符就立即送到计算机中的。这些字符先暂存在键盘的缓冲器中,只有按了Enter 键才把这些字符一起输入到计算机中,按先后顺序分别赋给相应的变量。
输入一个字符后马上按Enter,会发生什么?
运行结果
第二种情况,打两个字母出两个字母
注意:第1行输入的不是一个字符B,而是两个字符: B和换行符,其中字符B赋给了变量a,换行符赋给了变量b。第2行接着输入两个字符: O和换行符,其中字符O赋给了变量c,换行符没有送入任何变量。在用putchar函数输出变量a,b,c的值时,就输出了字符B,然后输出换行,再输出字符O,然后执行putchar(’\n’),换行。
改写
#include <stdio.h>
int main()
{
putchar(getchar());
putchar(getchar());
putchar(getchar());
putchar('\n');
return 0;
}
第二种情况,打一个出一个字母
#include <stdio.h>
int main()
{
char c = 'a';
int i = 97;
printf("c=%c,c=%d\n", c, c);
printf("i=%c,i=%d\n", i, i);
return 0;
}
运行结果
#include <stdio.h>
int main()
{
float a, b;
a = 111111.111; b = 222222.222;
printf("%f\n",a+b);
return 0;
}
运行结果
这个结果有误差,只有前7为数字是有效数字,后面几位有误差,因为float 型数据的存储单元只能容纳6~7位有效数字,因此实际上a,b中并不能存入给出的9位有效数字。a+b 也只能保证6-7位的精度。%f 格式输出的有效位数一般为16位,给出小数6位。
#include <stdio.h>
int main()
{
double a, b;
a = 11111111.11111111; b = 22222222.22222222;
printf("%f\n", a + b);
return 0;
}
运行效果
a和b是双精度变量,能提供16位精度,但是由于用%f 格式输出,只能输出6位小数。所以我们可以看到有两位小数呗忽略了,后面可以看下3.9节的指定输出数值的宽度和小数位数的方法。
scanf(格式控制,地址列表) &a,&代表是地址运算符,&a 指的是变量。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
printf("a=%d,b=%d,c=%d\n", a, b, c);
return 0;
}
运行效果
输入数据中间用以空格分隔
内存中的地址。上面scanf函数的作用是:读人a,b,c的值并存放到变量a,b,c的存储单元中( &a,&.b, &.c指出变量a,b,c在内存中的地址)
- 这里特别要注意一下格式控制,如果在“格式控制字符串”中除了格式声明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。scanf("%d %d", &a, &b); 由于在两个%d间有两个空格,因此在输入时,两个数据间应有两个或更多的空格字符。
(1)输人三角形的三个边长a,b,c。为简单起见,假设这三个边能构成三角形(如果不能确定这三边能否构成-一个三角形,应先检查此条件是否成立。在学习了第4章“选择结构程序设计”后,就可以进行检查了)。
(2)确定从三个边长求三角形面积的方法。从中学数学知识可以知道求三角形面积的公式为:
(3)输出计算出的三角形面积area。
#include <stdio.h>
#include<math.h> //调用sqrt函数
int main()
{
double a, b, c, s,area;
scanf("%lf,%lf,%lf", &a, &b, &c); //输入三角形的三个边值
s = (a + b + c) / 2.0; //计算s
area = sqrt(s*(s - a)*(s - b)*(s - c)); //计算三角形面积area
printf("a=%f\nb=%f\nc=%f\narea=%f\n", a, b, c, area); //输出结果
return 0;
}
运行结果
#include <stdio.h>
int main()
{
char c1, c2;
c1 = getchar();
printf("%c,%d\n", c1, c1);
c2 = c1 + 32;
printf("%c,%d\n", c2, c2);
return 0;
}
优化输入三个大写字母,输出相应的三个小写字母
#include <stdio.h>
int main()
{
printf("%c", getchar() + 32);
printf("%c", getchar() + 32);
printf("%c\n", getchar() + 32);
return 0;
}
此程序没有定义字符变量,在执行printf函数过程中输入一个大写字母,不赋给变量。由于getchar丽数的值就是刚输人的字符,因此加32就得到相应的小写字母的ASCII码,用格式声明“%c”进行输出,就输出了该小写字母,也可以用putchar丽数输出
#include <stdio.h>
int main()
{
putchar(getchar() + 32);
putchar(getchar() + 32);
putchar(getchar() + 32);
putchar('\n');
return 0;
}
#include <stdio.h>
int main()
{
double a, b, c, disc, x1, x2, p, q;
scanf("a=%lf,b=%lf,c=%lf", &a, &b, &c); //输入双精度数要用格式声明%lf
disc = b * b - 4 * a * c;
p = -b / (2 * a);
q = sqrt(disc) / (2 * a);
x1 = p + q;
x2 = p - q;
printf("x1=%5.2f\nx2=%5.2f\n", x1, x2);
return 0;
}
运行结果
注意此程序未优化,在第4章后可以用if来检查该程序是否可以有两个实根。
#include <stdio.h>
int main()
{
unsigned short a;
short int b;
b = -1;
a = b;
printf("%u\n", a);
return 0;
}
运行结果
2的16次方-1
#include <stdio.h>
int main()
{
unsigned short int a;
short int b;
a = 65535;
b = a;
printf("%d\n", b);
return 0;
}
#include <stdio.h>
int main()
{
unsigned short a = 65535; //变量a最右边的16个二进制的值全是1
short int b = -2;
printf("a=%d,%o,%x,%u\n", a, a, a, a);
printf("b=%d,%o,%x,%u\n", b, b, b, b);
return 0;
}
运行结果
#include <stdio.h>
int main()
{
printf("%3s,%7.2s,%.4s,%-5.3s\n", "CHINA", "CHINA", "CHINA", "CHINA");
return 0;
}
运行结果
#include <stdio.h>
int main()
{
float f = 123.456;
printf("%f %10f %10.2f %.2f %-10.2f\n", f, f, f, f, f);
return 0;
}
运行效果
#define PI 3.1415926
#include <stdio.h>
int main()
{
double r1 = 1.53, r2 = 21.83, r3 = 123.71, s1, s2, s3;
s1 = 2.0 * PI * r1;
s2 = 2.0 * PI * r2;
s3 = 2.0 * PI * r3;
printf("r1=%10.2f\nr2=%10.2f\nr3=%10.2f\n", r1, r2, r3);
return 0;
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。