C语言学习与总结---第三章:顺序程序设计[02]
顺序程序设计[02]
3.3 C语言语句
3.3.1 控制语句
完成一定的控制功能
if~else | 条件语句 |
for | 循环语句 |
while | 循环语句 |
do~while | 循环语句 |
continue | 结束本次循环语句 |
break | 终止循环语句 |
switch | 多分支选择语句 |
return | 返回语句 |
3.3.2 函数调用语句
一个函数调用加一个分号,例如
printf(“This is a C statement.”);
3.3.3 表达式语句
一个表达式加一个分号,例如
a = 3; i = i + 1;
3.3.4 空语句
只有一个分号的语句:
;
3.3.5 复合语句
用一对{ }括起来的语句,例如
{
z = x + y;
t = z / 100;
printf(“%d”, t);
}
3.3.6 赋值语句
赋值运算符 | = |
复合赋值运算符 | +=、-=、/=、*=、%=、<<=、>==、&=、^=、\ = |
赋值表达式 | <变量><赋值运算符><表达式> |
(1)赋值表达式
**<变量><赋值运算符><表达式>**
左值(lvalue): 赋值运算符左侧的标识符
变量可以作为左值;表达式和常量不能作为左值(如a+b,5);
右值(rvalue): 出现在赋值运算符右侧的式子
a = b = c = 5 | 表达式值为5,a、b、c的值均为5 |
a = 5 + (c = 6) | 表达式值为11,a的值为11,c的值为6 |
a = (b = 4) + (c = 6) | 表达式值为10,a的值为10,b的值为4,c的值为6 |
a = (b = 10) / (c = 2) | 表达式值为5,a的值为5, b的值为10,c的值为2 |
(2)赋值表达式可以包含复合的赋值运算符,如:
a += a -= a * a
假设a的初值为12,求解步骤如下∶
① 先进行
a-=a*a
的运算,相当于
a=a-a*a
a的值为12 - 144 = -132
② 再进行
a+=-132
的运算,相当于
a= a + (-132)
a的值为-264。
(3)类型转换
如果赋值运算符两侧的类型不一致,系统会自动进行类型转换。
① 将浮点型数据赋给整型变量时,会舍弃小数部分。
② 将整型数据赋给单、双精度变量时,数值不变,以浮点数形式存储到变量中。
③将一个double型数据赋给float变量时,截取其前面6位有效数字,存放到float变量的存储单元(4个字节)中。应注意数值范围不能溢出。
将一个float型数据赋给double变量时,数值不变,有效位数扩展到15位,在内存中以8个字节存储。
④ 字符型数据赋给整型变量时,将字符的
ASCII码赋给整型变量。
⑤ 将一个占字节数多的整型数据赋给一个占字节数少的整型变量或字符型变量时,会发生截断。
3.4 数据的输入输出
在调用标准输入输出库函数时,文件开头 应该有:
#include <stdio.h>
或
#include “stdio.h”
字符输入函数 | getchar() |
字符输出函数 | putchar() |
格式输入函数 | scanf() |
格式输出函数 | printf() |
字符串输入函数 | gets() |
字数串输出函数 | puts() |
3.4.1 用printf函数输出数据
一般格式:printf(格式控制,输出表列)
函数作用:向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据
格式控制:用双引号括起来的字符串,也称“转换控制字符串”。
格式声明:由“%”和格式字符组成,作用是将数据转成指定的格式输出。
普通字符:需要原样输出的字符
输出表列:需要输出的变量、表达式
(1)d格式符。用来输出一个有符号的十进制整数。
① %d:按十进制整型数据的实际长度输出。
② %md:m为指定的输出字段的宽度。如果数据 的位数小于m,则左端补以空格,若于m,则按实际位数输出。例:
printf(″%5d\n%5d″,a,b);
若a的值是12,b的值是-345,则输出结果为:12 -345
③ %ld:输出长整型数据
%lld:输出双长整型数据
(2)c格式符。用来输出一个字符。
char ch = ‘a’;
printf(″%c″,ch);
printf(″%5c″,ch);
如果一个整数在0~127之间,可以用“%c”使之 按字符形式输出。
int i = 121;
printf(″%c″,i);
(3) s格式符。用来输出一个字符串。
printf(″%s″, ″china″);
(4)f格式符。用来以小数形式输出浮点型数据。
① %f:由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。注意:在输出的数字中并非全部数字都是有效数字。单精度实数的有效位数一般为6位。双精度实数的有效位数一般为15位。
②%m.nf:指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。
③%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。
(5)e格式符。以指数形式输出浮点型数据。
① %e:
printf(″%e″,123.456); //1.234560e+002
② %m.ne和%-m.ne:
printf(″%13.2e″,123.456); // 1.23e+002
(6)其他格式符
%i: 以带符号的十进制形式输出整数
%o: 以八进制无符号形式输出整数
%x, %X: 以十六进制无符号形式输出整数
%u: 以无符号十进制形式输出整数
%g, %G: 选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0。
(7) 格式符的修饰符
l,L:用于长整型整数,可加在格式符d,o,x,u前面
m(代表一个正整数):数据最小宽度
n(代表一个正整数):对实数,表示输出n位小数;对字符串,表示截取的字符个数
3.4.2 用scanf函数输入数据
一般格式:scanf(格式控制,地址表列)
函数作用:按照变量的内存地址将变量值存进去
注:
(1)“%d%d%d”:按照十进制整数形式输入3个整数输入数据时,在两个数据之间以一个或多个空格间隔,也可以用Enter键、Tab键。
(2)输入数值数据时,如遇到空格、Enter键、Tab键或非法字符(非数值的字符),认为该数据结束。
3.4.3 字符数据的输入输出
(1)字符输出函数
一般形式:
putchar(c);
函数作用:向终端输出一个字符
(2)字符输入函数
一般形式:
getchar();
函数作用:从终端输入一个字符
函数值:从输入设备得到的字符
3.5 举例
3.5.1 华氏温度转换为摄氏温度
#include <stdio.h>
int main()
{
float f, c;
f = 64.0;
c = (5.0 / 9) * (f - 32);
printf(“f = %f\nc = %f\n", f, c);
return 0;
}
3.5.2 字母大小写转换
#include <stdio.h>
int main()
{
char c1,c2;
c1 = ’A’;
c2 = c1 + 32;
printf(“%c\n”, c2);
printf(“%d\n”, c2);
return 0;
}
3.5.3 强制类型转换
#include <stdio.h>
int main(){
float x;
int i;
x = 32767.0;
i = (int)x%3;
printf(“x = %f, i = %d\n”, x, i);
return 0;
}
3.5.4 输入三角形的三边长,求三角形面积
面积公式: 其中,
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, s, area;
scanf(“%f, %f, %f”, &a, &b, &c);
s = (a + b + c) / 2;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf(“a = %f \t b = %f \t c = %f \t s = %f \n”,a, b, c, s);
printf(“area = %f \n”, area);
return 0;
}
3.5.5 求方程的根
求方程的根,其中a,b,c由键盘输入,设.
#include <stdio.h>
#include <math.h>
int main() {
double a, b, c, disc, x1, x2, p, q;
scanf("%lf%lf%lf", &a, &b, &c);
disc = b * b - 4 * a * c;
p = -b / (2*a);
q = sqrt(disc) / (2*a);
x1 = p + q;
x2 = p - q;
printf("x1=%7.2f\nx2=%7.2f\n", x1, x2);
return 0;
}
3.5.6 字符的输入输出
#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;
}