第四章 数据输入与输出
第五章 选择结构程序设计 主要内容
1、数据输入输出的概念及在 C中的实现
2、字符数据的输入输出
3、格式输入输出
4、顺序程序设计举例
5、关系运算符和关系表达式
6、逻辑运算符和逻辑表达式
第
四
章
第
五
章
§ 4.3 数据输入输出的概念及
在 C语言中的实现
1、输入输出的概念
从计算机向外部输出设备( 如显示器、
打印机、磁盘等 )输出数据称为, 输出, ;
从输入设备( 键盘、磁盘等 )向计算机
输入数据称为, 输入, 。
2,C语言通过什么方式实现输入输出的?
c语言 输入输出操作是由函数来实现的。
在 C语言中标准函数库中提供一批, 标准输入
输出函数,,例如
printf函数 (输 出 函数)
scanf函数 (输 入 函数)
putchar函数 (输 出 函数)
getchar函数等 (输 入 函数)
3,在 c语言中使用库函数有什么条件?
在使用 C语言标准 (I/O) 库函数时,要用
文件包含预编译命令,
#include<stdio.h> 或 #include,stdio.h”
使用 printf,scanf函数时可以省略预编译命令。
为什么使用库函数时要用
#include<stdio.h>?
因为每个库函数都有一些规则,这些规
则包含在一个文件中(比如,stdio.h)
通过预处理命令把相应的文件装在程序
的前面,一起编译,只有这样才能使用
后面的库函数。
#include<stdio.h>
main()
{
……,
}
qqqqq
qqqqq
qqqqq
qqqqq
main()
{
……,
}
stdio.c 执行预处
理命令后
1,putchar 函数(字符输出函数)
格式, putchar( c )
参数, c为字符常量、字符变量、整型常量、整型变量。
功能:把字符 变量 c的值 输出到显示器上,只能 输出一个 字
符。
§ 4.4 字符数据的输入输出
例子,/*ch3_1.c*/
#include <stdio.h> /*必须使用预编译命令 */
main()
{ int c;
char a;
c=65; a='B';
putchar(c);
putchar('\n');
putchar(a);
putchar(c+1);
}
运行结果,A
BB
格式,getchar( )
功能:从键盘读 入 一字符
2,getchar( ) ( 字符输入函数 )
例
#include <stdio.h>(不可少 )
main()
{ int c;
printf("Enter a character:");
c=getchar();
printf("%c”,c);
}
运行结果,
Enter a character:A?
A
?格式输出函数
格式,printf(,格式控制串”,输出列表 )
功能:按指定格式向显示器输出数据
?输出列表:要输出的数据(可以没有,多个时
以“,”分隔)
?格式控制串:包含两种信息
?格式说明,%[修饰符 ]格式字符,用于指
定输出格式
?普通字符或转义序列:原样输出
例如,printf(“a=%d b= %d\n”,a,b);
输出,a=3 b=4
§ 4.5 格式输入与输出
普通字符 普通字符
转义字符 格式字符 格式说明
1、输出函数
d,i
x,X
o
u
c
s
e,E
f
g,G
%%
格式字符,
十六进制无符号整数
不带符号十进制整数
十进制整数
指数形式浮点小数
单一字符
字符串
八进制无符号整数
小数形式浮点小数
e和 f中较短一种
百分号本身
int a=567;printf (,%d”,a);
int a=255;printf(“%x”,a);
int a=65;printf(“%o”,a);
int a=567;printf(“%u”,a);
char a=65;printf(“%c”,a);
printf(“%s”,“ABC”);
float a=567.789;printf(“%e”,a);
float a=567.789;printf(“%f”,a);
float a=567.789;printf(“%g”,a);
printf(“%%”);
567
ff
101
567
A
ABC
5.677890e+002
567.789000
567.789
%
?说明
?格式字符要用小写
?格式字符与输出项个数应相同,按先后顺序一一对应
?输出转换,格式字符与输出项类型不一致,自动按指定格式输
出
例 int a=3,b=4;
printf(“%d %d\n”,a,b);
printf(“a=%d,b=%d\n”,a,b);
输出结果, 3 4
a=3,b=4
?附加格式说明符(修饰符)
.n 对实数,指定小数点后位数 (四舍五入 ) 对字符串,指定实际输出位数
修饰符 功 能
m 输出数据域宽,数据长度 <m,左补空格 ;否则按实际输出
输出数据在域内左对齐(缺省右对齐 ) -
指定在有符号数 的正数前显示正号 (+) +
输出数值时指定左面不使用的空位置自动填 0 0
在八进制和十六进制数前显示前导 0,0x #
在 d,o,x,u前,指定输出精度为 long型
在 e,f,g前,指定输出精度为 double型 l
如 %ld,%lo等
运行结果,1234,1234
运行结果,a
例 m.n
例 int a=1234;
printf(“%8d,%2d\n”,a,a);
例
float f=123.456;
printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);
运行结果,
123.456000,123.456000,123.5,123.46,1.23e+002
例
char ch=?a?; printf(“%3c\n”,ch);
例 static char a[]=“Hello,world!”
printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);
运行结果,Hello,world!
Hello,world!
Hello
Hello
Hel
例 int a=1234;
float f=123.456;
static char c[]=“Hello,world!”;
printf(“%8d,%-8d\n”,a,a);
printf(“%10.2f,%-10.1f\n”,f,f);
printf(“%10.5s,%-10.3s\n”,c,c);
运行结果,1234,1234
123.46,123.5
Hello,Hel
例
例 int a=1234;
float f=123.456;
printf(“%08d\n”,a);
printf(“%010.2f\n”,f);
printf(“%0+8d\n”,a);
printf(“%0+10.2f\n”,f);
例 0, +
例 int a=123;
printf(“%o,%#o,%X,%#X\n”,a,a,a,a);
例 #
例 long a=65536;
printf(“%8ld,%d\n”,a,a);
例 l 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
//00001234
//0000123.46
//000+1234
//000+123.56
//173,0173,7B,0X7B
---65536,0
2,数据输入
?格式输入函数
格式, scanf(“格式控制串,,地址列表)
功能:按指定格式从键盘读入数据,存入地址表指定的
存储单元中,并按回车键结束
?地址表:变量的地址,常用取地址运算符 &
?格式字符,d,i,o,x,u,c,s,f,e
例 scanf(“%d”,&a);
输入,10 ?
则 a=10
例 scanf(“%x”,&a);
输入,11 ?
则 a=17
?附加格式说明符(修饰符)
l
修饰符 功 能
h
m
*
用于 d,o,x前,指定输入为 short型整数
用于 d,o,x前,指定输入为 long型整数
用于 e,f前,指定输入为 double型实数
指定输入数据宽度,遇空格或不可转换字符则结束
抑制符,指定输入项读入后不赋给变量
例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
输入 19991015 ?
则 1999?yy,10 ?mm,15 ?dd
例 scanf(“%3d%*4d%f”,&k,&f);
输入 12345678765.43?
则 123?k,8765.43?f
例 scanf(“%2d %*3d %2d”,&a,&b);
输入 12 345 67?
则 12?a,67?b
例 scanf(“%3c%2c”,&c1,c2);
输入 abcde ?
则‘ a??c1,?d? ?c2
?输入分隔符的指定
?一般以空格,TAB或回车键作为分隔符
?其它字符做分隔符:格式串中两个格式符间字符
例 scanf(“%d%o%x”,&a,&b,&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
输入 123 123 123?
输出 a=123,b=83,c=291
例 scanf(“%d:%d:%d”,&h,&m,&s);
输入 12:30:45?
则 12 ?h,30 ?m,45 ?s
例 scanf(“%d,%d”,&a,&b)
输入 3,4 ?
则 3?a,4 b
?说明,
?用,%c”格式符时,空格和转义字符作为有
效字符输入
如 scanf(“%c%c%c”,&c1,&c2,&c3);
若输入 a b c?
则 a?c1,?c2,b ?c3
?输入数据时,遇以下情况认为该数据结束,
?遇空格,TAB,或回车
?遇宽度结束
?遇非法输入
如 scanf(“%d%c%f”,&a,&b,&c);
若输入 1234a123o.26 ?
则 1234 ?a,?a? ?b,123 ?c
§ 4.6顺序结构 程序设计举例
#include <math.h>
#include <stdio.h>
main()
{ float a,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
printf("area=%7.2f\n",area);
}
例 输入三角形边长,求面积
输入,3,4,6 ?
输出,a= 3.00,b= 4.00,c= 6.00 s= 6.50
area= 5.33
文件包含预处理命令
变量定义
输入数据
输出数据
程序设计四步曲,
1、变量声明;
2、输入变量值 ;
3、处理数据(用变量表示);
4、输出变量值(结果)。
例 从键盘输入大写字母,用小写字母输出。
#include "stdio.h"
main()
{ char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
输入,A ?
输出,A,65
a,97
#include <stdio.h>
#include <math.h>
main()
{ float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&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("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
}
输入,a=1,b=3,c=2 ?
输出,x1=-1.00
x2=-2.00
第五章 选择结构程序设计
在讲算法表示的时候,给出了流程图的三种基本
结构:顺序结构、选择结构、循环结构。
其中 选择结构 和 循环结构 在 C语言中都有相应的
语句来实现。 选择结构 通常用 if语句来完成。
if 语句有几种格式,例如其中之一,
if (表达式) 语句 1 else 语句 2
例如,int a;
scanf(“%d”,&a) ;
if (a<0) printf(“a=%d \n”,-a);
else printf(“a=%d \n”,a);
?关系运算符和表达式
?关系运算符
?种类, <, <=, = =,>=,>,!=
?结合方向:自左向右
?优先级别,
<
<=
>
>=
= =
!=
优先级 6(高)
优先级 7(低)
例 c>a+b //c>(a+b)
a>b!=c //(a>b)!=c
a==b<c //a==(b<c)
a=b>c //a=(b>c)
关系表达式的值:是逻辑值“真”或“假”,用
1和 0表示
例 int a=3,b=2,c=1,d,f;
a>b
(a>b)= =c
b+c<a
d=a>b
f=a>b>c < >
//表达式值 1
//表达式值 1
//表达式值 0
//d=1
//f=0
?关系运算注意,
< >
例 若 a=0; b=0.5; x=0.3;
则 a<=x<=b的值为 0
例 5>2>7>8在 C中是允许的,
值为 0
例 int i=1,j=7,a;
a=i+(j%4!=0);
则 a= 2
例 ‘ a?>0 结果为
‘ A?>100 结果为
1
0
关系运算注意,
例 注意区分,=”与,= =”
int a=0,b=1;
if(a= =b)
printf(“a equal to b”);
else
printf(“a not equal to b”);
例 应避免对 实数 作相等或不等的判断
如 1.0/3.0*3.0==1.0 结果为
可改写为,fabs(1.0/3.0*3.0-1.0)<1e-6
0
在数学中经常遇到下面的条件:比如:已知 a>=50 且 a<=100,
再比如,已知 a < - 50 或 b < 50 。
在 C语言中如何表示上述运算呢?
这就是我们下面要讲的逻辑运算。
a b !a !b a&&b a||b
真
假
真
假
假 假
真
真
– 逻辑运算符和表达式
? 逻辑运算符
– 种类,! (逻辑非),&&(逻辑与), || (逻辑或)
– 逻辑运算真值表
?C语言中,运算量, 0表示, 假,,
非 0表示, 真,,
运算结果, 0表示, 假,,
1表示, 真,,
< >
真
假
假
假
假
假
真
真
假
假
真
真
真
假
真
真
! (2)
&& (11)
|| (12)
高
低
例 a<=x && x<=b
a>b&&x>y
a==b||x==y
!a||a>b
?优先级,
?结合方向,
!,从右向左
&&,从左向右
||,从左向右
< >
// (a<=x) && (x<=b)
//(a>b)&&(x>y)
//(a==b)||(x==y)
//(!a)||(a>b)
! (2)
&& (11)
|| (12)
高
低
?优先级,
?结合方向,
!,从右向左
&&,从左向右
||,从左向右
例 a=4;b=5;
!a
a&&b
a||b
!a||b
4&&0||2
5>3&&2||8<4-!0
?c?&&?d?
< >
值为 1
值为 0
值为 1
值为 1
值为 1
值为 1
//(5>3)&&2||(8<(4-(!0))) 值为 1
! (2)
&& (11)
|| (12)
高
低
?优先级,
?结合方向,
!,从右向左
&&,从左向右
||,从左向右
?短路特性,逻辑表达式求解时,并非所有的逻辑运算
符都被执行,只是在必须执行下一个逻辑运算符才能
求出表达式的解时,才执行该运算符
< >
例 a&&b&&c //只在 a为真时,才判别 b的值 ;
只在 a,b都为真时,才判别 c的值
例 a||b||c //只在 a为假时,才判别 b的值;
只在 a,b都为假时,才判别 c的值
例 a=1;b=2;c=3;d=4;m=1;n=1;
(m=a>b)&&(n=c>d)
//结果 m=0,n=1
思考或问答题,作业,P85 4.5, 4,8,4,9 P104 5,3
1、预处理命令在什么时候执行?作用是什么?
2、使用函数 putchar(ch), getchar( )的预处理命令是什么?
3、使用数学函数 sqrt()的预处理命令是什么?
4、在格式输出函数 printf(,格式控制串”,输出列表 )中,,格
式控制串, 包括什么内容?
5、在格式输入函数 scanf(“格式控制串”,地址列表 )中, 格式控制
串, 包括什么内容?
6、程序设计的四步曲是什么?
7、关系运算符 <, <=,>,>=,= =,!= 的优先级、结合方向是如
何规定的?运算结果是什么?
8、逻辑运算符 !, &&, || 的优先级、结合方向、得值如何规定的
实验五 输入与输出实现 P169 (写报告 )
本次课的主要内容是,
1、字符数据的输入输出,putchar(ch) getchar( )
2、格式输入输出,printf( 格式控制,输出列表)
scanf(格式控制,地址列表 )
注意格式符的使用,输入函数用变量的地址。
3、顺序结构程序的设计,
四步曲 ( 定义变量、输入变量值、处理数据、输出变量值)
4、关系运算符及关系表达式,
1)注意优先级。( <, <=,>,>=)( = =,!=)
2) 运算结果是 0 或 1 。
5、逻辑运算符及逻辑仪表达式,
1)注意优先级、结合方向。 ! && ||
2)运算对象如果非零得值 1,否则得值 0
3)运算结果是 0 或 1。
4)注意运算短路情况。
第五章 选择结构程序设计 主要内容
1、数据输入输出的概念及在 C中的实现
2、字符数据的输入输出
3、格式输入输出
4、顺序程序设计举例
5、关系运算符和关系表达式
6、逻辑运算符和逻辑表达式
第
四
章
第
五
章
§ 4.3 数据输入输出的概念及
在 C语言中的实现
1、输入输出的概念
从计算机向外部输出设备( 如显示器、
打印机、磁盘等 )输出数据称为, 输出, ;
从输入设备( 键盘、磁盘等 )向计算机
输入数据称为, 输入, 。
2,C语言通过什么方式实现输入输出的?
c语言 输入输出操作是由函数来实现的。
在 C语言中标准函数库中提供一批, 标准输入
输出函数,,例如
printf函数 (输 出 函数)
scanf函数 (输 入 函数)
putchar函数 (输 出 函数)
getchar函数等 (输 入 函数)
3,在 c语言中使用库函数有什么条件?
在使用 C语言标准 (I/O) 库函数时,要用
文件包含预编译命令,
#include<stdio.h> 或 #include,stdio.h”
使用 printf,scanf函数时可以省略预编译命令。
为什么使用库函数时要用
#include<stdio.h>?
因为每个库函数都有一些规则,这些规
则包含在一个文件中(比如,stdio.h)
通过预处理命令把相应的文件装在程序
的前面,一起编译,只有这样才能使用
后面的库函数。
#include<stdio.h>
main()
{
……,
}
qqqqq
qqqqq
qqqqq
qqqqq
main()
{
……,
}
stdio.c 执行预处
理命令后
1,putchar 函数(字符输出函数)
格式, putchar( c )
参数, c为字符常量、字符变量、整型常量、整型变量。
功能:把字符 变量 c的值 输出到显示器上,只能 输出一个 字
符。
§ 4.4 字符数据的输入输出
例子,/*ch3_1.c*/
#include <stdio.h> /*必须使用预编译命令 */
main()
{ int c;
char a;
c=65; a='B';
putchar(c);
putchar('\n');
putchar(a);
putchar(c+1);
}
运行结果,A
BB
格式,getchar( )
功能:从键盘读 入 一字符
2,getchar( ) ( 字符输入函数 )
例
#include <stdio.h>(不可少 )
main()
{ int c;
printf("Enter a character:");
c=getchar();
printf("%c”,c);
}
运行结果,
Enter a character:A?
A
?格式输出函数
格式,printf(,格式控制串”,输出列表 )
功能:按指定格式向显示器输出数据
?输出列表:要输出的数据(可以没有,多个时
以“,”分隔)
?格式控制串:包含两种信息
?格式说明,%[修饰符 ]格式字符,用于指
定输出格式
?普通字符或转义序列:原样输出
例如,printf(“a=%d b= %d\n”,a,b);
输出,a=3 b=4
§ 4.5 格式输入与输出
普通字符 普通字符
转义字符 格式字符 格式说明
1、输出函数
d,i
x,X
o
u
c
s
e,E
f
g,G
%%
格式字符,
十六进制无符号整数
不带符号十进制整数
十进制整数
指数形式浮点小数
单一字符
字符串
八进制无符号整数
小数形式浮点小数
e和 f中较短一种
百分号本身
int a=567;printf (,%d”,a);
int a=255;printf(“%x”,a);
int a=65;printf(“%o”,a);
int a=567;printf(“%u”,a);
char a=65;printf(“%c”,a);
printf(“%s”,“ABC”);
float a=567.789;printf(“%e”,a);
float a=567.789;printf(“%f”,a);
float a=567.789;printf(“%g”,a);
printf(“%%”);
567
ff
101
567
A
ABC
5.677890e+002
567.789000
567.789
%
?说明
?格式字符要用小写
?格式字符与输出项个数应相同,按先后顺序一一对应
?输出转换,格式字符与输出项类型不一致,自动按指定格式输
出
例 int a=3,b=4;
printf(“%d %d\n”,a,b);
printf(“a=%d,b=%d\n”,a,b);
输出结果, 3 4
a=3,b=4
?附加格式说明符(修饰符)
.n 对实数,指定小数点后位数 (四舍五入 ) 对字符串,指定实际输出位数
修饰符 功 能
m 输出数据域宽,数据长度 <m,左补空格 ;否则按实际输出
输出数据在域内左对齐(缺省右对齐 ) -
指定在有符号数 的正数前显示正号 (+) +
输出数值时指定左面不使用的空位置自动填 0 0
在八进制和十六进制数前显示前导 0,0x #
在 d,o,x,u前,指定输出精度为 long型
在 e,f,g前,指定输出精度为 double型 l
如 %ld,%lo等
运行结果,1234,1234
运行结果,a
例 m.n
例 int a=1234;
printf(“%8d,%2d\n”,a,a);
例
float f=123.456;
printf(“%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);
运行结果,
123.456000,123.456000,123.5,123.46,1.23e+002
例
char ch=?a?; printf(“%3c\n”,ch);
例 static char a[]=“Hello,world!”
printf(“%s\n%15s\n%10.5s\n%2.5s\n%.3s\n”,a,a,a,a,a);
运行结果,Hello,world!
Hello,world!
Hello
Hello
Hel
例 int a=1234;
float f=123.456;
static char c[]=“Hello,world!”;
printf(“%8d,%-8d\n”,a,a);
printf(“%10.2f,%-10.1f\n”,f,f);
printf(“%10.5s,%-10.3s\n”,c,c);
运行结果,1234,1234
123.46,123.5
Hello,Hel
例
例 int a=1234;
float f=123.456;
printf(“%08d\n”,a);
printf(“%010.2f\n”,f);
printf(“%0+8d\n”,a);
printf(“%0+10.2f\n”,f);
例 0, +
例 int a=123;
printf(“%o,%#o,%X,%#X\n”,a,a,a,a);
例 #
例 long a=65536;
printf(“%8ld,%d\n”,a,a);
例 l 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00
//00001234
//0000123.46
//000+1234
//000+123.56
//173,0173,7B,0X7B
---65536,0
2,数据输入
?格式输入函数
格式, scanf(“格式控制串,,地址列表)
功能:按指定格式从键盘读入数据,存入地址表指定的
存储单元中,并按回车键结束
?地址表:变量的地址,常用取地址运算符 &
?格式字符,d,i,o,x,u,c,s,f,e
例 scanf(“%d”,&a);
输入,10 ?
则 a=10
例 scanf(“%x”,&a);
输入,11 ?
则 a=17
?附加格式说明符(修饰符)
l
修饰符 功 能
h
m
*
用于 d,o,x前,指定输入为 short型整数
用于 d,o,x前,指定输入为 long型整数
用于 e,f前,指定输入为 double型实数
指定输入数据宽度,遇空格或不可转换字符则结束
抑制符,指定输入项读入后不赋给变量
例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);
输入 19991015 ?
则 1999?yy,10 ?mm,15 ?dd
例 scanf(“%3d%*4d%f”,&k,&f);
输入 12345678765.43?
则 123?k,8765.43?f
例 scanf(“%2d %*3d %2d”,&a,&b);
输入 12 345 67?
则 12?a,67?b
例 scanf(“%3c%2c”,&c1,c2);
输入 abcde ?
则‘ a??c1,?d? ?c2
?输入分隔符的指定
?一般以空格,TAB或回车键作为分隔符
?其它字符做分隔符:格式串中两个格式符间字符
例 scanf(“%d%o%x”,&a,&b,&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
输入 123 123 123?
输出 a=123,b=83,c=291
例 scanf(“%d:%d:%d”,&h,&m,&s);
输入 12:30:45?
则 12 ?h,30 ?m,45 ?s
例 scanf(“%d,%d”,&a,&b)
输入 3,4 ?
则 3?a,4 b
?说明,
?用,%c”格式符时,空格和转义字符作为有
效字符输入
如 scanf(“%c%c%c”,&c1,&c2,&c3);
若输入 a b c?
则 a?c1,?c2,b ?c3
?输入数据时,遇以下情况认为该数据结束,
?遇空格,TAB,或回车
?遇宽度结束
?遇非法输入
如 scanf(“%d%c%f”,&a,&b,&c);
若输入 1234a123o.26 ?
则 1234 ?a,?a? ?b,123 ?c
§ 4.6顺序结构 程序设计举例
#include <math.h>
#include <stdio.h>
main()
{ float a,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
printf("area=%7.2f\n",area);
}
例 输入三角形边长,求面积
输入,3,4,6 ?
输出,a= 3.00,b= 4.00,c= 6.00 s= 6.50
area= 5.33
文件包含预处理命令
变量定义
输入数据
输出数据
程序设计四步曲,
1、变量声明;
2、输入变量值 ;
3、处理数据(用变量表示);
4、输出变量值(结果)。
例 从键盘输入大写字母,用小写字母输出。
#include "stdio.h"
main()
{ char c1,c2;
c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
输入,A ?
输出,A,65
a,97
#include <stdio.h>
#include <math.h>
main()
{ float a,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&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("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
}
输入,a=1,b=3,c=2 ?
输出,x1=-1.00
x2=-2.00
第五章 选择结构程序设计
在讲算法表示的时候,给出了流程图的三种基本
结构:顺序结构、选择结构、循环结构。
其中 选择结构 和 循环结构 在 C语言中都有相应的
语句来实现。 选择结构 通常用 if语句来完成。
if 语句有几种格式,例如其中之一,
if (表达式) 语句 1 else 语句 2
例如,int a;
scanf(“%d”,&a) ;
if (a<0) printf(“a=%d \n”,-a);
else printf(“a=%d \n”,a);
?关系运算符和表达式
?关系运算符
?种类, <, <=, = =,>=,>,!=
?结合方向:自左向右
?优先级别,
<
<=
>
>=
= =
!=
优先级 6(高)
优先级 7(低)
例 c>a+b //c>(a+b)
a>b!=c //(a>b)!=c
a==b<c //a==(b<c)
a=b>c //a=(b>c)
关系表达式的值:是逻辑值“真”或“假”,用
1和 0表示
例 int a=3,b=2,c=1,d,f;
a>b
(a>b)= =c
b+c<a
d=a>b
f=a>b>c < >
//表达式值 1
//表达式值 1
//表达式值 0
//d=1
//f=0
?关系运算注意,
< >
例 若 a=0; b=0.5; x=0.3;
则 a<=x<=b的值为 0
例 5>2>7>8在 C中是允许的,
值为 0
例 int i=1,j=7,a;
a=i+(j%4!=0);
则 a= 2
例 ‘ a?>0 结果为
‘ A?>100 结果为
1
0
关系运算注意,
例 注意区分,=”与,= =”
int a=0,b=1;
if(a= =b)
printf(“a equal to b”);
else
printf(“a not equal to b”);
例 应避免对 实数 作相等或不等的判断
如 1.0/3.0*3.0==1.0 结果为
可改写为,fabs(1.0/3.0*3.0-1.0)<1e-6
0
在数学中经常遇到下面的条件:比如:已知 a>=50 且 a<=100,
再比如,已知 a < - 50 或 b < 50 。
在 C语言中如何表示上述运算呢?
这就是我们下面要讲的逻辑运算。
a b !a !b a&&b a||b
真
假
真
假
假 假
真
真
– 逻辑运算符和表达式
? 逻辑运算符
– 种类,! (逻辑非),&&(逻辑与), || (逻辑或)
– 逻辑运算真值表
?C语言中,运算量, 0表示, 假,,
非 0表示, 真,,
运算结果, 0表示, 假,,
1表示, 真,,
< >
真
假
假
假
假
假
真
真
假
假
真
真
真
假
真
真
! (2)
&& (11)
|| (12)
高
低
例 a<=x && x<=b
a>b&&x>y
a==b||x==y
!a||a>b
?优先级,
?结合方向,
!,从右向左
&&,从左向右
||,从左向右
< >
// (a<=x) && (x<=b)
//(a>b)&&(x>y)
//(a==b)||(x==y)
//(!a)||(a>b)
! (2)
&& (11)
|| (12)
高
低
?优先级,
?结合方向,
!,从右向左
&&,从左向右
||,从左向右
例 a=4;b=5;
!a
a&&b
a||b
!a||b
4&&0||2
5>3&&2||8<4-!0
?c?&&?d?
< >
值为 1
值为 0
值为 1
值为 1
值为 1
值为 1
//(5>3)&&2||(8<(4-(!0))) 值为 1
! (2)
&& (11)
|| (12)
高
低
?优先级,
?结合方向,
!,从右向左
&&,从左向右
||,从左向右
?短路特性,逻辑表达式求解时,并非所有的逻辑运算
符都被执行,只是在必须执行下一个逻辑运算符才能
求出表达式的解时,才执行该运算符
< >
例 a&&b&&c //只在 a为真时,才判别 b的值 ;
只在 a,b都为真时,才判别 c的值
例 a||b||c //只在 a为假时,才判别 b的值;
只在 a,b都为假时,才判别 c的值
例 a=1;b=2;c=3;d=4;m=1;n=1;
(m=a>b)&&(n=c>d)
//结果 m=0,n=1
思考或问答题,作业,P85 4.5, 4,8,4,9 P104 5,3
1、预处理命令在什么时候执行?作用是什么?
2、使用函数 putchar(ch), getchar( )的预处理命令是什么?
3、使用数学函数 sqrt()的预处理命令是什么?
4、在格式输出函数 printf(,格式控制串”,输出列表 )中,,格
式控制串, 包括什么内容?
5、在格式输入函数 scanf(“格式控制串”,地址列表 )中, 格式控制
串, 包括什么内容?
6、程序设计的四步曲是什么?
7、关系运算符 <, <=,>,>=,= =,!= 的优先级、结合方向是如
何规定的?运算结果是什么?
8、逻辑运算符 !, &&, || 的优先级、结合方向、得值如何规定的
实验五 输入与输出实现 P169 (写报告 )
本次课的主要内容是,
1、字符数据的输入输出,putchar(ch) getchar( )
2、格式输入输出,printf( 格式控制,输出列表)
scanf(格式控制,地址列表 )
注意格式符的使用,输入函数用变量的地址。
3、顺序结构程序的设计,
四步曲 ( 定义变量、输入变量值、处理数据、输出变量值)
4、关系运算符及关系表达式,
1)注意优先级。( <, <=,>,>=)( = =,!=)
2) 运算结果是 0 或 1 。
5、逻辑运算符及逻辑仪表达式,
1)注意优先级、结合方向。 ! && ||
2)运算对象如果非零得值 1,否则得值 0
3)运算结果是 0 或 1。
4)注意运算短路情况。