博文

2007湖南软件设计师考试大纲(2007-03-23 09:34:00)

摘要: 软 件 设 计 师 考 试 大 纲   一、考试说明  1.考试要求:   (1) 掌握数据表示、算术和逻辑运算;   (2) 掌握相关的应用数学、离散数学的基础知识;   (3) 掌握计算机体系结构以及各主要部件的性能和基本工作原理;   (4) 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;   (5) 熟练掌握常用数据结构和常用算法;   (6) 熟悉数据库、网络和多媒体的基础知识;   (7) 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中的一种程序设计语言;   (8) 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;   (9) 熟悉掌握软件设计的方法和技术;   (10) 掌握常用信息技术标准、安全性,以及有关法律、法规的基本知识;   (11) 了解信息化、计算机应用的基础知识;   (12) 正确阅读和理解计算机领域的英文资料。  2.通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程的实际工作能力和业务水平。  3.本考试设置的科目包括:   (1) 计算机与软件工程知识,考试时间为150分钟,笔试;   (2) 软件设计,考试时间为150分钟,笔试。  二、考试范围  考试科目1:计算机与软件工程知识 1.计算机科学基础  1.1 数制及其转换     · 二进制、十进制和十六进制等常用制数制及其相互转换  1.2 数据的表示     · 数的表示(原码、反码、补码、移码表示,整数和实数的机内表示,精度和溢出)     · 非数值表示(字符和汉字表示、声音表示、图像表示)     · 校验方法和校验码(奇偶校验码、海明校验码、循环冗余校验码)  1.3 算术运算和逻辑运算     · 计算机中的二进制数运算方法     · 逻辑代数的基本运算和逻辑表达式的化简  1.4 数学基础知识     · 命题逻辑、谓词逻辑、形式逻辑的基础知识     · 常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分)     · 排列组合、概率论应......

阅读全文(3140) | 评论:0

最短路径算法(2007-03-21 09:10:00)

摘要:利用 迪积斯特拉 算法求 " 有向图 " 中某点到其余各点的最短路径  并输出从该点到各点的详细路径,以及总权值。这个程序上学期就写了今天偶然发现有两个错误,查了我将近两个小时,一个是不可达点的输出不明显,最大的错误是重复释放了一个指针,我以为是算法错了从头查到尾,增加了详细的注释,这或者会影响阅读代码,的确,过多的注释会让代码阅读者不能真正理解代码,当然这也要代码可读性高。是的代码应该强调,可读性,简洁性,其次才是高效性。 输入: 首先输入图的顶点数 n 边数 m              接着下一行输入源点 sourcePoint             然后输入每一条边的数据包括 起点s,终点e,权值v              包括起点,终点,权值 (顶点从 1 开始编号)    输出: 输出到各点的详细路径以及权值       事例: (建议用管道测试)          输入文件 data.txt  内容如下:       7 12             3             1 2 3          &nbs......

阅读全文(5643) | 评论:0

完美算法,求子序列和最大(2007-03-20 12:58:00)

摘要:功    能:   在一个整数序列中求一个子序列,该子序列的和最大   输入说明:   首先输入整数序列的长度 length               接着输入该整数序列            输出说明:   输出子序列的起点和终点,并输出该子序列的和        事    例:   (建议用管道测试)                        输入文件 data.txt  内容如下:                     8       12 -13 1 2 23 -14 55 -2                     输出:       The subsequence from 2 to 6,max sum is 67 (序列从1开始算) 评 价:  这个题可以有几种算法:......

阅读全文(8568) | 评论:8

最快的排序算法(2007-03-20 12:50:00)

摘要:最快的排序算法:   桶 排 序                           经分析通过比较的排序算法如,选择排序,插入排序,快速排序,堆排序  等最快为 n*log(n),这是比较排序算法的极限任何通过比较进行排序  的算法都不可能超过这个极限. 现在要介绍的 桶排序 可以超过它为  n ,当然 桶排序 的灵活性却拿不出手,必须要知道待排序数组中最大  的数.下面的程序,首先由用户输入数组的大小,程序随机产生最大数为 不超过 10000 的随机数组,最后输出原始数组,以及排序后的数组.    编译器: VC ++ 6.0  Author : 江南孤峰   Time :2006--10--27  #include <stdio.h>#include <malloc.h>#include <memory.h>#include <stdlib.h>#include <ctype.h> int main(){ int order[10000],total,*array,i;  while( 1){  memset(order,0,sizeof(int)*10000);  printf("\nPlease input the size of the array:");  scanf("%d",&total);  array = (int *)malloc(sizeof(int)*total + 4);  printf("The source array as follow:\n");  for(i = 0; i < total; i ++){&nb......

阅读全文(9207) | 评论:4

分治法求大数乘(2007-03-20 12:45:00)

摘要:/************************分治法求大数乘,这种方法是比较好的,听说还有快的算法,我一定可以找到的  思路 : 123 * 456 分治如下  第一次拆分:  12   45 (拆分方法 设 char *a = "123" ,*b = "456" 对 a: t = strlen(a)  t/2 得 12(0,1位置) 余者 3(2位置)为       3    6 ( 另一部分,对 b 亦同,即拆分为 45 6,如左)   递归求:  12 * 45     ( 求得 12 * 45 的解果左移两位补0右边,因为其实是 120 * 450 )    12 * 6      ( 同上左移一位其实是120 * 6 )     3 * 45     ( 3 * 450 )     3 * 6      ( 3 * 6 解果不移动 )    第二次拆分(12 * 45 ) ( 如下 )    1    4      ( 交叉相乘并将结果相加 1 * 4 左移两位 400 ,1 * 5 左移一位 50 ,2 * 4 左移一位 80 ,2 * 5 不移为 10)        2    5      ( 相加得400 + 50 + 80 + 10 = 540 )  另外几个不需要拆分 得 72 , 135 , 18 所以: 54000 + 720 + 1350 + 18 = 56088  难点是对分治的理解,以及结果的......

阅读全文(4902) | 评论:3

俄罗斯算法求大数乘(2007-03-20 12:29:00)

摘要:/*  俄罗斯式算法求大数乘          *//* 原理:   举例 ( 9 * 8 )   *//*  (乘数)  9 (被乘数)8  *//*   4  16  *//*   2  32  *//*   1  64  *//* 将乘数为奇时的被乘数相加 8 + 64 = 72 OK ! *//* 这钟算法只比传统的好,分治法就比这种要好  *//* 编译环境: VC ++ 6.0         *//* Author: 江南孤峰 Time: 2006-10-24         */ #include <stdio.h>#include <ctype.h> #define MAX 1000 //存结果的数组大小,乘数较大时需要修改这里#define MULMAX 100 //存两个乘数的数组大小 void mul(char a[],char b[],int la,int lb);void divTwo(char a[],int *la);void add(char a[],char b[],int *la,int *lb);int  input(char a[],char b[],int *la,int *lb); void mul(char a[],char b[],int length_a,int length_b){ // 求数组 a 与 b 中数相乘的结果 char result[MAX]; int  la = len......

阅读全文(4003) | 评论:1

堆排序与快速排序(2007-03-20 11:31:00)

摘要:/***********************************************************************\功  能:实现两种排序算法,并比较这两种算法程序首先输出原数组,然后输出经两种算法排序过的数组,并输出排序时间,数组小排序时间都会显示为 0 ms   编译环境:VC ++ 6.0  author:江南孤峰  data: 2006--6--11    \************************************************************************/ #include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#include <time.h> #define SIZE 100    //数组大小设置 void Exchange(int *a,int *b){   //交换 *a 与 *b int t;  t = *a; *a = *b; *b = t;} void PutOut(int array[]){   //输出排序后的结果 int i,len;  for(i=1,len=array[0]; i<=array[0]; i ++)  printf("%d ",array[i]);} void GetRandArray(int array[],int size){ //获取 size 大小的随机数组 int i;  for(i = 1; i <= size; i ++)  array[i] = rand(); array[0] = size;} /************************** 堆排序 ***********************************/#define PARREN......

阅读全文(4789) | 评论:1

求子集(2007-03-20 11:25:00)

摘要:/***********************************************************************************\ 功    能:    求整数集合的子集   输入说明:    按提示输入数据 输出说明:     以集合形式输出子集        测试数据如下:    Enter the number of gather:4Enter gather's each element:1 2 3 4 The sub gather as followed:{}{1}{2}{3}{4}{2,1}{3,1}{4,1}{3,2}{4,2}{4,3}{3,2,1}{4,2,1}{4,3,1}{4,3,2}{4,3,2,1}Press any key to continue  算法说明: 对子集的寻找按照子集元素个数递增方式,用堆栈    语    言:   非标准 C  编译环境:VC ++ 6.0              Author  :   江南孤峰  Time :2006--11--29     独学而无友,则孤陋而寡闻  编程爱好者群 : 28011342          \************************************************************************************/   #include <stdio.h>#include <mal......

阅读全文(3984) | 评论:0

ANSI C 阅读笔记(2007-03-20 11:19:00)

摘要: ######################################################  以下是个人的阅读笔记,记录了一些容易被大家忽略的地方 ######################################################   1 ** 非常好的程序:(考虑程序的可移植性) #include <stdio.h>#include <limits.h>#include <stdlib.h> void PRINTBIT(int); /* 打印 n 的每个比特位 */ void PRINTBIT(int n){ /* 这里开始我定义为 int 型,结果如下:    2 : 0000 0000 0000 0000 0000 0000 0000 0011    4 : 0000 0000 0000 0000 0000 0000 0000 01112 ^ 4 : 0000 0000 0000 0000 0000 0000 0000 01112 & 4 : 0000 0000 0000 0000 0000 0000 0000 00002 | 4 : 0000 0000 0000 0000 0000 0000 0000 0111   最后改为unsigned int 则正确,仔细想了一下   原因:   check = 1;   check <<= (i - 1);   这样如果 check 为 int 则最高为永远为 1,且会   向右移动,移完后   check=bit(1111 1111 1111 1111 1111 1111 1111 1111); */ unsigned int j; unsigned int i = sizeof(int) * CHAR_BIT; unsigned int check = 1;  check <<= (i - 1); ......

阅读全文(2680) | 评论:0

表达式检验(2007-03-20 11:16:00)

摘要: /***********************************************************************************\ 功    能:    检验含括号的四则运算表达式的合法性   输入说明:    按提示输入表达式 ctrl+c 结束输入            输出说明:   如果表达式合法则输出 yes ,否则输出 no        测试数据如下:    press Ctrl+c to exit !(((3+4*3+(333+4)+(33*34))/3)+4)yespress Ctrl+c to exit !()nopress Ctrl+c to exit !3+4-(3*3)yespress Ctrl+c to exit !8((nopress Ctrl+c to exit !8()nopress Ctrl+c to exit !3=3nopress Ctrl+c to exit !  算法说明: 象拨竹笋一样从最内层括号开始,注意将括号改为数字不改变表达式的合法性               寻找最内层括号:找表达式最左的')' ,找表达式最右并且在前面所找')'左边               的'('这对括号就是最内层括号,检验这两个位置的前后是否合法,例如对 '('             &nb......

阅读全文(3292) | 评论:0