文档库 最新最全的文档下载
当前位置:文档库 › 离散数学C语言上机题

离散数学C语言上机题

离散数学C语言上机题
离散数学C语言上机题

广东工业大学计算机科学与技术张法光

离散数学C语言上机题

Anyview

可视化编程作业系统

二元关系章节编程题

EX

01

6.01③试设计一算法,

实现集合的卡氏积运算。

实现下列函数:

/**

* 进行两个集合的卡氏积运算

* @param pA:要进行卡氏积运算的集合

* @param pB:要进行卡氏积运算的集合

* @return: 将pA和pB进行卡氏积运算后得到的集合

*/

pCartersianSet CartesianProduct(pOriginalSet pA, pOriginalSet pB)

{

pCartersianSet pC=createNullCartersianSet(); //空卡

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{ // 空卡←序偶插入← 建立序偶← 条件语句

for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB)) OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pB)));

}

return pC;

}

02

6.02②试设计一算法,

给定集合A、集合B和集合C,判断集合C是否为A到B的一个二元关系。

实现下列函数:

/**

* 给定集合A、集合B和集合C,判断集合C是否为A到B的一个二元关系。

* @param pA:集合A

* @param pB:集合B

* @param pC:集合C

* @return: 如果集合C是A到B的一个二元关系,则返回true,否则返回false。

*/

boolean isBinaryRelation(pOriginalSet pA, pOriginalSet pB, pCartersianSet pC)

{

pCartersianSet pD=createNullCartersianSet();

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{ // 空卡←序偶插入← 建立序偶← 条件语句

for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB)) OrderedCoupleInsertToCartersianSet(pD,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pB)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(isInCartersianSet(pD,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

03

6.03②试设计一算法,求集合A上的恒等关系。

实现下列函数:

/**

* 给定集合A,求集合A上的恒等关系。

* @param pSet:原始集合

* @return: 集合A上的恒等关系。

*/

pCartersianSet IdentityRelation(pOriginalSet pA)

{ pCartersianSet pB=createNullCartersianSet();

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{ // 空卡←序偶插入←建立序偶←条件语句

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

if(getCurrentOriginalSetElem(pA)==getCurrentOriginalSetElem(pA))//The same elements

OrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

return pB;

}

04

6.04③试设计一算法,求两个卡氏积集合的复合运算。

实现下列函数:

/**

* 给定两个集合,求该两个集合的复合运算。

* @param pA:卡氏积集合

* @param pB:卡氏积集合

* @return: pA与pB的复合运算结果。

*/

pCartersianSet CompositeOperation(pCartersianSet pA, pCartersianSet pB)

{ pCartersianSet pC=createNullCartersianSet();

for(resetCartersianSet(pA);!isEndOfCartersianSet(pA); nextCartersianSetPos(pA))

{

for(resetCartersianSet(pB);!isEndOfCartersianSet(pB); nextCartersianSetPos(pB))

if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA)), getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB))))

//获取A卡氏积中序偶的第二元//获取第二元

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(get CurrentCartersianSetElem(pA)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(p B))) );

}

return pC;

}

05

6.05②试设计一算法,求一个关系的逆运算。

实现下列函数:

/**

* 求一个关系的逆运算。

* @param pA:卡氏积集合

* @return: pA的逆运算结果。

pCartersianSet InverseOperation(pCartersianSet pA)

{ pCartersianSet pB=createNullCartersianSet();

for(resetCartersianSet(pA);!isEndOfCartersianSet(pA); nextCartersianSetPos(pA))

{OrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getSecondElemOfOrderedCouple (getCurrentCartersianSetElem(pA)),getFirstElemOfOrderedCouple(getCurrentCartersianSetElem( pA))) );

}

return pB;

}

06

6.06④试设计一算法,对某集合A上的一个二元关系,求该关系的幂运算。

实现下列函数:

/**

* 求一个关系的幂运算。

* @param pA:原始集合

* @param pBinaryRelationR:pA上的关系R

* @param n:幂运算的次数,且n >= 0

* @return: pBinaryRelationSet的n次幂运算结果。

*/

pCartersianSet CompositeOperation(pCartersianSet pA, pCartersianSet pB)

{ pCartersianSet pC=createNullCartersianSet();

for(resetCartersianSet(pA);!isEndOfCartersianSet(pA); nextCartersianSetPos(pA))

{

for(resetCartersianSet(pB);!isEndOfCartersianSet(pB); nextCartersianSetPos(pB))

if(isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pA)), getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB))))

//获取A卡氏积中序偶的第二元//获取第二元

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getFirstElemOfOrderedCouple(get CurrentCartersianSetElem(pA)),getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(p B))) );

}

return pC;

}

pCartersianSet PowOperation(pOriginalSet pA,

pCartersianSet pBinaryRelationR,

int n)

{

pCartersianSet pC=createNullCartersianSet();

pC=copyCartersianSet(pBinaryRelationR);

if(n==0)

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

return pC;

}

if(n==1)

{return pBinaryRelationR;}

for(int i=1;i

{pC=CompositeOperation(pC,pBinaryRelationR); }

return pC;

}

07

6.02②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性。

实现下列函数:

/**

* 判断一个关系是否具有自反性。

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 如果pBinaryRelationSet具有自反性;则返回true,否则返回false。

*/

boolean IsReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ pCartersianSet pC=createNullCartersianSet();

//获取IA

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

08

6.08②试设计一算法,对某集合A上的一个二元关系R,判断R是否具有反自反性。

实现下列函数:

/**

* 判断一个关系是否具有反自反性。

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 如果pBinaryRelationSet具有反自反性;则返回true,否则返回false。

*/

boolean IsAntiReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ pCartersianSet pC=createNullCartersianSet();

//获取IA

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(!isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

09

6.09③试设计一算法,对某集合A上的一个二元关系R,判断R是否具有自反性或者反自反性。

在实际运算中,A无需给出。

实现下列函数:

/**

* 判断一个关系是否具有自反性或者反自反性。对一个关系R是否具有自反性或者反自反性,

* 有四种可能:是自反的;是反自反的;既是自反的也是反自反的、

* 既不是自反的也不是反自反的。

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 返回一个Reflexivity_Type枚举类型值。

* 如果pBinaryRelationSet具有自反性,则返回REFLEXIVITY;

* 如果pBinaryRelationSet具有反自反性,则返回ANTI_REFLEXIVITY;

* 如果pBinaryRelationSet既具有自反性,也具有反自反性,则返回

* REFLEXIVITY_AND_ANTI_REFLEXIVITY;

* 如果pBinaryRelationSet既不具有自反性,也不具有反自反性,则返回

* NOT_REFLEXIVITY_AND_NOT_ANTI_REFLEXIVITY;

*/

//自反函数

boolean IsReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ pCartersianSet pC=createNullCartersianSet();

//获取IA

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

//反自反函数

boolean IsAntiReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ pCartersianSet pC=createNullCartersianSet();

//获取IA

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(!isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

Reflexivity_Type DetermineReflexivity(pOriginalSet pA,

pCartersianSet pBinaryRelationR)

{

if(IsReflexivity(pA,pBinaryRelationR)&&IsAntiReflexivity(pA,pBinaryRelationR))

return REFLEXIVITY_AND_ANTI_REFLEXIVITY;

else if(!IsReflexivity(pA,pBinaryRelationR)&&!IsAntiReflexivity(pA,pBinaryRelationR)) return NOT_REFLEXIVITY_AND_NOT_ANTI_REFLEXIVITY;

else if(IsReflexivity(pA,pBinaryRelationR))

return REFLEXIVITY;

else

return ANTI_REFLEXIVITY;

}

10

6.10④试设计一算法,对某集合A上的一个二元关系R,判断R是否具有对称性或者反对称性。

实现下列函数:

/**

* 判断一个关系是否具有对称性或者反对称性。对一个关系R是否具有对称性或者反对称性,

* 有四种可能:是对称的;是反对称的;;既是对称的也是反对称的;既不是对称的也不是* 反对称的。

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 返回一个Symmetry_Type枚举类型值。

* 如果pBinaryRelationSet具有对称性,则返回SYMMETRY;

* 如果pBinaryRelationSet具有反对称性,则返回ANTI_SYMMETRY;

* 如果pBinaryRelationSet既具有对称性,也具有对称性,则返回

* SYMMETRY_AND_ANTI_SYMMETRY;

* 如果pBinaryRelationSet既不具有对称性,也不具有反对称性,则返回

* NOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;

*/

Symmetry_Type DetermineSymmetry(pCartersianSet pBinaryRelationR)

{int a,b,c; a=b=c=0;

if(!isNullCartersianSet(pBinaryRelationR))

{

for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersi anSetPos(pBinaryRelationR))

{

if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(ge tCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

&&!isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinar yRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

{a++;}

if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(ge tCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

&&isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinar yRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

{b++;}

if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(g etCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)))))

}

{

if(c==0&&a!=0)return SYMMETRY;

if(a==0&&c==0)return SYMMETRY_AND_ANTI_SYMMETRY;

if(a==0&&c!=0)return ANTI_SYMMETRY;

else return NOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;

}

}

if(isNullCartersianSet(pBinaryRelationR))

return SYMMETRY_AND_ANTI_SYMMETRY;

}

11

6.11④试设计一算法,对某集合A上的一个二元关系R,判断R是否具有传递性。

实现下列函数:

/**

* 判断一个关系是否具有传递性。

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 如果pBinaryRelationR具有传递性,则返回true,否则返回false

*/

boolean IsTransitive(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{

pOriginalSetElem First1,Second1;

pOriginalSetElem First2,Second2;

pCartersianSet pB=copyCartersianSet(pBinaryRelationR);

pCartersianSet pC=copyCartersianSet(pBinaryRelationR);

if(!isNullCartersianSet(pBinaryRelationR))

{

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC);nextCartersianSetPos(pC))

{

First1=getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pC));

Second1=getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pC));

for(resetCartersianSet(pB);!isEndOfCartersianSet(pB);nextCartersianSetPos(pB))

{

First2=getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pB));

Second2=getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pB));

if(isEqualOriginalSetElem(First2,Second1))

if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(First1,Second2)))

return false;}

}

}

}

else return true;

return true;

}

12

6.12③试设计一算法,对某集合A上的一个二元关系R,求R的自反闭包。

实现下列函数:

/**

* 判断一个关系R的自反闭包

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: pBinaryRelationR的自反闭包

*/ 方法://A的自反关系加上R即可

pCartersianSet ReflexiveClosure(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{

pCartersianSet pC=copyCartersianSet(pBinaryRelationR);

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{ // 空卡←序偶插入←建立序偶←条件语句

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA)) OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

return pC;

}

13

6.13③试设计一算法,对某集合A上的一个二元关系R,求R的对称闭包。

在实际计算中,无需给出集合A。

实现下列函数:

/**

* 判断一个关系R的对称闭包

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: pBinaryRelationR的自反闭包

*/

// 方法:把插入pD即可其中pD为R的复制函数值

易错点:因为无需给出A。所以循环利用pBinaryRelationR 即可。双重循环出错。pCartersianSet SymmetricClosure(pCartersianSet pBinaryRelationR)

pCartersianSet pD=copyCartersianSet(pBinaryRelationR);

for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersi anSetPos(pBinaryRelationR))

{

pOrderedCouple

xuou=createOrderedCouple(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBin aryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))); // 定义xuou为序偶

if(!isInCartersianSet(pBinaryRelationR,xuou)) // 判断序偶是否在pR

{

OrderedCoupleInsertToCartersianSet(pD,xuou); // 插入序偶

}

}

return pD;

}

14

6.14⑤试设计一算法,对某集合A上的一个二元关系R,求R的传递闭包。

实现下列函数:

/**

* 判断一个关系R的传递闭包

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: pBinaryRelationR的传递闭包

*/

pCartersianSet TransitiveClosure(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{

pCartersianSet pB=copyCartersianSet(pBinaryRelationR);

pCartersianSet pD=copyCartersianSet(pBinaryRelationR);

if(!isNullCartersianSet(pBinaryRelationR)) //非空

{

//假定:R为 ; pD为

for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersi anSetPos(pBinaryRelationR))

{

if(!isEqualOriginalSetElem(getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBin aryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

//R中序偶第二元不等于第一元即y!=x; 排除两元相等的情况

{

for(resetCartersianSet(pD);!isEndOfCartersianSet(pD);nextCartersianSetPos(pD))

if(isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pD)), getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)))

// R中序偶的第二元相等和pD中序偶第一元相等即R为 ; pD为 中Ry=pDy ;

&&!isInCartersianSet(pD,createOrderedCouple(getFirstElemOfOrderedCouple(getCurrentCarters ianSetElem(pBinaryRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pD)))))

//xuou 不在pD 即不属于pD ; */

OrderedCoupleInsertToCartersianSet(pB,createOrderedCouple(getFirstElemOfOrderedCouple(get CurrentCartersianSetElem(pBinaryRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pD))));

// 把符合条件的插入到pB ;

}

}

}

return pB;

}

15

6.15③实现Warshall算法,求某关系的传递闭包。

实现下列函数:

/**

* 对某集合A上的一个二元关系,求该关系的传递闭包。该关系使用矩阵表示。

* @param pM:二元关系矩阵

* @return: pM的传递闭包的关系矩阵

*/

pMatrix Warshall(pMatrix pM)

{

int i,j,a,b;

int n=getDim(pM);//维数

pMatrixBase p;

p=outToBuffer(pM);//首元素

if(n>=1)//非一维

{

for(i=0;i

for(j=0;j

{

a=converToInt(*(p+(i*n+j)));

if(a==1)

for(b=0;b

if(converToInt(*(p+(j*n+b)))==1)

putValue(p+(i*n+b),1);

for(i=0;i

{

for(j=0;j

{

a=converToInt(*(p+(i*n+j)));

if(a==1)

for(b=0;b

if(converToInt(*(p+(j*n+b)))==1)

putValue(p+(i*n+b),1);}

}

return createMatrix(p,n);

}

return pM;

}

第七章题目

7.01③试设计一算法,对某集合A上的一个二元关系R,判断R是否为等价关系。

实现下列函数:

/**

* 对某集合A上的一个二元关系R,判断R是否为等价关系

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 如果R是A上的等价关系,则返回true;否则返回false

*/

boolean IsReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ pCartersianSet pC=createNullCartersianSet();

//获取IA

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

Symmetry_Type DetermineSymmetry(pCartersianSet pBinaryRelationR)

{int a,c; a=c=0;

if(!isNullCartersianSet(pBinaryRelationR))

{

for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersi anSetPos(pBinaryRelationR))

{

if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(ge tCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

&&!isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinar yRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

{a++;}

if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(g etCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)))))

{c++;}

}

if(c==0&&a!=0)return SYMMETRY;

}

if(isNullCartersianSet(pBinaryRelationR))

return SYMMETRY_AND_ANTI_SYMMETRY;

}

boolean IsTransitive(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ int i=1;int j=1;int k=1;int d=0;

pOriginalSet pB=copyOriginalSet(pA);

pOriginalSet pC=copyOriginalSet(pA);

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB))

{if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getCurrentOriginalSetElem(pA),ge

tCurrentOriginalSetElem(pB)) ) )

i++; }

}

for(resetOriginalSet(pB);!isEndOfOriginalSet(pB);nextOriginalSetPos(pB))

{

for(resetOriginalSet(pC);!isEndOfOriginalSet(pC);nextOriginalSetPos(pC))

{if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getCurrentOriginalSetElem(pB),ge tCurrentOriginalSetElem(pC)) ) )

j++;}

}

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pC);!isEndOfOriginalSet(pC);nextOriginalSetPos(pC))

{if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getCurrentOriginalSetElem(pA),ge tCurrentOriginalSetElem(pC)) ) )

k++;

}

}

}

if(i==1&&j==1&&k==1) //?R ,?R , ?R 均属于R

return true;

else if(i!=1||j!=1) //不属于R

return true;

else

return false;

}

boolean isEquivalentRelation(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{if(isNullCartersianSet(pBinaryRelationR)&&isNullOriginalSet(pA))

return true;

if(!isNullCartersianSet(pBinaryRelationR))

{

if(IsReflexivity(pA,pBinaryRelationR)==true

&&DetermineSymmetry(pBinaryRelationR)==SYMMETRY

&&IsTransitive(pA,pBinaryRelationR)==true)

{return true;

}

return false;

}

}

7.02⑤试设计一算法,对某集合A上的一个二元关系R,求商集A/R。

实现下列函数:

/**

* 对某集合A上的一个二元关系R,判断R是否为等价关系

* @param pSetA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 商集A/R。商集中的每一个元素都是等价类集合。是pCompoundSet复合集合类型;其元素是原始集合,即等价类集合是pOriginalSet类型。

* 注意:在求解过程中,请勿对pSetA和pBinaryRelationR进行任何的加工型操作。

* 即请勿修改该集合的结构,包括增加或删除集合中的元素,或者对

* pSetA和pBinaryRelationR进行赋值操作。

*/

pCompoundSet QuotientSet(pOriginalSet pSetA, pCartersianSet pBinaryRelationR)

{

pOriginalSet pA=createNullOriginalSet();

pCompoundSet pB=createNullCompoundSet();

if(!isNullCartersianSet(pBinaryRelationR))

for(resetOriginalSet(pSetA);!isEndOfOriginalSet(pSetA);nextOriginalSetPos(pSetA))

{

pA=createNullOriginalSet();

for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersi anSetPos(pBinaryRelationR))

{

if(isEqualOriginalSetElem(getCurrentOriginalSetElem(pSetA),getFirstElemOfOrderedCouple(get CurrentCartersianSetElem(pBinaryRelationR))))

//条件插入

elemInsertToOriginalSet(pA,getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBi naryRelationR)));

}

if(!isNullOriginalSet(pA))

originalSetInsertToCompoundSet(pB,pA);

}

return pB;

}

7.02⑤试设计一算法,对某集合A上的一个二元关系R,求商集A/R。

实现下列函数:

/**

* 对某集合A上的一个二元关系R,判断R是否为等价关系

* @param pSetA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 商集A/R。商集中的每一个元素都是等价类集合。是pCompoundSet复合集合类型;其元素是原始集合,即等价类集合是pOriginalSet类型。

* 注意:在求解过程中,请勿对pSetA和pBinaryRelationR进行任何的加工型操作。

* 即请勿修改该集合的结构,包括增加或删除集合中的元素,或者对

* pSetA和pBinaryRelationR进行赋值操作。

*/

7.03⑤试设计一算法,求某集合A上的模n同余关系。

实现下列函数:

/**

* 对某集合A上的一个二元关系R,判断R是否为等价关系

* @param pSet:原始集合

* @param n:模

* @return: 集合A上的模n同余关系

* 注意:在求解过程中,请勿对pSetA和pBinaryRelationR进行任何的加工型操作。

* 即请勿修改该集合的结构,包括增加或删除集合中的元素。

*/

pCartersianSet CongruenceRelation(pOriginalSet pSet, int n)

{

pOriginalSet A=copyOriginalSet(pSet);

pOriginalSet B=copyOriginalSet(pSet);

pCartersianSet pC=createNullCartersianSet();

pOrderedCouple xuou;

if(!isNullCartersianSet(pSet))

for(resetOriginalSet(B);!isEndOfOriginalSet(B);nextOriginalSetPos(B))

{

for(resetOriginalSet(A);!isEndOfOriginalSet(A);nextOriginalSetPos(A))

{

if((originalSetElemToInt(getCurrentOriginalSetElem(B))-originalSetElemToInt(getCurrentOrigin alSetElem(A)))%n==0)

{

if(!isInCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(B),getCurrentOriginalS etElem(A))))

xuou=createOrderedCouple(getCurrentOriginalSetElem(B),getCurrentOriginalSetElem(A)); OrderedCoupleInsertToCartersianSet(pC,xuou);

}

}

return pC;

}

7.04③试设计一算法,对某集合A上的一个二元关系R,判断R是否为偏序关系。

实现下列函数:

/**

* 对某集合A上的一个二元关系R,判断R是否为偏序关系

* @param pA:原始集合

* @param pBinaryRelationR:卡氏积集合,该集合是一个pA上的二元关系

* @return: 如果R是A上的偏序关系,则返回true;否则返回false

*/

// R为自反,反对称和传递的则R为偏序关系调用三者函数

boolean IsReflexivity(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{ pCartersianSet pC=createNullCartersianSet();

//获取IA

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

{

for(resetOriginalSet(pA);!isEndOfOriginalSet(pA);nextOriginalSetPos(pA))

OrderedCoupleInsertToCartersianSet(pC,createOrderedCouple(getCurrentOriginalSetElem(pA),g etCurrentOriginalSetElem(pA)));

}

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC); nextCartersianSetPos(pC))

{

if(isInCartersianSet(pBinaryRelationR,getCurrentCartersianSetElem(pC)))

;//满足条件,执行空语句,继续循环

else return false;

}

return true;

}

Symmetry_Type DetermineSymmetry(pCartersianSet pBinaryRelationR)

{int a,b,c; a=b=c=0;

if(!isNullCartersianSet(pBinaryRelationR))

{

for(resetCartersianSet(pBinaryRelationR);!isEndOfCartersianSet(pBinaryRelationR);nextCartersi anSetPos(pBinaryRelationR))

if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(ge tCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

&&!isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinar yRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

{a++;}

if(isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(ge tCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

&&isEqualOriginalSetElem(getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinar yRelationR)),

getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR))))

{b++;}

if(!isInCartersianSet(pBinaryRelationR,createOrderedCouple(getSecondElemOfOrderedCouple(g etCurrentCartersianSetElem(pBinaryRelationR)),

getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pBinaryRelationR)))))

{c++;}

}

{

if(c==0&&a!=0)return SYMMETRY;

if(a==0&&c==0)return SYMMETRY_AND_ANTI_SYMMETRY;

if(a==0&&c!=0)return ANTI_SYMMETRY;

else return NOT_SYMMETRY_AND_NOT_ANTI_SYMMETRY;

}

}

if(isNullCartersianSet(pBinaryRelationR))

return SYMMETRY_AND_ANTI_SYMMETRY;

}

boolean IsTransitive(pOriginalSet pA, pCartersianSet pBinaryRelationR)

{

pOriginalSetElem First1,Second1;

pOriginalSetElem First2,Second2;

pCartersianSet pB=copyCartersianSet(pBinaryRelationR);

pCartersianSet pC=copyCartersianSet(pBinaryRelationR);

if(!isNullCartersianSet(pBinaryRelationR))

{

for(resetCartersianSet(pC);!isEndOfCartersianSet(pC);nextCartersianSetPos(pC))

{

First1=getFirstElemOfOrderedCouple(getCurrentCartersianSetElem(pC));

Second1=getSecondElemOfOrderedCouple(getCurrentCartersianSetElem(pC));

全国计算机等级考试二级C语言真题

2009年3月二级C语言笔试真题((1)—(10)每小题2分,(11)—(50)每题1分,共60分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)下列叙述中正确的是 A)栈是“先进先出”的线性表 B)队列是“先进先出”的线性表 C)循环队列是非线性结构 D)有序性表既可以采用顺序存储结构,也可以采用链式存储结构 (2)支持子程序调用的数据结构是 A)栈B)树C)队列D)二叉树 (3)某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是 A)10B)8C)6D)4 (4)下列排序方法中,最坏情况下比较次数最少的是 A)冒泡排序 B)简单选择排序 C)直接插入排序 D)堆排序 (5)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是 A)编译软件 B)操作系统 C)教务管理系统 D)汇编程序 (6)下面叙述中错误的是 A)软件测试的目的是发现错误并改正错误 B)对被调试的程序进行“错误定位”是程序调试的必要步骤 C)程序调试通常也称为Debug D)软件测试应严格执行测试计划,排除测试的随意性 (7)耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是 A)提高耦合性降低内聚性有利于提高模块的独立性 B)降低耦合性提高内聚性有利于提高模块的独立性

C)耦合性是指一个模块内部各个元素间彼此结合的紧密程度D)内聚性是指模块间互相连接的紧密程度 (8)数据库应用系统中的核心问题是 A)数据库设计 B)数据库系统设计 C)数据库维护 D)数据库管理员培训 (9)有两个关系R,S如下: 由关系R通过运算得到关系S,则所使用的运算为 A)选择B)投影C)插入D)连接 (10)将E-R图转换为关系模式时,实体和联系都可以表示为A)属性B)键C)关系D)域 (11)以下选项中合法的标识符是 A)1-1B)1—1C)-11D)1-- (12)若函数中有定义语句:intk;,则 A)系统将自动给k赋初值0 B)这时k中值无定义 C)系统将自动给k赋初值-1 D)这时k中无任何值 (13)以下选项中,能用作数据常量的是 A)o115B)0118C))115L (14)设有定义:intx=2;,以下表达式中,值不为6的是A)x*=x+1 B)x++,2*x C)x*=(1+x)

C语言上机练习题

上机练习题 完成 1.输入一个不超过五位的正整数,输出其逆数。例如输入12345,输出应为54321。 完成 2.计算1+2+3…+n的值,n是从键盘输入的自然数。 完成 3.从终端(键盘)读入20个数据到数组中,统计其中正数的个数,并计算这些正数之和。完成 4.从终端(键盘)将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中 各元素的值。 完成 5.要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,每种面 值至少1张,编程输出所有可能的换法,程序应适当考虑减少重复次数。 完成 6.求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,n从键盘输入。 例如若n为1000时,函数值应为:s=153.909064。 完成 7.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下 车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索找出车号。 完成 8.输入1~10之间的一个数字,输出它对应的英文单词。 完成 9.个位数为6且能被3整除但不能被5整除的三位自然数共有多少个,分别是哪些? 完成 10.用自然语言描述程序逻辑如下,试写程序。 ①设置环境; ②定义变量i、j、s,以及用于放置结果的变量sum,并令sum初值为0; ③i=1; ④如果i≤100,则转⑤,否则转⑧; ⑤令s=0,求前i个自然数之和,并放于变量s之中; ⑥sum=sum+s; ⑦i增加1,转④; ⑧输出和sum,结束。 完成 11.用自然语言描述的程序逻辑为: ①设置环境; ②定义变量i、flag和password,并令flag=0,i=0; ③用户回答口令,将其赋于password变量; ④口令正确?如果是,则flag=1,转⑥。否则转⑤; ⑤回答三次口令了吗?如果没有,计数器加1后(i++),转③,否则转⑥; ⑥根据flag之值输出相应信息。 12.用自然语言描述的程序逻辑如下: ①设置环境;

计算机二级c语言历年真题及答案

计算机二级c语言历年真题及答案【篇一:国家计算机二级c语言历年真题及答案】 class=txt>c语言程序设计 (考试时间90分钟,满分100分) 一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分) (1)下列数据结构中,属于非线性结构的是 a)循环队列 b) 带链队列 c) 二叉树 d)带链栈 (2)下列数据结果中,能够按照“先进后出”原则存取数据的是 a) 循环队列 b) 栈 c)队列 d)二叉树 (3)对于循环队列,下列叙述中正确的是 a)队头指针是固定不变的 b)队头指针一定大于队尾指针 c)队头指针一定小于队尾指针 d)队头指针可以大于队尾指针,也可以小于队尾指针 (4)算法的空间复杂度是指 a)算法在执行过程中所需要的计算机存储空间 b)算法所处理的数据量 c)算法程序中的语句或指令条数 d)算法在执行过程中所需要的临时工作单元数 (5)软件设计中划分模块的一个准则是 a) 低内聚低耦合 b) 高内聚低耦合 c) 低内聚高耦合 d) 高内聚高耦合 (6)下列选项中不属于结构化程序设计原则的是 a) 可封装 d) 自顶向下

c) 模块化 d) 逐步求精 (7)软件详细设计产生的图如下: 该图是 a) n-s图 b) pad图 c) 程序流程图 d) e-r图 (8)数据库管理系统是 a)操作系统的一部分 b) 在操作系统支持下的系统软件 c) 一种编译系统 d) 一种操作系统 (9)在e-r图中,用来表示实体联系的图形是 a) 椭圆图 b) 矩形 c) 菱形 d) 三角形 (10)有三个关系r,s和t如下: 其中关系t由关系r和s通过某种操作得到,该操作为 a) 选择 b) 投影 c) 交 d) 并 (11)以下叙述中正确的是 a)程序设计的任务就是编写程序代码并上机调试 b)程序设计的任务就是确定所用数据结构 c)程序设计的任务就是确定所用算法 d)以上三种说法都不完整 (12)以下选项中,能用作用户标识符的是 a)void b)8_8 c)_0_ d)unsigned (13)阅读以下程序

2017年全国计算机等级考试二级C语言上机题库

2017年全国计算机等级考试二级 C语言上机题库 第一套 1.程序填空 程序通过定义学生结构体数组,存储了若干个学生的学号、姓名和三门课的成绩。函数fun 的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 第一处struct student t; 第二处for(i=0;i0) 2程序修改 给定程序MODI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大的字符,将其放在第一个位置上;并将该字符前的原字符向上顺序移动。 /**found**/ q=p+i; /**found**/ while(q>p) 3程序设计 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。 int fun(STREC *a,STREC *b,int l,int h) {int i,j=0; for(i=0;i=1&&a[i].s<=h) b[j++]=a[i]; return j; } 第二套 1.程序填空 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序连接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 第一处free(q); 第二处q=p->next; 第三处q=q->next; 2. 程序修改 给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n各元素按从小到大的顺序进行排序。 /**found**/ p=j; /**found**/ p=i; 3. 程序设计 请编写一个fun函数,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。void fun(int m,int *a,int *n) { int i; *n=0; for(i=7;i<=m;i++) if((i%7==0)||(i%11==0)) a[(*n)++]=i; } 第三套 1. 程序填空 函数fun的功能是:逆置数组元素是的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数组中数据的个数。 第一处for(i=0;i

C语言上机练习题

上机练习题 1.输入一个不超过五位的正整数,输出其逆数。例如输入12345,输出应为54321。 2.计算1+2+3…+n的值,n是从键盘输入的自然数。 3.从终端(键盘)读入20个数据到数组中,统计其中正数的个数,并计算这些正数之和。 4.从终端(键盘)将5个整数输入到数组a中,然后将a逆序复制到数组b中,并输出b中 各元素的值。 5.要将五张100元的大钞票,换成等值的50元,20元,10元,5元一张的小钞票,每种面 值至少1张,编程输出所有可能的换法,程序应适当考虑减少重复次数。 6.求n以内(不包括n)同时能被3和7整除的所有自然数之和的平方根s,n从键盘输入。 例如若n为1000时,函数值应为:s=153.909064。 7.一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下 车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是数学家,他说:四位的车号刚好是一个整数的平方。请根据以上线索找出车号。 8.输入1~10之间的一个数字,输出它对应的英文单词。 9.个位数为6且能被3整除但不能被5整除的三位自然数共有多少个,分别是哪些? 10.用自然语言描述程序逻辑如下,试写程序。 ①设置环境; ②定义变量i、j、s,以及用于放置结果的变量sum,并令sum初值为0; ③i=1; ④如果i≤100,则转⑤,否则转⑧; ⑤令s=0,求前i个自然数之和,并放于变量s之中; ⑥sum=sum+s; ⑦i增加1,转④; ⑧输出和sum,结束。 11.用自然语言描述的程序逻辑为: ①设置环境; ②定义变量i、flag和password,并令flag=0,i=0; ③用户回答口令,将其赋于password变量; ④口令正确?如果是,则flag=1,转⑥。否则转⑤; ⑤回答三次口令了吗?如果没有,计数器加1后(i++),转③,否则转⑥; ⑥根据flag之值输出相应信息。 12.用自然语言描述的程序逻辑如下: ①设置环境; ②定义变量digit、x、y分别表示原始数、原始数的个位数和逆数; ③输入原始正整数x; ④从x中分解出个位数字digit; ⑤合并个位digit至逆数y中; ⑥原始数x缩小10倍:x=x/10; ⑦如果x非零,则转④; ⑧输出逆数y,结束 13.输入某三角形的三个边的长度,判断出这是个什么三角形(等腰、等边、任意,或不能构 成)。 14.输入10个数,分别统计其中正数、负数、零的个数。 15.先随机产生N个三位自然数输出,然后再输出其中同时是3、5、7倍数的数。(设N为100)

计算机二级c语言题库及答案

2016年计算机二级c语言题库及答案 一、选择题(每小题1分,共40小题,共40分) 1.设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为( )。 或35 2.下列关于栈的叙述中,正确的是( )。 A.栈底元素一定是最后入栈的元素 B.栈操作遵循先进后出的原则 C.栈顶元素一定是最先入栈的元素 D.以上三种说法都不对 3.下列链表中,其逻辑结构属于非线性结构的是( )0、 A.双向链表 B.带链的栈 C.二叉链表 D.循环链表 4.在关系数据库中,用来表示实体间联系的是( )。 A.网状结构 B.树状结构 C.属性 D.二维表 5.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是( )。 :m联系 :n联系 :1联系 :l联系

6.右两个关系R和S如下: 则由关系R得到关系S的操作是( )。 A.自然连接 B.并 C.选择 D.投影 7.数据字典(DD)所定义的对象都包含于( )。 A.软件结构图 B.方框图 C.数据流图(DFD图) D.程序流程图 8.软件需求规格说明书的作用不包括( )。 A.软件设计的依据 B.软件可行性研究的依据 C.软件验收的依据 D.用户与开发人员对软件要做什么的共同理解 9.下面属于黑盒测试方法的是( )。 A.边界值分析 B.路径覆盖 C.语句覆盖 D.逻辑覆盖 10.下面不属于软件设计阶段任务的是( )。 A.制订软件确认测试计划 B.数据库设计 C.软件总体设计 D.算法设计 11.以下叙述中正确的是( )。 A.在C语言程序中,main函数必须放在其他函数的最前面 B.每个后缀为C的C语言源程序都可以单独进行编译 C.在C语言程序中,只有main函数才可单独进行编译

西工大C语言上机考试题库

1:2:3 #include #include int main() { int i=0,j=0,k=0,a=0,b=0,c=0,l=0,m=0,n=0,d=0,p=0,q=0; for(i=1;i<=3;i++) { for(j=1;j<=9;j++) { if(i!=j) { for(k=1;k<=9;k++) { if(k!=j&&i!=k) { a=i*100+j*10+k; b=a*2; c=a*3; l=b%10,d=c%10; m=(b%100)/10,p=(c%100)/10; n=b/100,q=c/100; if(l!=0&&m!=0&&n!=0&&d!=0&&p!=0&&q!=0) if(i!=l&&i!=m&&i!=n&&j!=l&&j!=m&&j!=n&&k!=l&&k!=m&&k!=n) if(i!=d&&i!=p&&i!=q&&j!=d&&j!=p&&j!=q&&k!=d&&k!=p&&k!=q) if(l!=d&&l!=p&&l!=q&&m!=d&&m!=p&&m!=q&&n!=d&&n!=p&&n!=q) printf("%d %d %d\n",a,b,c); } }

} } } return 0; } 8 #include"stdio.h" int main() { int a,b[10],m=0,n=0,p; int i,j,k; scanf("%d",&a); for(i=1;i<=a;i++) { m=0; n=0; p=i; for(j=0;p!=0;j++) { b[j]=p%10; p=p/10; } for(k=0;k

C语言上机练习题

C语言上机练习题 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

1.阅读以下程序,说出其功能和运算结果。 #include<> intmain() { intn; intfactorial(intn); scanf("%d",&n); printf("%d\n",factorial(n)); return0; } intfactorial(intn) { inti,fact=1; for(i=1;i<=n;i++) fact=fact*i; returnfact; } 若输入5↙ 2.改正下列程序中的错误,在屏幕上显示“WelcometoYou!”。 #include<> intmian() { printf("WelcometoYou!\n") return0; } 3.若输入4,程序运行结果为【1】,若输入-4,运行结果为【2】,若输入10,运行结果为【3】。 #include<> main() { intx,y; scanf("%d",&x); if(x<1) {y=x;

printf("x=%d,y=x=%d\n",x,y); } elseif(x<10) {y=2*x-1; printf("x=%d,y=2*x-1=%d\n",x,y); } else {y=3*x-11; printf("x=%d,y=3*x-11=%d\n",x,y); } } 4.当输入19,2,21时下列程序运行的结果是()。 #include<> main() {inta,b,c,max; printf("pleasescanthreenumbera,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max

计算机二级C语言编程题库(100题)

2011,____年上机题100题库 1: 第1题m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中。 答案: int fun(int score[],int m,int below[]) { int i,k=0,aver=0; for(i=0;i<m;i++) aver+=score[i]; aver/=m; for(i=0;i<m;i++) if(score[i]<aver) { below[k]=score[i]; k++; } return k; } 2: 第2题请编写函数fun,它的功能是:求出1到100之内能北7或者11整除,但不能同时北7和11整除的所有证书,并将他们放在a所指的数组中,通过n返回这些数的个数。

答案: void fun(int *a, int *n) { int i,j=0; for(i=2;i<1000;i++) if ((i%7==0 || i%11==0) && i%77!=0) a[j++]=i; *n=j; } 3: 第3题请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 答案: void fun(int x, int pp[ ], int *n) { int i=1,j=0;k=0,*t=pp; for(i=0;i<=x;i++) if(i%2!=0) { t[j]=I; j++; }

c语言上机操作题

实验一上机操作初步(2学时) 一、实验方式: 一人一机 二、实验目的: 1、了解C语言程序的特点与基本结构。 2、了解C语言程序的编译环境。 3、掌握使用C语言编写和调试程序的流程:编辑-保存-编译-构建(组件)-执行。 4、掌握C语言程序在Visual C++ 6.0环境下的调试过程。 5、初步了解C程序的特点。 三、实验内容: 说明:前三题为必做题目,第四题为选做题目。 1、编辑实验教材P2程序,掌握C语言程序在Visual C++6.0环境下的编译流程和调试过程。(实验教材P2) 2、在屏幕上实现下列图案的输出: **************************** hello,welcome to china! good bye! **************************** (实验教材P11) 3、计算两个数x和y的和。(教材P5【例1-2】) 4、求两个数的最大值。(教材P5【例1-3】) 四、实验步骤与过程: 1、#include "stdio.h" void main( ) { printf("Hello,World!"); printf("\n"); } 2、 五、实验调试记录: 1、 2、 实验二简单的C程序设计(2学时) 一、实验方式: 一人一机 二、实验目的: 1、掌握C语言的数据类型。 2、掌握标识符、常量、变量的定义及使用。 3、掌握C语言的常用运算符及表达式。 三、实验内容:

说明:前四题为必做题目,第五题为选做题目。 1、从键盘输入华氏温度h,输出摄氏温度c(摄氏温度=5/9*(华氏温度-32))。(实验教材P18) 2、给定圆环,输入内圆环半径r1、外圆环半径r2,求出圆环的面积。(实验教材P27) 3、从键盘上输入两个整数x、y,实现两个数的交换,并求出最大值、最小值和两个数的平均值。(实验教材P21) 4、输入并运行以下程序,分析运行结果。(实验教材P27) #include “stdio.h” void main( ) { int i,j; i=8; j=10; printf(“%d,%d\n”,++i,++j); i=8; j=10; printf(“%d,%d\n”,i++,j++); i=8; j=10; printf(“%d,%d\n”,++i,i); i=8; j=10; printf(“%d,%d\n”,i++,i); } 5、从键盘上输入3个数a、b、c,求一元二次方程的解x1、x2,并分别把这两个解的绝对值作为圆柱的半径与高,计算圆柱的体积。(实验教材P20) 四、实验步骤与过程: 五、实验调试记录: 实验三选择结构程序设计(一)(2学时) 一、实验方式: 一人一机 二、实验目的: 1、掌握单分支if语句的使用方法。 2、掌握双分支if-else语句的使用方法。 3、掌握多分支语句的一般形式和使用方法。 三、实验内容: 说明:前四题为必做题目,第五题为选做题目。 1、从键盘输入一个3位整数,请输出该数的逆序数。(实验教材P27) 2、输入3个字符型数据,将其转换成相应的整数后,求它们的平均值并输出。(实验教材P27) 3、判断箱子是正方体还是长方体。请根据注释将程序填写完整。(实验教材P33) 4、编写程序,通过输入x的值,计算阶跃函数y的值。(教材P70【例5-4】)

计算机二级C语言考试编程题题库

计算机c语言编程题库 1、求100之内自然数中最大的能被17整除的数。 void main() { int i; for(i=100;i>0;i--) if(i%17==0)break; printf("%d\n",i); } 2、已知a,b,c都是1位整数,求当三位整数abc、cba的和为1333时a、b、c的值。 void main() { int a,b,c; for(a=1;a<=9;a++) { for(b=0;b<=9;b++) { for(c=1;c<=9;c++) if(a*100+b*10+c+c*100+b*10+a==1333) printf("%d,%d,%d\n",a,b,c); } } } 3、计算并输出200-400之间不能被3整除的整数的和。 void main() { int i,sum=0; for(i=200;i<=400;i++) if(i%3!=0) sum=sum+i; printf("%d\n",sum); } 4、从键盘输入10个数,统计非负数的个数,并计算非负数的和。 void main() { int i,n=0,sum=0; int a[10]; printf(“请输入10个数:”);

for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) if(a[i]>=0) { sum=sum+a[i]; n++;} printf("非负个数是%d,sum=%d\n",n,sum); } 5、求100之内自然数中偶数之和。 void main() { int i,sum=0; for(i=0;i<=100;i++) if(i%2==0) sum=sum+i; printf("sum=%d\n",sum); } 6、输入5个数,求和并输出。要求编写求和的函数。 void main() { int b(int x[],int n); int sum=0; int a[5]; int i; printf("请输入5个数:"); for(i=0;i<5;i++) scanf("%d",&a[i]); sum=b(a,5); printf("sum=%d\n",sum); } int b(int x[],int n) { int i,sum=0; for(i=0;i<5;i++) sum=sum+x[i]; return sum; } 7、编程计算1*2*3+3*4*5+5*6*7+...+99*100*101的值。 void main() { int i,sum=0; for(i=1;i<=99;i=i+2) sum=sum+i*(i+1)*(i+2); printf("%d\n",sum); } 8、编写程序,将用户输入的字符串中所有的字符a用*代替,然后输出。void main()

C语言上机练习题_828701982

C语言上机考试练习题(1) 说明:我们已经学习完成了基本数据类型、基本控制语句,以及数组、函数这些知识了,请同学们看看附件中的这些题目是否能够快速编写出来?可能有个别题目与过去的练习有些重复,请尽量不要去参考过去的答案。如果现在编写起来困难还很多,那你就要加倍努力了。 1、编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,返回子串在主串中的位置。要求: (1)在主函数中输入两个字符串,调用子函数cmpsubstr()判断,并在主函数输出结果。 (2)子函数的返回值为-1表示未找到,否则返回子串的位置(起始下标)。#include #include void main() { int cmpsubstr(char *s1,char *s2); char str1[20],str2[50]; char *s1=str1,*s2=str2; gets(str1); gets(str2); printf("%d",cmpsubstr(s1,s2)); } int cmpsubstr(char *s1,char *s2) { int i,d,a=0,situation=0; d=strlen(s1); for(i=0;*(s2+i)!='\0';i++) {

if(*(s1+a)==*(s2+i)) { a++; if(a==d) { situation=1; break; } } else { a=0; } } if(situation==0)return(-1); else return(i-d+2); } 2、输入一个字符串,有数字和非数字字符,如:a123x456 17960?302tab5876,将其中连续的数字作为一个整数,依次存放到数组a中。例如,123放在a[0]中,456放在a[1]中等等,统计共有多少个整数,并输出这些整数。要求:(1)在主函数中输入字符串,并输出结果。调用子程序处理字符串。 (2)子函数的返回值为整数的个数。 #include #include void main() { int search(char *str,int *sum); char str[100]; int d,sum[20],i;

(完整版)历年全国计算机二级C语言题库

50道C语言知识题 1.以下叙述中正确的是 A)用C程序实现的算法必须要有输入和输出操作 B)用C程序实现的算法可以没有输出但必须要有输入 C)用C程序实现的算法可以没有输入但必须要有输出 D)用C程序实现的算法可以既没有输入也没有输出 2.下列可用于C语言用户标识符的一组是 A)void,define,WORDB)a3_3,_123,Car C)For,-abc,IFCaseD)2a,DO,sizeof 3.以下选项中可作为C语言合法常量的是 A)-80B)-080C)-8e1.0D)-80.0e 4.若有语句:char*line[5];,以下叙述中正确的是 A)定义line是一个数组,每个数组元素是一个基类型为char为指针变量 B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组 C)定义line是一个指针数组,语句中的*号称为间址运算符 D)定义line是一个指向字符型函数的指针 5.以下定义语句中正确的是 A)inta=b=0;B)charA=65+1,b=′b′; C)floata=1,*b=&a,*c=&b;D)doublea=00;b=1.1; 6.有以下程序段 charch;intk; ch=′a′; k=12; printf("%c,%d,",ch,ch,k);printf("k=%d\n",k); 已知字符a的ASCII码值为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 7.有以下程序 main() {inti,s=1; for(i=1;i<50;i++) if(!(i%5)&&!(i%3))s+=i; printf("%d\n",s);} 程序的输出结果是 A)409B)277C)1D)91 8.当变量c的值不为2、4、6时,值也为"真"的表达式是 A)(c==2)||(c==4)||(c==6) B)(c>=2&&c<=6)||(c!=3)||(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1) 9.若变量已正确定义,有以下程序段 inta=3,b=5,c=7;

C语言期末上机考试题及答案

C语言上机考试题—01 1. //#include #include double fun( int n ) { double sum=0,a=1; for(;n>0;n--,a++) sum=sum+1/(a*(a+1)); return sum; } main() { // clrscr(); printf("%f\n", fun(10)); } 2. #include main() { int k,m,s=0,i,b=0; for(k=10000;k<=20000;k++ ) { if(k%10==7) { for(i=2,b=0;i main() { int a; printf("请输入一个需要判 断的年份:\n"); scanf("%d",&a); if(a%4==0&&a%100!=0) printf("是闰年\n"); else if(a%400==0) printf("是闰年 \n"); else printf("不是闰 年\n"); } C语言上机考试题—02 1. //#include #include double fun( int n ) { double sum=0,a=1; for(;n>0;n--,a++) sum=sum+1/(a*(a+1)); return sum; } main() { // clrscr(); printf("%f\n", fun(10)); } 2. #include fun(int n) { int i,j=0; for(i=2;i #include main() { char str[81]; int i,j=0,w=1,s=0; printf("请输入一串字符: \n"); gets(str); for(i=0;i

计算机二级C语言上机考试操作步骤及流程

二级C语言上机考试操作步骤 一、进入考试系统 单击桌面上的“考试系统”图标,进入考试启动界面。“考试启动界面”如图1所示。 图1 二、输入考生信息 进入考试界面后,单击“开始登录”按钮即可进入考试环境进行“考生信息”的输入。“信息输入”如图2所示。 图2 考生输入准考证号如“2427180018001800”后,单击“考号验证”按钮进行信息核实,系统会弹出如图3所示的对话框。 图3

在确定考生信息完全正确时,单击“是”按钮,进入答题界面,如下图所示,上方含有“程序填空题”、“程序修改题”、“程序设计题”三个按钮, 三、开始答题 本次考试共有50套题,每一套题的填空、改错和编程题的答案均附在后面。学生进入上述考试界面后,首先点击程序设计题,根据程序设计题从而明白是哪一套题的组合,然后开始正式答题。过程如下: 1.程序填空题 单击考试界面中的“程序填空题”按钮后,题目显示区将显示出题目对应的文字叙述信息。通过文字叙述可以了解到该题目的考试内容。然后单击左上角“答题”菜单中的“启动Microsoft Visual C++”菜单项进入“Visual C++ 6.0”系统环境界面,如下图所示。 进入系统环境后,执行左上角的“文件|打开”命令,系统弱出“打开”对话框,选择“blank1.c”程序文件,

点击左下角的“打开”按钮,如图4所示。 图4 打开“blank1.c”程序文件后,开始填空。填空方法如下: (1)在程序中找到“******** found *******”标识位置。 (2)把“found ”标识位置下面的需要填空的“占位符”删除(需要连横线一起删除),将程序的答案写在对应位置。例如下图所示。 原“blank1.c ”程序图: 打开

江西计算机省二级试题及答案_二级C语言上机题库1

二级C 语言上机考试复习资料,共有50套题目 一、程序填空题 1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun 的功能是对形参b 所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。 例如: b 所指变量t 中的学号、姓名、和三门课的成绩依次是: 1000 2、"ZhangQi"、9 3、85、87,修改后输出t 中的数据应为:1000 4、" LiJie "、93、8 5、87。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! #include #include struct student { long sno; char name[10]; float score[3]; }; void fun( struct student *b) { /**********found**********/ b__1__ = 10004; /**********found**********/ strcpy(b__2__, "LiJie"); } main() { struct student t={10002,"ZhangQi", 93, 85, 87}; int i; printf("\n\nThe original data :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, https://www.wendangku.net/doc/1d5554935.html,); for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); /**********found**********/ fun(__3__); printf("\nThe data after modified :\n"); printf("\nNo: %ld Name: %s\nScores: ",t.sno, https://www.wendangku.net/doc/1d5554935.html,); for (i=0; i<3; i++) printf("%6.2f ", t.score[i]); printf("\n"); } 2、给定程序中,函数fun 的功能是计算下式 例如,若形参e 的值为1e-3,函数的返回值2.985678。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! #include double fun(double e) { int i; double s, x; /**********found**********/ s=0; i=__1__; x=1.0; while(x>e){ /**********found**********/ __2__; /**********found**********/ x=(2.0*i-1)/((__3__)*(2.0*i)); s=s+x; } return s; } main() { double e=1e-3; printf("\nThe result is: %f\n",fun(e)); } 3、给定程序中,函数fun 的功能是: 将s 所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s 所指的字符串为:def35adh3kjsdf7。执行结正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! #include void fun(char *s) { int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') { /**********found**********/ t2[j]=s[i]; ___1___; } else t1[k++]=s[i]; t2[j]=0; t1[k]=0; /**********found**********/ for(i=0; i #define N 4 /**********found**********/ void fun(int (*t)___1___ ) { int i, j; for(i=1; i

相关文档
相关文档 最新文档