C语言程序设计实训指导书.docx
- 文档编号:29682603
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:92
- 大小:94.13KB
C语言程序设计实训指导书.docx
《C语言程序设计实训指导书.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实训指导书.docx(92页珍藏版)》请在冰豆网上搜索。
C语言程序设计实训指导书
C语言程序设计实训指导书
(内部使用)
主讲教师编写
前言
C语言是一种编程灵活、特色鲜明的程序设计语言,是计算机专业学生的基础课程,学好这种语言可以为后续的面向对象的语言打好坚实的基础,C语言除了学习必须的基本知识:
如概念、方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这才是学习语言的最终目的,结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计实训指导书》,以在实训过程中给学生提供帮助。
本书分为三个部分:
实训总要求、实训模块和项目拓展实例。
第一部分为实训总要求,目的是为了让学生编写规范的代码,从开始程序设计就进行规范练习,为以后工作打下良好的基础。
第二部分为实训模块,有三个:
(1)基础部分,为随堂实训,在分析案例的基础上,使学生掌握该部分内容的知识要点,并能灵活运行在实训中,为使学生目标明确,在实训开始给学生提出实训目的及要求;
(2)深化部分,为综合实训,为提高学生的学习积极性,同时为培养软件开发的合作精神,在随堂实训完成的基础上,给学生设计相对该内容综合运用的实例,组织学生进行分组讨论,把每组的讨论结果同大家分享,由学生和老师共同给出评价,该方法可以丰富学生解决问题的方法,拓宽思路;(3)课程设计,为期末的课程设计,是对整个内容的一个综合设计,可以使学生从软件开发的角度开始思考问题、解决问题,形式仍然为分组设计,各小组设定项目经理、技术经理和成员,一般为5人一组,由项目经理组织人员、进行分工和协调工作,技术经理负责开发过程中遇到的疑难问题的解决,并进行开发的全程控制。
第三部分为案例拓展实例:
学生成绩管理系统。
通过该实例从一个简单的顺序结构实例,根据内容逐步进行扩充,由小到大,由浅入深,使设计的功能越来越完善,完成了分支结构、循环结构、数组、函数、指针、结构体和文件内容的应用,最后成为一个完整的设计。
本书具有基础性、实用性和系统性,可以指导学生按照从浅入深,从低到高的训练过程,逐步提高他们的编程和动手能力。
编者
2007年10月
实训要求及说明
C语言程序设计的实训是学生重要的实习环节。
上机实训不仅要求学生掌握C语言程序设计的基本知识,更重要的是培养学生掌握程序设计开发的基本素质、思维方法和技能,为学生综合素质的培养打下坚实基础。
实训的形式为教师制定出难易适中的设计题目,学生通过分组讨论进行设计,实训重点放在程序设计开发的全过程上。
一、总要求
根据所选题目首先进行年算法分析,根据实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计=算法+数据结构”的思想,要求学生在课下完成流程图的设计,然后根据流程图写出实训代码。
二、代码书写要求
为保证开发团队的协作和后期修改能有效进行,使学生遵照统一的排版风格、注释标准、命名规则及编码诸原则进行C语言编程,特提出以下规范要求。
缩进:
1)程序块要采用缩进风格编写,缩进以4个空格(Space)键为单位,不使用"TAB键"。
2)函数体、结构体、循环体以及分支结构中的语句行都须采用缩进风格。
3)所有的if、while、for、do结构中的语句即使只有一行也须用括号括起来。
3)if、while、for、do语句单独占一行,左、右花括号也各占一行且不缩进。
例:
if(superHero==theTick)
{
printl("Spoon!
");
}
间隔:
所有的标识符都必须被空白字符包围。
例如:
inttheTick=5;
if(theTick==5)
空行:
代码段之间须以一个空行进行间隔;
空格的位置:
1)在一个关键字和左括号“(”之间。
注意:
不要在函数名和左括号之间加空格;
2)在参数列表的每个逗号“,”之后;
3)二元操作符前后。
注意:
一元操作符前后都不加空格。
例如:
inta=10;a=a+1;a++;
4)for语句的每个表达式之间。
例如:
for(inti=0;i<20;i++)…。
代码行:
1)不允许把多个短语句写在一行中,即一行只写一条语句;
2)长语句、参数、表达式(超过80个ASCII字符)应分行书写,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。
示例:
#001perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN
#002 + STAT_SIZE_PER_FRAM ;
#003act_task_table[STAT_TASK_CHECK_NUMBER + index].occupied
#004 = stat_poi[index].occupied;
命名规则:
所有的标识符只能用字母(A-Z或a-z)和数字(0-9)。
不得包含货币符号或其它非AS-CII字符。
1)变量的命名应尽可能采用有意义的名词,力求可顾名思义。
2)可以采用一个单词或多个单词的缩写作为名字,缩写单词的每个字母都要大写。
3)对于难以使用英文的情况,可以参考相关行业标准,比如使用国标。
4)采用约定俗成的习惯用法。
常见的习惯用法:
循环变量:
i、j、k、m、n
长度:
length
数量:
count
位置:
pos或position
下标或索引:
i或index
设置/获取:
set/get
大小:
size
注释:
1)为确保程序易读性,注释语句不得小于全部代码行的30%。
2)说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:
版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。
3)源文件头部应进行注释,列出:
版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。
4)函数头部应进行注释,列出:
函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。
5)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
不再有用的注释要删除。
6)注释的内容要清楚、明了,含义准确,防止注释二义性。
7)避免在注释中使用缩写,特别是非常用缩写。
8)注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
9)对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。
变量、常量、宏的注释应放在其上方相邻位置或右方。
10)数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。
对结构中的每个域的注释放在此域的右方。
11)全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
12)注释与所描述内容进行同样的缩排。
13)将注释与其上面的代码用空行隔开。
14)对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
15)对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。
三、编码原则
1)注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
2)避免使用不易理解的数字,用有意义的标识来替代。
涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。
3)去掉没必要的公共变量。
4)仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
5)明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。
6)当向公共变量传递数据时,要十分小心,防止赋予不合理的值或越界等现象发生。
7)防止局部变量与公共变量同名。
8)严禁使用未经初始化的变量。
9)对所调用函数的错误返回码要仔细、全面地处理。
10)明确函数功能,精确(而不是近似)地实现函数设计。
模块一:
基础部分
第一部分c语言的基本认识
[实训目的及要求]通过本次实训内容,使学生对C语言程序有一个简单的认识,熟悉VC++6.0的运行环境,掌握C程序的执行方法,了解程序的结构和输出函数等。
程序1:
#include“stdio.h”
main()
{
printf(“各位同学好!
很高兴和大家一起学习C语言!
\n");
}
运行结果:
各位同学好!
很高兴和大家一起学习C语言!
其中,#include“stdio.h”为一编译预处理命令,含义是文件包含,“stdio.h”是一头文件,标准输入和输出头文件,用来控制数据的输入或输出。
main是主函数的函数名,表示这是一个主函数。
每一个C源程序都必须有,且只能有一个主函数(main函数)。
printf的功能是把要输出的内容送到显示器去显示,本质上也是一个函数,是一个由系统定义的标准函数。
程序2:
#include“stdio.h”
main()
{
printf(“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n”);
printf(“*ThisisaCprogram*\n");
printf(“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n”);
}
运行结果:
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*ThisisaCprogram*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
程序3:
任给一半径,输出圆的周长.
#include
#include
main()
{
intr,l;/*定义两个整数变量r和l*/
printf("inputr:
\n");/*输出提示信息*/
scanf(“%d”,&r);/*接收数据给变量r*/
l=2*3.14*r;/*进行数学运算把面积赋值给变量s*/
printf(“circleof%dis%d\n",r,l);/*输出变量r,l的值*/
}
实训题目
1、编一个小程序实现在屏幕上输出以下内容:
*********************************
*学生成绩管理系统*
*********************************
2、根据刚才的例题编写程序,通过键盘输入一个三角形的三边长,求三角形的面积(求一个非负数算术平方根的函数为sqrt(x))。
第二部分c程序分析
[实训目的及要求]通过本次实训内容,使学生对C语言程序有一个系统的认识,并在此基础上掌握三种基本数据类型、部分运算符号和常用函数的应用,体现在自己动手编写的小程序中。
程序1:
求三个整数的和。
#include“stdio.h”/*文件包含命令*/
main()/*主函数*/
{floatf1,f2,f3,s;/*定义四个实型变量*/
printf(“inputthreefloats:
”)/*显示提示信息*/
scanf(“%f%f%f”,&f1,&f2,&f3);/*接收三个整型变量*/
s=f1+f2+f3;/*求三个变量之和,存入变量s*/
printf(“sumoff1,f2,f3is%.2f”,s);/*输出求出的和*/
}
运行结果:
inputthreefloats:
345
sumoff1,f2,f3is6.00
程序2:
把输入的大写字母转换为小写字母。
#include“stdio.h”/*文件包含命令*/
main()/*主函数*/
{charch1,ch2;/*定义两个字符型变量*/
printf(“inputanupperletter:
”)/*显示提示信息*/
scanf(“%c”,&ch1);/*接收一个大写字母*/
ch2=ch1+32;/*把大写字母转换为小写字母*/
printf(“lowerofletter%cis%c”,ch1,ch2);/*输出*/
}
运行结果:
inputanupperletter:
S
lowerofletterSiss
程序3:
求一个四位整数的各个数据位。
#include“stdio.h”/*文件包含命令*/
main()/*主函数*/
{intnum,bit1,bit2,bit3,bit4;/*定义四个实型变量*/
printf(“inputanumber:
”)/*显示提示信息*/
scanf(“%d”,&num);/*接收一个整型数据*/
bit1=num%10;/*求个位数字*/
bit2=num/10%10;/*求十位数字*/
bit3=num/100%10;/*求百位数字*/
bit4=num/1000;/*求千位数字*/
printf(“%d个位:
%d,十位:
%d,百位:
%d,千位:
%d”,num,bit1,bit2,bit3,bit4);/*输出整数和各数据位*/
}
运行结果:
inputanumber:
2345
2345个位:
5,十位:
4,百位:
3,千位:
2
程序4:
交换两个变量的值。
#include“stdio.h”
main()
{inta,b,t;
printf(“inputtwonumbers:
”)
scanf(“%d%d”,&a,&b);
printf(“a=%d,b=%d”,a,b);/*输出交换之前变量的值*/
t=a;a=b;b=t;/*交换处理*/
printf(“a=%d,b=%d”,a,b);/*输出交换之后变量的值*/
}
运行结果:
inputtwonumbers:
3456
a=34,b=56
a=56,c=34
程序5:
求一元二次方程的根。
#include“stdio.h”
#include“math.h”/*数学函数的头文件*/
main()
{
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(“x1=%5.2f;x2=%5.2f\n”,x1,x2);
}
运行结果:
a=1,b=5,c=3
x1=-0.70;x2=-4.30
实训题目
1、编程求两个实数之差,保留两位小数。
2、编程把小写字母转换为大写字母。
3、编程把一个三位数倒序输出,如输入是123,输出为321。
第三部分结构化程序设计与算法认识
(分支结构程序设计)
[实训目的及要求]通过本次实训,掌握if语句的使用和switch多分支选择结构的实现,并能熟练的进行应用。
程序1、任意输入一个年份,判断是否是闰年。
闰年的条件是符合下面条件之一:
(1)能被4整除,但不能被100整除;
(2)能被4整除,又能被400整除。
算法思路:
(1)输入年份(如:
2007);
(2)判断是否为闰年;
判断闰年的表达式:
条件一:
能被4整除:
year%4==0
不能被100整除:
year%100!
=0
组合:
(year%4==0&&year%100!
=0)
条件二:
能被4整除:
year%4==0
能被400整除:
year%400==0
组合:
(year%4==0&&year%400==0)
总条件式:
(year%4==0&&year%100!
=0)||(year%4==0&&year%400==0)
可改写为:
((year%4==0)&&(year%100!
=0))||(year%400==0)
(3)若是,输出“2007是闰年”信息;若不是,则输出“2007不是闰年”。
#include“stdio.h”
main()
{intyear;
printf(“请输入年份:
”);
scanf(“%d”,&year);
if((year%4==0)&&(year%100!
=0))||(year%400==0)
printf(“%d是闰年\n”,year);
elseprintf(“%d不是闰年\n”,year);
}
程序2、输入三角形的三边长,求三角形的面积。
算法思路:
(1)通过键盘输入三边长的值a,b,c;
(2)判断是否构成三角形;
条件式:
(a+b>c)&&(b+c>a)&&(a+c>b)
(3)若能构成,计算三角形的面积并输出;若不能构成则输出错误提示信息。
#include“stdio.h”
#include“math.h”
main()
{floata,b,c,l,s;
printf(“请输入三角形的三个边长:
”);
scanf(“%f%f%f”,&a,&b,&c);
if((a+b>c)&&(b+c>a)&&(a+c>b))
{l=(a+b+c)/2;
s=sqrt(l*(l-a)*(l-b)*(l-c))
printf(“面积S=%.2f”,s);
}
elseprintf(“构不成三角形!
\n”);
}
程序3、任意输入一个成绩,给出评语:
90-100:
优秀;80-89:
良好;60-79:
及格;0-59:
不及格。
算法思路:
(1)输入一个成绩数,存入变量score;
(2)判断score在哪个分数段中;
(3)根据所在分数段输出对应的评语。
#include“stdio.h”
main()
{
intscore;
printf(“inputyourscore:
”);
scanf(“%d”,&score);
if(score>100||score<0)printf(“inputerror.\n”);
elseif(score>=90)printf(“优秀.\n”);
elseif(score>=80)printf(“良好.\n”);
elseif(score>=60)printf(“及格.\n”);
elseprintf(“不及格.\n”);
}
实训题目
1、用if语句实现菜单功能。
*************************************
*1---成绩输入*
*2—成绩插入*
*3---成绩查询*
* 4---成绩排序*
*5---成绩删除*
*6---成绩输出*
*0---退出*
*************************************
请输入你的选择(0---6):
2、任意输入三个数据按从大到小的顺序输出。
3、编程实现:
读入两个整型数据及一个运算符(+-*/),计算表达式的值。
4、用switch语句实现菜单功能。
5、用switch语句编程实现:
读入两个整型数据及一个运算符(+-*/),计算表达式的值。
6、用switch开关语句实现猜词游戏。
第三部分结构化程序设计与算法认识
(C循环结构程序设计)
[实训目的及要求]通过本次实训,掌握循环语句for、while和do-while的使用和break和continue的功能,并能熟练的进行应用。
程序1、编程求1+2+3+···+100的和。
算法思路:
1、用变量sum作为累加器,存放和;
2、用变量i表示累加变量,分别存放1,2,3,…,100;
3、当i≤100时,执行sum=sum+i;(等价于sum+=i;);
4、当i的值超过100的时候,不再执行sum=sum+i;输出sum的值。
方法一(while结构)
#include“stdio.h”
main()
{
intsum=0,i=1;/*变量初始化*/
while(i<=100)
{
sum=sum+i;
i++;
}
printf("sumis%d\n",sum);
}
方法二(do-while结构)
#include“stdio.h”
main()
{
intsum=0,i=0;
do
{
sum=sum+i;
i++;
}while(i<=100)
printf("sumis%d\n",sum);
}
方法三(for结构)
#include“stdio.h”
{
inti,sum=0;
for(i=0;i<=100;i++)
sum=sum+i;
printf(“sum=%d\n”,sum);
}
程序2、求1到100之间的奇数之和,偶数之积。
思路:
1、用变量sum存放奇数之和,用变量mul存放和;
2、用变量i表示累加变量,分别存放1,2,3,…,100;
3、当i≤100时,若i是奇数执行sum=sum+i;
是偶数执行mul=mul*i;
4、当i的值超过100的时候,不再执行求和和求积操作;输出sum和mul的值。
方法一(while结构)
#include“stdio.h”
main()
{doublemul=1;/*双精度类型*/
inti=1,sum=0;
while(i<=100)
{
if(i%2!
=0)sum=sum+i;
elsemul=mul*i;
i++;
}
printf("sum=%d\n",sum);
printf(“mul=%e\n”,mul);/*科学计数法输出*/
}
方法二(for结构)
#include“stdio.h”
main()
{
inti,sum=0;
doublemul=1;
for(i=1;i<=100;i++)
if(i%2==1)sum=sum+i;
elsemul=mul*i;
printf(“sum=%d,mul=%e\n”,sum,mul);
}
程序3、把输入的一行字符原样输出,若是大写字母需要转换成小写的。
思路:
1、通过键盘接收一个字符;
2、判断该字符是否为回车符;是转第4步,不是转到第3步;
3、判断接收的字符是否为大写字母,是转换为小写字母并输出,不是则直接输出,程序转回到第1步;
4、程序结束。
#include“stdio.h”
main()
{
charch;
while((ch=getchar())!
=‘\n’)
{
if(ch>=‘A’&&ch<=‘Z’)
ch=ch+32;
putchar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 指导书