C语言设计

第15章


执行 scanf 语句,则退出 TC 屏幕进入用户屏幕等待用户输
入。用户输入 7  8  9 后按下回车键,此时,系统又将返回 TC 屏幕。在 scanf 语句的格式
串中由于没有非格式字符在“%d%d%d”之间作输入时的间隔,因此在输入时要用一个以上的
谭浩强      C 语言程序设计               2001 年 5 月 1 日
空格或回车键作为每两个输入数之间的间隔。如:
   7 8 9

7
  8
  9
2. 格式字符串
格式字符串的一般形式为:
%[*][输入数据宽度][长度]类型
其中有方括号[]的项为任选项。各项的意义如下:
1) 类型:表示输入数据的类型,其格式符和意义如下表所示。
格式
d
o
x
u
f 或 e
c
s
字符意义
输入十进制整数
输入八进制整数
输入十六进制整数
输入无符号十进制整数
输入实型数(用小数形式或指数形式)
输入单个字符
输入字符串
2) “*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
    如:
 scanf("%d %*d %d",&a,&b);
当输入为:1   2   3 时,把 1 赋予 a,2 被跳过,3 赋予 b。
3) 宽度:用十进制整数指定输入的宽度(即字符数)。
例如:
    scanf("%5d",&a);
输入:12345678
只把 12345 赋予变量 a,其余部分被截去。
又如:
        scanf("%4d%4d",&a,&b);
输入:12345678
将把 1234 赋予 a,而把 5678 赋予 b。
4) 长度:长度格式符为 l 和 h,l 表示输入长整型数据(如%ld) 和双精度浮点数(如%lf)。h
表示输入短整型数据。
使用 scanf 函数还必须注意以下几点:
1) scanf 函数中没有精度控制,如:scanf("%5.2f",&a);是非法的。不能企图用此语
句输入小数为 2 位的实数。
2) scanf 中要求给出变量地址,如给出变量名则会出错。如 scanf("%d",a);是非法
的,应改为 scnaf("%d",&a);才是合法的。
3) 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则
可用空格,TAB 或回车作间隔。C 编译在碰到空格,TAB,回车或非法数据(如对“%d”
输入“12A”时,A 即为非法数据)时即认为该数据结束。
4) 在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有
效字符。
例如:
谭浩强      C 语言程序设计               2001 年 5 月 1 日
              scanf("%c%c%c",&a,&b,&c);
输入为:
                  d   e   f
则把"d"赋予 a, " " 赋予 b,"e"赋予 c。
只有当输入为:
                  def
时,才能把"d"赋于 a,"e"赋予 b,"f"赋予 c。
如果在格式控制中加入空格作为间隔,
如:
scanf ("%c %c %c",&a,&b,&c);
则输入时各数据之间可加空格。
【例 4.8】
main(){
  char a,b;
  printf("input character a,b ");
  scanf("%c%c",&a,&b);
  printf("%c%c ",a,b);
}
由于 scanf 函数"%c%c"中没有空格,输入 M  N,结果输出只有 M。而输入改为 MN 时则
可输出 MN 两字符。
【例 4.9】
main(){
  char a,b;
  printf("input character a,b ");
  scanf("%c %c",&a,&b);
  printf(" %c%c ",a,b);
 }
本例表示 scanf 格式控制串"%c %c"之间有空格时,输入的数据之间可以有空格间隔。
5) 如果格式控制串中有非格式字符则输入时也要输入该非格式字符。
       例如:
scanf("%d,%d,%d",&a,&b,&c);
   其中用非格式符“ , ”作间隔符,故输入时应为:
  5,6,7
又如:
    scanf("a=%d,b=%d,c=%d",&a,&b,&c);
则输入应为:
          a=5,b=6,c=7
6) 如输入的数据与输出的类型不一致时,虽然编译能够通过,但结果将不正确。
【例 4.10】
main(){
  int a;
  printf("input a number ");
  scanf("%d",&a);
  printf("%ld",a);
}
谭浩强      C 语言程序设计               2001 年 5 月 1 日
    由于输入数据类型为整型,而输出语句的格式串中说明为长整型,因此输出结果和输入
数据不符。如改动程序如下:
【例 4.11】
main(){
    long a;
    printf("input a long integer ");
    scanf("%ld",&a);
    printf("%ld",a);
}
运行结果为:
    input a long integer
    1234567890
1234567890
当输入数据改为长整型后,输入输出数据相等。
【例 4.12】
main(){
  char a,b,c;
  printf("input character a,b,c ");
  scanf("%c %c %c",&a,&b,&c);
  printf("%d,%d,%d %c,%c,%c ",a,b,c,a-32,b-32,c-32);
 }
    输入三个小写字母,输出其 ASCII 码和对应的大写字母。
【例 4.13】
main(){
 int a;
 long b;
 float f;
 double d;
 char c;
printf(" int:%d long:%d float:%d double:%d char:%d ",sizeof(a),sizeof(b
),sizeof(f),sizeof(d),sizeof(c));
}
    输出各种数据类型的字节长度。
谭浩强      C 语言程序设计               2001 年 5 月 1 日
4.6 顺序结构程序设计举例
【例 4.14】输入三角形的三边长,求三角形面积。
已知三角形的三边长 a,b,c,则该三角形的面积公式为:
area =
?
s(s ? a)(s ? b)(s c
) ,
其中 s = (a+b+c)/2
源程序如下:
#include
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 ”,a,b,c,s);
 printf(“area=%7.2f ”,area);
}
【例 4.15】求ax2+bx+c=0 方程的根,a,b,c由键盘输入,设b2-4ac>0。
求根公式为:
= ? +
?
= ?
b
x
-240a
x?bb2 -2131
b b24ac
2
=?bba
p
2
a
=
a
=
q
2 ?4
b ac
2
2a
q =
x
b2? 4ac
2a
a

a

则x1=p+q
x2=p-q
源程序如下:
#include
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;
谭浩强      C 语言程序设计               2001 年 5 月 1 日
  printf(“ x1=%5.2f x2=%5.2f ”,x1,x2);
}
谭浩强      C 语言程序设计               2001 年 5 月 1 日
5 分支结构程序
5.1 关系运算符和表达式
在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。
小说推荐
返回首页返回目录