第四章 最简单的 C程序设计
? § 4.1 C语句概述
? 一、C程序结构
? ┌ 1 ┌ 预编译命令
? │ 2 │ 函数 1
? C程序 ┤ 若干源程序, ──┤ 函数 2 ┌ 函数名
? │, │, ──┤ 说明部分
? │, │, └ 执行部分
? └ n └ 函数 n (语句 )
§ 4.2,C语句
? 1.控制语句 有关选择、循环、转向、返回
? 2.函数调用 printf(...)
? 3.表达式语句 表达式;
? 4.空语句 ;什么也不做
? 5.复合语句 {语句 1.......语句 n}
§ 4.3 程序的三种基本结构
? 顺序结构
A
B
? 循环结构
P
A
T
F
A
P
F
T
? 选择结构
A B
PT F
格式 赋值表达式 ;
即 变量 =表达式 ; 或 变量 <复合赋值号 > 表达式 ;
操作 计算表达式的值,将该值赋予变量。
例 a=r*r*3.1415926;
注 ▲ 赋值语句与赋值表达式的不同概念
例 if((a=b)>0) t=a;
其中 a=b是表达式而不是语句
上句相当于
a=b;
if(a>0) t=a;
可见使用了赋值语句能使程序得到简化。
§ 4.4 赋值语句
§ 4.5 数据输出
一般每个程序都要用到数据的输入输出。
数据输入:通过外设将数据输入内存。
数据输出:将内存的数据通过外设输出。
C语言的输入输出通过调用函数实现,这些输入输出函
数一般存于 stdio.h和 io.h(TURBO C)库文件。使用输入输出函
数要用预译命令指出连接的库文件,程序编译连接时将其与
用户程序相连。
4.5.1 putchar 函数(字符输出函数)
格式 putchar(C);
其中 C:一个实参,可以是字符变量、整型变量、整型常量
及整型表达式
操作 输出 C值对应的 ASCII码,仅输出一个字符
注 ▲ 使用该函数将库函数 stdio.h要预编译命令说明
格式 #include "stdio.h"
或 #include <stdio.h>
例 #include <stdio.h>
main()
{
char a,b,c;
a='B';b='O';c='Y';
putchar(a);putchar(b);putchar(c);
}
输出结果 BOY
例 putchar('\n'); 输出换行
putchar('\101'); putchar('A'); putchar(65);
输出 AAA
4.5.2 printf函数
其中 ▲格式控制是由双引号括起来的字符串,包括两种信息
(1) 格式说明 %格式字符
说明输出的数据按制定的类型格式输出
如 %d %10.2f
(2)普通字符 照原样输出字符 或 转义符
如 abcde \n
▲ 输出表列是输出的数据,可以是常数、变量和表达式,
每个输出数据之间用逗号分隔。
如 123.45,x,2*a+b
操作 将输出表列中的数据按格式控制说明类型在显示屏输出
格式 printf(格式控制,输出表列 );
例 printf("a=%d b=%d\n",a,b);
格式控制 输出表列
其中 %d 格式说明 ; a= b= 普通字符 ; \n 转义符
a,b 输出表列 两个变量
设 a=3,b=4 则输出 a=3 b=4
掌握使用 printf()函数关键在于理解 格式控制,格式控制中有
格式字符 和 附加格式字符
1,d 格式字符 用来输出十进制整数
%d 按整数的实际长度输出
%md m为指定输出长度。如数据位数小于 m,则数据左端补上
空格,数据位数大于 m,数据按实际长度输出
%ld l 表示输出长整型数据
例 #include <stdio.h>
main()
{int a=123,b=12345;
printf("%d,%d\n",a,b);
printf("%4d,%4d\n",a,b);
}
输出 123,12345
123,12345
例 #include <stdio.h>
main()
{long c;
c=123456789;
printf("%ld\n",c);
}
输出 123456789
注 整型的数据必须使用 %d
长整型的数据必须使用 %ld
两者不能互换使用
6,s 格式字符 用来输出字符串
%s 按字符串的实际长度输出
%ms 输出字符串占 m列
字符串长度小于 m,则字符串向右靠,左补空格
字符串长度大于 m,则字符串按实际长度输出
%-ms 字符串长度小于 m,则字符串向左靠,右补空格
%m.ns 输出字符串占 m列,只取字符串中左端 n个字符,字符串向
右 靠,左 补空格
%-m.ns 输出字符串占 m列,只取字符串中左端 n个字符,字符串向
左 靠,右 补空格
例 #include <stdio.h>
main()
{ printf("%3s,%7.2s,%.4s,%-5.3s\n","CHINA","CHINA",
"CHINA","CHINA");
}
输出 CHINA,CH,CHIN,CHI
注 %.ns表示 %m.ns中 m=n。例中 %.4等价 %4.4s
7,f 格式字符 用来输出实数的基本型 (包括单、双精度 )
%f 整数部分全部输出,小数部分 6位
%m.nf 输出数据共占 m位,其中 n位小数。如数值长度 <m,则 左 端补空格
%-m.nf 输出数据共占 m位,其中 n位小数。如数值长度 <m,则 右 端 补空格
例 #include <stdio.h>
main() {
float f=123.456;
printf("%f,%10f,%10.2f,%-10.2f,%.2f\n",f,f,f,f,f);
}
输出 123.456001,123.456001,123.46,123.46,123.46
%f %10f %10.2 %-10.2 %.2
注 一般格式说明与输出表列的个数、类型必须一一对应
若格式符的个数 >输出对象的个数,多余格式符按零值输出
若格式符的个数 <输出对象的个数,多余输出对象无用
§ 4.6 数据输入
4.6.1 getchar()函数
格式 getchar()
操作 执行该函数时,等待键盘输入一个字符。即从键盘接受一
个字符
注 无参函数,括弧必须保留。
例 3.8 #include <stdio.h>
main()
{char c;
c=getchar();
putchar(c);
}
执行到 c=getchar();
等待键盘键入一个字符
输入 a <Enter>
输出 a
注 输完数据必须按 <Enter>
4.6.2 scanf()函数
格式 scanf(格式控制,地址表列 )
其中 1.格式控制是用双引号括起来的字符串,字符串由格式说明
和普通字符构成
(1) 格式说明由 %和格式字符构成,说明输入数据的格式
格式字符见 page43表 3.3、表 3.4
(2)普通字符作为输入数据之间的分隔符。如,空格
2.地址列表是输入数据存入内存的地址,可以是变量的地
址、字符串的首地址,每个内存地址之间用逗号分隔。
怎么知道变量的地址?利用地址运算符求出变量的地址
格式 &变量名
例 int a,b ; 则 &a,&b 表示取 a,b变量的地址
操作 将键盘键入的数据按指定类型格式存入指定内存存储单元
例 #include <stdio.h>
main()
{int a,b,c;
scanf("%d%d%d",&a,&b,&c);
/* 格式控制,地址表列 */
printf("%d,%d,%d\n",a,b,c);
}
运行 输入 3 4 5 <Enter>
输出 3,4,5
注 1.键入数据之间可用空格,<Tab>或 <Enter>分隔,即多各空格分
格。上例输入可改为
3 4 5<enter>
<Tab> <Tab>
一个 <Tab>跳 8个空格
或 3<Enter>
4<Enter>
5<Enter>
注 2.在格式说明中使用了普通字符,则要用普通字符作为数据之间
的分隔符。如上例改用输入函数 scanf()为
scanf("%d,%d,%d",&a,&b,&c);
输入则为 3,4,5<Enter>
3,在 %c格式输入时忽略空格分隔符,即不需要分隔符,而空格作
为字符输入。
例 scanf("%c%c%c",&a,&b,&c);
printf("%c,%c,%c\n",a,b,c);
若输入 a b c 则输出 a,,b
改为 scanf("%c %c %c",&a,&b,&c);
printf("%c,%c,%c\n",a,b,c);
若输入 a b c 则输出 a,b,c
§ 4.7 举例
[例 1] 从键盘输入一个大写字母,要求改用小写字母输出

分析:如何将一个大写字母转换成小写字母?
一般表达式:
c2 = c1 - ?A? + ?a? (或, c2=c1+32 )
[例 2] 输入三角形的三边长,求三角形面积。
分析:( 1)
( 2)求平方根函数,sqrt() 在 math.h中说明
(3)其它一些函数,如,cos(),pow(),exp(),
fabs(),log(),log10()
c)b ) ( sa ) ( ss ( sa r ea ????
#include <stdio.h>
#include <math.h>
main()
{
float a,b,c,s,area;
scanf(“%f,%f,%f”,&a,&b,&c);
s = (a+b+c)/2.0;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf(“%f\n”,area);
}
[例 3] 求二元一次方程
分析
已知 b*b-4ac>0 则实根为
x1,2= -b± b -4ac2a
2
算法
1.输入已知值 a,b,c
2.代入公式求 x1,x2
3.输出 x1,x2
的实根,已知 b*b-4ac>0。ax bx c 02 ? ? ?
#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=%-7.2f\nx2=%-7.2f\n",x1,x2);
}
以上三个例子都是顺序结构
求解一个问题往往需要判断后才能作出决定采取相应措
施,这就需要用选择结构实现,是下一章所关心的事。