第四章 顺序设计.docx
《第四章 顺序设计.docx》由会员分享,可在线阅读,更多相关《第四章 顺序设计.docx(15页珍藏版)》请在冰豆网上搜索。
第四章顺序设计
第四章最简单的C程序设计——顺序程序设计
4.1C语句概述
和其他高级语言一样,C语言的语句用来向计算机系统发出操作命令。
一个语句经编译后产生若干条机器指令。
声明部分的内容不应称为语句,如:
inta;不是一个C语句,它不产生机器操作,而只是对变量的定义。
执行部分即由语句组成。
C语句可以分为以下5类:
控制语句,完成一定的控制功能。
函数调用语句。
表达式语句。
空语句。
可以用{}把一些语句括起来成为复合语句,又称分程序。
4.2赋值语句
C语言中的赋值号“=”是一个运算符,在其他大多数语言中赋值号不是运算符。
关于赋值表达式与赋值语句的概念,其他多数高级语言没有“赋值表达式”这一概念。
作为赋值表达式可以包括在其他表达式之中,例如:
if((a=b)>0)t=a;
4.3数据输入输出的概念及其在C语言中的实现
C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。
在C标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数。
在使用C语言库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中。
在头文件中包含了与用到的函数有关的信息。
例如使用标准输入输出库函数时,要用到“stdio.h”文件。
文件后缀“h”是head的缩写,#include命令都是放在程序的开头,因此这类文件被称为“头文件”。
在调用标准输入输出库函数时,文件开头应有以下预编译命令:
#include或
#include"stdio.h"
考虑到printf和scanf函数使用频繁,系统允许在使用这两个函数时可不加#include命令。
4.4字符数据的输入输出
4.4.1putchar函数(字符输出函数)
putchar函数的作用是向终端输出一个字符。
例如:
Line10Col3InsertIndentTabFillUnindent*C:
C4-1.C
#include
main()
{chara,b;intc;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c);putchar('\n');
putchar(a);putchar('\n');
putchar(b);putchar('\n');
putchar(c);putchar('\n');
putchar('\101');putchar('\'');putchar('\015');
}
运行结果:
BOY
B
O
Y
A'
4.4.2getchar函数(字符输入函数)
此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。
没有参数,其一般形式为
getchar()
Line6Col3InsertIndentTabFillUnindentC:
C4-2.C
#include"stdio.h"
main()
{charc,d;
c=getchar();putchar(c);
putchar(getchar());putchar('\n');
}
运行结果:
ab
ab
xy
xy
4.5格式输入与输出
4.5.1printf函数(格式输出函数)
1.printf函数的一般格式为
printf(格式控制,输出表列)
如:
C:
C4-51.C
main()
{inta;floatb;charc;
a=56;b=56.7;c='H';
printf("a=%d,b=%f,c=%c\n\n",a,b,c);
}
运行结果为:
a=56,b=56.700001,c=H
括弧内包括两部分:
(1)“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息:
①格式说明,由“%”和格式字符组成,如%d,%f等。
它的作用是将输出的数据转换为指定的格式输出。
格式说明总是由“%”字符开始的。
②普通字符,即需要原样输出的字符。
例如printf函数中双引号内的逗号、空格、换行符等。
(2)“输出表列”是需要输出的一些数据。
可以是表达式。
2.格式字符
对不同类型的数据用不同的格式字符。
常用的有以下几种格式字符:
(格1)d式符。
用来输出十进制整数。
有以下几种用法:
①%d,按整型数据的实际长度输出。
②%md,m为指定的输出字段的宽度。
如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
如若a=123,b=12345
printf(“%4d,%4d”,a,b);
则输出结果为:
□123,12345
③%ld或%mld,输出长整型数据。
例如:
C:
C4-52.C
main()
{inta,b;longc;
a=123;b=12345;c=135790;
printf("a=%4d,b=%4d,\nc=%ld,c=%4ld,c=%8ld\n\n",a,b,c,c,c);
}
运行结果为:
a=123,b=12345,
c=135790,c=135790,c=135790
(2)o格式符,以八进制数形式输出整数。
(3)x格式符,以十六进制数形式输出整数。
(4)u格式符,用来输出unsigned型数据,即无符号数,以十进制数形式输出整数。
例如:
C:
C4-3.C
main()
{unsigneda=65535;intb=-2,c=-1;
printf("a=%d,%o,%x,%u\n",a,a,a,a);
printf("b=%d,%o,%x,%u\n",b,b,b,b);
printf("c=%d,%o,%x,%u\n\n",c,c,c,c);
}
运行结果为:
a=-1,177777,ffff,65535
b=-2,177776,fffe,65534
c=-1,177777,ffff,65535
-1的原码:
-1的反码:
-1的补码:
(5)c格式符,用来输出一个字符。
(6)s格式符,用来输出一个字符串。
例如:
C:
C4-5.C
main()
{charc='a';inti=97;
printf("%c,%d\n",c,c);
printf("%c,%d\n",i,i);
printf("%3s,%7.2s,%.4s,%-5.3s\n","CHINA","CHINA","CHINA","CHINA");
}
运行结果为:
a,97
a,97
CHINA,CH,CHIN,CHI
(7)f格式符,用来输出实数(包括单、双精度),以小数形式输出。
(8)e格式符,以指数形式输出实数。
(9)g格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。
例如:
C:
C4-6.C
main()
{floatx,y,f=123.456;doublea,b;
x=111111.111;y=222222.222;
a=1111111111111.111111111;
b=2222222222222.222222222;
printf("x+y=%f\n",x+y);
printf("a+b=%f\n",a+b);
printf("f=%f%10f%10.2f%.2f%-10.2f\n\n",f,f,f,f,f);
}
运行结果为:
x+y=333333.328125
a+b=3333333333333.333010
f=123.456001123.456001123.46123.46123.46
又例如:
C:
C4-8.C
main()
{floatf=123.456;
printf("f=%e%10e%10.2e%.2e%-10.2e\n",f,f,f,f,f);
printf("f=%f%e%g\n\n",f,f,f);
}
运行结果为:
f=1.23456e+021.23456e+021.2e+021.2e+021.2e+02
f=123.4560011.23456e+02123.456
再例如:
C:
C4-100.C
main()
{intk;
k=8567;
printf("|%-06d|\n",k);
}
运行结果为:
|8567|
C:
C4-101.C
main()
{longa=0xabcdef;
doubleb=1.0E40;
printf("\n%5.2e,%-6x",b,a);
}
运行结果为:
1.0e+40,cdef
C:
C4-111.C
main()
{intn1=683;
longn2=0xabcdef;
doublen3=1.0E40;
printf("\n\n|n1=%d|,|%o|,|%x|",n1,n1,n1);
printf("\n|n3=%5.2e|,|%5.3E|,|%8.2E|",n3,n3,n3);
printf("\n|n2=%d|,|%10d|,|%8.2d|",n2,n2,n2);
printf("\n|n2=%ld|,|%10ld|,|%8.2ld|",n2,n2,n2);
printf("\n|n2=%-6x|,|%6X|,|%x|,|%10X|",n2,n2,n2,n2);
printf("\n|n2=%-6lx|,|%6lX|,|%lx|,|%10lX|",n2,n2,n2,n2);
}
运行结果为:
|n1=683|,|1253|,|2ab|
|n3=1.0e+40|,|1.00E+40|,|1.0E+40|
|n2=-12817|,|171|,|-12817|
|n2=11259375|,|11259375|,|11259375|
|n2=cdef|,|AB|,|cdef|,|AB|
|n2=abcdef|,|ABCDEF|,|abcdef|,|ABCDEF|
C:
C4-30.C
main()
{inta=32767,b=-32767,c=-32768,d=-0,e=-1,f=-2;
printf("\n\n|a=%d||%x|",a,a);
printf("\n|b=%d||%x|",b,b);
printf("\n|c=%d||%x|",c,c);
printf("\n|d=%d||%x|",d,d);
printf("\n|e=%d||%x|",e,e);
printf("\n|f=%d||%x|",f,f);
}
运行结果为:
|a=32767||7fff|
|b=-32767||8001|
|c=-32768||8000|
|d=0||0|
|e=-1||ffff|
|f=-2||fffe|
a=32767(0111111111111111)原7fff
a
b=-32767(1111111111111111)原(1000000000000000)反
(1111111111111111)原(1111111111111110)反
b
补
c=-32768
(1000000000000000)原(1111111111111111)反
c
d
e=-1(1000000000000001)原(1111111111111110)反
f=-2(1000000000000010)原(1111111111111101)反
f
4.5.2scanf函数(格式输入函数)
1.一般格式
scanf(格式控制,地址表列)
“格式控制”的含义同printf函数;“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
2.格式说明
例如:
C:
C4-9.C
main()
{inta;floatb;charc;
printf("inputa(i),b(f),c(c):
");
scanf("%d,%f,%c",&a,&b,&c);
printf("a=%d,b=%f,c=%c\n\n",a,b,c);
}
运行结果为:
inputa(i),b(f),c(c):
8,123.456,m
a=8,b=123.456001,c=m
C:
C4-91.C
main()
{charc,d;
printf("inputc(c)d(c):
");
scanf("%c%c",&c,&d);
printf("c=%cd=%c\n\n",c,d);
}
运行结果为:
inputc(c)d(c):
mn
c=md=n
3.使用scanf函数时应注意的问题
(1)scanf函数中的“格式控制”后面应当是变量地址,而不应是变量名。
(2)如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符。
(3)在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入。
C4-93.C
main()
{charc1,c2,c3;
printf("inputc1(c)c2(c)c3(c):
");
scanf("%c%c%c",&c1,&c2,&c3);
printf("c1=%cc2=%cc3=%c\n\n",c1,c2,c3);
}
运行结果为:
inputc1(c)c2(c)c3(c):
abc
c1=ac2=c3=b
inputc1(c)c2(c)c3(c):
x/n
c1=xc2=/c3=n
4.6顺序结构程序设计举例
例:
C:
C4-10.C
#include
main()
{floata,b,c,s,area;
printf("a,b,c(f)");
scanf("%f,%f,%f",&a,&b,&c);
s=(a+b+c)/2;
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\n",area);
}
运行结果为:
a,b,c(f)3,4,6
a=3.00,b=4.00,c=6.00,s=6.50
area=5.33a,b,c(f)3,4,6
例:
C:
C4-11.C
#include
main()
{
charc1,c2;
printf("inputachar:
");c1=getchar();
printf("%c,%d\n",c1,c1);
c2=c1+32;
printf("%c,%d\n",c2,c2);
}
运行结果为:
inputachar:
A
A,65
a,97