or 

一.C语言试题

  一个无向连通图G点上的哈密尔顿(Hamiltion)回路是指从图G上的某个顶点出发,经过图上所有其他顶点一次且仅一次,最后回到该顶点的路劲。一种求解无向图上哈密尔顿回路算法的基础实现如下:

  假设图G存在一个从顶点V0出发的哈密尔顿回路V1——V2——V3——...——Vn-1——V0。算法从顶点V0出发,访问该顶点的一个未被访问的邻接顶点V1,接着从顶点V1出发,访问V1一个未被访问的邻接顶点V2,..。;对顶点Vi,重复进行以下操作:访问Vi的一个未被访问的邻接接点Vi+1;若Vi的所有邻接顶点均已被访问,则返回到顶点Vi-1,考虑Vi-1的下一个未被访问的邻接顶点,仍记为Vi;知道找到一条哈密尔顿回路或者找不到哈密尔顿回路,算法结束。

  【C代码】

  下面是算法的C语言实现。

  (1)常量和变量说明

    n :图G中的顶点数

    c[][]:图G的邻接矩阵

    k:统计变量,当期已经访问的定点数为k+1

    x[k]:第k个访问的顶点编号,从0开始

    visited[x[k]]:第k个顶点的访问标志,0表示未访问,1表示已访问

  (2)C程序

 #include <stido.h>
#include <stidb.h>
#define MAX 100 void Hamilton(int n,int x[MAX,int c[MAX][MAX]){
  in t ;
  in t visited[MAX];
  int k;
  /*初始化x数组和visited数组*/
  for(i=:i<n;i++){
    x[i]=;
    visited[i]=;
  }
  /*访问起始顶点*/
   k=0;
  (visited[0]=1);
  x[]=0;
18   k=k+1;
  /*访问其他顶点*/
20   while(k>=){
    x[k]=x[k]+;
    while(x[k]><n){
      if(visited[x[k]]==0) &&c[x-[k-]][x[k]=){/*邻接顶点x[k]未被访问过*/
        break;
      }else{
        x[k] = x[k] + 1;
      }
    }
    if(x[k]<n-&&visited[x[k]]==1){ /*找到一条哈密尔顿回路*/
      for(k=;k<n;k++){
        prinf(〝%d--〝,x[k] ; /*输出哈密尔顿回路*/
      }
      prinf(〝%d--〝,x[] ;
      return;
    }else if x[k]<n&&k<n-){/*设置当期顶点的访问标志,继续下一个顶点*/
      visited[x[k]]=1;
37       k=k+;
    }else{/*没有未被访问过的邻接顶点,回退到上一个顶点*/
      x[k]=;
      visited x[k]=;
      k=k-1;
    }
43   }

  【问题1】(10分)

    根据题干说明。填充C代码中的空(1)~(5).

    答案:代码中标注红色的即为答案!

  【问题2】(5分)

    根据题干说明和C代码,算法采用的设计策略为(6),该方法在遍历图的顶点时,采用的是(7)方法(深度优先或广度优先)。

    答案:

    6:回溯法

    7:深度优先

二.面向对象语言试题

  1.

  

  

  2.

  

  

  

三.备注

  面向对象程序设计五大原则:

  1单一职责原则:对一个类来说,应该仅有一个引起它变化的原因。

  2开放封闭原则:软件组成实体应该是可扩展的,但是不可修改的。

  3替换原则:子类应当可以替换父类并出现在父类能出现的任何地方。

  4依赖原则:在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是具体类。

  5接口分离原则:采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。

C语言程序试题的更多相关文章

  1. C语言程序猿必会的内存四区及经典面试题解析

    前言: 为啥叫C语言程序猿必会呢?因为特别重要,学习C语言不知道内存分区,对很多问题你很难解释,如经典的:传值传地址,前者不能改变实参,后者可以,知道为什么?还有经典面试题如下: #include & ...

  2. C语言面试题汇总之一

    C语言面试题汇总之一 1.static有什么用途?(请至少说明两种) l 限制变量的作用域: 设置变量的存储域. 2.引用和指针有什么区别? 引用必须被初始化,指针不必: 引用初始化以后不能被改变,指 ...

  3. 12个有趣的C语言面试题

    摘要:12个C语言面试题,涉及指针.进程.运算.结构体.函数.内存,看看你能做出几个! 1.gets()函数 问:请找出下面代码里的问题: #include<stdio.h> int ma ...

  4. c语言面试题之sizeof

    c语言面试题之sizeof */--> c语言面试题之sizeof Table of Contents 1. sizeof 1 sizeof sizeof是c语言中判断数据类型或者表达式的长度符 ...

  5. C语言面试题(嵌入式开发方向,附答案及点评)

    整理自C语言面试题(嵌入式开发方向,附答案及点评) 预处理器(Preprocessor) 1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SEC ...

  6. 转 C语言面试题大汇总

    转 C语言面试题大汇总,个人觉得还是比较全地!!! \主 题:   C语言面试题大汇总,个人觉得还是比较全地!!!  作 者:   free131 (白日?做梦!)   信 誉 值:   100    ...

  7. 12个有趣的c语言面试题&nbsp;

    1.gets()函数 问:请找出下面代码里的问题: #include int main(void) { char buff[10]; memset(buff,0,sizeof(buff)); gets ...

  8. 嵌入式开发—C语言面试题

    嵌入式开发—C语言面试题 源地址:http://blog.csdn.net/xdx2ct1314/article/details/7358929   1. 用预处理指令#define 声明一个常数,用 ...

  9. 第一个C语言程序

    从第一个C语言程序了解C语言 了解关键字 了解函数 注释 C语言的执行流程 标识符 C语言的学习重难点 从第一个C语言程序了解C语言 上图是一个在控制台上显示“Hello, World!”的C语言源代 ...

随机推荐

  1. Spark基础脚本入门实践2:基础开发

    1.最基本的Map用法 val data = Array(1, 2, 3, 4, 5)val distData = sc.parallelize(data)val result = distData. ...

  2. jvm-垃圾回收gc简介+jvm内存模型简介

    gc是jvm自动执行的,自动清除jvm内存垃圾,无须人为干涉,虽然方便了程序员的开发,但同时增加了开发人员对内存的不可控性. 1.jvm内存模型简介 jvm是在计算机系统上又虚拟出来的一个伪计算机系统 ...

  3. Python--DBUtil

    Python--DBUtil包 1 简介 DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装.DBUtils来自Webware for Python. DB ...

  4. Pycharm 连接Linux 远程开发

    Pycharm 连接Linux 远程开发 在Liunx上安装python3.6(Ubuntu16) 下载Python-3.6.4.tgz 解压 tar -xzvf Python-3.6.4.tgz 进 ...

  5. 转载:https原理:证书传递、验证和数据加密、解密过程解析

    写的太好了,就是我一直想找的内容,看了这个对https立马明白多了 http://www.cnblogs.com/zhuqil/archive/2012/07/23/2604572.html 我们都知 ...

  6. Spring Boot + Spring Cloud 构建微服务系统(七):API服务网关(Zuul)

    技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问 ...

  7. MongoDB比较两列大小 使用$subtract函数

    是找出整个表 a大于b的总数量,要怎么操作数据库呢,那就要用到$subtract函数 MongoDB比较两列大小 使用$subtract函数, // MongoDB 比较两列大小求出 啊>b 的 ...

  8. 利用python数据分析与挖掘相关资料总结

    小生今年研二,目前主要从事软件工程数据挖掘与分析.之前一直苦于找不到一个从数据预处理.数据分析.数据可视化和软件建模的统一平台.因此,小生辗转反辙学习了java,R语言,python,scala等等. ...

  9. (转)eclipse上传项目到码云

    把Eclipse项目上传到码云的步骤: 1.登录码云:新建项目 2.输入项目名: 3.空项目创建成功如下图: 4.右键点击Eclipse的项目,选择“Team”—————->“Share Pro ...

  10. KVM虚拟化原理与基础应用示例

    一.KVM简介 Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调 ...