程序设计基础辅导材料6

合集下载

计算机程序设计基础习题册(含答案)

计算机程序设计基础习题册(含答案)

《计算机程序设计基础》习题册计算机程序设计基础_基础知识(一)班级学号姓名成绩一、单选题1.C++源程序文件的默认扩展名为A。

A) cpp B) exeC) obj D) lik2.由C++源程序文件编译而成的目标文件的默认扩展名为C。

A) cpp B) exeC) obj D) lik3.由C++目标文件连接而成的可执行文件的默认扩展名为B。

A) cpp B) exeC) obj D) lik4.编写C++程序一般需经过的几个步骤依次是B。

A)编译、编辑、连接、调试B)编辑、编译、连接、调试C)编译、调试、编辑、连接D)编辑、调试、编辑、连接5.程序中主函数的名字为 A 。

A) main B) MAINC) Main D) 任意标识符6.下面四个选项中,均是不合法的用户标识符的选项的是C。

A) A p_o doB)float lao _AC)b-a goto intD)_123 temp INT7.下列变量名中合法的是C。

A) B)C)Tom B) 3a66C) _6a7b D) $ABC8.存储以下数据,占用存储字节最多的是D 。

A) 0 B) ‘0’C) “0” D) 0.09.在C++语言中,字符型数据在内存中的存储形式是D。

A) 补码 B) 反码C) 原码 D) ASCII码10.若有说明语句:char c =’\072’;则变量c A。

A) 包含1个字符B) 包含2个字符C) 包含3个字符D) 说明不合法,变量的值不确定二、填空题1.C++头文件和源程序文件的扩展名分别为.h和.cpp 。

2.C++语言规定,标识符只能由字母、数字、下划线三种字符组成,而且第一个字符必须是字母或下划线。

3.一条表达式语句必须以__分号_;___作为结束符。

4.用于从键盘上为变量输入值的标准输入流对象是___cin____;用于输出表达式值的标准输出流对象是__cout____。

5.在一个C++程序文件中,若要包含另外一个头文件或程序文件,则应使用以_#include___标识符开始的预处理命令计算机程序设计基础_基础知识(二)班级 学号 姓名 成绩一、 单选题1. 下列哪一个是C++语言中合法的变量 CA) 8ZSe B) ±A0C) X0_2 D) ’x0’2. 已知ch 是字符型变量,下面不正确的赋值语句是 A A) ch='a+b' B) ch='\0'C) ch='7'+'9' D) ch=5+93. 下列浮点数的表示中不正确的是▁C ▁▁A) 223. B) 719E22C) e23 D) 12e24. 下列不正确的转义字符是 ▁C ▁▁A)'\\' B)‘\"’C) '074' D) '\0'5. 在C 语言中,合法的字符常量是 ▁B ▁▁A)'\084' B)'\x43'C)'ab' D)"\0"6. 下列变量定义中合法的是▁A ▁▁A) double _a=1.le-1; B) double b=1+5e2.5;C) double do= 2e3D) double 2_and=1-e-3; 7. 已知ch 是字符变量,正确的赋值语句是▁B ▁A )ch=‘123’ B)ch=’\xff’C) ch =’\08’ D)ch =”\” 8. 若x 、i 、j 和k 都是int 型变量,则计算表达式x=(i=4,j=15,k=32 )后,x 的值为▁▁C ▁。

程序设计基础试题(附答案)

程序设计基础试题(附答案)

程序设计基础复习题一、单选1、一个完整的计算机系统应该包括()A、系统软件和应用软件B、计算机及其外部设备C、硬件系统和软件系统D、系统硬件和系统软件2、“裸机”的概念是指()A、正在进行设计还没有组装好的计算机B、已经组装好但还没有安装任何软件的计算机C、仅安装了操作系统的计算机系统D、安装了文字处理软件但没有安装专用数据处理系统的计算机3、世界上第一台电子数字计算机研制成功的时间是()A、1936年B、1946年C、1956年D、1970年4、CASE的含义是()A、计算机辅助设计B、计算机辅助制造C、计算机辅助教学D、计算机辅助软件工程5、当前广泛使用的微型计算机是()A、第一代B、第二代C、第三代D、第四代6、当代计算机的体系结构称为是()A、冯·诺依曼机B、非冯·诺依曼机C、图灵机D、比尔盖茨机7、硬盘是()A、输入设备B、输出设备C、存储设备D、计算设备8、下面4句话中,最准确的表述是()A、程序=算法+数据结构B、程序是使用编程语言实现算法C、程序的开发方法决定算法设计D、算法是程序设计中最关键的因素9、计算机能直接执行的语言是()A、机器语言B、汇编语言C、高级语言D、目标语言10、解释程序的功能是()A、将高级语言程序转换为目标程序B、将汇编语言程序转换为目标程序C、解释执行高级语言程序D、解释执行汇编语言程序11、下面4种程序设计语言中,不是面向对象式语言的是()A、JAVAB、Object PascalC、DelphiD、C12、不是C语言的基本数据类型是()A、intB、doubleC、charD、bool13、在C语言中,为了求两个整数相除之后得到的余数,可以使用运算符()A、/B、%C、*D、++14、数据的逻辑结构分为()A、纯属结构和非线性结构B、顺序结构和非顺序结构C、树型结构和图型结构D、链式结构和顺序结构15、用链表表示纯属表的优点是()A、便于随机存取B、便于插入和删除操作C、花费的存储空间较顺序存储少D、元素的物理顺序与逻辑顺序相同16、栈的最主要特点是()A、先进先出B、先进后出C、两端进出D、一端进一端出17、下面4句结论只有一句是错误的,它是()A、二叉树是树B、二叉树的左右子树的位置可以颠倒C、可以使用二叉树的思想对数值进行排序D、可以采用链表方式存储二叉树18、螺旋模型中包括需求定义、风险分析、工程实惠和评审四个阶段,在开发过程中()A、每个周期都要包括这四个阶段B、每个周期可以包括不同的阶段C、在最后交付使用之前才进行评审D、在项目开始时才需要进行风险分析19、软件工程的出现主要是由于()A、程序设计方法学的影响B、其他工程科学的影响C、软件危机的出现D、计算机的发展20、在软件工程中,软件测试的目的是()A、试验性运行软件B、发现软件错误C、证明软件是正确的D、找出软件中全部错误二、填空题1、世界上最早的高级程序设计语言是()2、计算机按照工作原理进行分类可以分为()和()3、当前计算机的最基本原理采用的是()4、计算机存储器一般分为两级,它们是()和()5、高级语言程序的翻译有两种方式,一种是(),另一种是()6、数据的存储结构可以用()和()7、树型结构的主要特征是结点之间存在着一种层次的关系,数据元素之间的关系是()的关系。

程序设计重要基础知识点

程序设计重要基础知识点

程序设计重要基础知识点1. 数据类型:程序设计中的数据类型是非常重要的基础知识点。

常见的数据类型包括整型、浮点型、字符型和布尔型等。

了解不同数据类型的特点和使用场景,能够帮助程序员更好地存储和处理数据。

2. 控制结构:掌握程序设计中的控制结构,如条件语句、循环语句和选择语句,可以使程序具有灵活的逻辑和流程控制能力。

控制结构的合理运用能够提高程序的效率和可读性。

3. 函数和模块:函数和模块是程序设计中的重要组成部分。

函数能够封装一段可重复使用的代码,提高代码的复用性和可维护性;而模块能够将相关函数和数据进行组织和管理,提高程序的模块化和可扩展性。

4. 数据结构:了解常见的数据结构,如数组、链表、栈和队列等,是程序设计的重要基础。

不同的数据结构具有不同的特点和应用场景,选择合适的数据结构能够提高程序的效率和性能。

5. 算法和复杂度分析:算法是解决问题的方法和步骤。

了解常见的算法和算法设计思想,如排序算法、搜索算法和动态规划等,能够帮助程序员解决各类实际问题。

同时,了解算法的复杂度分析,可以评估算法的执行效率和资源消耗。

6. 异常处理:在程序设计中,错误和异常是无法避免的。

掌握异常处理的相关知识,能够帮助程序员捕捉和处理程序中的异常情况,增加程序的稳定性和可靠性。

7. 文件和输入/输出:程序设计中,文件和输入/输出是常见的操作。

了解文件的读写操作和输入/输出的相关知识,能够帮助程序员进行文件处理和交互操作,实现程序的功能和数据的持久化。

8. 调试和错误处理:调试是程序开发中的重要环节。

掌握常见的调试技巧和错误处理方法,能够帮助程序员快速定位和解决程序中的错误,提高程序的质量和稳定性。

9. 编程语言和工具:了解常见的编程语言和开发工具是程序设计的基础。

不同的编程语言和工具有着不同的特点和使用场景,熟悉它们能够帮助程序员选择合适的工具和技术,提高开发效率和代码质量。

以上是程序设计中重要的基础知识点,掌握这些知识将为大学生提供良好的编程基础,帮助他们更好地学习和应用程序设计。

《C程序设计项目教程》(魏宇红)789-6课件 项目六

《C程序设计项目教程》(魏宇红)789-6课件 项目六

三、局部变量和全局变量
1.局部变量 在函数内部定义的变量称为局部变量,它只在该函数范围内有效。
2.全局变量 在函数外部定义的变量称为全局变量,其作用范围是从定义变量的
位置开始到本源文件结束。
局部变量
全局变量
四、变量的存储类型
变量的存储方式分为静态存储方式和动态存储方式。
在程序运在行程期序间运,行系期统间对,变系量统分对配变固量定动的态存地储分空配间存。储空间。 数据在内存中的存储方法又称存储类别,具体包含自动(auto)、 静态(static)、寄存器(register)和外部(extern)四种。 声明格式为:
值和参数类型。但当函数的定义在调用之前时,可以省略函数的声明。 一般来说,比较好的程序书写顺序是:先声明函数,然后写主
函数,接着再写那些自定义的函数。
(二)函数定义
一个完整的函数定义,如下所示:
函数返回值类型 函数名(参数表) {
语句体; }
参数列表由0个或多个参数组成,写在函数名后面的圆括号内,用 于向函可数函以传数是函送名项数数通目体值常二是或用中实从一提现函个及函数能的数带反任功回映何能数函数的值数据主。功类体参能型部数的、分列单,表词内表给示出,的且每在一程个序参中数必都 要指须某出是个一其唯数般类一据是型的类一和。型条参它的复数必指合名须针语。要、句根符指,据合向用参标结花数识构括列符的号表命指括中名针起给规、来出则,的,参由数字的母个、数数,字函和数下可划分 为无线指参组向中函成数间数。组可和函的以有数指是参名针一函后条数面或。必若当须干参跟条数一语个对句数括。多号于,1用个来时与,其参他数标之识间符用区逗分号开隔。开。
do
{
printf("Input x1,x2:\n");

程序设计基础练习题(全部有答案版)

程序设计基础练习题(全部有答案版)

程序设计基础练习题(全部有答案版)程序设计基础练习题(全部有答案版)介绍:程序设计是计算机科学中的一门基础学科,它涉及到计算机程序的设计、编写和调试。

通过练习基础练习题,学生可以巩固和提高自己的程序设计能力。

本文将为您提供一些程序设计基础练习题,并附上答案,帮助您更好地理解和掌握程序设计的基本知识。

1. 基本输入输出题目描述:编写一个程序,要求用户输入两个数字,然后将这两个数字相加并输出结果。

```C++#include <iostream>int main() {int num1, num2, sum;std::cout << "请输入两个数字:" << std::endl;std::cin >> num1 >> num2;sum = num1 + num2;std::cout << "两个数字的和为:" << sum << std::endl;return 0;```2. 条件判断题目描述:编写一个程序,要求用户输入一个整数,然后判断该整数是否为偶数,并输出判断结果。

```Javaimport java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num;System.out.println("请输入一个整数:");num = scanner.nextInt();if (num % 2 == 0) {System.out.println("该整数是偶数。

");} else {System.out.println("该整数不是偶数。

程序设计基础练习题(全部有答案版)

程序设计基础练习题(全部有答案版)

一、单项选择题(每小题2分,共20分)第一章D 1.下列说法中错误的是()。

A、程序的执行总是从主函数开始B、主函数可以调用任何非主函数的其它函数C、任何非主函数可以调用其它任何非主函数D、程序可以从任何非主函数开始执行C 2.若a=4,b=7,则输出4*7=28的语句是()。

A、printf(“a*b=%d\n”a+b);B、 printf(“a*b=%d\n”,a*b);C、printf(“%d*%d=%d\n”,a,b,a*b);D、 printf(“%d*%d=%d\n”,a+b);第三章C 1. C语言中int型数据占2个字节,则long型数据占(C )个字节。

A、1B、2C、4D、8D 2.若C中int型数据占2个字节,则double型数据占(D )个字节。

A、1B、2C、4D、8B 3.若a为整型变数,则以下语句(B )。

a=-2L;printf(“%d\n”,a);A、赋值不合法B、输出-2C、输出不确定值D、输出2D 4. 若int型数据占2个字节,则下列语句的输出为(D )。

int k=-1;printf(“%d,%u\n”,k,k);A、-1,-1B、-1,32767C、-1,32768D、-1,65535B 5. 下列程序的输出是(B )。

#include<stdio.h>main(){printf(“%d\n”,null);}A、0B、变量无定义C、-1D、1C 6.若x为float型变数,则以下语句:x=223.82748;printf("%6.2f\n",x);运行结果为(C )。

A、223.8B、223.82C、223.83D、223.827D 7. 设有语句int a=3;则执行语句a+=a-=a*a后,变量a 的值是(D )。

A、3B、0C、9D、-12第四章A 1. 执行语句:a=5,b=8;printf(“%d\n”,c=a/b); 后输出的值为(A )。

Visual FoxPro 9.0 基础教程第6章 程序设计基础

内存变量的操作
保存内存变量 格式:save to <内存变量文件名>[all like/except <内存变量名表>] 删除内存变量 格式一:release <内存变量名表> 格式二:release all [like/except <内存变量>] 恢复内存变量 格式:restore from 内存变量文件名
“海南 医学院”

删除尾部空格后联接两个字符型数据
“海南 ”-“医学院”
“海南医学院”
$
比较,查看一个字符串是否在另一个字符串中
“海南”$“海南医学院”
.T.
6.2.3 关系表达式
运算符
功能
表达式
表达式值
<
小于
3*5<20
.T.
>
大于
3>1
.T.
=
等于
3*6=20
内存变量的操作
内存变量赋值 格式一:STORE <表达式> TO <内存变量名>|<数组表> 例: STORE "visual foxfro" TO vfp,vf STORE 1+3 TO A1,B2,C3 格式二:<内存变量>|<数组>=<表达式> 例: vfp="visual foxfro" vf="visual foxfro" A1=1+3
6.1.4 变量分类
系统变量(System Variable) 它是系统内部定义的一些变量。这些变量名称是系统已经定义好的,以“_”(下划线)开头。如:_BROWSER 对象变量(Object Variable) Visual Foxpro是一种面向对象的语言,所以系统提供一种称之为对象的变量。存储对象的变量,是一种新变量。

计算机基础与程序设计考试复习资料

计算机基础与程序设计考试复习资料填空题11、在C语⾔中,输⼊操作是由库函数printf( )完成的,输⼊操作是由库函数scanf()完成的。

12、在函数外部定义的变量统称为全局变量,它们的作⽤域从定义之处开始,直到源⽂件或程序结束。

13、C语⾔中的⽂件,按存取⽅式可以分为顺序存取⽂件和随机存取⽂件。

14、在⼀个C源程序中,注释部分两侧的分界符分别为/*和*/。

15、在C语⾔中,如果实参是简单的数据类型,则函数形参和实参之间的数据传递,只能由实参传给形参。

16、⼀个C源程序中⾄少应包括⼀个名为main( )的主函数。

50、COMMAND COM为键盘命令处理程序,DOS系统启动后,它常驻内存,包含所有内部命令。

51、Turbo c中,float类型变量在内存中占字节数为4。

52、在C语⾔中,合法的长整型常熟是0L。

53、C语⾔中最简单的数据类型包括整型、实型、字符型。

54、在宏定义#define PI3.14159中,宏名PI代替的是⼀个字符串。

55、计算机的硬件系统由运算器、控制器、存储器、输⼊输出设备基本部件组成。

56、计算机能直接执⾏的程序是机器语⾔程序。

57、为了将所有扩展名为 .PAS的⽂件改成扩展名为.P,应使⽤命令REN *. PAS *. P。

58、C语⾔中,运算对象必须是整型数的运算符是%。

59、若调⽤⼀个函数,且此函数中没有return语句,则正确的说法是:该函数返回⼀个不确定的值。

60、当顺利执⾏了⽂件关闭操作时,fclose函数的返回值是0。

61、软盘、硬盘、光盘属于外部存储器。

62、语⾔编译程序若按软件分配应属于系统软件。

63、为了列出A盘当前⽬录中⽂件标识符不超过三个字符扩展名为任意的⽂件清单,可选⽤DIR A:.*。

64、0.314e10表⽰C语⾔double类型常量。

65、在C语⾔的if语句中,⽤作判断的表达式为任意表达式。

66、在C语⾔中,引⽤数组元素时,其数组下标的数据类型允许是整型常量变量或整型表达式。

程序设计基础考试复习资料

程序设计基础1. 如果int a=3,b=4;则条件表达式"a<b? a:b"的值是32. C语言中函数返回值的类型是由函数定义时指定的类型决定的。

3. 对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是将5个初值依次赋给a[0]至a[4]。

4.设有如下定义:struck sk{ int a;float b;}data;int *p;若要使P指向data中的a域,正确的赋值语句是p=&data.a。

5.int a=3,b=5;if(a=b)printf("%d=%d",a,b);else printf("%d !=%d",a,b);的输出结果是3!=56. 函数是构成C语言程序的基本单位。

7.结构化程序由三种基本结构组成,三种基本结构组成的算法是可以完成任何复杂的任务。

8.在函数调用时说法正确的是实际参数和形式参数可以同名9. 下列程序#include <stdio.h> main() { int s=0,a=5,n; scanf("%d",& n); do { s+=1; a=a-2; }while(a!=n); printf("%d,%d\n",s, a); }执行输入整数1的结果是2,1。

10. 在C语言中,函数的数据类型是指函数返回值的数据类型。

11. 如有定义语句int c[]={1,5,3,4,6,7,0},则数组有个7元素。

12. 若int x=2,y=3,z=4 则表达式x<z?y:z的结果是3。

13. 已知char s3[]="China";,则程序段printf("%d",sizeof(s3));的输出结果是6。

(字符串数组最后一个元素是'\0',长度6。

)14. 若“int n; float f=13.8;”,则执行“n=(int)f%3”后,n 的值是115.下列程序#include <stdio.h> main() { int x, y =0; for(x=1;x<=10;x+ +) { if(y>=10) break; y=y+x;} printf(“%d%d”,y,x); }执行的结果是10 5。

国家开放大学《程序设计基础》章节自测参考答案

国家开放大学《程序设计基础》章节自测参考答案第一章导论一、选择题(每题12分,共60分)1.当代计算机的最主要的体系结构称为是______。

A.非冯·诺依曼机B.图灵机C.PASCAL机D.冯·诺依曼机2.计算机软件是指______ 。

A.计算机程序B.计算机程序及其有关文挡C.源程序D.源程序和目标程序3.计算机能直接执行的语言是______。

A.目标语言B.机器语言C.汇编语言D.高级语言4.显示器是______。

A.计算设备B.存储设备C.输入设备D.输出设备5.系统软件的核心软件是______。

A.汇编程序B.操作系统C.编译程序D.机器语言二、判断题(每题10分,共40分)6.CPU主要包括运算器和寄存器两大部分。

(×)7.图灵机由一条双向都可无限延长的被分为一个个小方格的磁带、一个有限状态控制器和一个读写磁头组成。

(√)8.冯·诺依曼在当年发表的EDVAC计算机方案确立了计算机系统的5大基本部件:存储器、控制器、运算器、输入设备和输出设备,同时也规定了5大部件的基本功能。

(√)9.计算机的硬件与软件虽然各有分工,但它们之间的功能界面是浮动的。

随着技术的发展,一些功能既可由硬件实现,也可由软件来完成。

(√)第二章解题要有程序一、选择题(每题6分,共48分)1.JAVA语言的类别是______。

A.面向硬件的程序设计语言B.面向问题的程序设计语言C.面向过程的程序设计语言D.面向对象的程序设计语言2.汇编程序的任务是______。

A.将汇编语言编写的程序转换为目标程序B.将汇编语言编写的程序转换为可执行程序C.将高级语言编写的程序转换为可执行程序D.将高级语言编写的程序转换为汇编语言程序3.C语言是______。

A.高级语言B.机器语言C.目标语言D.汇编语言4.要保证程序在多次反复使用过程中不发生错误,关键应该提高程序的______。

A.可靠性B.有效性C.正确性D.可维护性5.汇编语言属于______。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第6章算法和问题求解本章我们来学习算法的基本概念。

首先我们要了解算法,掌握算法的描述方法,进一步我们要学习算法的三种基本结构,然后要了解常见的、典型的算法,并要学习如何设计自己的简单算法。

6.1 算法的描述方法1、用自然语言表达所谓的“自然语言”指的是日常生活中使用的语言,如汉语、英语或数学语言。

例如:我们想计算1到N的累加和,为简单起见,设N的值不大于1000。

这就是用自然语言配合数学语言描述算法。

用自然语言描述的算法通俗易懂,而且容易掌握,但算法的表达与计算机的具体高级语言形式差距较大,通常是用于介绍求解问题的一般算法。

2、用伪代码表示伪代码是一种介于自然语言与计算机语言之间的算法描述方法。

它结构性较强,比较容易书写和理解,修改起来也相对方便。

其特点是不拘泥于语言的语法结构,而着重以灵活的形式表现被描述对象。

它利用自然语言的功能和若干基本控制结构来描述算法。

伪代码没有统一的标准,可以自己定义,也可以采用与程序设计语言类似的形式。

3、用传统流程图描述算法流程图也叫框图,它是是用各种几何图形、流程线及文字说明来描述计算过程的框图。

用流程图描述算法的优点是:直观,设计者的思路表达得清楚易懂,便于检查修改。

表6.1是用传统流程图描述算法时常用的符号。

表6.1流程图常用符号用流程图描述算法时,一般要注意以下几点:(1)应根据解决问题的步骤从上至下顺序地画出流程图,各图框中的文字要尽量简洁。

(2)为避免流程图的图形显得过长,图中的流程线要尽量短。

(3)用流程图描述算法时,流程图的描述可粗可细,总的原则是:根据实际问题的复杂性,流程图达到的最终效果应该是,依据此图就能用某种程序设计语言实现相应的算法(即完成编程)。

4、N-S结构化流程图N-S结构化流程图主要特点是取消了流程线,全部算法由一些基本的矩形框图顺序排列组成一个大矩形表示,即不允许程序任意转移,而只能顺序执行,从而使程序结构化。

N-S图也是流程图的一种很好的表示方法,对应于三种基本结构的N-S图如图6.2所示。

(1)顺序结构 (2)选择结构(3)循环结构图6.2 N-S 图的三种基本控制结构图中“S1”或“S2”既可以是简单功能的操作,如数据赋值、数据的输入或输出等,也可以是三种基本控制结构中的1种。

在我们的教材中有一些简单的例题,比较详细地示范了如何使用这些算法的描述方法进行算法描述,请大家认真进行自学,通过例题,体会一下这些常用的算法描述方法。

6.2 算法设计中的基本方法人们希望计算机求解的问题是千差万别的,所设计的求解算法也千差万别,一般来说,算法设计没有什么固定的方法可循。

但是通过大量的实践,人们也总结出某些共性的规律,其中包括递归方法、分治方法、贪心法、回溯法、动态规划法以及平衡原则等等。

在我们的课程中不可能对每一种算法都进行深入的讲解,我们只选择最基本、最典型的的穷举法进行一些讨论,以使大家对于算法和算法设计方法有一个初步的了解。

1、程序设计的一般步骤我们在拿到问题之后,不可能马上就动手编程解决问题,要经历一个思考、编程的过程,对于一般的小问题,我们可以进行简单处理,按照下面给出的5步进行求解:第1步:明确问题的性质,分析题意我们可以将问题简单地分为:数值型问题和非数值型问题。

不同类型的问题可以有针对性地采用不同的方法进行处理。

第2步:建立问题的描述模型对于数值型问题,我们可以建立数学模型,通过数学模型来描述问题。

对于非数值型问题,我们一般可以建立一个过程模型,通过过程模型来描述问题。

第3步:设计/确定算法对于数值型的问题,我们可以采用数值分析的方法进行处理。

在数值分析中,有许多现成的固定算法,我们可以直接使用,当然我们也可以根据问题的实际情况设计算法。

对于非数值型问题,我们可以通过数据结构或算法分析与设计进行处理。

也可以选择一些成熟的方法进行处理,例如:穷举法,递推法,递归法,分治法,回溯法等。

在算法确定之后,我们要使用上一节中介绍的算法描述方法对算法进行描述。

第4步:编程调试根据算法,采用一种编程语言编程实现,然后上机调试,得到程序的运行结果。

第5步:分析运行结果对于运行结果要进行分析,看看运行结果是否符合预先的期望,如果步符合,要进行判断问题出在什么地方,找出原因对算法或程序进行修正,直到得到正确的结果。

下面我们采用穷举法对数值型问题进行求解,让大家首先来体会一下求解数值问题的思考过程。

2、使用穷举法解决数值型问题穷举法也叫枚举法或蛮干法。

其基本思想是根据面临的问题,逐一列举各种可能的情况,并判断每种情况是否满足题设条件。

这种方法的好处是最大限度考虑了各种情况,从而为求出最优解创造了条件。

例1:百钱百鸡问题。

中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?问题分析与算法设计这是一个典型的数值型问题,我们要首先建立这个问题的数学模型,数学模型也就是我们平时说的数学方程。

假设:我们要买x只公鸡,y只母鸡,z只小鸡,根据题目的意思可以得到两个方程:x+y+z=100 ①5x+3y+z/3=100 ②根据题目的意思,我们可以确定x和y的取值范围:0 <= x、y、z <= 100。

我们可以采用穷举法进行求解。

对于变量x,y,z的不同组合,看它们是否满足上面的两个方程,如果满足了,就是问题的一个解。

如果不满足,就不是问题的解。

我们可以采用三重嵌套的循环对变量x,y,z进行组合。

我们可以写出程序1。

程序1:#include <stdio.h>main( ){int x, y, z, j=0; /* j为计数器,记录解的数量*/for (x=0; x<=100; x++) /* 穷举变量x */for (y=0; y<=100; y++) /* 穷举变量y */for (z=0; z<=100; z++) /* 穷举变量z */if ( x+y+z==100 && 5*x+3*y+z/3==100 ) /* 判断是否满足两个方程*/printf("%2d:cock=%2d hen=%2d chicken=%2d\n", ++j, x, y, z);}运行上面的程序,可以得到运行结果:1: cock= 0 hen=25 chicken=752: cock= 3 hen=20 chicken=773: cock= 4 hen=18 chicken=784: cock= 7 hen=13 chicken=805: cock= 8 hen=11 chicken=816: cock=11 hen= 6 chicken=837: cock=12 hen= 4 chicken=84分析程序的运行结果,我们应该可以注意到有有三组解有问题,第2、4、6组解中,小鸡的数量不能被3整除。

问题到底出在什么地方呢?我们进行进一步分析,将这些解代入方程②:5x+3y+z/3=100,可以看到:5*3+3*20+77/3=15+60+25.67=100.67≠1005*7+3*13+80/3=35+39+26.67=100.67≠1005*11+3*6+83/3=55+18+27.67=100.67≠100显然,这三组解不满足数学方程,但由于我们在C语言中,进行int型除法时,77/3的结果就是25,80/3的结果就是26,83/3的结果就是27,这也是计算机在处理整型数据时的特点,在进行除法运算时,对于商的小数部分不再进行处理,直接截断。

所以就造成了在数学上本来不成立的方程,在计算机中成立了。

产生这个问题的根本原因就是我们在分析问题的过程中忽略了一个重要条件,变量z 要能够被3整除。

为了解决这个问题我们要在原来两个方程的基础上增加一个判断条件:z%3==0经过修改后,我们可以得到新的程序2:程序2:#include <stdio.h>main( ){ int x, y, z, j=0;for (x=0; x<=20; x++)for (y=0; y<=33; y++)for (z=0; z<=100; z++)if ( z%3==0 && x+y+z==100 && 5*x+3*y+z/3==100 ) /* 增加了z%3==0 */printf("%2d:cock=%2d hen=%2d chicken=%2d\n", ++j, x, y, z ) ;}再次运行程序,可以得到正确的结果:1: cock= 0 hen=25 chicken=752: cock= 4 hen=18 chicken=783: cock= 8 hen=11 chicken=814: cock=12 hen= 4 chicken=84为了保证变量z能够整除3,我们还可以换一个思路,在与z有关的for循环上作文章。

程序2的循环中变量z每次+1,这样z就很可能不时3的倍数,我们可以对此进行优化,让变量z每次循环不是加1,而是加3,这样就可以保证变量z一定是3的倍数,因此我们就可以省略判断z是否可以被3整除的过程。

按照这样的思路,我们可以得到程序3。

程序3:#include <stdio.h>main( ){int x, y, z, j=0; /* j为计数器,记录解的数量*/for (x=0; x<=100; x++) /* 穷举变量x */for (y=0; y<=100; y++) /* 穷举变量y */for (z=0; z<=100; z+=3) /* 穷举变量z,每次增加的步长为3 */if ( x+y+z==100 && 5*x+3*y+z/3==100 ) /* 判断是否满足两个方程*/printf("%2d:cock=%2d hen=%2d chicken=%2d\n", ++j, x, y, z);}运行程序3,也可以得到正确的结果。

进一步分析程序3,我们还可以看到:穷举变量x的取值范围过大了,x的取值范围只应该在0~20之间,并且,一旦确定了变量x和变量z的值,我们就可以利用方程①直接计算出变量y的值,这样就可以去掉对变量y的穷举过程。

于是我们可以得到程序4。

程序4:#include <stdio.h>main( ){ int x, y, z, j=0; /* j为计数器,记录解的数量*/for (x=0; x<=20; x++)for (z=0; z<100; z+=3){ y = 100-x-z;if ( 5*x+3*y+z/3==100 )printf("%2d:cock=%2d hen=%2d chicken=%2d\n", ++j, x, y, z ) ;}很显然,程序4的循环减少了一层,变量x的穷举范围也减少了。

相关文档
最新文档