第3章 最简单的C程序设计.docx
《第3章 最简单的C程序设计.docx》由会员分享,可在线阅读,更多相关《第3章 最简单的C程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
第3章最简单的C程序设计
第3章顺序程序设计
教学时数:
9
教学目的:
了解基本类型及其常量的表示法;掌握变量的定义及初始化方法;3.掌握运算符与表达式的概念。
了解C语句的概念及种类;掌握C语言常用的输入输出方式
教学方法和手段:
启发式、讨论式、引导式、训练式教学,在多媒体教室采用课件教学,在机房进行上机辅导。
教学过程:
(1)回顾旧课。
(2)讲授新课。
(2)课后练习。
教学内容:
3.1顺序程序设计举例
例3.1有人用温度计测量出用华氏法表示的温度(如F,今要求把它转换为以摄氏法表示的温度(如C)。
#include
intmain()
{
floatf,c;
f=64.0;
c=(5.0/9)*(f-32);
printf("f=%f\nc=%f\n",f,c);
return0;
}
例3.2计算存款利息。
有1000元,想存一年。
有三种方法可选:
(1)活期,年利率为r1
(2)一年期定期,年利率为r2
(3)存两次半年定期,年利率为r3
请分别计算出一年后按三种方法所得到的本息和。
#include
intmain()
{floatp0=1000,r1=0.0036,r2=0.0225,
r3=0.0198,p1,p2,p3;
p1=p0*(1+r1);
p2=p0*(1+r2);
p3=p0*(1+r3/2)*(1+r3/2);printf(”%f\n%f\n%f\n”,p1,p2,p3);
return0;
}
3.2数据的表现形式及其运算
3.2.1常量和变量
1.常量:
在程序运行过程中,其值不能被改变的量
整型常量:
如1000,12345,0,-345
实型常量:
十进制小数形式:
如0.34-56.790.0
指数形式:
如12.34e3(代表12.34103)
字符常量:
如’?
’
转义字符:
如’\n’
字符串常量:
如”boy”
符号常量:
#definePI3.1416
2.变量:
在程序运行期间,变量的值是可以改变的,变量必须先定义,后使用,定义变量时指定该变量的名字和类型。
变量名和变量值是两个不同的概念,变量名实际上是以一个名字代表的一个存储地址,从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
3.常变量:
constinta=3;
4.标识符:
一个对象的名字
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
合法的标识符:
如sum,average,_total,Class,day,BASIC,li_ling
不合法的标识符:
M.D.John,¥123,#33,3D64,a>b
3.2.2数据类型
所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式
不同的类型分配不同的长度和存储形式
3.2.2数据类型
C语言允许使用的数据类型:
基本类型、枚举类型、空类型、派生类型、指针类型、数组类型、结构体类型、共用体类型、函数类型
3.2.3整型数据
1.整型数据的分类
最基本的整型类型:
基本整型(int型):
占2个或4个字节
短整型(shortint):
VC++6.0中占2个字节
长整型(longint):
VC++6.0中占4个字节
双长整型(longlongint):
C99新增的
2.整型变量的符号属性
整型变量的值的范围包括负数到正数,可以将变量定义为“无符号”类型。
扩充的整形类型:
有符号基本整型[signed]int;
无符号基本整型unsignedint;
有符号短整型[signed]short[int];
无符号短整型unsignedshort[int];
有符号长整型[signed]long[int];
无符号长整型unsignedlong[int]
有符号双长整型[signed]longlong[int];
无符号双长整型unsignedlonglong[int]
3.2.4字符型数据
字符是按其代码(整数)形式存储的,C99把字符型数据作为整数类型的一种,字符型数据在使用上有自己的特点。
1.字符与字符代码
大多数系统采用ASCII字符集
字母:
A~Z,a~z
数字:
0~9
专门符号:
29个:
!
”#&‘()*等
空格符:
空格、水平制表符、换行等
不能显示的字符:
空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回车(以‘\r’表示)等。
字符’1’和整数1是不同的概念:
字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节,整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节。
2.字符变量
用类型符char定义字符变量
charc=’?
’;
系统把“?
”的ASCII代码63赋给变量c
printf(”%d%c\n”,c,c);
输出结果是:
63?
3.2.5浮点型数据
浮点型数据是用来表示具有小数点的实数,float型(单精度浮点型),编译系统为float型变量分配4个字节,数值以规范化的二进制数指数形式存放。
浮点型数据是用来表示具有小数点的实数。
float型(单精度浮点型)
double型(双精度浮点型)
编译系统为double型变量分配8个字节
15位有效数字
longdouble(长双精度)型
3.2.6怎样确定常量的类型
字符常量:
由单撇号括起来的单个字符或转义字符。
整型常量:
不带小数点的数值,系统根据数值的大小确定int型还是long型等。
浮点型常量:
凡以小数形式或指数形式出现的实数。
C编译系统把浮点型常量都按双精度处理,分配8个字节。
3.2.7运算符和表达式
1.基本的算术运算符:
+:
正号运算符(单目运算符)
-:
负号运算符(单目运算符)
*:
乘法运算符
/:
除法运算符
%:
求余运算符
+:
加法运算符
-:
减法运算符
说明:
两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分,如果除数或被除数中有一个为负值,舍入方向不固定。
例如,-5/3,有的系统中得到的结果为-1,在有的系统中则得到结果为-2,VC++采取“向零取整”的方法,如5/3=1,-5/3=-1,取整后向零靠拢,%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。
如8%3,结果为2。
2.自增、自减运算符:
作用是使变量的值1或减1
++i,--i:
在使用i之前,先使i的值加(减)1
i++,i--:
在使用i之后,使i的值加(减)1
3.算术表达式和运算符的优先级与结合性:
用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式,运算对象包括常量、变量、函数等,C语言规定了运算符的优先级和结合性
4.不同类型数据间的混合运算:
(1)+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。
系统将float型数据都先转换为double型,然后进行运算
(2)如果int型与float或double型数据进行运算,先把int型和float型数据转换为double型,然后进行运算,结果是double型
(3)字符型数据与整型数据进行运算,就是把字符的ASCII代码与整型数据进行运算
例3.3给定一个大写字母,要求用小写字母输出。
#include
intmain()
{
charc1,c2;
c1=’A’;
c2=c1+32;
printf("%c\n",c2);
printf(”%d\n”,c2);
return0;
}
5.强制类型转换运算符
强制类型转换运算符的一般形式为
(类型名)(表达式)
(double)a(将a转换成double类型)
(int)(x+y)(将x+y的值转换成int型)
(float)(5%3)(将5%3的值转换成float型)
6.C运算符
(1)算术运算符(+-*/%++--)
(2)关系运算符(><==>=<=!
=)
(3)逻辑运算符(!
&&||)
(4)位运算符(<<>>~|∧&)
(5)赋值运算符(=及其扩展赋值运算符)
(6)条件运算符(?
:
)
(7)逗号运算符(,)
(8)指针运算符(*和&)
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符((类型))
(11)成员运算符(.->)
(12)下标运算符([])
(13)其他(如函数调用运算符())
3.3C语句
3.3.1C语句的作用和分类
1.控制语句:
控制语句完成一定的控制功能。
C语言只有9条控制语句,又可细分为三种:
(1)if()…else…
(2)switch()…
(3)do…while()
(4)for()…,
(5)while()…,
(6)break,
(7)continue
(8)goto
(9)return
2.函数调用语句
函数调用语句由一次函数调用加一个分号(语句结束标志)构成。
例如:
printf("ThisisaCProgram.");
3.表达式语句
表达式语句由表达式后加一个分号构成。
表达式能构成语句是C语言的一大特色。
最典型的表达式语句是在赋值表达式后加一个分号构成的赋值语句。
例如,“num=5”是一个赋值表达式,而“num=5;”却是一个赋值语句。
4.空语句
空语句仅由一个分号构成。
显然,空语句什么操作也不执行。
5.复合语句
复合语句由大括号括起来的一组(也可以是一条)语句构成。
注意:
1)在{}内说明的变量只在{}内有效;
2){}后不加分号;
3){}中最后一个语句中最后的分号不能忽略不写。
3.3.2最基本的语句----赋值语句
在C程序中,最常用的语句是:
赋值语句、输入输出语句、其中最基本的是赋值语句。
例3.4给出三角形的三边长,求三角形面积。
解题思路:
假设给定的三个边符合构成三角形的条件
关键是找到求三角形面积的公式
#include
#include
intmain()
{doublea,b,c,s,area;
a=3.67;
b=5.43;
c=6.21;
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%f\tb=%f\t%f\n",a,b,c);
printf("area=%f\n",area);
return0;
}
(2008.9)填6
设变量a和b已正确定义并赋初值。
请写出与a-=a+b等价的赋值表达式【6】。
(2009.9)15
若有定义语句:
intx=10;,则表达式x-=x+x的值为()
A)-20
B)-10
C)0
D)10
变量赋值中的类型转化
如果赋值运算符左右两边数据类型不同,系统将自动的进行类型装换,即把赋值号右边的类型转换成左边的类型。
例:
main()
{inta,b=97,m;floatx,y=3.66;charc1=‘A’,c2;
a=y;m=c1;c2=b;x=b;
printf(“x=%f,a=%d,m=%d,c2=%c\n”,x,a,m,c2);
}
输出结果:
x=97.00000,a=3,m=65,c2=a
3.4数据的输入输出
3.4.1输入输出举例
解题思路:
首先要知道求方程式的根的方法。
#include
#include
intmain()
{doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
return0;
}
3.4.2有关数据输入输出的概念
几乎每一个C程序都包含输入输出,输入输出是程序中最基本的操作之一。
(1)所谓输入输出是以计算机主机为主体而言的,从计算机向输出设备(如显示器、打印机等)输出数据称为输出,从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入。
(2)C语言本身不提供输入输出语句,输入和输出操作是由C标准函数库中的函数来实现的,printf和scanf不是C语言的关键字,而只是库函数的名字,putchar、getchar、puts、gets。
(3)在使用输入输出函数时,要在程序文件的开头用预编译指令
#include或#include″stdio.h″
3.4.3用printf函数输出数据
在C程序中用来实现输出和输入的,主要是printf函数和scanf函数,这两个函数是格式输入输出函数,用这两个函数时,必须指定格式
1.printf函数的一般格式
printf(格式控制,输出表列)
例如:
printf(”i=%d,c=%c\n”,i,c);
2.常用格式字符
d格式符。
用来输出一个有符号的十进制整数,可以在格式声明中指定输出数据的域宽
printf(”%5d%5d\n”,12,-345);
%d输出int型数据,%ld输出long型数据
main()
{intnum1=123;
longnum2=123456;
/*用3种不同格式,输出int型数据num1的值*/
printf("num1=%d,num1=%5d,num1=%-5d,
num1=%2d\n",num1,num1,num1,num1);
/*用3种不同格式,输出long型数据num2的值*/
printf("num2=%ld,num2=%8ld,num2=%5ld\n",
num2,num2,num2);
printf("num1=%ld\n",num1);
}
c格式符。
用来输出一个字符
main()
{charc='A';
inti=65;
printf("c=%c,%5c,%d\n",c,c,c);
printf("i=%d,%c",i,i);
}
程序运行结果如下:
c=A,□□□□A,65
i=65,A
s格式符。
用来输出一个字符串
(1)%s
(2)%ms:
输出的字符串占m列,若实际长度大于m,则突破限制,将字符全部输出,若小于m,则左补空格。
(3)%-ms:
右补空格。
(4)%m.ns:
输出占m列,但只取字符串左端n个字符,不足左补空格。
(5)%-m.ns:
右补空格。
main()
{printf("%s,%5s,%-10s",
"Internet","Internet","Internet");
printf("%10.5s,%-10.5s,%4.5s\n",
"Internet","Internet","Internet");
}
程序运行结果如下:
Internet,Internet,Internet□□,□□□□□Inter,Inter□□□□□,Inter
注意:
系统输出字符和字符串时,不输出单引号和双引号。
f格式符。
用来输出实数,以小数形式输出
①不指定数据宽度和小数位数,用%f
例3.6用%f输出实数,只能得到6位小数。
doublea=1.0;
printf(”%f\n”,a/3);
②指定数据宽度和小数位数。
用%m.nf
printf("%20.15f\n",1/3);
printf("%.0f\n”,10000/3.0);
floata;
a=10000/3.0;
printf("%f\n",a);
③输出的数据向左对齐,用%-m.nf
e格式符。
指定以指数形式输出实数
%e,VC++给出小数位数为6位
指数部分占5列
小数点前必须有而且只有1位非零数字
printf(”%e”,123.456);
输出:
1.234560e+002
%m.ne
printf(”%13.2e”,123.456);
输出:
1.23e+002(前面有4个空格)
(2009.3)15
程序段:
intx=12;doubley=3.141593;printf("%d%8.6f",x,y);的输出结果是()
A)123.141593
B)123.141593
C)12,3.141593
D)123.1415930
(2009.3)填7
若变量x,y已定义为int类型且x的值为99,y的值为9,请将输出语句printf(【7】,x/y);
补充完整,使其输出的计算结果形式为:
x/y=11。
(2008.9)填7
若整型变量a和b中的值分别为7和9,
要求按以下格式输出a和b的值:
a=7
b=9
请完成输入语句:
printf(“【7】”,a,b);
(2009.9)16有以下程序段
有以下程序
#include
main()
{inta=1,b=0;
printf(“%d,”,b=a+b);
printf(“%d\n”,a=2*b);
}
程序运行后的输出结果是()
A)0,0B)1,0
C)3,2D)1,2
(2008.4)16有以下程序段
charch;intk;ch=‘a’;k=12;
printf(“%c,%d,”,ch,ch);
printf(“k=%d\n”,k);
已知a的ASCII十进制代码是97,则执行上述程序段后输出结果是
A)因变量类型与格式描述符的类型不匹配,输出无定值;
B)输出项与格式描述符个数不符,输出零值或不定值;
C)a,97,12k=12
D)a,97,k=12
(2010.3)22
有以下程序,其中k的初值为八进制数
#include
main()
{intk=011;
printf("%d\n",k++);
}
程序运行后的输出结果是
(A)12(B)11(C)10(D)9
3.4.4用scanf函数输入数据
1.scanf函数的一般形式
scanf(格式控制,地址表列)
2.scanf函数中的格式声明
与printf函数中的格式声明相似,以%开始,以一个格式字符结束,中间可以插入附加的字符,scanf("a=%f,b=%f,c=%f",&a,&b,&c);
3.使用scanf函数时应注意的问题
scanf(”%f%f%f”,a,b,c);错
scanf(”%f%f%f”,&a,&b,&c);对
对于
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
132↙错
a=1,b=3,c=2↙对
a=1b=3c=2↙错
对于scanf(”%c%c%c”,&c1,&c2,&c3);
abc↙对
abc↙错
(2007.9)填6
执行以下程序时输入1234567,则输出结果是________
#include
main()
{
inta=1,b;
scanf(“%2d%2d”,&a,&b);
printf(“%dٮ%d\n”,a,b);}
}
(2008.9)19有以下程序段
若变量已正确定义为int型,要通过语句scanf(“%d,%d,%d”,&a,&b,&c);给a赋值1,给b赋值2,给c赋值3,以下输入形式中错误的是(ㄩ代表一个空格符)()
A)ㄩㄩㄩ1,2,3<回车>
B)1ㄩ2ㄩ3<回车>
C)1,ㄩㄩㄩ2,ㄩㄩㄩ3<回车>
D)1,2,3<回车>
(2007.9)18有以下程序段
intj;floaty;charname[50];
scanf(“%2d%f%s”,&j,&y,name);
当执行上述程序,从键盘上输入555667777abc
后,y的值为_______
A)5556.0
B)566.0
C)7777.0
D)5667777.0
(2007.4)16
设变量均已正确定义,若想通过
scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);语句为变量a1和a2赋值10和20,为变量c1和c2赋字符X和Y,以下所示的输入形式中正确的是(注:
□代表空格符)
A)10□X□20□Y<回车>
B)10□X20□Y<回车>
C)10□X<回车>
20□Y<回车>
D)10X<回车>
20Y<回车>
(2009.3)23有以下程序
#include
main()
{ int a1,a2; char c1,c2;
scanf("%d%c%d%c",&a1,&c1,&a2,&c2);
printf("%d,%c,%d,%c",a1,c1,a2,c2);
}
若通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,
程序输出结果是:
12,a,34,b则正确的输入格式是(以下_代表空格,代表回车)
A)12a34bB)12_a_34_b
C)12,a,34,bD)12_a34_b
3.4.5字符数据的输入输出
1.用putchar函数输出一个字符,从计算机向显示器输出一个字符
putchar函数的一般形式为:
,putchar(c)
例3.8先后输出BOY三个字符。
解题思路:
定义3个字符变量,分别赋以初值B、O、Y,用putchar函数输出这3个字符变量的值
#include
intmain()
{
chara='B',b='O',c='Y';
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return0;
}
2.用getchar函数输入一个字符
向计算机输入一个字符
ge