c语言考试一共分几级

Python010

c语言考试一共分几级,第1张

c语言考试一共分一级,全国计算机等级考试有四级,c语言考试属于其中的第二级。

全国计算机等级考试有二级c语言这个考试的项目。考试要求:

1、熟悉Visual C++2010 Express集成开发环境。

2、掌握结构化程序设计的方法,具有良好的程序设计风格。

3、掌握程序设计中简单的数据结构和算法并能阅读简单的程序。

4、在Visual C++2010 Express集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。

扩展资料:

c语言考试证书作用:

1、是当代大学生必考三大证书(毕业证、英语四级证书、计算机二级证书)之一。

2、计算机等级考试证书是用人单位在招聘时考察的标准之一。

3、解决上海市户口,必须通过计算机等级考试证书或者说通过NIT考试。

4、通过二级(C语言)考试可以免考自学考试中的《程序设计》课程。

5、通过计算机等级考试证书,可以在评职称的时候免考职称计算机考试。

特别说明:

把c1.h,C2-1.H,Bo2-1.cpp,Func2-2.cpp,

Main2-1.cpp 它们分别单独存为文件,然后把他们放在一个文件夹中,最后双击Main2-1.cpp。

// c1.h (文件名)

#include<string.h>// 字符串函数头文件

#include<ctype.h>// 字符函数头文件

#include<malloc.h>// malloc()等

#include<limits.h>// INT_MAX等

#include<stdio.h>// 标准输入输出头文件,包括EOF(=^Z或F6),NULL等

#include<stdlib.h>// atoi(),exit()

#include<io.h>// eof()

#include<math.h>// 数学函数头文件,包括floor(),ceil(),abs()等

#include<sys/timeb.h>// ftime()

#include<stdarg.h>// 提供宏va_start,va_arg和va_end,用于存取变长参数表

// 函数结果状态代码。

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

// #define INFEASIBLE -1 没使用

// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行

typedef int Status// Status是函数的类型,其值是函数结果状态代码,如OK等

typedef int Boolean// Boolean是布尔类型,其值是TRUE或FALSE,

// c2-1.h 线性表的动态分配顺序存储结构。

#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量

#define LIST_INCREMENT 2 // 线性表存储空间的分配增量

struct SqList

{ ElemType *elem// 存储空间基址

int length// 当前长度

int listsize// 当前分配的存储容量(以sizeof(ElemType)为单位)

}

// bo2-1.cpp 顺序存储的线性表(存储结构由c2-1.h定义)的基本操作(12个),包括算法2.3~2.6

void InitList(SqList &L) // 算法2.3

{ // 操作结果:构造一个空的顺序线性表L

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType))

if(!L.elem) // 存储分配失败

exit(OVERFLOW)

L.length=0// 空表长度为0

L.listsize=LIST_INIT_SIZE// 初始存储容量

}

void DestroyList(SqList &L)

{ // 初始条件:顺序线性表L已存在。操作结果:销毁顺序线性表L

free(L.elem)// 释放L.elem所指的存储空间

L.elem=NULL// L.elem不再指向任何存储单元

L.length=0

L.listsize=0

}

void ClearList(SqList &L)

{ // 初始条件:顺序线性表L已存在。操作结果:将L重置为空表

L.length=0

}

Status ListEmpty(SqList L)

{ // 初始条件:顺序线性表L已存在。

// 操作结果:若L为空表,则返回TRUE;否则返回FALSE

if(L.length==0)

return TRUE

else

return FALSE

}

int ListLength(SqList L)

{ // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素的个数

return L.length

}

Status GetElem(SqList L,int i,ElemType &e)

{ // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)

// 操作结果:用e返回L中第i个数据元素的值

if(i<1||i>L.length) // i不在表L的范围之内

return ERROR

e=*(L.elem+i-1)// 将表L的第i个元素的值赋给e

return OK

}

int LocateElem(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))

{ // 初始条件:顺序线性表L已存在,compare()是数据元素判定函数(满足为1,否则为0)

// 操作结果:返回L中第1个与e满足关系compare()的数据元素的位序。

// 若这样的数据元素不存在,则返回值为0。算法2.6

int i=1// i的初值为第1个元素的位序

ElemType *p=L.elem// p的初值为第1个元素的存储位置

while(i<=L.length&&!compare(*p++,e)) // i未超出表的范围且未找到满足关系的数据元素

++i// 继续向后找

if(i<=L.length) // 找到满足关系的数据元素

return i// 返回其位序

else // 未找到满足关系的数据元素

return 0

}

Status PriorElem(SqList L,ElemType cur_e,ElemType &pre_e)

{ // 初始条件:顺序线性表L已存在

// 操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱;

// 否则操作失败,pre_e无定义

int i=2// 从第2个元素开始

ElemType *p=L.elem+1// p指向第2个元素

while(i<=L.length&&*p!=cur_e) // i未超出表的范围且未找到值为cur_e的元素

{ p++// p指向下一个元素

i++// 计数加1

}

if(i>L.length) // 到表结束处还未找到值为cur_e的元素

return ERROR// 操作失败

else // 找到值为cur_e的元素,并由p指向其

{ pre_e=*--p// p指向前一个元素(cur_e的前驱),将所指元素的值赋给pre_e

return OK// 操作成功

}

}

Status NextElem(SqList L,ElemType cur_e,ElemType &next_e)

{ // 初始条件:顺序线性表L已存在

// 操作结果:若cur_e是L的数据元素,且不是最后一个,则用next_e返回它的后继,

// 否则操作失败,next_e无定义

int i=1// 从第1个元素开始

ElemType *p=L.elem// p指向第1个元素

while(i<L.length&&*p!=cur_e) // i未到表尾且未找到值为cur_e的元素

{ p++// p指向下一个元素

i++// 计数加1

}

if(i==L.length) // 到表尾的前一个元素还未找到值为cur_e的元素

return ERROR// 操作失败

else // 找到值为cur_e的元素,并由p指向其

{ next_e=*++p// p指向下一个元素(cur_e的后继),将所指元素的值赋给next _e

return OK// 操作成功

}

}

Status ListInsert(SqList &L,int i,ElemType e) // 算法2.4

{ // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1

// 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1

ElemType *newbase,*q,*p

if(i<1||i>L.length+1) // i值不合法

return ERROR

if(L.length==L.listsize) // 当前存储空间已满,增加分配,修改

{ newbase=(ElemType*)realloc(L.elem,(L.listsize+LIST_INCREMENT)*sizeof(ElemType))

if(!newbase) // 存储分配失败

exit(OVERFLOW)

L.elem=newbase// 新基址赋给L.elem

L.listsize+=LIST_INCREMENT// 增加存储容量

}

q=L.elem+i-1// q为插入位置

for(p=L.elem+L.length-1p>=q--p) // 插入位置及之后的元素右移(由表尾元素开始移)

*(p+1)=*p

*q=e// 插入e

++L.length// 表长增1

return OK

}

Status ListDelete(SqList &L,int i,ElemType &e) // 算法2.5

{ // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)

// 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1

ElemType *p,*q

if(i<1||i>L.length) // i值不合法

return ERROR

p=L.elem+i-1// p为被删除元素的位置

e=*p// 被删除元素的值赋给e

q=L.elem+L.length-1// q为表尾元素的位置

for(++pp<=q++p) // 被删除元素之后的元素左移(由被删除元素的后继元素开始移)

*(p-1)=*p

L.length--// 表长减1

return OK

}

void ListTraverse(SqList L,void(*visit)(ElemType&))

{ // 初始条件:顺序线性表L已存在

// 操作结果:依次对L的每个数据元素调用函数visit()

// visit()的形参加'&',表明可通过调用visit()改变元素的值

ElemType *p=L.elem// p指向第1个元素

int i

for(i=1i<=L.lengthi++) // 从表L的第1个元素到最后1个元素

visit(*p++)// 对每个数据元素调用visit()

printf("\n")

}

// func2-2.cpp 几个常用的函数

Status equal(ElemType c1,ElemType c2)

{ // 判断是否相等的函数

if(c1==c2)

return TRUE

else

return FALSE

}

int comp(ElemType a,ElemType b)

{ // 根据a<、=或>b,分别返回-1、0或1

if(a==b)

return 0

else

return (a-b)/abs(a-b)

}

void print(ElemType c)

{ // 以十进制整型的格式输出元素的值

printf("%d ",c)

}

void print1(ElemType &c)

{ // 以十进制整型的格式输出元素的值(设c为引用类型)

printf("%d ",c)

}

void print2(ElemType c)

{ // 以字符型的格式输出元素的值

printf("%c ",c)

}

// main2-1.cpp 检验bo2-1.cpp的主程序

#include"c1.h"

typedef int ElemType// 定义ElemType为整型

#include"c2-1.h" // 线性表的顺序存储结构

#include"bo2-1.cpp" // 线性表顺序存储结构的基本操作

#include"func2-2.cpp" // 包括equal()、comp()、print()、print1()和print2()函数

Status sq(ElemType c1,ElemType c2)

{ // 数据元素判定函数(平方关系),LocateElem()调用的函数

if(c1==c2*c2)

return TRUE

else

return FALSE

}

void dbl(ElemType &c)

{ // ListTraverse()调用的另一函数(元素值加倍)

c*=2

}

void main()

{

SqList L

ElemType e,e0

Status i

int j,k

InitList(L)// 初始化线性表L

printf("初始化L后,L.length=%d,L.listsize=%d,L.elem=%u\n",L.length,

L.listsize,L.elem)

for(j=1j<=5j++)

i=ListInsert(L,1,j)// 在L的表头插入j

printf("在L的表头依次插入1~5后,*L.elem=")

for(j=1j<=5j++)

printf("%d ",*(L.elem+j-1))// 依次输出表L中的元素

printf("\n调用ListTraverse()函数,依次输出表L中的元素:")

ListTraverse(L,print1)// 依次对表L中的元素调用print1()函数(输出元素的值)

i=ListEmpty(L)// 检测表L是否空

printf("L.length=%d(改变),L.listsize=%d(不变),",L.length,L.listsize)

printf("L.elem=%u(不变),L是否空?i=%d(1:是 0:否)\n",L.elem,i)

ClearList(L)// 清空表L

i=ListEmpty(L)// 再次检测表L是否空

printf("清空L后,L.length=%d,L.listsize=%d,",L.length,L.listsize)

printf("L.elem=%u,L是否空?i=%d(1:是 0:否)\n",L.elem,i)

for(j=1j<=10j++)

ListInsert(L,j,j)// 在L的表尾插入j

printf("在L的表尾依次插入1~10后,L=")

ListTraverse(L,print1)// 依次输出表L中的元素

printf("L.length=%d,L.listsize=%d,L.elem=%u\n",L.length,L.listsize,L.elem)

ListInsert(L,1,0)// 在L的表头插入0,增加存储空间

printf("在L的表头插入0后,L.length=%d(改变),L.listsize=%d(改变),"

"L.elem=%u(有可能改变)\n",L.length,L.listsize,L.elem)

GetElem(L,5,e)// 将表L中的第5个元素的值赋给e

printf("第5个元素的值为%d\n",e)

for(j=10j<=11j++)

{ k=LocateElem(L,j,equal)// 查找表L中与j相等的元素,并将其位序赋给k

if(k) // k不为0,表明有符合条件的元素

printf("第%d个元素的值为%d,",k,j)

else // k为0,没有符合条件的元素

printf("没有值为%d的元素\n",j)

}

for(j=3j<=4j++) // 测试2个数据

{ k=LocateElem(L,j,sq)// 查找表L中与j的平方相等的元素,并将其位序赋给k

if(k) // k不为0,表明有符合条件的元素

printf("第%d个元素的值为%d的平方,",k,j)

else // k为0,没有符合条件的元素

printf("没有值为%d的平方的元素\n",j)

}

for(j=1j<=2j++) // 测试头2个数据

{ GetElem(L,j,e0)// 将表L中的第j个元素的值赋给e0

i=PriorElem(L,e0,e)// 求e0的前驱,如成功,将值赋给e

if(i==ERROR) // 操作失败

printf("元素%d无前驱,",e0)

else // 操作成功

printf("元素%d的前驱为%d\n",e0,e)

}

for(j=ListLength(L)-1j<=ListLength(L)j++) // 最后2个数据

{ GetElem(L,j,e0)// 将表L中的第j个元素的值赋给e0

i=NextElem(L,e0,e)// 求e0的后继,如成功,将值赋给e

if(i==ERROR) // 操作失败

printf("元素%d无后继\n",e0)

else // 操作成功

printf("元素%d的后继为%d,",e0,e)

}

k=ListLength(L)// k为表长

for(j=k+1j>=kj--)

{ i=ListDelete(L,j,e)// 删除第j个数据

if(i==ERROR) // 表中不存在第j个数据

printf("删除第%d个元素失败。",j)

else // 表中存在第j个数据,删除成功,其值赋给e

printf("删除第%d个元素成功,其值为%d",j,e)

}

ListTraverse(L,dbl)// 依次对元素调用dbl(),元素值乘2

printf("L的元素值加倍后,L=")

ListTraverse(L,print1)// 依次输出表L中的元素

DestroyList(L)// 销毁表L

printf("销毁L后,L.length=%d,L.listsize=%d,L.elem=%u\n",L.length,

L.listsize,L.elem)

}