第5章 计算机程序设计基础C语言

合集下载

计算机程序设计C程序设计教案3篇

计算机程序设计C程序设计教案3篇

计算机程序设计C程序设计教案第一篇:计算机程序设计基础一、课程概述计算机程序设计是计算机科学与技术专业的重要课程之一,它主要是通过讲解计算机程序设计的基础知识、方法和技巧,培养学生的程序设计能力和计算机应用能力,从而使学生能够熟练掌握C语言,为其今后的专业学习以及职业发展打下坚实的基础。

二、主要内容本课程主要涉及以下内容:1. C语言基础知识:常量、变量、数据类型、运算符等;2. 控制结构:条件语句、循环语句等;3. 函数:函数的定义、调用、返回值等;4. 数组:一维数组、多维数组等;5. 指针:指针的定义、使用、指针与数组等;6. 文件操作:文件的读写操作等。

三、教学目标1. 熟练掌握C语言的基础知识,能够独立编写简单的C程序;2. 理解掌握C语言的控制结构,能够使用条件语句、循环语句等进行程序设计;3. 熟练掌握函数的定义、调用、返回值等知识,能够编写简单的函数;4. 具备一定的数组使用能力,能够编写简单的数组应用程序;5. 熟练掌握指针的定义、使用、指针与数组等知识,能够编写简单的指针应用程序;6. 了解文件操作的基本知识,能够进行文件读写操作。

四、教学方法1. 授课法:授课老师通过讲解授课,向学生讲解C语言的基础知识、方法和技巧;2. 编程实践法:在课堂上,通过编写小程序来帮助学生理解和掌握知识;3. 课堂讨论法:通过讨论经典例题,帮助学生理解和掌握知识;4. 课程设计法:在课程设计中,通过设计、开发并实现一些小应用系统,来帮助学生更好地将所学知识应用到实际中。

五、教学评估方式1. 平时表现评估:包括作业完成情况、课堂参与情况、考勤情况等;2. 考试评估:学习期末将组织一次考试,将学生平时的学习情况作为重要考评基础;3. 课程设计评估:学习期末,将限定时间内完成的小应用系统作为课程设计的评估方式。

六、教学建议1. 建议学生在学习过程中注重实践,通过编写越来越复杂的程序来逐步掌握所学知识;2. 建议学生在平时多进行思考和探索,掌握自主学习的方法;3. 建议学生积极参与课堂,多与老师和同学互动,及时解决疑惑和问题。

《计算机程序设计基础

《计算机程序设计基础

《计算机程序设计基础——C程序设计》教学大纲一、课程基本信息课程代码:XW0003课程名称:计算机程序设计基础—C语言程序设计(An Axiomatic Basis for Computer Programming -C Programming Design)课程性质:必修课课程类别:通识教育基础课程适用专业:非计算机专业的工、管、理、文、法各专业总学时:50(理论)+30(上机)学时总学分:5学分先修课程:高等数学后续课程:面向对象程序设计、相关专业课程课程简介:程序设计基础是高等院校非计算机专业学生接受计算机教育的一门基础课程,旨在培养学生具有设计算法、编写程序和调试程序的能力。

首先应掌握计算机的硬件与软件的基础知识,了解操作系统基本概念,学会使用Windows操作系统,掌握信息的存储与运算,了解计算机安全的相关知识,了解网络的基本概念,能够具备在网上获取信息和信息交换的能力,掌握网络通信与网页制作的基本知识,为后续课程打好基础。

C语言是一种通用的高级程序设计语言,具有其它高级语言所不具备的低级语言功能,不但可用于编写应用程序,还可用于编写系统程序,因而得到最广泛的应用。

同时, C语言的掌握为后续的面向对象程序设计、Windows 程序设计、Java程序设计等程序设计语言的学习奠定基础。

本课程包括两部分的内容:计算机文化基础和C语言程序设计。

其中文化基础包括:计算机基础知识(软硬件的组成、数制转换、数值存储)、文件相关知识(文件的命名、操作、存取格式)、网络的基础知识(相关术语)和信息安全基础知识(病毒及其特点、传播和防治)、软件基础知识等;C语言程序设计的内容包括:C语言的概述;基本数据类型、运算符与表达式;数据输入输出函数、C语言的语句;顺序结构程序设计、选择结构程序设计和循环结构程序设计;数组、函数、指针、结构体、共同体和枚举的应用;位运算;编译预处理;文件的建立和使用。

选用教材:《计算机文化基础》[M].安徽:中国科技大学出版社,2010年;《C程序设计(第三版)》[M].北京:清华大学出版社,2006年;参考书目:《C语言程序设计》[M].安徽:安徽大学出版社,2004年;《C语言程序设计》[M].北京:高等教育出版社,2008年;《C语言复习指南与题解》[M].北京:清华大学出版社, 2003年;《Turbo C 实用大全》[M].北京:机械工业出版社, 2001年;二、课程总目标课程总目标:通过理论和实践教学,使学生较好地掌握C语言各方面的知识,掌握基本的程序设计方法、过程和技巧,具备初步的高级语言程序设计能力,并能熟练应用TURBO C集成环境,或着VC++集成环境进行C语言的编写、编译与调试,并初步积累编程经验,能应用C语言解决简单的程序设计问题;为后续的面向对象程序设计、Windows程序设计、Java程序设计等程序设计语言的学习奠定编程思维模式基础。

C语言习题答案1-7章

C语言习题答案1-7章

程序设计基础(C语言版)习题第01章绪论一.选择题1.以下叙述中正确的是________。

A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整参考答案:D【解析】程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。

所以选项A)、B)、C)说法都不完整。

2.以下关于简单程序设计的步骤和顺序的说法中正确的是。

A)确定算法后,整理并写出文档,最后进行编码和上机调试B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构参考答案:B【解析】设计一个能解决实际问题的计算机程序需要经过以下几个过程:①建立模型。

②算法设计:给出解决问题的步骤,即算法。

③算法表达:选择一种表达算法的工具,对算法进行清晰的表达。

④编写程序:选择一种程序设计语言,把以上算法程序化,这称为编写程序。

⑤程序调试:对编写好的程序进行调试,修改程序中的错误。

⑥程序文档编写与程序维护。

综上所述,B)选项是符合上述描述的,其他选项不恰当。

3.以下叙述中正确的是________。

A)C程序的基本组成单位是语句B)C程序中的每一行只能写一条语句C)简单C语句必须以分号结束D)C语句必须在一行内写完参考答案:C【解析】函数是C程序的基本组成单位;C语言书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。

故本题答案为C)。

4.以下叙述中正确的是。

A)C程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上D)用C语言编写的程序只能放在一个程序文件中参考答案:C【解析】在C语言中,注释可以加在程序中的任何位置,选项A)错误。

《C程序设计基础》课程思政元素

《C程序设计基础》课程思政元素

《C程序设计基础》课程思政元素第五章循环控制5.5数值计算求解方程根一、授课内容(1)一元二次方程求解,将数学计算过程转换为计算机算法,利用计算机程序求解;二分法设计与实现,表达式对算法效率的影响;牛顿迭代法设计与实现,函数对算法效率的影响;快速开根方算法的理解与实现(思考与拓展)。

(2)认知计算机迭代算法效率问题,综合分析二分法、牛顿迭代算法、快速开根方算法求解平方根。

(3)拓展讨论程序运行时间计算问题;时间函数库的应用、程序运算的时间成本、运算效率在计算机算法设计中的重要性及影响计算机执行效率的因素。

二、实施过程(一)思政元素类型:家国情怀;科学精神。

(二)课堂教学方法1.教学手段“算法效率提升”。

利用程序设计中的“迭代开发”思想,由浅入深,螺旋式上升。

教学过程由四个迭代周期构成,每个迭代周期平均25分钟左右,采用PPT、视频等多媒体形式。

采用“问题教学法”,部分内容需要学生网上搜索资料并加以归纳分析。

教师讲授主要完成引导、重点讲解和总结,大部分教学活动留给学生,发挥学生主动性,锻炼学生的协作学习能力。

说明:(1)二分法和牛顿迭代法在《C语言程序设计(理工类)》课程所选教材中有明确的阐述和源程序,有利于学生课前预习和课后复习。

(2)快速平方根算法在网上有相关资料(百科和博客),需要学生通过网络去查询相关资料,鼓励学生主动获取知识和技能。

(3)利用课前和课间5分钟时间播放《厉害了,我的国》与计算机产业相关的片段。

从分析计算机运算效率的因素讨论引入思政元素的内容。

2.课程思政融入点课程知识点中相关的“计算效率”、“迭代计算”与国家计算机产业发展、科学精神等相契合。

三、思政元素内容神威·太湖之光超级计算机(一)元素内容超级计算机,被称为“国之重器”,超级计算属于战略高技术领域,是世界各国竞相角逐的科技制高点,也是一个国家科技实力的重要标志之一。

自中国863计划实施以来,国家高度重视并且支持超级计算系统的研发,但由于基础薄起步较晚,在国际舞台中一直受制于人,美国更是在2015年宣布对中国禁售高性能处理器。

c程序设计第4版

c程序设计第4版

c程序设计第4版C程序设计第4版C语言是一种通用的、过程式的计算机程序设计语言,广泛用于系统软件与应用软件的开发。

自从1972年由丹尼斯·里奇在贝尔实验室开发以来,C语言已经成为计算机编程领域的基石之一。

随着计算机科学的发展,C语言也在不断地更新和完善,其中《C程序设计》这本书就是学习C语言的重要教材之一。

第1章:C语言概述在第4版中,C语言概述部分会对C语言的历史、特点以及它在现代编程中的地位进行介绍。

C语言以其高效性、灵活性和广泛的应用领域而著称。

本章还会简要介绍C语言的基本语法结构和编程范式。

第2章:C语言基础本章将详细介绍C语言的基本元素,包括数据类型、变量声明、运算符和表达式。

此外,还会讲解控制语句,如if语句、switch语句、循环语句(for、while、do-while)等,这些都是编写C程序时不可或缺的基础。

第3章:函数函数是C语言中实现代码复用的重要手段。

本章将介绍函数的定义、声明、调用以及参数传递机制。

同时,也会探讨递归函数的概念和应用。

第4章:数组和字符串数组是存储固定大小同类型元素的集合,而字符串实际上是字符数组的一种特殊形式。

本章将深入讲解一维数组和多维数组的使用,以及字符串处理函数的应用。

第5章:指针指针是C语言中非常强大的一个特性,它允许程序员直接操作内存地址。

本章将介绍指针的基本概念、指针与数组的关系、指针的算术运算以及函数指针等高级主题。

第6章:结构体和联合体结构体和联合体是C语言中用于创建复杂数据类型的工具。

本章将讲解如何定义和使用结构体、联合体以及枚举类型,以及它们在实际编程中的应用。

第7章:预处理器预处理器是C语言编译过程中的一个阶段,它提供了宏定义、文件包含、条件编译等功能。

本章将详细介绍预处理器的使用方法和技巧。

第8章:文件操作文件操作是程序与外部世界交互的一种方式。

本章将介绍如何在C语言中打开、读取、写入和关闭文件,以及文件指针的概念。

第9章:动态内存分配动态内存分配允许程序在运行时申请和释放内存。

C程序设计第五章课后习题答案

C程序设计第五章课后习题答案

循环结构程序设计P115 5.1 用while计算1至100的合.#include<stdio.h>int main(){int i=1,sum=0;while(i<=100) //对于需要运算的值,要么在运算前可以赋值,要么一开始要指定.{sum=sum+i;i++;}printf("The sum is %d .\n",sum);return 0;}P117 5.2 用do-while来做1至100的合.#include<stdio.h>int main(){int i=1,sum=0;do// do-while可以做的事,用while都可以做到.{ //do-while先做一次执行,再判断条件,而while却是先做一个条件,再执行.sum=sum+i;i++;}while(i<=100);printf("The sum is %d .\n",sum);return 0;}P118 5.3 比较do-while与while的差别.#include<stdio.h>{int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,正常,11的话,则sum仍然是0.while(i<=10){sum=sum+i;i++;}printf("The sum of 1-10 is %d .\n",sum);return 0;}#include<stdio.h>int main(){int i,sum=0;printf("Please input a number :");scanf("%d",&i); //输入10以内,结果一样.输入11的话,先做操作,所以sum=11.do{sum=sum+i;i++;}while(i<=10); //此重点在于理解二者的差别.printf("The sum of 1-10 is %d .\n",sum);return 0;}P126 5.4 break的例子.#include<stdio.h>int main(){int i,b=0,a,c;for(i=0;i<=1000;i++){printf("Please input amount :"); //循环体内套有输出语句以及跳出语句.scanf("%d",&a);b=b+a;if(b>=100)break; //break是用于跳出循环,对if无效,对while for switch 这一类.}}c=b/i;printf("conut is %d , aver is %d ",i+1,c); //注意%号后的形式,否则可能输出错误.return 0;}P127 5.5 continue的例子.#include<stdio.h>int main(){int i;for(i=1;i<20;i++){if(i%3!=0){continue; //跳过本次I,执行下一个i.}printf("%d ",i);}printf("\n");return 0;}P128 5.6 形成一个4*5的矩阵.#include<stdio.h>int main(){int i,j,a=0; //没有给初值,会出现警告: 使用了未初始化的局部变量“a”.for(i=1;i<=4;i++){for(j=1;j<=5;j++,a++) // a用来控制换行.{if(a%5==0){printf("\n");}printf("%d\t",i*j);}}printf("\n");return 0;}P131 5.7 用一个交错的式子求哌的近似值.#include<stdio.h>#include<math.h>int main() //四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).{float s=1,n=1,m,sum=0,t;for(m=1;;m=m+2) //不确定哪项才会小于等于十的负六次方,所以不指定,无限下去.{ //不指定第二项,执行语句中应该有控制跳出的句子,否则死循环.t=(s)*(n/m); //这是第一项,s是符号,if(fabs(t)<=1e-6) //应该写在这里,题目要求这一项不累加进去.{break;}sum=sum+t; //因为累加项在这里,所以,一旦跳出就不会累加进来了.s=s*(-1); //变号一次.}printf("四分之一哌的值是%f.\n",sum);printf("一个完整哌的值是%f.\n",sum*4);return 0;}//下面这段小代码用来验证关于数值型数据类型的关系.去掉注释,可运行.//如果出现类似值为全1或是全零的话,一般可以考虑数据类型赋值或是定义错了的问题.//#include <stdio.h> //这是关于int float double三者关复杂关系的,乱啊,如果看不懂,可以通过实验自己明白来.////int main() //在C语言中,1.0认为是实数,即是double型,所以,如果你把它用float输出的话,会有警告:警告 1 warning C4305: “=”: 从“double”到“float”截断.//{// float m,a,b,c; //一旦定义了是这种类型的话,输出或是赋值的时候只能扩展不能截断,意思就是能变成double型,不能变成int型啦.而且后面的赋值会跟着它变成相应的类型.比如下面的m=1,其实得到的是m=1.0.// int d,e,f;// m=1;// a=1.0/3;// b=1/3;// c=m/3;// d=1.0;// e=1/4;// f=1.0/4;// printf("%lf(float用double的%lf来输出是可以的.)\n%f\n%f\n%f\n",m,a,b,c); //不管上面定义什么,这边写的输出类型是什么,就按相应的类型输出,有可能会出错,所以建议按定义的类型来输出.当然扩展的是不会错的,截断的是会错的,比如float可以用%lf来输出,而不能用%d来输出.// printf("%d\n%d\n%d\n",d,e,f); //但是,不相应的int型不可以用%f来输出的.因为int float就不同种类,一个是整数,一个是小数,float double同样是有小数点的!!!!// return 0;//}#include<stdio.h>int main() //这个就是著名的Fibonacci(费波那契数列问题){int f1=1,f2=1,f3,i;printf("%12d\n%12d\n",f1,f2);for(i=1;i<=38;i++) //注意,这是个基础问题,(i=1;i<=5;i++)这里其实进行了次运算,因为有f1,f2,要求有个,所以要有个.要么写<=38,要么写<39,边界问题一定要注意,不可以太随意!!!!{f3=f1+f2;printf("%12d\n",f3); //这个问题同样适用于"一对兔子一个月生一对"的问题.,f1=f2; //f1=f1+f2;此时它们各是,所以,现在的f1是.f2=f3; //f2=f2+f1;此时的f1已经是最先二者之和了.可以不用到f3.}return 0;}#include<stdio.h>#include<math.h>int main(){double num;int i;printf("Please input a number :");scanf("%lf",&num); //因为sqrt要求是浮点型,那就给它浮点型,需要时再强制转换.for(i=2;i<=sqrt(num);i++) //这边是<=号没错.{if((int)num%i==0) //如果在这期间有任何一个可以为零的话,则不是素数.{break; //当然跳出.}} //执行到这里的时候,i=5,已经变成了!!if(i<=sqrt(num)){printf("Not %d",(int)num);}else//如上所述,i=5,超出了求根的值,所以是素数.{printf("Yes %d",(int)num);}return 0;}P137 5.10 求100至200间的素数.#include<stdio.h>//不解释,HOHO>>>>...#include<math.h>int main(){double j;int i,k=0;for(j=100;j<=200;j++){for(i=2;i<=sqrt(j);i++){if((int)j%i==0){break;}}k=k+1; //这里是布局的开头.学习一下,有助逻辑.if(i<=sqrt(j)){printf("Not %d ",(int)j);if(k%5==0) //5个换一次行.{printf("\n");}}else{printf("Yes %d ",(int)j);if(k%5==0){printf("\n");}}}return 0;}P139 5.11 密码转换.#include<stdio.h>int main(){char c;c=getchar();while(c!='\n') //这也可以用数组来实现.{if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){if((c>='w'&&c<='z')||(c>='W'&&c<='Z')){c=c-22;}else{c=c+4;}printf("%c",c);c=getchar(); //套在循环里,依次得到字母,而while中判断回车为结束.}}printf("\n"); //这是布局问题.return 0;}P140 0.3 最大公约数和最小公倍数.#include<stdio.h>//最大公约数用累除法,除到无余数时的被除数是最大公约数.main (){int m, n, c, d;int gcd(); //这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); //这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf("Please input two number :\n");scanf("%d %d",&m,&n);c=gcd(m,n); //c获取最大公约数d=lcm(m,n); //d获取最小公倍数printf("The GCD of %d and %d is : %d !\n", m, n, c);printf("The LCM of %d and %d is : %d !\n", m, n, d);return 0;}int gcd(int x, int y) //最大公约数Greatest Common Divisor{int temp;while(x%y!=0){temp=y; //y在下一轮中作为除数,即是下一轮中的X,所以先闪一边去.y=x%y; //x,y的余数作为下一轮中的Y,由x%y来取得.x=temp; //刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.}return y; //这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理. }int lcm(int x, int y) //最小公倍数Lowest Common Multiple{int i, temp;if(x<y) //此段代码结果是保证二者大的数在X上,小的数在Y上.即小于号降序.{ //以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;}for(i=1; i<=y; i++) //设定一个区间,从1至大的数之间的循环.{if(!((x*i)%y)) //此式子如有余数,加上"!"号,会是假,则不返回,进行下一轮.{ //如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数.return x*i;}}}P140 0.4 判断一串输入的字符.#include<stdio.h>int main(){char ch;int a=0,b=0,c=0,d=0,e=0;printf("Please input the string\n");while((ch=getchar())!='\n') //直到回车.{if(ch<='z'&&ch>='a'){a++;}else if(ch==' '){c++;}else if(ch<58&&ch>47){d++;}else if(ch<='Z'&&ch>='A'){b++;}else{e++;}}printf("大写%d 小写%d 空格%d 数字%d 其它%d\n",a,b,c,d,e);}#include<stdio.h>//不理解时可以百度或是谷歌更多的信息.int main() //想办法既快速做完,又要消化理解!!!{int temp,i,a,n,sum=0; //主逻辑,友好性暂时放松.scanf("%d %d",&a,&n); //a是数字,n是要乘的个数.temp=a; //先把第一阶的值存起来.for(i=0;i<n;i++){sum=sum+a;printf("%d + ",a); //事关布局.a=a*10+temp; //重点是每次乘,然后加上上一个数.}printf("= %d .",sum);return 0;}P140 0.6 1!+2!+3!+4!.....的值. #include<stdio.h>int main() //1!+2!+3!+4!.....{int i,j,k,sum=0,m=1;scanf("%d",&k); //比如设定为,值为.for(i=1;i<=k;i++) //第一层循环,指定到.{for(j=1;j<=i;j++) //第二层循环,指定至当前数.{m=m*j;} //到此是阶乘的结构.sum=sum+m;m=1;}printf("%d",sum); //完全不理解时,搜索并参考.return 0; //尝试自己做,第一次做出来就是自己的东西了. }#include<stdio.h>int main(){int a,b;double c,asum=0,bsum=0,csum=0;for(a=1;a<=100;a++) //三个块分别注释验证结果.{asum=asum+a;}for(b=1;b<=50;b++) //在VS运行中,注意*.cpp为C++语言.{bsum=bsum+b*b; //为了避免语言差别,请注意文件名为*.c.}for(c=1;c<=10;c++) //c作浮点运算,所以定义在double类型中.{csum=csum+1/c;}printf("%lf",asum+bsum+csum);return 0;}PP#include<stdio.h>#include<math.h>int main(){int j,k,s[6],x=100,y,sum=0;for(j=153;j<=154;j++){for(k=2;k>=0;k--){s[k]=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(s[k],3);sum+=y;printf("%d-%d--%d\t",k,s[k],j);}printf("%d\n",sum);}return 0;}P140 0.8 水仙花数.//#include <stdio.h> //一步步的发现问题.////int main() //在%和/号之间,以前pow.以后再做.//{// int i,j,k,a,b,c,sum=0; //这里逻辑对,算出来却错了.// for(i=2;i<=4;i++) //计算机在想什么,看来它的大脑难以模拟.// {// for(j=pow(10,i);j<=pow(10,i+1)-1;j++) //我不完全明白它遵守的逻辑. // {// for(k=0;k<=i;k++)// {// sum+=pow((j%pow(10,i+1)/pow(10,i)),3);// }// if(sum==j)// {// printf("%d 是水仙花数!\n",j);// }// sum=0;// }// }// return 0;//} //为什么还是无法实现?!#include<stdio.h>#include<math.h>int main(){int a,b,c,i,sum=0; //这里只计算三位数的.for(i=100;i<1000;i++){a=i/100;b=i%100/10;c=i%10;sum+=a*a*a+b*b*b+c*c*c;if(sum==i){printf("%d 是水仙花数.\n",i);}sum=0;}return 0;}P141 0.9 完数.#include<stdio.h>int main(){int i,j,r;for(i=1;i<=1000;i++) //零是个临界值,不能包括它.{r=0; //每次清零重来.类似水仙中的sum.for(j=1;j<i;j++){if(i%j==0) //除得尽即是因子.{r=r+j; //然后累加进去.}}if(r==i) //若相等.{printf("%d 是完数.\n",i);}}return 0;}P141 0.10 2/1+3/2+5/3+8/5+13/8…#include<stdio.h>int main() //10.007051{double i,a=2,b=1,c,s=0; //a是分子,b是分母.for(i=0;i<6;i++) //二十可以用户指定.{s+=a/b; //中间储值变量.c=a+b;b=a;a=c;}printf("%lf\n",s);return 0;}#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{double sum=100,high=100,up,donw,i;for(i=1;i<10;i++) //不管指定到哪个数,都不会超过三百.{up=high/2;donw=up;high=donw; //自咬尾巴问题.sum+=donw*2;}printf("%lf %lf\n",donw,sum);return 0;}P141 0.12 猴子吃桃子.#include<stdio.h>int main() //从一百开始,减一半再自加两次,下降一次,反弹一次.{int i,sum=1;for(i=1;i<=10;i++) //临界要清楚,结果要与手算的前几个实例相匹配.{printf("倒数第%d天还剩有%d个桃子.\n",i,sum);sum=(sum+1)*2;}//printf("%d\n",sum);return 0;}#include<stdio.h>#include<conio.h>main() //只关注左半部分.右半部分无视空格.{int i,j,k,m=6; //m可指定,指定中心点位置.可任意奇偶.for(i=1;i<=m;i++) //上半部分.其实也是正三角.{for(j=1;j<=m-i;j++) //一到中心点前i个位置填充空格.printf(" ");for(k=1;k<2*i;k++) //空格后向前填充星号的个数.是奇数.一,三,五... printf("*");printf("\n");}for(i=m-1;i>0;i--) //下半部分.其实也是倒三角.{ //减一是因为行数问题.这是中心行以下的.for(j=m-1;j>=i;j--)printf(" ");for(k=1;k<2*i;k++)printf("*");printf("\n");}getch(); //用户反应后结束.但,没必要.}。

最新c语言第五章选择结构程序设计(习题册答案)

最新c语言第五章选择结构程序设计(习题册答案)

最新c语⾔第五章选择结构程序设计(习题册答案)第五章选择结构程序设计基础练习(A)⼀、填空题1、关系表达式的运算结果是逻辑值。

C语⾔没有逻辑型数据,以1代表“真”,以0代表“假”。

2、逻辑运算符!是单⽬运算符,其结合性是由右结合性。

3、C语⾔提供的三种逻辑运算符是&&、|| 、!。

其中优先级最⾼的为!,优先级最低的为| | 。

4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和⾮0的整数,也可以是任何类型的数据。

系统最终以0 和⾮0 来判定它们属于“真”或“假”。

5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。

6、设x,y,z均为int型变量,请写出描述“x或y中有⼀个⼩于z”的表达式x7、条件“22&&x<3。

8、判断char型变量ch是否为⼤写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。

9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。

10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。

11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是0。

12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是1。

13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。

14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。

!(x>y)+(y!=z)||(x+y)&&(y-z)15、有int a=3,b=4,c=5,x,y;,则以下表达式的值为0。

!(x=a)&&(y=b)&&016、if (!k) a=3;语句中的!k可以改写为k= =0,使其功能不变。

C语言程序设计第5章数组.ppt

C语言程序设计第5章数组.ppt
冒泡法排序
2019/3/19
F
冒泡法排序 (续)
程序如下:
#define N 6 #include "stdio.h" void main( ) {int a[N]; int i,j,t; printf("请输入%d个成绩,用空格隔开:\n",N); for (i=0; i<N; i++) scanf("%d",&a[i]);
2019/3/19
5.2.2 数组元素的引用(续)
2.说明
① 下标从0开始(下界为0),数组的最大下标 (上界)是数组长度减1。 例如: int a[10],i; scanf ("%d",&a[10]); /* 下标越界 */ C编译系统不做越界检查。
2019/3/19
5.2.2 数组元素的引用(续)
【例5-4】用冒泡法(也称起泡法)对输入的一组 成绩按从低分到高分的顺序排序并输出。
例如将6个数:4、7、5、6、8、1按从小到大顺序用冒泡 法排序,方法如下: 在第一趟排序中, 6个数比较了5次,把6个数中 第一趟排序情况如下: 的最大数8排在最后。 4 7 5 6 8 1 第一次 4和7比较,不交换 4 7 5 6 8 1 第二次 7和5比较,交换 457681 第三次 7和6比较,交换 456781 第四次 7和8比较,不交换 4 5 6 7 8 1 第五次 8和1比较,交换 456718
2019/3/19
5.1概述(续)
2.数组与数组元素的概念
数组:是用一个名字表示的一组相同类型的数据的集合, 这个名字就称为数组名。 如定义:float a[10]; a是数组名。 下标变量(或数组元素):数组中的数据分别存储在用下 标区分的变量中,这些变量称为下标变量或数组元素。 如:a[0]、a[1]…a[i]。 每个下标变量相当于一个简单变量,数组的类型也就是该 数组的下标变量的数据类型。 数组属于构造类型。构造类型的数据是由基本类型数据按 一定规则构成的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例1 将求 1×2×3×4×5的 算法用流程图表示。 如果需要将最后结果 输出:
N
开始
1 t
2 i t*it i+1i
i>5
Y 输出t
结束
2、用流程图表示算法
例2 有50个学生,要求将成绩在80分以上的 学生的学号和成绩输出。 将此问题的算法用流程图表示。
如果包括输入数据部分
开始 1 i 输入ni、gi Y
2、用流程图表示算法
流程图表示法:
使用图形符号描述解决问题的逻辑步骤,并显示 各步骤之间的相互关系。 它使用图的形式掩盖了处理步骤的所有细节,只 显示从开始到结束的整个流程。
用图形表示算法,直观形象,易于理解
2、用流程图表示算法
一个入口
Y 两个出口 ……
x≧0
N
……
起止框
输入输出框
判断框
例1 求1×2×3×4×5 × …×1000 可以用最原始的方法进行:
步骤1:先求1*2,得到结果2。 步骤2:将步骤1得到的乘积2再乘以3,得到结 果 6。 步骤3:将6再乘以4,得24。 步骤4:将24再乘以5,得120。这就是最后的结 果。
太繁琐
5.1.2 简单的算法举例
改进的算法:
N
ቤተ መጻሕፍቲ ባይዱ
p1 Y A
N
x+1x
输出0,1,2,3,4
3、用N-S流程图表示算法
(3) 循环结构
② 直到型循环结构until 0 x x+1x A N p2 N
输出x的值
x≧ 5 Y 输出1,2,3,4,5
Y
3、用N-S流程图表示算法
以上三种基本结构,有以下共同特点:
(1) 只有一个入口 (2) 只有一个出口
A
B 顺序结构
A
直到p2成立 循环结构 (直到型)
选择结构
3、用N-S流程图表示算法
例1 将求5!的算法用N-S图表示。
1 t
2 i
t*it
i+1i
直到i>5 输出t
3、用N-S流程图表示算法
例2 将50名学生中成绩 高于80分者的学号 和成绩输出。 将此算法用N-S图表示。
1 i 输入ni、gi

一个判断框有两个出口 一个选择结构只有一个出口
(3) 结构内的每一部分都有机会被执行到。也就是 说,对每一个框来说,都应当有一条从入口到出 口的路径通过它 (4) 结构内不存在‚死循环‛
3、用N-S流程图表示算法
N-S流程图也称盒图。 N-S流程图用以下的流程图符号:
p Y A N B 当p1成立 A 循环结构 (当型)
处理框
流程线
连接点
注释框
① ③
② ③ ③
位置不够
起止框 ① 输入输出框 ②
处理框 防止交叉 判断框
流程线
连接点
注释框
2、用流程图表示算法
例1 将求 1×2×3×4×5的 算法用流程图表示。 如果需要将最后结果 输出:
开始
1 t
2 i t*it i+1i N
i>5
Y
结束
2、用流程图表示算法
5.1.2 简单的算法举例
year不能 被4整除
非闰年
闰年
year被100 整除,又能 被400整除 year被4整 除,但不能 被100整除
闰年
其他
逐渐缩小判 断的范围
非闰年
5.1.3 算法的特性
一个有效算法应该具有以下特点:
(1) 有穷性。一个算法应包含有限的操作步骤,而 不能是无限的。 (2) 确定性。算法中的每一个步骤都应当是确定的, 而不应当是含糊的、模棱两可的。 (3) 有零个或多个输入。所谓输入是指在执行算法 时需要从外界取得必要的信息。 (4) 有一个或多个输出。算法的目的是为了求解, ‚解‛ 就是输出。
5.1.5 算法的评价标准
(2)算法的时间复杂度:
指依据算法编写出程序后在计算机上运行时所耗 费的时间度量。
算法的时间复杂度T(n)实际上表示:当问题规模n充分大 时,该程序运行时间的一个数量级,用O表示。 比较两个算法的时间复杂度时,不是比较两个算法对应 程序的具体执行时间,这涉及编程语言、编程水平和计 算机速度等多种因素,而是比较两个算法相对于问题规 模n所耗费时间的数量级。 eg:O(1),O(n),O(n2)
5.1.1 什么是算法
计算机算法:
一个能够被计算机处理的,有限长的操作序列。
计算机算法可分为两大类别: 数值运算算法

数值运算的目的是求数值解。 非数值运算包括的面十分广泛,最常见的是用于事务 管理领域。
非数值运算算法

算法是程序的灵魂,解决‚做什么‛和‚怎 么做‛的问题。
5.1.2 简单的算法举例
1、把冰箱门打开
2、把大象装进去 3、把冰箱门关上
2000春晚小品《钟点工》
又如家中烧开水的 过程分几步?
5.1.1 什么是算法
广义地说,为解决一个问题而采取的方法和 步骤,就称为‚算法‛。
例如:从家到学校,煎鸡蛋等。
注意:
对同一个问题,可以有不同的解题方法和步骤。 为了有效地进行解题,不仅需要保证算法正确, 还要考虑算法的质量(算法分析),选择合适的算 法。
设year为被检测的年份。算法表示如下: S1:2000year S2:若year不能被4整除,则输出year 的值和 ‚不是闰年‛。然后转到S6 S3:若year能被4整除,不能被100整除,则输 出year的值和‚是闰年‛。然后转到S6 S4:若year能被400整除,则输出year的值和 ‚是闰年‛ ,然后转到S6 S5: 其他情况输出year的值和‚不是闰年‛ S6:year+1year S7:当year≤2500时,转S2,否则停止
难点:
C/C++程序设计基础; 编译过程。
5.1 算法
5.1.1 什么是算法 5.1.2 简单的算法举例 5.1.3 算法的特性 5.1.4 怎样表示一个算法 5.1.5 算法的评价标准
5.1.1 什么是算法
一个农夫带着一条狼、一只山羊和一篮蔬菜过 河,但只有一条小船,并且每次只能让农夫带一样 东西过河。农夫在场的情况下一切相安无事,一旦 农夫不在,狼会吃羊,羊会吃蔬菜。问聪明的农夫 如何解决过河问题。
5.1.1 什么是算法
5.1.1 什么是算法
5.1.1 什么是算法
5.1.1 什么是算法
5.1.1 什么是算法
方案1:先带羊过去,空船回,再带菜过去,带 羊回,然后带狼过去,空船回,最后带 羊过去。 方案2:先带羊过去,空船回,再带狼过去,带 羊回,然后带菜过去,空船回,最后带 羊过去。 解决问题的关键是先带羊,且第二次回来时 也要带羊回来。
对于算法设计者来说: 必须知道算法的细节。
5.1.4 怎样表示一个算法
1、用自然语言表示算法 2、用流程图表示算法 3、用N-S流程图表示算法 4、用伪代码表示算法 5、用计算机语言表示算法
1、用自然语言表示算法
5.1.2节介绍的算法是用自然语言表示的。 用自然语言表示通俗易懂,但文字冗长,容 易出现歧义性。 用自然语言描述包含分支和循环的算法,不 很方便。 除了很简单的问题外,一般不用自然语言。
(算法结束)
5、用计算机语言表示算法
要完成一项工作,包括设计算法和实现算法 两个部分。 设计算法的目的是为了实现算法。 不仅要考虑如何设计一个算法,也要考虑如 何实现一个算法。
5.1.5 算法的评价标准
可以从以下几个方面对算法进行评价:
(1)算法的正确性:指算法能正确地完成所要解决
的问题。
开始 2000year year不能 被4整除 N year不能 被100整除
Y year是闰年 year+1year
Y year 不是闰年
N
N
Y
year不能 被400整除
year不是闰年
year是闰年
year>2500
N
结束 Y
3、用N-S流程图表示算法
流程图用流程线指出各框的执行顺序,对流 程线的使用没有严格限制。 使用者可以毫不受限制地使流程随意地转来 转去,使人难以理解算法的逻辑。 归纳起来,算法的处理逻辑可以通过三种基 本结构来表示。
就目前的研究来看,要想通过理论方式证明一个算法的 正确性是非常复杂和困难的,一般采用测试的方法,基 于算法编写程序,然后对程序进行测试。 针对所要解决的问题,选定一些有代表性的输入数据, 经程序执行后,查看输出结果是否和预期结果一致,如 果不一致,则说明程序中存在错误,应予以查找并改正。 经过一定范围的测试和程序改正,不再发现新的错误, 程序可以交付使用,在使用过程中仍有可能发现错误, 再继续改正,这时的改正称为程序维护。
顺序结构、选择结构、循环结构
N-S流程图就是基于这三种基本结构的算法 表示方法。
3、用N-S流程图表示算法
(1) 顺序结构
A
B
3、用N-S流程图表示算法
(2) 选择结构
Y A
p N Y p N
B
A
3、用N-S流程图表示算法
(3) 循环结构
① 当型循环结构while 0 x x<5 Y 输出x的值

没有输出的算法是没有意义的。
(5) 有效性。算法中的每一个步骤都应当能有效地 执行,并得到确定的结果。
5.1.3 算法的特性
对于算法使用者来说:
可以使用别人已设计好的现成算法和程序; 只需根据已知算法的要求给予必要的输入,就能 得到输出的结果; 对使用者来说算法就像一个黑盒子。 输入3个数 求3个数的 黑箱子 最大数 3个数中最大数
设变量p为被乘数 变量i为乘数 用循环算法求结果
相关文档
最新文档