C语言程序设计教程教学教案_第1页
C语言程序设计教程教学教案_第2页
C语言程序设计教程教学教案_第3页
C语言程序设计教程教学教案_第4页
C语言程序设计教程教学教案_第5页
已阅读5页,还剩37页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:课程简介、C语言概述教材章节:第1章授课学时:2学时

教学目的:了解C语言的发展历程了解C语言的程序结构和基本组成了解一个C程序的开发基本过程教学内容:是否重、难点C语言的发展历程了解C语言程序的基本组成重点了解头文件的作用、主函数的特定意义掌握C程序举例了解重点:C语言程序的基本组成C语言的集成开发环境,如CodeBlocks\VCC程序的开发过程:编辑、编译、运行、调试。难点:C语言的集成开发环境和调试操作教学设计1.首先把本次课的任务交待清楚,使学生了解学习内容。2.教学设计建议先讲1.1节,引出计算机语言的概念及选择C语言的原因、对C语言的教学内容做总体介绍,以期让学生对学习内容有个整体认识。可以偿试先讲1.5节,利用大家熟悉的“勾股定理”进行编程训练,程序从浅入深的过程,让学生领略编程的思想和编程方法,循序渐进。再回头讲1.2节-1.4节,对程序框架进行总结,从而掌握C语言程序的基本组成。这样可以有效地避免学生因死记硬背语法产生厌学的现象出现。从而掌握以下内容:(1)C语言程序长什么样?(2)怎样写C语言程序?(3)到哪里写?(4)如何运行?通过这么几个问题来吸引学生的注意力和关注点。3.教学过程(1)以“案例”法进行授课。【例1】已知圆锥体的半径r和高度h,求体积。公式:v=πr2分析:(1)已知公式v=πr2(2)已知л、r、h的值(3)求v(4)输出结果这是人工解题的分析过程。而计算机的解题过程与人工类似,但必须通过某种计算机能懂的语言“告之”。这就是我们要学习的其中一种语言---C语言。对比人工与计算机如何解决问题,引出人类解决问题与计算机解决问题的效果和共相同点,启发学生的计算思维意识。人工解题的第2步在计算机里如何实现呢?介绍C语言里数据获取的方法。r=2;h=3;v=1.0/3*3.14159*r*r*h;(注意:书写格式与人工书写的不同,必须写在同一行)通过例题的讲解,让学生总结出C语言程序的基本组成,培养学生的归纳总结能力。(2)现场操作采用现场演示的方法让学生解决第3个问题:到哪里运行C程序?启动CodeBlocks集成开发环境进行C程序的编辑、编译、运行,调试例1和例2,通过演示更直观地加深理解C程序的基本组成和开发步骤。intmain(){intr,h;floatv;r=2;h=3;v=1.0/3*r*r*h;//思考:1/3结果会如何?留下问题让学生在第3章解决printf("v=%f\n",v);return0;}作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:C程序的基本组成与基本要素一个C程序的开发步骤C程序的运行环境获得的能力:了解C程序的基本组成;了解一个C程序的开发环境和过程。

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:算法教材章节:第2章授课学时:2学时

教学目的:了解算法的基本概念掌握算法的常用表示方法掌握结构化程序设计的思想和方法教学内容:是否重、难点算法概述了解算法的常用表示方法掌握程序设计典型算法了解重点难点结构化程序设计方法掌握重点难点教学设计:1、首先通过两个故事引出做事方法的重要性;2、由现实故事过渡到算法在计算机程序设计中的地位和重要性;3、接着介绍如何设计算法,在描述算法的方法中讲述程序设计的方法和程序设计的三个基本结构;如:1、什么是算法?2、算法与编程有什么关系?3、如何表示算法?4、什么是结构化的程序设计?4、通过案例掌握问题分析、算法设计、程序设计、程序调试、程序运行的全过程,从而实现了一个理论与实践的概要认识,基本认知了程序设计的方法和过程,为后续学习编程做好准备。教学过程:算法定义:即描述计算机要执行的操作及操作的详细步骤。编程就是实现这些操作过程,达到用计算机解决问题的目的。特别强调,算法有效率之分,如:求方法1:1+2,+3,+4,一直加到100加99次方法2:100+(1+99)+(2+98)+…+(49+51)+50=100+49×100+50加51次通过这个例题向学生讲解算法的效率。经典算法:以累加和算法和擂台算法讲述算法设计思想和过程,引导学生从问题分析、算法设计、算法实现(编程)到调试、运行,完成一个问题的求解。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。(此章无任务)考核要求:算法的常用表示法结构化程序设计的三种基本结构、自顶向下分析方法和模块化设计

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:数据类型、运算符与表达式、教材章节:第3章授课学时:共2学时

教学目的:掌握C语言的字符集和标识符概念掌握常量和变量的表示掌握变量的定义及在内存中的实质意义掌握数据类型的作用及在内存中的存储形式掌握数据的自动类型转换和强制类型转换教学内容(3.1~3.2节)是否重、难点C语言的基本符号掌握重点C语言中的常量和变量的概念及表示掌握重点数据类型及在内存中的存储形式掌握重点数据在内存中的存储形式了解难点教学设计:本章内容是整个C语言的语言要素基础,涉及的内容较多,其中数据类型是基础中的难点和重点,学生往往领悟不了其要义,讲课时特别需要以板书的形式画出数据在内存中的存储形式来解释数据类型的分类,有了数据类型的基础后,在求解表达式时才能正确理解语法规则,求出正确结果。在讲解运算符过程中特别要解释清楚运算符的优先级和结合性。整个教学过程中采用由简入深、循序渐进的引导式教学。教学过程:问题法:以问题为导向,围绕问题进行讲解。1、C语言有哪些字符?2、C语言中的数据为什么要进行分类?分类有何意义?3、数据在计算机内是如何表示和存储的?这3个问题主要说数据,掌握了这些数据类型,才能正确使用数据。演示法:现场演示数据在内存中的存储形式,并在IDE环境中进行观察。如:整数1和整数-1在内存中是如何存储的?通过板书演示数据在内存中的存储形式(即二进制代码)来帮助学生理解数据在计算机中的存储、从而理解计算机的工作原理。经典算法:通过数位拆分算法的案例掌握运算符的灵活应用。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:数据类型的定义、数据的存储和表示运算符、优先级、结合性表达式的求值

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:数据类型、运算符与表达式、教材章节:第3章授课学时:2学时

教学目的:理解运算符的优先级和结合性的意义理解整数除法和浮点数除法的区别,注意细节造成的数据误差理解程序中为什么要有宏定义能够调用常用的数学函数掌握运算符的即学即用,具备简单的编程能力教学内容(3.4~3.5节):是否重、难点算术运算符、赋值运算符掌握重点自增自减运算符了解难点关系运算符、逻辑运算符掌握重点不同数据类型之间的相互转换了解难点经典算法,简单编程应用掌握重点教学设计:1.关系运算和逻辑运算1)关系运算符:<(小于)<=(小于等于)>(大于)>=(大于等于)==(等于)!=(不等于)优先级在以上六个关系运算符中,前四个运算符(<、<=、>、>=)的优先级相同,后两个运算符(==、!=)的优先级也相同,但前四个的优先级高于后两个。如:a>=b!=b<=3其求解过程等价于(a>=b)!=(b<=3)。他们的结合方向是从左至右。特别要注意的是,在C程序中,表示“等于”的运算符是“==”,而非“=”。“=”号是赋值运算符,这点初学者很容易搞错用错,请记牢各自的语义。2)逻辑运算符:!(逻辑非)&&(逻辑与)||(逻辑或)三种逻辑运算符的优先级由高到低依次为:!、&&、||逻辑值的判断C语言编译系统在求逻辑表达式运算结果时,以数值0代表“假”,以1代表“真”。但在判断一个逻辑量时是以是否“非0”来判断“真”或“假”。即如果表达式的值是非0就被认为是“真”,否则就被认为是“假”。例如:'b'&&'d'因为'b'和'd'是一个字符常量,其值非0,编译系统将其作“真”值处理,因而逻辑表达式'b'&&'d'的值为真,即结果为1。逻辑表达式的求解技巧实际上,在逻辑表达式的求解过程中,并非所有的逻辑运算符都会被执行,只有在必须执行下一个逻辑运算符才能得出表达式的值时,才执行该运算符。例如:a&&b当a为假时,系统已经可以确定该表达式的值为0,因而不会判断b。a||b当a为真时,系统已经可以确定该表达式的值为1,因而不会判断b。应用:分析生活中的趣味现象,通过设计关系表达式和逻辑表达式来完成现实生活问题的求解。比如,谁在第几排、谁获奖、谁是小偷这样的趣味题来启法学生利用计算机解决问题的思维方法。如:全班同学排成6排。A,B,C,D,E,F等6人分别站在第1排到第6排。已知A不在第1排,A与B前后相邻,C在D前面,E在B的前两排,C在F后的第4排。问A,B,C,D,E,F各在哪一排。给几分钟时间让学生写出逻辑表达式,即学即用以帮助学生将理论与实际联系起来。2.强调运算符的优先级和结合性通过例题求解来验证运算符的优先级和结合性,强调基本的语法规则和细节,以便学生关注这方面的学习,从而掌握基本的语言要素和语法规则。3.自增自减运算自增自减运算是本章的难点,通过举例来帮助学生理解运算。例:设inti=4;求下列表达式的值。4*i++先执行4*i=16,再执行i=i+1,i=54*++i先执行i=i+1,i=5,再执行4*i=20强调自增(自减)运算符放在变量前和变量后不影响变量本身的值,而是影响参与运算的表达式的值。经典算法:数字拆分算法通过经典算法讲解,提高学生基本知识的应用能力,学会即学即用,初步具备问题分析和程序编写能力。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:数据类型的定义、数据的存储和表示常量、变量运算符、优先级、结合性表达式的求值

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:数据的输入与输出教材章节:第4章授课时间:1学时

教学目的:掌握顺序结构程序设计掌握格式化输出函数printf()和输入函数scanf()的使用方法掌握格式控制符的意义,能够准确输出整型、实型和字符型数据掌握字符输出函数putchar()和字符输入函数getchar()掌握简单问题的编程,具备初步的编程能力和程序阅读能力教学内容:是否重、难点输出函数printf()的格式掌握重点输入函数scanf()的格式掌握重点常用格式控制制符%d,%f,%c掌握重点字符输入getchar()和字符输出putchar()了解经典算法:摄华算法和海伦算法掌握重点教学设计(4.1~4.3节):这一章主要实现用C语言如何进行人机对话。程序中最常用的基本操作就是输入输出,通过顺序结构的例题引出输入输出的各种格式操作。任何一个程序都要有数据输入和数据输出,由于C语言中数据类型分了整型、浮点型和字符型,因而就要考虑数据的输入和输出格式,以明确数据的类型。通过举例解释程序中数据的输入和输出,并在集成开发环境中加以观察数据。一、数据的输出整型数据的输出:结果:123,123,□□123,123□浮点型数据的输出:结果:125.738205,125.74,□□125.74,125.74□□数据的输入整型数据输入的几种形式:形式1:inta,b,c;scanf(“%d%d%d”,&a,&b,&c);形式2:inta,b,c;scanf(“%d,%d,%d”,&a,&b,&c);形式3:(不建议使用)inta,b,c;scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);通过这三种不同形式的数据输入来理解数据的输入规则。浮点型数据的输入:floata,b;doublec;scanf(“%f%f%lf”,&a,&b,&c);混合型数据的输入:floata,b;charc;scanf(“%f%f%c”,&a,&b,&c);或scanf(“%f%c%f”,&a,&c,&b);三、经典算法“摄华算法”和“海伦算法”。通过分析这两个例题来应用数据的输入和输出。摄华算法编写程序,输入华氏温度,输出对应的摄氏温度,计算公式:式中:c表示摄氏温度,f表示华氏温度。问题分析:(1)输入的已知条件:华氏温度f;(2)希望得到的输出结果:摄氏温度c;(3)采用的算法:c=5*(f-32)/9。程序参考代码:#include<stdio.h>intmain(){ intf; doublec;/*双精度浮点型数据*/ scanf("%d",&f); c=5*(f-32)/9; printf("f=%lf",c);/*按双精度浮点型数据输出c的值*/ return0;}输入:100运行结果:f=37.000000思考题:如果将程序中的华氏温度转换成摄氏温度的计算公式写成5/9*(f-32),结果又如何呢?请上机验证并分析原因。海伦算法海伦公式传说是古代的叙拉古国王希伦二世发现的公式,即利用三角形的三条边的边长直接求三角形面积的公式。如面积公式见公式(1)所示,它形式漂亮,便于记忆。因为这个公式最早出现在海伦的著作《测地术》中,所以被称为海伦公式。中国秦九韶也得出了类似的公式,称三斜求积术。现在就把海伦公式编写进程序中去,采用的算法我称之为海伦算法。问题:已知三角形三边长为3,4,5,请根据海伦公式(1)计算三角形的面积,其中a,b,c为三边的长。问题分析(1)输入的已知条件:三角形三边长a=3,b=4,c=5;(2)希望得到的输出结果:三角形的面积area;(3)采用的算法:使用海伦算法(海伦公式)计算面积。算法设计(自然语言描述)按自顶向下,逐步细化的模块化设计过程,可以将任务分解为:(1)输入a,b,c的值;(2)使用海伦公式计算三角形的面积area;(3)输出计算结果area。算法实现有了算法就可以开始编写程序代码。本例中暂不考虑判断三边a,b,c是否能构成三角形的问题,由编程者自己控制输入的数据。程序参考代码:1/*程序名:例2-2.C*/2/*功能:给定三角形三边,计算三角形面积*/3#include<stdio.h>4#include<math.h>5intmain()6{7floata,b,c,s,area;8a=3;/*给定a边的长*/9b=4;/*给定b边的长*/10c=5;/*给定c边的长*/11s=(a+b+c)/2;/*计算出s的值*/12area=sqrt(s*(s-a)*(s-b)*(s-c));/*计算出area的值*/13printf("三角形面积为:%f\n",area);/*输出双引号内的字符串及area的值*/14return0;15}运行结果为:三角形面积为:6.0000004.问题思考(1)如果三角形的三边值来源于键盘输入,则程序作何修改?(2)如果要判断三边长是否能构成三角形,程序则需要用到选择结构,请在学习了选择结构后返回来修改该该程序。(3)如果程序设计过程中引入模块化设计思想,请在学习第8章后设计一个函数求三角形的面积。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:输入与输出函数的格式常用格式控制符和普通字符数据输入格式和地址表列

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:选择结构教材章节:第5章授课学时:共2学时

教学目的:掌握用关系运算符和关系表达式的求解掌握逻辑运行符和逻辑表达式的求解掌握if语句的三种基本形式如何控制程序的执行掌握switch的应用,实现多分支选择结构掌握break语句在switch语句中的作用掌握选择结构程序设计,具备初步的算法设计、程序编写和调试程序能力教学内容(5.1~5.4节):是否重、难点if分支结构掌握重点switch开关结构掌握重点教学设计:这一章开始增加程序的逻辑思维难度,程序开始变得复杂。教学过程中要注重理论与现实生活、与例题结合,以生活中的趣味性例题来调动学生的思维,激发学习的欲望,获得即学即用的能力。1.if语句这一讲开始进入控制语句的学习,if选择语句有三种格式,应该把每一种格式讲清楚,程序的流程如何执行通过集成开发环境的单步运行进行演示。格式1:if(表达式)语句;格式2:if(表达式)语句1;else语句2;格式3:if语句嵌套的一般格式:if(表达式1)if(表达式2)内嵌if语句,当表达式1的值为真时被执行语句1;内嵌if语句,当表达式1的值为真时被执行else语句2;elseif(表达式3)内嵌if语句,当表达式1的值为假时被执行语句3;内嵌if语句,当表达式1的值为假时被执行else语句4;强调配对的原则是else与if总是与位于它前面的最近的未配对的if配对。2.switch开关语句switch语句的一般格式:switch(表达式){case常量表达式1:语句组1[break;]case常量表达式2:语句组2[break;]……case常量表达式n:语句组n[break;][default:语句组n+1]}其中,方括号括起来的内容是可选项。执行过程:首先计算switch后“表达式”的值,如果等于某个case后的“常量表达式”的值,就执行其后的语句,执行完后自动执行下一个case后的语句,直到遇到break或switch语句的右括号为止。如果switch后“表达式”的值不等于任何一个“常量表达式”的值且有default语句,则执行default后的语句组,若无default语句,则退出switch语句。上课需强调的内容:1)witch括号中的表达式的值只能是整型或字符型,case后面的常量表达式的类型必须与之匹配。2)同一个switch语句中各个常量表达式的值必须是唯一的且互不相等。3)有break语句和无break语句的程序控制。作业与实验登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:if语句和switch语句的基本语法编程应用

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:选择结构教材章节:第5章授课学时:共1学时

教学目的:掌握选择结构程序设计,具备初步的算法设计、程序编写和调试程序能力教学内容(5.3.3~5.5节):是否重、难点应用举例-经典算法掌握重点难点教学设计:语法记得再牢、背得再熟,如若不能用在编程,那也是白学,就好比考驾照,科目1考满分,也不能驾车上路,还必须多开车练习通过实践科目才能驾使汽车,编程也一样,多练就能应用。通过以下几个案例的学习,轻松记住if语句和switch语句的语法和编程。海伦算法数位拆解报数游戏芳龄几何选择排序作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:关系运算符、逻辑运算符的优先级、结合性关系表达式和逻辑表达式、条件表达式的求解C语言的逻辑值的表示和逻辑量的判断if语句和switch语句的编程应用

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:循环结构教材章节:第6章授课学时:共2学时

教学目的:掌握while和do-while、for循环结构掌握循环结构的程序设计,达到解决复杂问题的目的。教学内容:(6.1~6.4节)是否重、难点Goto语句与标号了解while和do-while循环结构掌握重点for循环结构掌握重点辅助语句掌握重点教学设计:每天周而复始的工作和生活,会使我们感到很烦,很累,单调而无趣。但是周而复始的工作和生活永远是生命中不可或缺的主题,如果我们能够调整好自己的心情,用我们的智慧,从中发现快乐,也是挺不错的事情。现在,咱们就来编写一个循环结构的程序玩玩,让程序不停地在哪儿打圈圈,让电脑“累死”,我们在一旁看着,岂不也是一件快乐的事。现在,我们来玩一个猜数游戏,由此拉开循环结构程序设计吧。intmain(){inti=1,guess;printf("GameStart!\n\n");printf("Inputguess\n");while(i<=3){scanf("%d",&guess);if(guess==8){printf("Wow,Youaregreat!\n");break;}elseif(guess>8)printf("Bigbig!\n");elseprintf("Smallsmall!\n");i++;}if(i==4)printf("Sorry!,you'veguesseditthreetimes.\n");return0;}我们要让计算机不断循环执行某个动作,这就是我们要学习的循环语句。while语句的一般形式如下:while(表达式)循环体语句;while…可以翻译成:当……时候。WhileIwasalittleboy,Istudyveryhard。当我是个小男孩的时候,我学习很刻苦的。现在是否刻苦就不知道啦。那么,计算机怎么执行while(表达式)循环体语句;呢?执行过程:当while后面表达式的值为非0(即条件为真)时,执行循环体语句。执行完后(完成一次循环操作)再次返回求表达式的值,重复上述过程,直到表达式的值为0(即条件为假)时,不再执行循环体,结束循环。while循环是前测循环,其特点是:先求表达式的值(或判断条件)后执行循环体语句。do-while语句的一般形式如下:do循环体语句;while(表达式);执行过程:先执行循环体语句,然后求表达式的值。如果表达式的值为非0(即条件为真)时,返回继续执行循环体语句,如此反复,直到表达式的值为0(即条件为假)时,结束循环。其特点是:先执行循环体语句,后判断条件,因而该循环至少执行了一次循环体。仍是同一个例题。for语句的一般格式为:for(表达式1;表达式2;表达式3)循环体语句;执行过程:(1)先求解表达式1;(2)再求解表达式2,若其值为非0,则执行循环体语句,否则转到第(5)步;(3)执行完循环体语句后,求解表达式3;(4)转回第(2)步;(5)结束循环,执行for语句后的下一条语句。三种循环都用同一个例题,其目的是有个使用比较,在一例多解中让学生明白三种循环语句在应用上的特点,以达到准确使用循环语句的目的。也可培养和训练学生一题多解的思维,掌握更多的解题方法。在IDE集成开发环境中进行运行观察,通过演示让学生直观看到系统运行循环语句的过程,使学生更能理解循环语句的执行流程。4.break和continue语句通过案例分析这两个语句控制程序流程的作用。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:三种循环语句的控制流程与continue、break的使用循环语句的嵌套和利用循环语句进行简单编程

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:循环结构教材章节:第6章授课学时:共2学时

教学目的:掌握利用循环结构进行程序设计,解决更加复杂的问题教学内容:是否重、难点循环嵌套掌握重点难点continue、break和空语句掌握重点难点应用举例-经典算法掌握重点难点教学设计(6.5节)这一讲案例较多,时间比较紧,建议以算法设计思想为主,程序的细节让学生课后通过教学平台再学习。1.编程输出下列图形。*************************#include<stdio.h>intmain(){ inti,j; for(i=1;i<=5;i++)/*控制图形的行数*/ {printf("");/*在每行的开始输出若干个空格,使得图形偏中*/ for(j=1;j<=2*i-1;j++)/*控制输出每行中的“*”号个数*/ printf("*");printf("\n");/*换行*/ }}2.九九乘法表从问题分析、算法设计、程序实现进行学习,通过人人熟知的例题来加深对循环嵌套的理解。3.迭代算法某人摘下一些桃子,卖掉一半又吃了一个;第二天卖掉剩下的一半,又吃了一个;第三天、第四天、第五天都如此办理,第六天一看,发现就剩下1个桃子了。编写一个程序,求此人共摘了多少个桃子。问题分析:从第六天仅剩下1个桃子向前推理,则:第五天剩下的桃子数为:(第六天的桃子+1)×2;第四天剩下的桃子数为:(第五天的桃子+1)×2;第三天剩下的桃子数为:(第四天的桃子+1)×2;依此类推,第一天剩下的桃子数为:(第二天的桃子+1)×2;从上述分析可以知道本题可以采用倒推迭代算法,分析本题中迭代算法的三要数。(1)迭代变量:桃子的数量m是本题的迭代变量;(2)迭代关系:从上述分析中可以知道迭代关系为:m=(m+1)*2;(3)结束条件:从题意可知,只要迭代5次就可以倒推第一天的桃子数量。程序参考代码如下:#include<stdio.h>intmain(){ intm=1,i; for(i=1;i<=5;i++) m=(m+1)*2; printf("桃子总数为:%d\n",m);return0;}4.穷举法数字游戏:有12个1分别站在等号两边,成为“111111=111111”,现在往等式右边的1中间插入两个乘号,并空出一个位置,成为:111111=111×11×□1编写一个程序,求空出的位置上应添加什么数字。问题分析:设应添加的数字为x,使111111==111*11*(10*x+1)成立。从等式可以分析出x的取值只能是0~9,对x进行0~9的穷举,看哪个数能使等式成立。当x满足上述式子时,立即退出穷举,结束循环。程序清单如下:#include<stdio.h>intmain(){ intx=0; while(111*11*(10*x+1)!=111111)/*相等时结束循环,不相等执行x++*/ x++;printf("x=%d\n",x);return0;}5.擂台算法从键盘任意输入一组数,当输入的数据为0时,结束输入,求该组数中最大的数。问题分析:先设两个变量m和max,m表示输入的数,max表示最大的数。将第一个数m作为max的初值,然后将每次输入的数m与max进行比较,若m大于max,将m赋值给max,使得max取得更大的数,直至输入的数m为0结束。程序参考代码:#include<stdio.h>intmain(){ intm,max; scanf("%d",&m); max=m;/*先设第一个数为最大数*/ while(m!=0)/*判断m是否为0,不为0则执行循环体语句*/ {scanf("%d",&m); if(max<m)max=m; /*将每次比较出的较大的数赋值给max*/ } printf("最大数是%d\n",max); return0; }6.反证算法根据素数的定义,判断整数m是否为素数。素数的定义:素数又叫质数,就是只能被1和自己整除的数。换句话说,不能被除1和自己以外的任何一个数整除的数,称为素数。问题分析:如果m能被2~m-1之中任何一个整数整除,则m为非素数;如果m不能被2~m-1之间的任一整数整除,则m是素数。(1)输入的已知条件:给定一个整数m;(2)希望得到的输出结果:m是否为素数;(3)采用的算法:使用反证法,并依据素数定义推断m是否为素数。反证法推断m是否为素数的基本思想:假设m是素数,在2~m-1之间试图寻找一个反例,即在2~m-1之间如果能够找到一个i,m能被i整除,依据素数定义,就可以否定原来的假设,即m不是素数;如果在2~m-1之间寻找不到反例,则原来的假设正确,即m是素数。算法设计:见图6-15所示。判断m是否是素数的N-S图。图6-15判断m是否是素数的N-S图算法实现:#include<stdio.h>#include<math.h>/*程序中用到平方根函数*/intmain(){ intm,i,k; scanf("%d",&m);/*输入m的值*/ intflag=1;/*假设m为素数*/ for(i=2;i<=m-1;i++)/*在2~m-1之间寻找反例*/ if(m%i==0){/*如果m能被i整除,说明寻找到一个反例*/flag=0;/*否定原来的假设,那么m不是素数*/break;/*有一个反例,足以否定原来假设,所以是break跳出循环*/} if(flag)printf("%d是素数\n",m);elseprintf("%d不是素数\n",m); return0;}可以考虑将判断范围进一步缩小。(1)假设m可以分解成两个因子,则有m=i*j。假设i<j,则有i2≤m≤j2,得到i≤≤j,因此,i的取值范围可以确定为2~。(2)因此,如果m能被2~中的任一整数整除,则可判断m是非素数;如果m不能被2~中的任一整数整除,则说明m是素数。(3)所以,程序中的m-1可以替换为。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:三种循环语句的控制流程与continue、break的使用循环语句的嵌套和利用循环语句进行简单编程

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:数组教材章节:第7章授课学时:共2学时

教学目的:掌握数组的定义、初始化和数组元素的引用掌握数组下标越界问题掌握数组的应用,学会利用数组处理数据的能力掌握查找、排序数组具备较好的批量数据处理能力和编程应用能力教学内容(7.1-7.4节):是否重、难点一维数组的定义和引用、初始化掌握重点二维数组的定义和引用、初始化掌握重点字符数组的定义掌握重点字符串与字符数组、常用的字符串处理函数了解难点教学设计:亚瑟·叔本华(德国哲学家)说:单个的人是软弱无力的,就像漂流的鲁滨逊一样,只有同别人在一起,他才能完成许多事业。通过名人名句引出使用数组的必要性。这一讲的教学内容较多,如果面面俱到全部讲完,教学安排的时间肯定是不够的,因此,课堂上主要以讲解一维数组、二维数组的基本概念为主,应用主要放在经典算法的章节中进行消化。一维数组定义的一般格式:类型说明符数组名[数组长度];接着以图的形式分析数组及数组元素。例如:inta[10];表示定义了一个名为a的数组,数组大小为10。即a数组有10个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。每个元素的数据类型为整型数据,编译时系统会在内存中分配10个连续的整型数据存储单元给a数组,见图1所示。图1数组在内存中的存储形式特别要强交待数组下标从0开始,下限为n-1。下标越界带来的严重问题。一维数组的初始化全部赋值:inta[10]={1,2,3,4,5,6,7,8,9,10};部分赋值:inta[10]={1,2,3,4,5};特别注意:未赋值的元素默认为0。未赋值三种情况:inta[10];特别注意:未赋值的元素与未赋值的变量一样,其值为不确定的值。2.二维数组二维数组定义的一般格式:类型说明符数组名[第1维长度][第2维长度];第1维长度:表示二维数组第1维的大小,即二维数组的行数;第2维长度:表示二维数组第2维的大小,即二维数组的列数;第1维长度、第2维长度都必须是常量表达式。例如:inta[3][4];表示定义了一个整型数组a,表示有3行4列,共12个整型元素。floatb[4][5];表示定义了一个单精度浮点型数组b,表示有4行5列,共20个浮点型元素。C语言存储二维数组是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素,依此类推。图2表示a[3][4]数组在内存中的存放顺序。a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][4]图2二维数组存储示意图二维数组的初始化二维数组的初始化有以下四种形式:按行完全初始化inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};在大括号中的每对大括号表示一行数据,每行数据按顺序赋值给对应的元素。按行部分初始化inta[3][4]={{1,2},{7,8,5,6},{10}};每对内大括号表示一行数据,根据一维数组初始化概念可知未赋值的元素默认为0。因此,第一行{1,2}表示a[0][0]的值为1,a[0][1]的值为2,a[0][2]和a[0][3]的值为0。其余行同理。给全部元素初始化inta[3][4]={1,2,3,4,5,6,7,8,9,10};像这种没有内大括号的初始化形式,系统会按行给每个元素赋初始值,则每个元素的值为:a[0][0]=1,a[0][1]=2,a[0][2]=3,a[0][3]=4,a[1][0]=5,a[1][1]=6,a[1][2]=7,a[1][3]=8,a[2][0]=9,a[2][1]=10,a[2][2]=0,a[2][3]=0。省略第1维长度的初始化inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};也可写成:inta[][4]={1,2,3,4,5,6,7,8,9,10,11,12};若给全部元素初始化时,二维数组的第1维的长度可省略,编译系统会根据给定的数据个数除以第2维的长度计算出来。3.字符数组字符数组定义的一般格式:charstr[10];表示定义了一个字符数组,数组名为str,其含有10个元素,每个元素均为单个字符。字符数组的初始化有以下三种形式:1)给出数组大小的初始化charch[10]={H,e,l,l,o};数组ch前5个元素的值分别是H、e、l、l、o,而其余5个未被初始化的数组元素的值是\0。该数组在内存中占用了10个字节,字符串的长度为5。2)未给出数组大小的初始化charch[]={H,e,l,l,o};这里省略了数组的大小,该数组的大小由初始化字符的个数决定。因而该字符数组大小为5,在内存中占用5个字节。但求字符串长度时会出现意想不到的结果。这是因为字符数组初始化时没有串结束符\0,它不是一个完整的字符串,编译系统不知道该字符序列在何处结束,只有遇到存储在其后的第一个串结束符\0时才认为结束。因此,这种情况要尽可能避免出现,建议采用的定义形式:charch[]={H,e,l,l,o,\0};3)用字符串常量初始化charch[]=Hello;用字符串常量对字符数组进行初始化时,存储字符串时系统会自动加上串结束符\0,因此,该数组在内存中要占用6个字节,字符串长度为5。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:数组的定义、初始化和引用字符串与字符数组数组的应用,重点考核

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:数组教材章节:第7章授课学时:1学时

教学目的:掌握字符数组的定义掌握字符数组与字符串的关系了解常用的字符串处理函数掌握利用字符数组进行编程,具备程序设计能力教学内容(7.5节)是否重、难点冒泡法排序算法掌握难点难点选择法排序算法掌握难点难点查找算法掌握难点难点最大值与最小值算法掌握难点难点教学设计查找算法:在一堆人群中如何找一个人?擂台法:求最大值和最小值。冒泡排序法和选择排序法。在讲授冒泡法和选择法对数组排序时,进行情景模拟以实现数组元素的位置动态移动,完成数组元素的排序。主要通过动画讲透算法思想,只有把算法思想讲清楚了,才能掌握数组的排序,排序在生活中应用较广,比如比赛成绩排序。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:数组的定义、初始化和引用字符串与字符数组数组的应用,重点考核

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:函数教材章节:第8章授课学时:2学时

教学目的:掌握函数的定义及调用掌握函数的调用,掌握形式参数与实际参数的对应关系掌握函数的传值调用和传地址调用的不同了解递归调用掌握利用函数实现程序的模块化设计,养成良好的程序设计风格。教学内容(8.1~8.2节)是否重、难点函数的基本概念(函数的定义、返回值、声明)掌握重点函数的调用和函数的参数传递掌握重点难点函数的递归调用了解难点教学设计问题法:提出为什么要使用函数进行程序设计?以企业管理“分而治之”的思想来说明函数模块化的作用。函数定义的格式:返回值类型函数名(形式参数列表)/*函数头*/{/*函数体开始*/声明部分;语句;}/*函数体结束*/函数的三要素:参数,返回值和函数功能。函数的返回值。return表达式;函数的调用特别要说明传值调用和传地址调用的作用及区别。通过举例来说明两种调用的不同。比如:你把照片的原件给了另一个人,这个人对照片的任何修改都影响了这张照片,类似函数的传地址调用。但如果你把照片的复制件给了另一个人,这个人对复制照片的修改都不会影响原件,这是传值调用。案例1:通过求的值说明函数调用递归调用:由于递归调用这节内容难度较大,学生不易理解,可以先通过生活中的现象来说明递归的概念,如老和尚给小和尚说故事,引出函数的递归调用。从前有座山,山里有座庙。庙里有个老和尚和小和尚。老和尚给小和尚说故事,说的什么故事?说的从前有座山,山里有座庙。庙里有个老和尚和小和尚。老和尚给小和尚说故事。说的什么呢。。。通过这个故事来说明递归调用要有终结条件,否则就变成无意义的操作。案例1:5个学生坐一起,第5个学生比第4个学生大2岁,…,问第5个学生的年龄。分析此题:设计递归式和终此递归条件,写出算法,实现编程。案例2:讲解n!,分析递归调用的执行过程,加深对递归的理解。汉诺塔案例分析起来需要较长的时间,因此,这部分内容要求学生线下在网络平台上再进行学习。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:函数的定义、函数的返回值函数的调用函数的参数传递变量的作用范围宏定义

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:函数教材章节:第8章授课学时:2学时

教学目的:了解函数的递归调用掌握局部变量与全局变量的定义,正确理解变量的作用范围。掌握自顶向下,逐步细化的分析过程,通过函数实现程序的模块化设计,养成良好的程序设计风格。教学内容(8.1-8.3节)是否重、难点数组与函数掌握难点掌握局部变量与全局变量的作用范围掌握重点难点掌握变量的存储类型、作用域和生存期了解难点教学设计(8.3节~8.4节):1.数组与函数1)数组元素作函数实参---实现值传递采用对比方法说明数组元素与普通变量作函数的参数作用相同。2)数组名作函数参数---实现地址传递通过案例的方法讲解。由于涉及到地址,学习的难度加大,需要加以板书画图进行讲解,以帮助学生理解。变量的作用域和存储方法通过班长、学生会主席的管理范围来说明局部变量和全局变量的作用域;通过不同班级有同名的学生来说明同名变量仍是两个不同的变量;通过现场运行程序,分析结果来说明局部变量和全局变量的作用范围,特别强调静态局部变量在函数调用时要注意的初始化的问题。案例1:局部变量示例。1#include<stdio.h>2intmain()3{4 intx;5 {6 inty;7 {8 intz;9 x=1;y=2;z=3;m=4;10 }11 x=1;y=2;z=3;m=4;12 }13 {14 intm;15 x=1;y=2;z=3;m=4;16 }17 x=1;y=2;z=3;m=4;18return0;19}该程序代码编译错误,提示如下:D:\csamples\csamples.cpp(9):errorC2065:'m':undeclaredidentifierD:\csamples\csamples.cpp(11):errorC2065:'z':undeclaredidentifierD:\csamples\csamples.cpp(15):errorC2065:'y':undeclaredidentifier编译时遇到无法识别的标识符只在第一处提示,可见第9行,变量x,y,z有效,m无效;第11行x,y有效,z,m无效;第15行x,m有效,y,z无效;第17行只有x有效,y,z,m无效。通过这个例题来说明局部变量的作用域。2.全局变量示例。#include<stdio.h>intgCount;voidincreaseglobal(){ gCount++;}voidincreaselocal(intgCount){ gCount++;}intmain(){ printf("Countinit:%d\n",gCount); increaseglobal(); printf("Afterincreaseglobalfunction:%d\n",gCount); increaselocal(gCount); printf("Afterincreaselocalfunction:%d\n",gCount); return0;}通过这个例题来说明全局变量和全局变量与局部变量同名时如何处理。作业与实验:登录课程中心/portal,完成理论作业。在校园网登录编程俱乐部/,完成上机实验作业。考核要求:函数的定义、函数的返回值函数的调用函数的参数传递变量的作用范围宏定义

教案C语言程序设计(A)课程名称:C语言程序设计(A)教学内容:函数教材章节:第8章授课学时:1学时

教学目的:通过经典算法再次掌握函数模块化的作用。掌握模块化的编程思想和方法教学内容(8.5-8.7节):是否重、难点经典算法了解难点教学设计:由于课堂教学时间有限,这部分内容建议学生线下学习。二分查找算法二分查找算法也称为折半查找算法,其基本思想为:在有序表中,取中间元素作为比较对象,若给定值与中间元素的值相等,则查找成功;若给定值小于中间元素的值,则在中间元素的小数半区继续查找;若给定值大于中间元素的值,则在中间元素的大数半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,查找失败。【例】二分查找:在数组中查找一个给定的数。已知有序表:15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,要求输入需要查询的数据,查找该数在有序表中的位置;如果找到该数,输出该数在有序表中的位置,如果没有找到输出-1;程序参考代码:#include<stdio.h>intSearch(inta[],intn,intkey);intmain(){ inta[]={15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}; intkey;printf("Inputtofindthenumer:"); scanf("%d",&key);if(Search(a,15,key)>=0)printf("%d位于数组第%d个位置\n",key,Search(a,15,key)+1);elseprintf("查无此数!"); return0;}intSearch(inta[],intn,intkey)//inta[]也可以定义成int*a{ intleft=0,right=n-1,mid,index=-1; while(right>=left){ mid=(left+right)/2; if(a[mid]<key) right=mid-1; elseif(a[mid]>key) left=mid+1; else { index=mid; break; } } returnindex;}运行结果:Inputtofindthenumer:12positionis:3冒泡法排序算法【例】任意输入10个数,请按升序排序输出。根据冒泡法排序方法编写一个排序函数,在主程序中调用。参考代码如下:/*按升序用冒泡法排序10个数*/#include<stdio.h>intmain(){inta[10],i;voidsortarray(inta[],intn);printf("input10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);sortarray(a,10);printf("Thesorted10numbers:\n");for(i=0;i<10;i++)printf("%-5d",a[i]);return0;}voidBubbleSort(inta[],intn){inti,j,t;for(i=0;i<n-1;i++)for(j=0;j<n-i-1;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}运行结果:input10numbers:65189123724Thesortednumbers:12345678912思考:如果把输入和输出单独编写函数,又该怎样修改本程序?选择法排序算法【例】任意输入10个数,请按升序排序输出。根据选择法排序算法编写一个排序函数,在主程序中调用。/*按升序用选择法排序10个数*/#include<stdio.h>voidInput(inta[],intn){inti;printf("input%dnumbers:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);/*完成n个元素的输入*/}voidSelectSort(inta[],intn){inti,j,t;for(i=0;i<n-1;i++){intk=i;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论