C语言教案.docx
《C语言教案.docx》由会员分享,可在线阅读,更多相关《C语言教案.docx(67页珍藏版)》请在冰点文库上搜索。
C语言教案
Chap.1程序设计基本知识
1.1程序程序设计程序设计语言
程序──指人们对所要处理或求解问题的对象、处理规则或过程的描述
●计算机的每一种基本操作,都用一条指令来实现
程序是计算机用以实现其功能的一组指令序列
Ex101#include
main(){inta,b,sum;/*int整型*/
a=123;b=456;sum=a+b;
printf("sumis%d\n",sum);/*%d整型*/
}
Ex102#include
main(){inta,b,c;
scanf("%d,%d",&a,&b)
c=max(a,b);
printf("max=%d\n",c);
}
max(intx,inty)/*定义整型函数max*/
{intz;/*x,y:
形参*/
if(x>y)z=x;
elsez=y;
return(z);/*返回函数值z*/}小结:
①C程序是由函数构成的函数是C程序的基本单位
②一个函数由两部分组成
③一个C程序是从main()函数开始执行的
④C程序书写格式自由:
一行内可以写几个语句;一个语句也可以分写在几行中
⑤每个语句和数据定义的最后必须有一个分号
⑥注释/*注释部分*/
程序设计─编写编辑编译调试连接运行分析整理结果
算法─为解决某个特定问题而采取的有限的步骤
●分析问题
●建立数学模型
●确定数据结构
●设计算法
●编写编辑程序
●编译调试程序
●运行分析结果
●有穷性
●确定性
●可行性
●有零个或多个输入
●有一个或多个输出
计算机语言──人和计算机交流使用的人和计算机都能接受和理解的语言,即人用以编写程序的语言,因此又叫程序设计语言。
C语言就是一种程序设计语言。
C语言的特点
①结构化语言基本结构:
顺序结构选择结构循环结构
②语言表达能力强
③数据类型较丰富不足之处:
④语言简洁●类型转换较随便,不够安全
⑤可移植性好●没有数组界限检查
⑥生成的代码质量高●运算优先级太多
1.2C语言的词汇集
一字符集ASCII码
英文大、小写字母数字空格回车换行制表符
特殊字符:
+-*/=_,;:
!
?
()[]
{}<>&%$#'".|^~\
二标识符
1关键字(保留字)具有特定语法含义的英文单词
autobreakcasecharconstcontinue
defaultdodoubleelseenumextern
floatforgotoifintlong
registerreturnshortsignedsizeofstatic
structswitchtypedefunionunsignedvoid
volatilewhile
2预定义标识符如:
标准库函数名
3用户标识符用来表示常量、变量、类型、函数等的名字
规定:
●标识符必须以字母或下划线开头,后跟字母、数字或下划线
●标识符不能与关键字同名
●大写字母与小写字母被认为是两个不同的字符
命名:
见名知义原则
1.3常量和变量
一常量在程序的运行过程中,其值不能改变的量
1整型常量
十进制120100-100
八进制015-072
十六进制0x15-0x1fa
●long型的后缀:
l或L
●整型常数在内存中以补码的形式存储
补码
符号位0正数补码=原数(二进制)
1负数Ex求[-5]补
①写出相反数的二进制数0000000000000101
②各位求反1111111111111010
③末位加11111111111111011
【负数补码求原数】1111111111111011=[]补
①各位求反0000000000000100
②末位加10000000000000101
③化为十进制数,添加符号-5
2实型常量
小数形式
指数形式±X.XX...Xe±XXe前必有数e后必为整
3字符
单个ASCII字符转义字符
''32\n换行\b退格
'0'48'A'65'a'97\00\t水平跳格
'1'49'B'66'b'98\\\'\"
………………\ddd1-3位8进制数表示的字符
'9'57'Z'90'z'122\xhh1-2位16进制数表示的字符
4字符串
"Computer"字符串长度存储字节数字符或转义字符序列89('\0'结束符)
二变量在程序的运行过程中,其值可以改变的量1变量的命名
2先说明后引用
变量说明:
[存储类型]数据类型变量名表;
变量名[=表达式],…
Exinta=1,sum=0,i,j,k;
3变量的类型
整型
2个字节-32768~32767
int
shortint
long[int]4个字节-2147483648~2147483647
unsignedint0~65535
unsignedlong0~4294967295
实型
float4个字节7位3.4e-38~3.4e+38
double8个字节15-16位1.7e-308~1.7e+308
③字符变量
char1个字节
字符数据←→整型数据Exinti;i='a';→97
charc;c=97;→'a'
1.4运算符
1赋值运算符=变量名=表达式
Exa=5v=(a+b-c)/u
2算术运算符+-*/%优先级:
*/%→+-
Ex10/3=3结合性:
自左向右
●+=-=*=/=%=
a+=3相当于a=a+3
a%=b+3相当于a=a%(b+3)
m=20求m+=m*=m/10
3自增减运算符++--前缀:
++i先加后用
后缀:
i++先用后加
●++,--只能用于变量,不能用于常量和表达式
10++++(x+y)(-i)--等都是错误的
●结合性:
自右向左
Exi=j=5;x=++i;/*i=6x=6*/
y=j++;/*y=5j=6*/
4逗号运算符,(取第二个表达式的值)
优先级:
最低结合性:
自左向右
Exy=10;
x=(y-=5,45/y);/*x=9*/
x=y-=5,45/y;/*x=?
*/
表达式:
运算对象
运算符号
算术表达式
赋值表达式
逗号表达式
1.5表达式
●类型转换
①同类型数据运算结果类型与运算对象类型相同
不同类型数据运算先化后算
②赋值号两端类型不同,以变量为主
Ex1设a=2,b=3,x=3.5,y=2.5
(float)(a+b)/2+(int)x%(int)y
2.5+3%2(=3.5)
●赋值运算的两种值变量的值表达式的值
Ex2a=(b=10)/(c=2)a=5b=10c=25
Ex3自增减运算符++--
前缀:
++i先加后用后缀:
i++先用后加
用变量的值作为表达式的值
a=5++aa++
变量a的值①6②6
表达式的值②6①5
TC30上机的主要命令
Alt-E编辑F2存盘
Alt-F-A换名存盘Alt-F-N编辑新程序
Ctrl-F9运行Alt-F5看运行结果
F3将程序调入内存Alt-X退出
Chap.2顺序结构程序设计
赋值语句
表达式语句
复合语句
空语句
选择语句ifswitch
流程控制语句循环语句whiledo-whilefor
转移语句gotobreakcontinuereturn
2.1赋值语句表达式语句
赋值表达式后加分号即为赋值语句;表达式后加分号即为表达式语句
Ex1inti;floata=3.5;
i=1;
i=i+a;
Ex2inta,b,c,s=0,p=1;
a=b=c=10;
s+=a;p*=b;
Ex3inta=5,b=8,temp;
temp=a;a=b;b=temp;(语句作用?
)
●顺序结构
先执行A,后执行B
2.2数据的输入和输出
一数据输出
1printf()函数
形式:
printf("格式控制",参数表);
格式说明符以%开头
%c%d%o%x%u
字符整数:
十进制八进制十六进制无符号
%f%e%s
实数:
小数形式指数形式字符串
●在%与格式字符间可插入:
l长整型双精度型
m.n共m位,取小数n位
-向左对齐
②转义字符以\开头
\n\b\\\'\"\ddd\xhh\0
③普通字符原样输出
2putchar()函数
形式:
putchar(c);c─char型
在显示器上输出c的值(一个字符)
Ex201printf("a\bre\'hi\'y\\\bou\n");(分析语句的输出)
Ex202
#include"stdio.h"
main()
{inta=16;chare='A';unsignedb;
longc;floatd;
b=65535;c=123456;d=123.45;
printf("a=%d,%4d,%-6d,c=%d\n",a,a,a,c);
printf("b=%o,%x,%u,%d\n",b,b,b,b);
printf("d=%f,%10.5f\n",d,d);
printf("%c,%s,%7.3s\n",e,"China","Guilin");
}
输出结果:
a=16,16,16,c=-7616
b=177777,ffff,65535.-1
d=123.449997,123.45000
A,China,Gui
二数据输入
1scanf()函数
形式:
scanf("格式控制",地址表);
格式说明符以%开头:
%c%d%f%s
在%与格式字符间可插入:
l
普通字符原样输入
说明:
①地址:
&变量名、数组名
②用"%d"、"%f"格式输入数据时,两个数据之间可以用空格、回车符分开
③用"%c"格式输入字符时,空格、回车和转义字符都作为有效输入字符
Excharc1,c2,c3;
scanf("%c%c%c",&c1,&c2,&c3);
输入:
abc则c1='a',c2='',c3='b'
④输入数据时不能规定精度
Exscanf("%8.6f",&t);
出错,应改为%f
⑤输入数据时,遇到下列情况,认为数据已输入结束
a空格或回车
b宽度结束如"%md",则取m列
c非法输入
Exscanf("%d%c%f",&a,&b,&c);
输入:
1234a123o.26则a=1234,b='a',c=123
2getchar()函数
形式:
getchar()从键盘输入一个字符,作为函数值
2.3程序举例
Ex203设变量x=10.2,y=20.5,编程实现两个变量的值的互换
#include
main()
{doublex,y,t;
printf("Enterxandy:
\n");
scanf("%lf%lf",&x,&y);
t=x;x=y;y=t;
printf("x=%f,y=%f\n",x,y);
}
Ex204求一元二次方程ax2+bx+c=0的根
对一元二次方程ax2+bx+c=0,若b2-4ac≥0,则方程有两个实根:
#include
#include
voidmain()
{floata,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);
}
Ex205输入两个整数a和b(设a=1500,b=350),求a除以b的商和余数,编写程序并以如下形式输出结果(表示空格)。
a=1500,b=350
a/b=4,theamodb=100
#include"stdio.h"
main()
{inta,b,c,d;
scanf("%d,%d",&a,&b);
c=a/b;d=a%b;
printf("a=%5d,b=%4d\n",a,b);
printf("a/b=%3d,theamodb=%4d\n",c,d);
}
Chap.3选择结构程序设计
3.1关系表达式与逻辑表达式
关系运算符>>=<<===!
=
逻辑运算符!
&&||
!
a求反
a&&ba与b都是真吗?
a||ba或b中有真吗?
●表达式的值真1假0;运算对象非0为真0为假
●注意=与==的区别比较x=3与x==3
●比较10()!
*+<==&&||?
:
=,
[]++/-<=!
=+=
--%>-=
±>=*=
&/=
*%=
(类型名)
自右向左自右向左
Ex1a=4求d=!
a结果为0
Ex2x=1,y=1求(!
x||y--)
01(先用后减)结果为1
Ex3c为小写字母,表示成c>='a'&&c<='z'
3.2if语句
一if语句的形式
形式1:
if(e)s1;
e表达式s1语句
形式2:
if(e)s1;
elses2;
e—表达式s1、s2—语句
说明:
先计算表达式e的值,若表达式e的值为
真(非0),执行语句s1;否则执行语句s2
Ex301求给定整数的绝对值
#include
main()
{intx,y;
scanf("%d",&x);
y=x;
if(x<0)y=-x;
printf("x=%d,|x|=%d\n",x,y);
}
Ex302输入三个数,从大到小排序后输出
算法:
1定义变量,输入三个数a、b、c
2对a、b、c从大到小排序
①将a、b进行比较,大数存入a,小数存入b
②将a、c进行比较,大数存入a,小数存入c
(此时a为最大数)
③将b、c进行比较,大数存入b,小数存入c
(b比c大,从大到小排序为a、b、c)
3输出从大到小排序后数a、b、c
#include
main()
{floata,b,c,t;
复合语句:
用{}括起来
的几个语句,在语法上作为一个语句使用。
printf("Inputa,b,c:
");
scanf("%f%f%f",&a,&b,&c);
if(a
if(aif(bprintf("%5.2f%5.2f%5.2f\n",a,b,c);
}
二if语句的嵌套
在if语句中又包含一个或多个if语句,称为if语句的嵌套
Ex303编程计算分段函数:
x+1x>0
y=xx=0
x-1x<0
#include
main()
{intx,y;
scanf("%d",&x);
y=x;
if(x!
=0)
if(x>0)y=x+1;
elsey=x-1;
if(x<0)y=x-1;
else
if(x==0)y=x;
elsey=x+1;
if(x>=0)
if(x>0)y=x+1;
elsey=x;
elsey=x-1;
printf("x=%d,y=%d\n",x,y);
}
●嵌套的if语句的配对
else总是和在它前面离它最近尚未配对的那个if配对
Ex设a=4,b=3,c=2,执行下面的if语句后,c=?
if(a
if(b<0)c=0;
elsec++;
●如何改变嵌套的if语句的配对
⑴加语句括弧if(a
elsec++;
⑵用if语句的第②种形式if(a
else;
elsec++;
Ex304输入某学生的成绩,输出该学生的成绩和等级
(A级:
90-100;B级:
80-89;C级:
60-79;D级:
0-59)
#include
main()
{intx;
printf("Pleaseinputx(0<=x<=100)\n");
scanf("%d",&x);
if(x>100||x<0)printf("x=%ddataerror!
\n",x);
elseif(x>=90)printf("x=%d--A\n",x);
elseif(x>=80)printf("x=%d--B\n",x);
elseif(x>=60)printf("x=%d--C\n",x);
elseprintf("x=%d--D\n",x);
}
三条件运算符(三目运算符)
e1?
e2:
e3
e1、e2和e3是三个表达式。
若e1的值为真(非0),则表达式的值为e2,否则表达式的值为e3
Ex308charc;
c=getchar();
c=('A'<=c&&c<='Z'?
c+32:
c);
若c是英文大写字母,则转变为小写字母
3.3switch语句
形式:
switch(整型表达式)
{case常量表达式1:
语句序列1;
case常量表达式2:
语句序列2;
……
case常量表达式n:
语句序列n;
default:
语句序列(n+1);
}
Ex设x=1,a=0,b=0
switch(x)
{case0:
b++;
case1:
a++;
case2:
a++;b++;
}
Ex305用switch语句解Ex304
#include
main()
{intx;
printf("Pleaseinputx(0<=x<=100)\n");
scanf("%d",&x);
switch(x/10)
{case9:
case10:
printf("x=%d--A\n",x);
case8:
printf("x=%d--B\n",x);
case7:
case6:
printf("x=%d--C\n",x);
case5:
case4:
case3:
case2:
case1:
case0:
printf("x=%d--D\n",x);
default:
printf("x=%ddataerror!
\n",x);
}
}
Ex306求ax2+bx+c=0的解
讨论d=b2-4ac
1a=01次方程
2d=0有两个相等实根
3d>0有两个不等实根
4d<0有两个共轭复根
算法
1输入a,b,c
2if(a==0){解一元一次方程的根-c/b;
结束程序;
}
else解一元二次方程:
先计算d=b*b-4*a*c;
3if(d==0)输出两个相等的实根-b/(2*a);
elseif(d>0){x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
输出两个不相等的实根x1,x2;
}
else{根的实部rp=-b/(2*a);
根的虚部ip=sqrt(-d)/(2*a);
输出两个共轭复根;
}
N-S图:
程序:
#include
#include"math.h"
main()
{floata,b,c,d,x1,x2,rp,ip;
printf("Inputa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);
if(a==0){printf("x=%f\n",-c/b);gotoexit;}
elsed=b*b-4*a*c;
if(d==0)printf("x1=x2=%f\n",-b/(2*a));
elseif(d>0){x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else{rp=-b/(2*a);ip=sqrt(-d)/(2*a);
printf("complexroot:
\n");
printf("x1=%f+%fi\n",rp,ip);
printf("x2=%f-%fi\n",rp,ip);
}
exit:
;
}
gotoexit;无条件转向语句,exit是语句标号
exit:
;带标号的空语句
Chap.4循环结构程序设计
4.1循环的基本概念
Ex求1+2+3+4+5+6+7+8+9+10=?
s=1+2+3+4+5+6+7+8+9+10
如果求1+2+3+…+100呢?
或者求1+2+3+…+n(n为某一任意指定的数)呢?
计算机的操作是一步一步执行的,步步分解
Exs=1+2+3+…+n
分解1分解2
s=0;s=0;i=1;
s+=1;
s+=2;
……
s+=n;
变量赋初值s=0;i=1;
循环三要素循环体s+=i;i++;
循环条件i<=n
循环变量:
在循环中表示循环增量的变量i
步长语句:
在循环语句中循环变量的变化语句i++
当型先判断循环while
循环的实现方法当型后判断循环do_while
步长型循环for
解法1while语句
main()
{