首页 《C语言程序设计》教学大纲

《C语言程序设计》教学大纲

举报
开通vip

《C语言程序设计》教学大纲集美大学 C语言程序设计  课程教学大纲 第 1 页共31 页 课程名称 中文:C语言程序设计 英文:C Programming Language 课程编号   学分/学时 2/64 所属教研室 基础教研室 先修课程   课程类型 专业基础课 考核方式 参加省计算机等级考试 开课专业 电子、通信、自动化专业等 教学目的和要求 教学目的 通过...

《C语言程序设计》教学大纲
集美大学 C语言程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计   课程教学 大纲 专科护士培训大纲语法等级大纲网络小说大纲模版专职安全员生产检查释经讲道讲章大纲 第 1 页共31 页 课程名称 中文:C语言程序设计 英文:C Programming Language 课程编号   学分/学时 2/64 所属教研室 基础教研室 先修课程   课程类型 专业基础课 考核方式 参加省计算机等级考试 开课专业 电子、通信、自动化专业等 教学目的和要求 教学目的 通过本课程的学习,使学生了解算法的基本概念,会根据算法编制相应的程序,并初步掌握软件开发的基本技巧,同时也为后继课程的学习打下坚实的基础。 课程要求 《C程序设计》是一门应用性很强的课程,它所涉及的内容也十分广泛。本课程所选取的内容包括以下几个方面:算法的基本概念、常量变量运算符与表达式、程序控制结构、数组、函数、编译预处理、指针、结构体与共用体及文件等。 教学内容和基本要求(分章节) 第一章 C语言概述(1学时) 教学目的与要求: 1. 了解C语言的背景 2. 掌握C语言程序的结构 3. 领会C语言程序设计的风格 教学内容: 1.C语言的历史背景 2.C语言的特点 3.C语言源程序的结构 重点: 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语言常用的输入/出方式 教学内容 1. C语句概述 2. 赋值语句 3. 字符数据的输入与输出 4. 格式输入与输出 5. 顺序结构程序设计举例 重点: C语句的种类、赋值语句、数据的输入输出及输入输出中常用的控制格式。 第五章 选择结构程序设计(2学时) 教学目的与要求 1. 熟练掌握if…else的三种语法 2. 领会switch与break语句的作用 教学内容 1. 关系运算符与关系表达式 2. 逻辑运算符与逻辑表达式 3. if语句 4. switch语句 重点: 关系运算符与逻辑运算符及其组成的具有逻辑值的表达式、二条分支语句的格式及基本应用。 第六章 循环控制(2学时) 教学目的与要求 1. 领会程序设计中构成循环的方法 2. 掌握for、while、do-while语句的用法 3. 了解break、continue在循环语句中的作用 教学内容 1. goto语句构成循环 2. while语句 3. do-while语句 4. for语句 5. 循环的嵌套 6. break与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.实验项目与学时分配 序号 实验项目 学时 必开/选开 实验类型 备注 1 C程序的运行环境和运行一个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、掌握C语言程序的书写格式和C语言程序的结构。 3、掌握C语言上机步骤,了解运行一个C程序的方法。 实验内容: 1、C语言上机步骤: (1)、进入系统 在C盘或其他盘上找到TC或TURBOC2,然后双击其图标打开文件夹,在其中找到TC.EXT并双击即可。 然后进行编辑源程序->编译->连接->执行程序->显示结果 (2)、常用命令 编辑切换(F6),编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见“附录一”。 2、有下面的C程序,目的是想计算由键盘输入的任意两个整数的积。 /********exl.c********/ #include (stdio.h); main() scanf(“%x,%y”,&x,%y) p=prodct(x,t) printf(“The product is :”,p) int prodct(int a ,int b ) int c c=a*b return c 请调试上述程序。 3、熟悉TC环境下的编辑命令,具体见附录一。 实验二:数据类型、运算符和表达式 实验目的与要求: 1、了解C语言中数据类型的意义。 2、掌握不同数据类型之间的赋值的规律。 3、学会有关C语言的有关运算符,以及包含这些运算符的表达式,特别是是++和—运算符的使用。 4、进一步熟悉C程序的编辑环境。 实验内容: 1、下面的程序试图计算由键盘输入的任意两个整数的平均值: #include main() { int x,y,a; scanf(“%x,%y,&x,&y); a=(x+y)/2; printf(“The average is :”a); } 调试无语法错误后,分别使用下列测试用例对上述程序进行测试: (1)2,6 (1)1, 3 (3)-2,-6 (4)-1,-3 (5)-2,6 (6)-1,3 (7)1,0 (8)1,6 (9)32800,33000 (10)-32800,33000 (1)、分析上述哪几组测试用例较好?通过测试,你发现程序有什么错误了吗?若有错误,请指出错误原因。 (2)、操作符sizeof用以测试一个数据或类型所占用的存储空间的字节数。请编写一个程序,测试各基本数据类型所占用的存储空间大小。 2、输入以下程序 main(){int j,k,m,n; k=8; j=10; m=k++; n=++j; printf(“%d,%d,%d,%d”,k,j,m,n); } (1)、运行程序,观察结果。 (2)、分析++在变量之前和在变量之后的不同点? 4、编写一个C语言程序,测试下列各表达式 i , j i + 1,j + 1 i + + ,j + + + + i, + + j i + + + + + j + + i + + + + + j + + 要求在各表达式中i 和j都分别有相同的初值。在实验中注意下列问题: (1) 哪些表达式是错误的?为什么? (2) 理解+,++,++i,i++的意义和优先级别。 实验三:最简单的C程序设计 实验目的与要求: 1、掌握C语言程序输入、输出的方法和格式。 2、本实验可在学习教材第四章后进行。 实验内容: 1、输入并编辑下面的程序 main() { int a,b; float c,d; long e,f; unsigned int u,v; char c1,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=%7d\n”,&a,&b); printf(“c=%10.2f,d=%10.2f\n”,&c,&d); printf(“e=17ld,f=%17ld\n”,&e,&f); printf(“u=%o,d=%o\n”,&u,&v); printf(“c1=%c,d=%c\n”,&c1,&c2); 这个程序有语法错误吗?为什么? 2、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试: a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,c1=’a’,c2=’b’ 分析运行结果。特别注意输入c1,c2的值是什么?什么原因? 3、将输入e和f的语句改为: scanf(“%d,%d”,&e,&f); 再用上述测试数据测试并分析结果。 4、将输入u、v的语句改为: scanf(“%d,%d”,&u,&v); 再用上述测试数据测试并分析结果。 5、将输出e ,f 的语句改为: printf(“e=%17d,f=%17d\n”,e,f); 再用上述测试数据测试并分析结果。 6、将输出u、v的语句改为: printf(“u=%u,v=%u\n”,u,v); 或 printf(“u=%d,v=%d\n”,u,v); 再用上述测试数据测试并分析结果。 7、请读者自己修改程序和改变数据输入的形式,分析各种情况下的输入与输出。 8、在scanf(“%c,%c”,&c1,&c2);语句之前加一个语句: getchar(); 9、验证转义字符\n 与 \r的意义有何不同。 实验四:逻辑结构程序设计 实验目的与要求: 1、了解条件与程序流程的关系. 2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。 3、了解C语句表示逻辑量的方法(以0代表“假”以1代表“真”); 4、学会正确使用逻辑运算符和逻辑表达式; 5、熟练掌握if语句和switch语句。 实验内容: 1、 (1)、题目 有如下程序段: {…… if (a>1&&b= =0) x=x/a; if(a==2||x>1) x=x+1; } 为了更容易明白程序的逻辑结构,我们用图5.1所示流程图来加以描述。 a>1&&b= =0   x=x/a   a= =2||x>1   x=x+1   y n y n 要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。 (2)、实验步骤 记下分别使用下列各组数据运行时的操作流程。 (1) a=1,b=1,x=1; (2) a=1,b=1,x=2; (3) a=3,b=0,x=1; (4) a=2,b=1,x=4; (5) a=2,b=1,x=1; (6) a=1,b=0,x=2; (7) a=2,b=1,x=1; (8) 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语句中if——else 形式。第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。Max即为a,b,c中的最大值。 #include "stdio.h" main() {    int a,b,c,max;          /*定义四个整型变量*/ scanf(“a=%d,b=%d,c=%d”,&a,&b,&c); if (a>=b) max=a;              /*a>=b*/ else max=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=2  3、 (1)、题目 输入某学生的成绩,经处理后给出学生的等级,等级分类如下: 90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:          E 方法一:(用if嵌套`) 分析: 由题意知如果某学生成绩在90分以上,等级为A;否则,如果成绩大于80分,等级为B;否则,如果成绩大于70分,等级为C;否则,如果成绩大于60分为D;否则,如果成绩小于60分,等级为E;但当我们输入成绩时也可能输错,出现小于0或大于100,这时也要做处理,输出出错信息。因此,再用if嵌套前,应先判断输入的成绩是否在0~100之间。 #include"stdio.h" main() { int  score; char  grade; printf("\nplease input a student score:"); scanf("%f",&score); if(score>100||score<0) printf("\ninput error!"); else { if(score>=90) grade='A'; else { if(score>=80) grade='B'; else {if(score>=70) grade='C'; else { if(score>=60) grade='D'; else grade='E'; } } } printf("\nthe student grade:%c",grade); } }      输入测试数据,调试程序。测试数据要覆盖所有路径,注意临界值,例如此题中得100分,60分,0分以及小于0和大于100的数据。 方法二:用switch语句 分析: switch 语句是用于处理多分支的语句。注意,case后的表达式必须是一个常量表达式,所以在以用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。则由此可得把score除十取整,化为相应的常数。 #include"stdio.h" main() { int g,s; char ch; printf("\ninput a student grade:"); scanf("%d",&g); s=g/10; if(s<0||s>10) printf("\ninput error!"); else { switch (s) { case 10: case 9:  ch='A';  break; case 8:  ch='B';  break; case 7:  ch='C';  break; case 6:  ch='D';  break; default: ch='E'; } printf("\nthe student scort:%c",ch); } }                        输入测试数据,同方法一一样调试程序并写出结果。 4、 有一函数: y= x x<1 2x-1 1==10           用scanf函数输入x的值(分别为x<1,1~10,>=10三种情况),求y值。 分析:y是一个分段表达式。要根据x的不同区间来计算y的值。所以应使用If语句。 main() { int x,y; printf(“please input x :”); scanf(“%d”,&x); if (x<1) { y=x; printf(“y=%d\n”,y); } else if (x<10) { y=2*x-1; printf(“y=%d\n”,y); } else { y=3*x-11; printf(“y=%d\n”,y); } 实验五:循环控制 实验目的与要求: 1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。 2、了解条件型循环结构的基本测试方法。 3、掌握如何正确地控制计数型循环结构的次数。 4、了解对计数型循环结构进行测试的基本方法。 5、了解在嵌套循环结构中,提高程序效率的方法。 实验内容: 1、 (1)、下面是一个计算e的近似值(使误差小于给定的δ)的程序。 main() {double e=1.0,x=1.0,y,detax; int i=1; printf(“\n please input enter a error:”); scanf(“%lf”,&detax); y=1/x; while(y>=detax) {    x=x*I; y=1/x; e=e+y; ++i; } printf(“%12.10lf”,e); } (2)、实验步骤 (1)、阅读上面的程序,写出程序所依据的计算公式。 (2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句? (3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,yn);其次,算法:使k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,使k代替n,n代替m,重复以上过程,直到k值为0。 #include"stdio.h" main() { int m,n,k,result; printf("Enter two numbers:"); scanf("%d,%d",&m,&n); if(m>0&&n>0) /*限定两个正整数*/ { do { k=n%m; if(k= =0) result=m; else { n=m; m=k; } }while(k>0); /*循环取余求出最大公因子*/ printf("The greatest common divistor is:%d\n",result); } else printf("Nonpositive values not allowed\n"); } 10、用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。 #include “math.h” main() { float x,x0,f,f1; x=1.0; do { x0=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() { int i,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是否是素数。 程序: #include main() { int m,i,k; scanf(“%d”,&m); k=sqrt(m+1); for(i=2;i<=k;i++) if (m%i= =0) break; if(i>=k+1) printf(“%d is a prime number\n”,m); else printf(“%d is not a prime number\n”,m); } 实验六:数组 实验目的与要求: 1、掌握数组定义的规则。 2、掌握C语言数组的基本用法。 3、掌握一维数组的定义、赋值和输入输出的方法; 4、掌握字符数组的使用; 5、掌握与数组有关的算法(例如排序算法); 6、掌握二维数组的定义、赋值和输入输出的方法; 7、掌握字符数组的使用; 8、掌握与数组有关的算法(例如排序算法)。 实验内容: 1、编写程序,测试下列数组的定义方式是否正确 (1) main() { int n; scanf(“%d”,&n); int a[n]; …… } (2) main() { const int n=10; int a[n]; } (3) #include #define M 10 main() { int a[M]; } (4) main() { int a[2+2*4]; } (5) #include #define M 2 #define N 8 main() { int a[M+N]; } 通过这一实验,可以说明什么问题? 2、运行下面的C程序,根据运行结果,可以说明什么? main( ) { int num[5]={1,2,3,4,5}; inti i; for(i=0;i<=5;i++) printf(“%d”,num[i]); } 3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。现在要你设计一个程序,返回一个3 * 5 的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。 4、1983年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX的鼻祖,C语言的创始人之一,图林大奖得主,Ken Thompson 上台的第一句话是:“我是一个程序员,在我的1040表上,我自豪地写上了我的职业。作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。”这个程序如下: char s []={ ‘\t’, ‘0’, ‘\n’, ‘}’, ‘;’, ‘\n’, ‘\n’, ‘/’, ‘*’, ‘\n’, /* (213 lines deleted)*/ 0 }; /* * The string is a * representation of the body * of this program from ‘0’ * to the end */ main( ) { int i; printf(“char \ts[]={\” }; for (i=0;s[i];i++) printf(“\t%d,\n”,s[i]); printf(“%s”,s); } 请上机运行这个程序,指出它的功能和运行结果。 5、在键盘上输入N个整数,试编制程序使该数组中的数按照从大到小的次序排列。 分析:C中数组长度必须是确定大小,即指定N的值。排序的方法有多种,我们取出其中两种作为参考。 方法一:起泡排序 从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。 源程序如下: #define N 10 #include"stdio.h" main() { int a[N],i,j,temp; printf("please input %d numbers\n",N); for(i=0;ia[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } printf("the array after sort:\n"); for(i=0;ia[j]) min=j; temp=a[i]; a[i]=a[min]; a[min]=temp; } for(i=2;i<=9;i++) /*注意i值的变化范围*/ ave=ave+a[i]; printf("选手所得最后分数:%6.1f",ave/8); printf("\n"); } 7、输入一串字符,计算其中空格的个数。 #include main( ) {char c[30]; int i,sum=0; gets(c); for(i=0;imax) {max= a[i][j]; r=i; c=j; } printf(“max=%d , row =%d , colum=%d \n”,max , r, c); } 9、打印以下图案: * * * * * * * * * * * * * * * * * * * * * * * * * main() {char a[5]={' * ' , ' * ' , ' * ' , ' * ' , ' * '}; int i,j,k; char space=' '; for(i=0;i<5;i++) /*输出5行*/ {printf("\n"); /* 输出每行前先换行* / printf(" "); /* 每行前面留5个空格 */ for (j=1;j<=i;j++) printf("%c",space); /* 每行再留1个空格*/ for ( k=0;k<5;k++) printf("%c",a[k]); /*每行输入5个*号*/ } } 10、求矩阵下三角形元素之和。 #define N 6 main() {int i,j,sum=0; int a[N][N]={0}; printf("input 5×5 data:\n"); for(i=1;iv) { t=u; u=v; v=t; } a=u; b=v; while((r=b%a)!=0) { b=a; a=r; } return(a); } lcd(u,v,h) int u,v,h; { return(u*v/h); } main() { int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); } 这是一个十分典型的算法,同学们一定要认真分析、学习。 5、写一函数,用“起泡法”对输入的10个字符按由小到大顺序排序。 源程序如下: /*起泡法排序*/ #define N 10 char str[N]; main() { int i,flag; for (flag=1; flag = =1;) { printf(“\n输入字符串,长度为10:\n”); scanf(“%s”,&str); if (strlen(str)>N) printf(“超过长度,请重输!”); else flag = 0; } sort(str); printf(“\n排序结果:”): for (i=0;istr[i+1]) { t=str[i]; str[i]=str[i+1]; str[i+1]=t; } } 6、用牛顿迭代法求根。方程为ax3+bx2+cx+d=0,系数a、b、c、d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。 源程序如下: /*牛顿迭代法解方程*/ #include “math.h” float solut(a,b,c,d) float a,b,c,d; { float x=1,x0,f,f1; do { x0=x; f=((a*x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1; }while(fabs(x-x0)>=1e-5); return(x); } main() { float a,b,c,d; printf(“\n输入方程的系数a,b,c,d\n”); scanf(“%f,%f,%f,%f”,&a,&b,&c,&d); printf(“\n方程是:%5.2fx^3+%5.2fx^2+%5.2fx+%5.2f=0”,a,b,c,d); printf(“\nX=%10.7f\n”,solut(a,b,c,d)); } 在此题目中,方程的系数是未知的,这是与以前我们用牛顿迭代法的时候不同的地方。但原理、算法是相同的,这里我们用函数来求方程的根。也就是把牛顿迭代法用函数的形式表现出来。 实验八:指针 实验目的与要求: 1、熟悉指针的正确用法。 2、本实验可在学习了教材第10.3节之后运行。 3、了解指针参数的特殊性。 4、 掌握函数、指针、数组的用法。 实验内容: 1、指出下面程序错误的原因。 main( ) { int x=10,y=5,*px,*py; px=py; px=&x; py=&y; printf(“*px=%d,*py=%d,*px,*py); } 2、下面的程序试图有如下运行结果: which style you want to : Capital ( c ) or uncapital ( a ):c ↙ COMPUTER Which sytle you want to : Capital ( c ) or uncapital ( a ) : u↙ computer 请调试下面的程序,使其有如上执行结果。 #include main () { char s*; char c; printf(“which style you want to :ln”); printf(“capital ( c ) or uncapital(a):”); c=getchar(); if(c=’c’)strcpy(s,”COMPUTER”); else strcpy(s,”computer”); put(s); } 分析出错原因。 3.下面的程序能获得上述运行结果吗? main() { char *S=”COMPUTER”; char c; printf(“which style you want to \n”); printf(“capital (c) or uncapital(u);”); c=getchar(); if(c=’c’) put(s); else { s=”computer”; puts(s); } } 分析出错原因。 4.设计一个C程序,用以测试下列各表达式的运算。 (1) y=*px++ (2) y=*++py (3) y=(*py)++ (4) y=--*ppx++ 5、想使指针变量pt1指向a 和b 中的大者,pt2指向小者,以下程序能否实现此目的? swap(int *p1,int *p2) { int *p; p=p1;p1=p2;p2=p; } main() { int a,b; scanf(“%d,%d”,&a,&b); pt1=&a;pt2=&b; if(a%d\n”,i+1,execute(a,b,function[i])); } execute(int x,int y,int *fun()) { return(*fun)(x,y);} fun1(int x, int y) { return(x+y);} fun2(int x,int y) { return(x-y);} fun3(int x,int y) { return(x*y);} fun4(int x,int y) { return(x/y);} 7、程序 main(int argc,char *argv[]) { while(argc-->1) printf(“%s\n”,*++argv); 的文件名为echo.h,编译后可执行程序名为echo.exe(用DOS时),运行时输入下面命令行:echo BASIC FORTRAN COBOL PASCL 分析输出结果。 实验九:结构体和共用体 实验目的与要求: 1、掌握结构体类型方法以及结构体变量的定义和引用。 2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。 3、掌握运算符”.”和”->”的应用。 4、共用体的概念和应用。 实验内容: 1、要求编写程序:有4名学生,每个学生的数据包括学号、姓名、成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。 2、建立一个链表每个结点包括的成员为:职工号、工资。用malloc打印出来。用一个creat 来建立链表,用list来输出数据。5个职工号为101,103,105,107,109。 3、在上题基础上,新增加一个职工的数据,按职工号的顺序插入链表,新插入的职工号为106。写一函数insert来插入新结点。 4、在上面的基础上,写一函数delete,用来删除一个结点。要求删除职工号为103的结点。打印出删除后的链表. 5、你有无办法测试构造链表时,内存空间的动态分配情形?   学时分配   章节 1 3 4 5 6 7 8 9 10 11 12 13 合计   授课学时 2 2 2 2 4 6 6 2 8 6 2 2 44   实验学时 2   2 2 2 2 2 2 2 2   2 20   有关说明   说明:应鼓励学生课外多上机、多练习,并尽可能以一个简单的管理系统作为实例贯穿全部内容。 实验教科书、参考书: (一)教科书 《C程序设计习题解答与上机指导》谭浩强等,清华大学出版社 (二)参考书 《省计算机等级考试C语言习题集》自编讲义                                         拟制签名:                审核签名:                  审批签名: 日期:                    日期:                      日期:
本文档为【《C语言程序设计》教学大纲】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_037433
暂无简介~
格式:doc
大小:154KB
软件:Word
页数:67
分类:工学
上传时间:2019-05-28
浏览量:23