C程序设计讲义届.docx
《C程序设计讲义届.docx》由会员分享,可在线阅读,更多相关《C程序设计讲义届.docx(100页珍藏版)》请在冰豆网上搜索。
![C程序设计讲义届.docx](https://file1.bdocx.com/fileroot1/2023-6/20/520b0d9c-cdea-4c8a-9f8c-a22113efd372/520b0d9c-cdea-4c8a-9f8c-a22113efd3721.gif)
C程序设计讲义届
C程序设计
引入:
冯·诺依曼原理
文件存储位置:
磁盘、文件夹
1、关于C语言
功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好、有高级语言的优点、有低级语言的特点。
可以编写系统软件、应用软件。
2、面向过程的程序设计语言。
3、以编程为主线,要求能读程序和编程。
4、本课程内容:
1)程序设计和C语言;
2)算法;
3)顺序程序设计;
4)选择结构程序设计;
5)循环结构程序设计;
6)数组;
7)函数;
8)指针;
9)建立数据类型;
10)文件输入输出;
11)错误分析。
第一章程序设计和C语言
1.1计算机程序
计算机最主要的特点:
存储程序和程序控制
每个操作都根据人们事先指定的指令进行。
程序:
一组计算机能识别和执行的指令。
1.2什么是计算机语言
人机交流的语言。
1、机器语言
0和1组成的指令,称为机器指令。
机器指令的集全称为机器语言。
难学、难写、难记、难检查、难修改
执行效率高,可移植性差。
2、符号语言(汇编语言)
英文字母和数字表示指令,如ADD,A,B
由汇编程序转换为机器指令。
可移植性差。
前两种语言称为低级语言。
3、高级语言
第一个高级语言:
FORTRAN语言。
语句和指令用英文单词表示,运算符用数学式子表示,输出为英文和数字。
不依赖机器,可移植性好。
源程序:
高级语言编写的程序。
目标程序:
源程序通过编译程序转换成的机器指令程序。
三个发展阶段:
(1)非结构化语言。
(2)结构化语言,如C:
顺序、分支、循环结构。
(3)面向对象的语言。
处理大规模的问题。
C++,Java等。
BCPL、B、C语言。
1989:
公布第一个C语言标准,C89;
C99:
C语言特点:
(1)语言简洁、紧凑,使用方便灵活。
只有37个关键字,主要用小写字母表示。
(2)运算符丰富。
共有34种运算符。
+-*/^
<=,<>
(3)数据类型丰富。
整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型、复数浮点类型、超长整型、布尔类型等。
(4)具有结构化控制语句:
if…else,while,do…while,switch,for语句。
(5)语法限制不太严格,程序设计自由度大。
(6)允许直接访问物理地址,可直接对硬件操作。
(7)程序可移植性好。
(8)目标代码质量高,程序执行效率高。
1.4最简单的C语言程序
核心:
阅读程序,编写程序。
1.4.1最简单的C语言程序举例
例1.1屏幕显示一行信息。
#include
intmain()
{
printf(“ThisisaCProgram!
\n”);
return0;
}
操作步骤:
1、安装C++;
2、打开程序;
3、文件/新建,在“文件”选项卡选“C++sourceFile”,选择文件存放位置(不要使用默认文件夹),输入文件名,确定;
4、编辑程序;
5、组建/编译;
6、组建/组建;
7、组建/运行。
编程,原样显示“我叫李灵慧!
”
#include
intmain()
{
printf(“我叫李灵慧!
\n”);
return0;
}
standard
rand()
#include
intmain()
{
printf("*****************************\n\n");
printf("Verygood!
\n\n");
printf("*****************************\n\n");
return0;
}
作业:
编程:
显示字符串”我是奉新技工班的学生!
”
程序分析:
#include编译预处理指令
stdio.h标准输入输出函数的头文件
#include提供输入输出函数的声明和宏的定义、全局量的定义等。
intmain()int整型main()主函数
执行主函数后得到一个函数值,“return0”,主函数返回0值,每个程序必须有一个main()函数,以{}为分隔符。
printf():
输出函数,””原样输出。
\n换行符,可以连用多个
每个语句以;结束
注释:
1)块式注释:
以/*开始,以*/结束,可以包含多行,也可以单独一行。
2)单行注释
//可以在程序右侧,也可以单独占一行,以//开始,以换行符结束,一行写不下可以写多行。
#include
intmain()
{
inta,b,sum;
a=123;
b=456;
sum=a+b;
printf(“sumis%d\n”,sum);
return0;
}
简单编辑练习:
1、求两个整数的差。
2、求两个整数的积。
3、从键盘输入两个整数,求他们的平均值。
ave
4、求两整数的较小值。
5、求三个整数的最大值。
6、根据输入的身高(cm)和体重(kg)数值判断体型:
如果身高-体重>100,显示“瘦”,如身高-体重<80,显示“胖”,否则显示“标准”。
#include
intmain()
{
intsg,tz,sub;
scanf("%d,%d",&sg,&tz);
sub=sg-tz;
if(sub>100)
printf("瘦!
\n");
else
if(sub<80)printf("胖!
\n");
else
printf("标准!
\n");
return0;
}
1参考答案:
1)
#include
intmain()
{
inta,b;
intc;
scanf("%d,%d",&a,&b);
c=(a+b)/2.0;
printf("平均值是:
%f\n",c);
return0;
}
2)
#include
intmain()
{
floata,b;
floatc;
scanf("%f,%f",&a,&b);
c=(a+b)/2.0;
printf("平均值是:
%f\n",c);
return0;
}
求三个数的较大值.
#include
intmain()
{
intmax(intx,inty,intz);
inta,b,c,d;
scanf("%d,%d,%d",&a,&b,&c);
d=max(a,b,c);
printf("max=%d\n",d);
return0;
}
intmax(intx,inty,intz)
{
intu,v;
if(x>y)v=x;
else
v=y;
if(v>z)u=v;
else
u=z;
return(u);
}
简单程序1.2分析:
第4行:
声明,定义a,b,sum为整型变量
第5、6行:
赋值语句
第7行:
求和
第8行:
sumis%d\n,输出格式字符串,%d指定输出格式,d表示十进制整数,第二个参数“sum”的值取代%d,\n换行符。
例:
1.3
#include
intmain()
//主程序
{
intmax(intx,inty);
inta,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max=%d\n”,c);
return0;
}
//子函数
intmax(intx,inty)
{
intz;
if(x>y)z=x;
elsez=y;
return(z);
}
程序分析:
两个函数
(1)主函数main
(2)被调用函数max(子函数),取x、y中较值赋给变量z,其返回值通过函数名max返回主程序调用处。
scanf:
输入函数
&:
地址符,&a指定量a的地址
练习:
求两个数中的最小值。
#include
intmain()
//主程序
{
intmin(intx,inty);
inta,b,c;
scanf(“%d,%d”,&a,&b);
c=min(a,b);
printf(“min=%d\n”,c);
return0;
}
//子函数
intmin(intx,inty)
{
intz;
if(xelsez=y;
return(z);
}
练习:
从键盘输入三个整数,求最大数并输出。
#include
intmain()
{
intmax(intx,inty,intz);
inta,b,c,d;
scanf("%d,%d,%d",&a,&b,&c);
d=max(a,b,c);
printf("max=%d\n",d);
return0;
}
intmax(intx,inty,intz)
{
intu,v;
if(x>y)v=x;
elsev=y;
if(v>z)u=v;
elseu=z;
return(u);
作业:
从键盘输入三个整数,求最小的数并输出。
我国例:
求三个整数中最大的数并显示.
#include
intmain()
//主函数
{
intmax(intx,inty,intz);
inta,b,c,d;
scanf("%d,%d,%d",&a,&b,&c);
d=max(a,b,c);
printf("最大数是:
%d\n",d);
return0;
}
//子函数
intmax(intx,inty,intz)
{
intm,n;
if(x>y)m=x;
elsem=y;
if(m>z)n=m;
elsen=z;
return(n);
练习及讲解:
1、求两个数的商。
float%f
#include
intmain()
{
floata,b,c;
scanf(“%f,%f”,&a,&b);
c=a/b;
printf(“c=%f\n”,c);
return0;
}
2、讲述作业:
求三个数中最小值并输出。
#include
intmain()
{
intmin(intx,inty,intz);
inta,b,c,d;
scanf("%d,%d,%d",&a,&b,&c);
d=min(a,b,c);
printf("min=%d\n",d);
return0;
}
intmin(intx,inty,intz)
{
intu,v;
if(xelsev=y;
if(velseu=z;
return(u);
}
3.10上机要求:
1、显示字符串,课本15页第5题编程。
(有空行)
2、求两个数中的最大值和最小值。
3、求两数的和、差、积、商、平均值。
%f、float
4、根据输入身高和体重值判断体型:
d>120,显示“瘦”;d<70,显示“胖”,其它显示“标准”。
if…else嵌套。
5、从键盘上输入三个整数,判断最大数和最小数。
1.4.2C语言程序的结构
(1)一个程序由一个或多个源程序文件组成。
一个源程序文件有一个或多个函数。
1)预处理指令。
如#include,#include,
预处理得到的结果与程序其他部分一起组成一个完整的,可以用来编译的最后的源程序,再由编译程序对源程序进行编译,得到目标程序。
2)全局声明
全局变量:
在函数外面声明的变量。
局部变量:
在函数中声明的变量。
3)函数定义
如main(),max()
(2)函数是C程序的主要组成部分
函数是C程序的基本单位,C编程就是编写函数,函数分为库函数和自定义函数。
(3)一个函数包括两个部分
1)函数首部
函数的第1行,包括函数名,函数类型,函数属性,函数参数(形式参数)名,参数类型。
例:
intmax(intx,inty)
函数名后面必须跟一对圆括号,括号内写参数名及类型,无参数可写void或为空括号。
2)函数体。
{}中的部分。
声明部分:
变量声明,inta,b,c;
对调用函数声明:
intmax(intx,inty);
执行部分:
由若干语句组成。
空函数:
无声明和执行部分,如:
voiddump()
(4)程序总是从main()函数开始执行;
(5)程序中对计算机的操作是由函数中C语句完成的;
(6)在各个数据声明和语句最后必须有一个分号;
(7)C语言本身不提供输入输出语句,由函数完成输入和输出;
(8)程序应当包含注释.
1.5运行C程序的步骤与方法
(1)上机输入和编辑源程序.
生成源程序文件:
.c
注意保存位置
(2)对源程序进行编译
先用C编译系统提供的”预处理器”对程序中的预处理指令进行编译预处理,再与程序其他部分一起,组成一个完整的,可用来正式编译的源程序,并进行编译,得到目标程序,.obj。
(3)进行连接处理
一个程序可能包括若干个源程序文件,编译时各源程序文件得到相应的目标文件,将这些目标模块连接装配起来,再与函数据库连接成一个整体,生成一个计算机可执行的目标程序称为可执行程序。
.exe
(4)运行可执行程序,得到结果。
f.c→f.obj→f.exe
编译:
连接、运行C程序要有编译系统,现在很多使用集成环境的(IDE)。
VisualC++6.0可编译C程序。
练习:
输入一个任意数,显示它的绝对值。
思考1:
输入一个长方体的边长,求体积。
思考2、输入两个数,将他们的值互换。
思考3:
根据三根小棍的长度判断能否构成一个三角形.(CX4)
方法一:
#include
intmain()
{
inta,b,c,d;
printf("输入a,b,c的值(整数):
\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a>b)
;
else
{
d=a;
a=b;
b=d;
}
if(a>c)
;
else
{
d=a;
a=c;
c=d;
}
if(a<(b+c))
printf("可以构成三角形!
\n");
else
printf("不能构成三角形!
\n");
return0;
}
方法二:
(CX5)
#include
intmain()
{
inta,b,c,d;
printf("输入a,b,c的值(整数):
\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a<(b+c))
{
if(b<(a+c))
{
if(c<(a+b))
printf("可以构成三角形!
\n");
else
printf("不能构成三角形!
\n");
}
else
printf("不能构成三角形!
!
\n");
}
else
printf("不能构成三角形!
!
\n");
return0;
}
练习:
对两个变量交换数据。
#include
intmain()
{
printf(“输入两个整数a,b的值:
\n”);
inta,b,c;
scanf(“%d,%d”,&a,&b);
c=b;
b=a;
a=c;
printf(“a=%d,b=%d\n”,a,b);
return0;
}
如果输入a,b的值是6,5,则显示的结果是什么?
a=5,b=6
1.6程序设计的任务
程序设计:
从确定任务到得到结果、写出文档的全过程。
(1)问题分析
建立模型。
(2)设计算法
设计解题方法和具体步骤。
(3)编辑写程序
用高级语言写源程序。
(4)编辑、编译、连接
得到可执行程序。
(5)运行程序、分析结果
调试:
通过上机发现和排除程序中的故障。
测试:
设计多组数据,检查程序的运行情况,尽量发现漏洞,并修改程序,使之适应各种情况。
(6)编写程序文档
包括:
程序名称、功能、运行环境、程序装入和启动、需要输入的数据,使用注意事项等。
软件:
计算机程序和程序文档的总称。
#include
intmain()
{
inta,b;
printf("a=,b=\n");
scanf("%d,%d",&a,&b);
a=b;
b=a;
printf("a=%d,b=%d",a,b);
return0;
}
练习:
从键盘输入两个变量x,y的值(可以是小数),进行变量值的互换。
本部分编程练习:
1、输入两个变量的值,将它们的值互换并显示。
2、从键盘上输入任意一个数(可以是小数),显示其绝对值。
3、输入三个边长,求长方体的体积。
4、已知三条线段的长度,判断它们能否构成三角形。
方法一:
先找出最大长度,判断是否小于另两条线段的和。
方法二:
条件的嵌套,连续判断三次两边之和大于第三边。
思考:
从键盘输入a,b,c的值,解一元二次方程ax2+bx+c=0,显示它的解。
sqrt
#include
从键盘输入a,b,c的值,解一元二次方程ax2+bx+c=0,显示它的解。
#include
#include
intmain()
{
floata,b,c,d,x1,x2;
scanf("%f,%f,%f",&a,&b,&c);
d=b*b-4*a*c;
if(d>0)
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
if(d==0)
{
x1=(-1*b)/(2*a);
printf("x1=x2=%f\n",x1);
}
else
printf("无解!
\n");
}
return0;
编程练习:
根据用户的用电量计算电费:
如果月用电量不多于400度,每度0.6元,如果多于400少于800度,每度0.7元,如果高于800度,每度0.9元。
#include
intmain()
{
floata,b;
scanf("%f",&a);
if(a<=400)
{
b=a*0.6;
printf("b=%f\n",b);
}
else
{
if(a<=800)
{
b=400*0.6+(a-400)*0.7;
printf("b=%f\n",b);
}
else
{
b=520.0+(a-800)*0.9;
printf("b=%f\n",);
}
}
return0;
}
练习:
1、求两个数中最小数;
2、从键盘输入两个数,求它们的商;
3、编程,在屏幕上显示一个图形(星号构成,形状为三角形。
4、根据身高和体重判断体型:
身高-体重>130时显示“体型瘦,加强营养;如果身高-体重<60则显示“体型胖,注意控制饮食!
”.
思考:
编程序,从键盘输入一个整数,判断它能否同时被3和5整除,显示结果.
x%3==0
第二章算法—程序的灵魂
1)数据结构
2)算法
程序设计员应具备的知识:
卡尔·马克思
1)算法;
2)数据结构;X1,X2……Xn
3)程序设计方法;
4)语言工具
2.1什么是算法
算法分类:
1)数值运算算法;
2)非数值运算算法。
第二章算法----程序的灵魂
一个程序主要包括两方面信息:
(1)对数据的描述:
数据的类型和组织形式,即数据的结构.
(2)对操作的描述:
要求计算机进行操作的步骤,即算法.
算法+数据结构=程序
程序设计员应具备的知识:
1)算法;
2)数据结构;
3)程序设计方法;
4)语言工具.
循环结构:
求1+2+3+……+100的结果。
#include
intmain()
{
ints=0;//s是累加器
inti=1;
while(i<=100)
{
s=s+i;
i=i+1;
}
printf("s=%d\n",s);
return0;
}
判断平年和闰年:
#include
intmain()
{
intyear,leap=0;
printf(“enteryear:
\n”);
scanf(“%d”,&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap==1)
printf(“%disaleapyear!
\n”);
else
printf(“%disnotaleapyear!
\n”);
return0;
}
2.2简单的算法举例
例2.1求1*2*3*4*5的值.
方法一:
直接计算;
方法二:
利用算法计算,设p为被乘数,i为乘数.
S1:
1p;
S2:
2i;
S3:
p*ip;
S4:
i+1i;
S5:
i不大于5返回s3,否则结束,输出p的值.
相关例题:
求5+10+15+20+…+1000的值。
例2.2有50个学生,输出80分以上学生学号和成绩。
学号:
ni,成绩:
gi。
例2.3判定2000-2500年中每年是否为闰年,输出结果。
#include
intmain()
{
intyear=2000,leap;
while(year<=2500)
{
if(year%4==0)
if(year%100==0)
if(year%400==0)
leap=1;
else
leap=0;
else
leap=1;
else
leap=0;
if(leap==1)
printf("%d是闰年!
",year);
else
printf("%d是平年!
",year);
year++;
}
return0;
}
思考:
如果税收标准为:
收入3500元/月以下的不交税,3500-5000交1%,如果在5000-10000的交5%,大于10000的交10%。
#include
intmain()
{
intgz;
floatss;
printf