第四章 最简单的 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",&ch1,&ch2,&ch3);
printf("ch1=%c,ch2=%c,ch3=%c\n",ch1,ch2,ch3);
假设输入,A□ B□ C↙,则系统将字母 'A'赋值给 ch1,空格
'□ '赋值给 ch2,字母 'B'赋值给 ch3。
C语言的格式输入输出的规定比较繁琐,在学习本书时不必花许多精力去死抠每一个细节,重点掌握最常用的一些规则即可。
通过上机编写和调试程序来逐步深入面自然地学会输入输出的应用。
提高人机交互性建议,为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用 printf()
函数输出一个提示信息,再用 scanf()函数进行数据输入。
例如,将
scanf("num1=%d,num2=%d\n",&num1,&num2);
改为:
printf("num1="); scanf("%d",&num1);
printf("num2="); scanf("%d",&num2);
考虑到 printf和 scanf函数使用频繁,系统允许在使用这两个函数时可不加
#include< stdio.h >

#include,stdio.h”
§ 4.7 举例
[例 1]从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的 ASCII码值。
分析:如何将一个小写字母转换成大写字母?
一般表达式:
(c2=c1- 32 )
#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
[例 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=%-5.2f\nx2=%-5.2f\n",x1,x2);
}
以上三个例子都是顺序结构求解一个问题往往需要判断后才能作出决定采取相应措施,这就需要用选择结构实现,是下一章所关心的事。