《C语言程序设计》教学大纲.docx
- 文档编号:10196911
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:46
- 大小:34.15KB
《C语言程序设计》教学大纲.docx
《《C语言程序设计》教学大纲.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》教学大纲.docx(46页珍藏版)》请在冰豆网上搜索。
C语言程序设计教学大纲语言程序设计教学大纲集美大学C语言程序设计课程教学大纲第1页共31页课程名称中文:
C语言程序设计英文:
CProgrammingLanguage课程编号学分/学时2/64所属教研室基础教研室先修课程课程类型专业基础课考核方式参加省计算机等级测试开课专业电子、通信、自动化专业等教学目的和要求教学目的通过本课程的学习,使学生了解算法的基本概念,会根据算法编制相应的程序,并初步掌握软件开发的基本技巧,同时也为后继课程的学习打下坚实的基础。
课程要求C程序设计是一门使用性很强的课程,它所涉及的内容也十分广泛。
本课程所选取的内容包括以下几个方面:
算法的基本概念、常量变量运算符和表达式、程序控制结构、数组、函数、编译预处理、指针、结构体和共用体及文件等。
教学内容和基本要求(分章节)第一章C语言概述(1学时)教学目的和要求:
1了解C语言的背景2掌握C语言程序的结构3领会C语言程序设计的风格教学内容:
1C语言的历史背景2C语言的特点3C语言源程序的结构重点:
C程序结构。
第二章程序的灵魂算法(2学时)教学目的和要求:
1掌握算法的基本概念和特征2掌握结构化程序设计的基本概念教学内容1算法的概念2算法举例3算法的特征4算法的表示5结构化程序设计方法重点:
算法的概念、N-S图、常用算法思想。
第三章数据类型、运算符和表达式(4学时)教学目的和要求1了解基本类型及其常量的表示法2掌握变量的定义及初始化方法3掌握运算符和表达式的概念4领会C语言的自动类型转换和强制类型转、左值和赋值的概念教学内容1常量和变量2整型数据3实型数据4字符型数据5变量赋初值6各类数据之间的混合运算7算述运算符和算术表达式8赋值运算符和赋值表达式9逗号运算符和逗号表达式重点:
常用数据类型、常用运算符、数学公式转化为C语言表达式的基本能力。
第四章最简单的C程序设计(2学时)教学目的和要求1了解C语句的概念及种类2掌握C语言常用的输入/出方式教学内容1C语句概述2赋值语句3字符数据的输入和输出4格式输入和输出5顺序结构程序设计举例重点:
C语句的种类、赋值语句、数据的输入输出及输入输出中常用的控制格式。
第五章选择结构程序设计(2学时)教学目的和要求1熟练掌握ifelse的三种语法2领会switch和break语句的作用教学内容1关系运算符和关系表达式2逻辑运算符和逻辑表达式3if语句4switch语句重点:
关系运算符和逻辑运算符及其组成的具有逻辑值的表达式、二条分支语句的格式及基本使用。
第六章循环控制(2学时)教学目的和要求1领会程序设计中构成循环的方法2掌握for、while、do-while语句的用法3了解break、continue在循环语句中的作用教学内容1goto语句构成循环2while语句3do-while语句4for语句5循环的嵌套6break和continue语句重点:
C构成循环的四种方法,尤其是后三种方法、break和continue语句的基本作用。
第七章数组(4学时)教学目的和要求1了解一维数组、二维数组的基本概念2掌握数组类型变量的定义和引用3掌握数组元素的引用教学内容1一维数组的定义和引用2二维数组的定义和引用3字符数组重点:
1一维数组、二维数组的定义和引用(2学时)2字符数组的定义和引用、常用字符串处理函数及字符处理函数(1学时)3数组的使用(习题课)(1学时)第八章函数(6学时)教学目的和要求1掌握函数的定义和调用2掌握函数参数的传递方式3领会变量存储类型的概念及各种存储类型变量的生存期和有效范围4领会函数的嵌套调用和递归调用5了解带参数的main函数教学内容1函数的定义2函数的参数和函数的值3函数的调用4函数的嵌套调用5函数的递归调用6数组作为函数参数7变量作用域8变量存储类别重点:
1函数定义、函数调用、函数声明等基本基本概念(2学时)2函数的嵌套调用和递归调用(2学时)3数组作为函数的参数、变量的存储类别和作用域(2学时)第九章编译预处理(2学时)教学目的和要求1了解预处理的概念及特点2掌握有参宏和无参宏的定义及使用3领会文件包含的使用及效果教学内容1宏定义2“文件包含”处理重点:
有参宏、无参宏的定义和使用;文件包含的基本概念。
第一十章指针(8学时)教学目的和要求1了解指针和地址的概念2掌握指针变量的定义、初始化及指针的运算3指针和数组、指针数组、二级指针等知识4了解指针和函数的概念5掌握指针作为函数参数的使用教学内容1指针和地址的概念2变量的指针和指针变量的指针变量3数组的指针和指向数组的指针变量4字符串的指针和指向字符串的指针变量5指针和函数6指针数组7二级指针重点:
1指针和地址的基本概念、指针和变量的关系(2学时)2指针和数组(2学时)3指针和字符串、指针数组和二级指针(2学时)4指针的使用(习题课)(2学时)第一十一章结构体和共用体(6学时)教学目的和要求1掌握结构体和共用体类型的说明、结构体和共用体变量的定义及初始化方法2掌握结构体和共用体变量成员的引用3领会存储动态分配和释放4领会链表的基本概念和基本操作5领会枚举类型变量的定义6了解typedef的作用教学内容1.结构体类型的说明及结构体类型变量的定义2.结构体变量的引用3.结构体变量的初始化4.结构体数组5.指针和结构体数组6.链表7.共用体8.枚举类型9.typedef重点:
1结构体的基本概念、结构类型及变量的定义、结构数组(2学时)2用指针处理链表(3学时)3共用体及枚举类型的基本概念、typedef的基本概念(1学时)第一十二章文件(3学时)教学目的和要求1掌握标准设备输入/输出函数的使用2掌握缓冲文件系统的使用教学内容1文件类型指针2文件的打开和关闭3文件的读写重点:
1文件的基本概念;文件的打开、关闭、常用读写方法。
(2学时)2文件操作的使用。
(1学时)集美大学C语言程序设计课程教学大纲第6页共31页课程实验大纲1.实验项目和学时分配序号实验项目学时必开/选开实验类型备注1C程序的运行环境和运行一个C程序的方法2必开验证2数据类型、运算符和表达式2必开验证3最简单的C程序设计2必开验证4逻辑结构程序设计2必开设计5循环控制2必开设计6数组2必开设计7函数2必开设计8指针2必开设计9结构体和共用体2必开设计10(备注:
实验类型包括演示、验证、综合、设计等,可填写开展实验教学的特殊要求)2.实验教学大纲实验一:
C程序的运行环境和运行一个C程序的方法实验目的和要求:
1、熟悉C语言运行环境。
2、掌握语言程序的书写格式和语言程序的结构。
3、掌握C语言上机步骤,了解运行一个C程序的方法。
实验内容:
1、C语言上机步骤:
(1)、进入系统在C盘或其他盘上找到TC或TURBOC2,然后双击其图标打开文件夹,在其中找到TC.EXT并双击即可。
然后进行编辑源程序-编译-连接-执行程序-显示结果
(2)、常用命令编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。
2、有下面的程序,目的是想计算由键盘输入的任意两个整数的积。
exl.c#include(stdio.h);main()scanf(“%x,%y”,&x,%y)p=prodct(x,t)printf(“Theproductis:
”,p)intprodct(inta,intb)intcc=a*breturnc请调试上述程序。
3、熟悉TC环境下的编辑命令,具体见附录一。
实验二:
数据类型、运算符和表达式实验目的和要求:
、了解语言中数据类型的意义。
、掌握不同数据类型之间的赋值的规律。
3、学会有关C语言的有关运算符,以及包含这些运算符的表达式,特别是是+和运算符的使用。
4、进一步熟悉C程序的编辑环境。
实验内容:
、下面的程序试图计算由键盘输入的任意两个整数的平均值:
includemain()intx,y,a;scanf(“%x,%y,&x,&y);a=(x+y)/2;printf(“Theaverageis:
”a);调试无语法错误后,分别使用下列测试用例对上述程序进行测试:
(),
(1)1,(),(),(),(),(),(),(),(),
(1)、分析上述哪几组测试用例较好?
通过测试,你发现程序有什么错误了吗?
若有错误,请指出错误原因。
()、操作符sizeof用以测试一个数据或类型所占用的存储空间的字节数。
请编写一个程序,测试各基本数据类型所占用的存储空间大小。
2、输入以下程序main()intj,k,m,n;k=8;j=10;m=k+;n=+j;printf(“%d,%d,%d,%d”,k,j,m,n);
(1)、运行程序,观察结果。
(2)、分析+在变量之前和在变量之后的不同点?
4、编写一个语言程序,测试下列各表达式i,ji+1,j+1i+,j+i,+ji+j+i+j+要求在各表达式中i和j都分别有相同的初值。
在实验中注意下列问题:
()哪些表达式是错误的?
为什么?
()理解,i,i的意义和优先级别。
实验三:
最简单的C程序设计实验目的和要求:
、掌握语言程序输入、输出的方法和格式。
、本实验可在学习教材第四章后进行。
实验内容:
、输入并编辑下面的程序main()inta,b;floatc,d;longe,f;unsignedintu,v;charc1,c2;scanf(“%d,%d”,a,b);scanf(“%f,%f”,c,d);scanf(“%ld,%ld”,e,f);scanf(“%o,%o”,u,v);scanf(“%c,%c”,c1,c2);printf(“n”);printf(“a=%7d,b=%7dn”,&a,&b);printf(“c=%10.2f,d=%10.2fn”,&c,&d);printf(“e=17ld,f=%17ldn”,&e,&f);printf(“u=%o,d=%on”,&u,&v);printf(“c1=%c,d=%cn”,&c1,&c2);这个程序有语法错误吗?
为什么?
、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:
a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,c1=a,c2=b分析运行结果。
特别注意输入c1,c2的值是什么?
什么原因?
、将输入e和f的语句改为:
scanf(“%d,%d”,&e,&f);再用上述测试数据测试并分析结果。
、将输入u、v的语句改为:
scanf(“%d,%d”,&u,&v);再用上述测试数据测试并分析结果。
、将输出e,f的语句改为:
printf(“e=%17d,f=%17dn”,e,f);再用上述测试数据测试并分析结果。
、将输出u、v的语句改为:
printf(“u=%u,v=%un”,u,v);或printf(“u=%d,v=%dn”,u,v);再用上述测试数据测试并分析结果。
、请读者自己修改程序和改变数据输入的形式,分析各种情况下的输入和输出。
、在scanf(“%c,%c”,&c1,&c2);语句之前加一个语句:
getchar();、验证转义字符n和r的意义有何不同。
实验四:
逻辑结构程序设计实验目的和要求:
、了解条件和程序流程的关系.、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。
、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”);4、学会正确使用逻辑运算符和逻辑表达式;5、熟练掌握if语句和switch语句。
实验内容:
1、()、题目有如下程序段:
if(a1&b=0)x=x/a;if(a=2|x1)x=x+1;为了更容易明白程序的逻辑结构,我们用图5.1所示流程图来加以描述。
ynyn要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。
()、实验步骤记下分别使用下列各组数据运行时的操作流程。
()a=1,b=1,x=1;()a=1,b=1,x=2;()a=3,b=0,x=1;()a=2,b=1,x=4;()a=2,b=1,x=1;()a=1,b=0,x=2;()a=2,b=1,x=1;()a=3,b=0,x=2。
2、
(1)、题目已知三个数a,b,c,找出最大值放于max中。
分析:
由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。
第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中ifelse形式。
第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。
Max即为a,b,c中的最大值。
includestdio.hmain()inta,b,c,max;/*定义四个整型变量*/scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);if(a=b)max=a;/*a=b*/elsemax=b;/*amax)max=c;/*c是最大值*/printf(max=%d,max);
(2)、实验步骤若输入下列数据,分析程序的执行顺序并写出运行结果
(1)a=1,b=2,c=3
(2)a=2,b=1,c=3(3)a=3,b=2,c=1(4)a=3,b=1,c=2(5)a=3,b=3,c=2(6)a=2,b=1,c=23、
(1)、题目输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90):
A80至90分(包括80):
B70至80分(包括70):
C60至70分(包括60):
D60分以下:
E方法一:
(用if嵌套)分析:
由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。
因此,再用if嵌套前,应先判断输入的成绩是否在0100之间。
#includestdio.hmain()intscore;chargrade;printf(npleaseinputastudentscore:
);scanf(%f,&score);if(score100|score=90)grade=A;elseif(score=80)grade=B;elseif(score=70)grade=C;elseif(score=60)grade=D;elsegrade=E;printf(nthestudentgrade:
%c,grade);输入测试数据,调试程序。
测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。
方法二:
用switch语句分析:
switch语句是用于处理多分支的语句。
注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0100之间的成绩分别化成相关的常量。
所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。
则由此可得把score除十取整,化为相应的常数。
#includestdio.hmain()intg,s;charch;printf(ninputastudentgrade:
);scanf(%d,&g);s=g/10;if(s10)printf(ninputerror!
);elseswitch(s)case10:
case9:
ch=A;break;case8:
ch=B;break;case7:
ch=C;break;case6:
ch=D;break;default:
ch=E;printf(nthestudentscort:
%c,ch);输入测试数据,同方法一一样调试程序并写出结果。
4、有一函数:
y=xx12x-11=x=10用scanf函数输入x的值(分别为x=10三种情况),求y值。
分析:
y是一个分段表达式。
要根据x的不同区间来计算y的值。
所以应使用If语句。
main()intx,y;printf(“pleaseinputx:
”);scanf(“%d”,&x);if(x1)y=x;printf(“y=%dn”,y);elseif(x=detax)x=x*I;y=1/x;e=e+y;+i;printf(“%12.10lf”,e);
(2)、实验步骤
(1)、阅读上面的程序,写出程序所依据的计算公式。
(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:
.不进入循环;.只循环一次;.只循环两次;.进入死循环(程序将永远循环下去)。
为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)、原程序中while语句中的y=detax,分别换成ydetax,y=detax,ydetax,y=detax,观察程序运行将会有什么变化。
假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。
(4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。
假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。
(5)、若把原程序中的+i换成i+,观察程序的运行发生了什么变化?
假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了.(6)、把原程序中的while结构改写成dowhile结构,再分别按上述的
(2)、(3)两步进行实验。
2、求5!
main()intn,t;n=1;t=1;while(t=5)n=n*t;t=t+1;printf(“%d”,n);3、求和s=1!
+2!
+3!
main()intn,s=0,t=1;for(n=1;n=3;n+)t=t*n;s=s+t;printf(“%d”,s);4、求和s=1!
+3!
+5!
main()ints=0,t,i,j;for(i=1;i=3;i+)t=1;for(j=1;j=2*i-1;j+)t=t*j;s=s+t;printf(“%d”,s);5、求和s=3+33+333main()ints=0,t=3,i;for(i=1;i=3;i+)s=s+t;t=10*t+3;printf(“%d”,s);6、有一数列:
2/1,3/2,5/3,8/5,求出这个数列的前10项之和。
main()intn,t,;floata=2,b=1,s=0;for(n=1;n=10;n+)s=s+a/b;t=a;a=a+b;b=t;printf(“%f”,s);7、打印500以内的“水仙花数”。
“水仙花数”是一个三位数,其各位数立方和等于该数本身。
main()inti,j,k,n;for(n=100;n=500;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(“%d”,n);8、一个数如果恰好等于它的因子之和,这个数就称为完数。
求100之内的所有完数。
main()intn,s,j;for(n=1;n=100;n+)s=0;for(j=1;jn);其次,算法:
使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。
#includestdio.hmain()intm,n,k,result;printf(Entertwonumbers:
);scanf(%d,%d,&m,&n);if(m0&n0)/*限定两个正整数*/dok=n%m;if(k=0)result=m;elsen=m;m=k;while(k0);/*循环取余求出最大公因子*/printf(Thegreatestcommondivistoris:
%dn,result);elseprintf(Nonpositivevaluesnotallowedn);10、用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。
#include“math.h”main()floatx,x0,f,f1;x=1.0;dox0=x;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;while(fabs(x-x0)=1e-5);printf(“%6.2f”,x);11、打印下列图案*main()inti,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);printf(“n”);12、判断m是否是素数。
程序:
#includemain()intm,i,k;scanf(“%d”,&m);k=sqrt(m+1);for(i=2;i=k+1)printf(“%disaprimenumbern”,m);elseprintf(“%disnotaprimenumbern”,m);实验六:
数组实验目的和要求:
1、掌握数组定义的规则。
2、掌握C语言数组的基本用法。
3、掌握一维数组的定义、赋值和输入输出的方法;4、掌握字符数组的使用;5、掌握和数组有关的算法(例如排序算法);6、掌握二维数组的定义、赋值和输入输出的方法;7、掌握字符数组的使用;8、掌握和数组有关的算法(例如排序算法)。
实验内容:
1、编写程序,测试下列数组的定义方式是否正确
(1)main()intn;scanf(“%d”,&n);intan;
(2)main()constintn=10;intan;(3)#include#defineM10main()intaM;(4)main()inta2+2*4;(5)#include#defineM2#defineN8main()intaM+N;通过这一实验,可以说明什么问题?
2、运行下面的C程序,根据运行结果,可以说明什么?
main()intnum5=1,2,3,4,5;intii;for(i=0;i=5;i+)printf(“%d”,numi);3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。
现在要你设计一个程序,返回一个3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。
4、1983年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX的鼻祖,C语言的创始人之一,图林大奖得主,KenThompson上台的第一句话是:
“我是一个程序员,在我的1040表上,我自豪地写上了我的职业。
作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。
”这个程序如下:
chars
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 教学大纲
![提示](https://static.bdocx.com/images/bang_tan.gif)