当前位置:文档之家› 西工大 C,C++大作业

西工大 C,C++大作业

西工大 C,C++大作业
西工大 C,C++大作业

学院

目录

1 摘要 (3)

1.1设计题目 (3)

1.2设计内容 (3)

1.3开发工具 (3)

1.4应用平台 (3)

2 详细设计 (3)

2.1程序结构 (3)

2.2主要功能 (3)

2.3函数实现 (4)

2.4开发日志 (19)

3 程序调试及运行 (19)

3.1程序运行结果 (19)

3.2程序使用说明 (22)

3.3程序开发总结 (23)

4 附件(源程序) (23)

/*在后面的文档编写中,请你不要修改各个标题的内容,从而确保报告内容和风格一致。完成全部内容后,你只需要在上面的目录上右键“更新域”,选择“只更新页码”就可以更新正确的目录页码。注意:目录的左边距为6.5厘米。*/

1 摘要

1.1 设计题目

加强原有台球小游戏的功能和制作背景,加强观赏性

1.2 设计内容

根据网上查找原有台球游戏代码资料,在billiards.cpp中对台球的操作按键进行了修改(括号内为原来按键):1.将视图左旋转该为A键(向左键),右旋转改为D键(向右键),缩小改为S键(向下键);推杆键改为T键(向上键);增加推杆力度改为E键(<键);减少推杆力度改为F键(>键)。

2.增加修饰物,增加了背景图片和背景音乐。

3.更改击规则。

1.3 开发工具

codeblocks和Win32。

1.4 应用平台

Windows 7/Vista 32位

2 详细设计

2.1 程序结构

本游戏程序主要由3大模块组成,1.主控制模块(说明模块),2.台球控制模块,3.背景控制模块。各模块主要功能如2.2中说明。

2.2 主要功能

1.主控制模块:给游戏参与者一个较为友好的界面,并对游戏规则进行相关说明。并在该模块对游戏按键进行了更改。其代码为附录中billiards.cpp。

2.台球控制模块:主要功能是由向量法控制台球沿推杆方向前进。其代码为附录中mySphere.cpp。

3.背景控制模块:主要功能是实现背景图片链接和背景音乐的链接。其代码为附录中vector.cpp。

2.3 函数实现

1.

int ImageLoad(const char *filename, Image *image) {

FILE *file;

unsigned long size;

unsigned long i;

unsigned short int planes;

unsigned short int bpp;

char temp, finalName[80];

strcpy(finalName, "textures/" );

strcat(finalName, filename );

if ((file = fopen(finalName, "rb"))==NULL) {

printf("File Not Found : %s\n",finalName);

return 0;

}

fseek(file, 18, SEEK_CUR);

if ((i = fread(&image->sizeX, 4, 1, file)) != 1) {

printf("Error reading width from %s.\n", finalName);

return 0;

}

if ((i = fread(&image->sizeY, 4, 1, file)) != 1) {

printf("Error reading height from %s.\n", finalName);

return 0;

}

size = image->sizeX * image->sizeY * 3;

if ((fread(&planes, 2, 1, file)) != 1) {

printf("Error reading planes from %s.\n", finalName);

return 0;

}

if (planes != 1) {

printf("Planes from %s is not 1: %u\n", finalName, planes);

return 0;

}

if ((i = fread(&bpp, 2, 1, file)) != 1) {

printf("Error reading bpp from %s.\n", finalName);

return 0;

}

if (bpp != 24) {

printf("Bpp from %s is not 24: %u\n", finalName, bpp);

return 0;

}

fseek(file, 24, SEEK_CUR);

image->data = (char *) malloc(size);

if (image->data == NULL) {

printf("Error allocating memory for color-corrected image data");

return 0;

}

if ((i = fread(image->data, size, 1, file)) != 1) {

printf("Error reading image data from %s.\n", finalName);

return 0;

}

for (i=0;i

temp = image->data[i];

image->data[i] = image->data[i+2];

image->data[i+2] = temp;

}

return 1;

} 实现台球控制/

增加背图片

glBindTexture(GL_TEXTURE_2D, surfaceTexture);

for (GLfloat k=(width/(-2.0)); k < (width/(2.0)); k += (width/widthSegments)) {

for (GLfloat r=(length/(-2.0)); r < (length/(2.0)); r += (length/lengthSegments)) {

glBegin(GL_QUADS);

glNormal3f(normalX, normalY, normalZ);

glTexCoord2f(0.0, texYTile);

glVertex3f(k, elevation, r+length/lengthSegments);

glTexCoord2f(texXTile, texYTile);

glVertex3f(k+width/widthSegments, elevation, r+length/lengthSegments);

glTexCoord2f(texXTile, 0.0);

glVertex3f(k+width/widthSegments, elevation, r);

glTexCoord2f(0.0, 0.0);

glVertex3f(k, elevation, r);

glEnd();

}

}

glPopMatrix();

}

// 呈现方式为任意4点,屏幕代表的四

void renderQuad(GLfloat point1[3], GLfloat point2[3], GLfloat point3[3], GLfloat point4[3], GLfloat orientation, GLfloat texXTile, GLfloat texYTile) {

glBegin(GL_QUADS);

vector3 theNormal = vector3(0.0, 0.0, 0.0);

theNormal = getNormal(point1, point3, point4);

theNormal = theNormal*orientation;

glNormal3f(theNormal.x, theNormal.y, theNormal.z);

glTexCoord2f(0.0, texYTile);

glVertex3fv(point1);

glNormal3f(theNormal.x, theNormal.y, theNormal.z);

glTexCoord2f(texXTile, texYTile);

glVertex3fv(point2);

glNormal3f(theNormal.x, theNormal.y, theNormal.z);

glTexCoord2f(texXTile, 0.0);

glVertex3fv(point3);

glNormal3f(theNormal.x, theNormal.y, theNormal.z);

glTexCoord2f(0.0, 0.0);

glVertex3fv(point4);

glEnd();

}

// 呈现曲线(任意高度和扫描部分缸)屏幕。

void renderCurve(GLfloat radius, GLfloat height, GLfloat sweep, GLuint segments, GLfloat orientation, GLuint &aTexture) {

glPushMatrix();

glBindTexture(GL_TEXTURE_2D, aTexture);

for (float t=0.0; t <= sweep-(sweep/segments); t += sweep/segments) {

GLfloat x = 0.0, y = 0.0, z = 0.0;

GLfloat point1[3] = {radius*cos(t), height, radius*sin(t)};

GLfloat point2[3] = {radius*cos(t+sweep/segments), height, radius*sin(t+sweep/segments)};

GLfloat point3[3] = {radius*cos(t+sweep/segments), 0.0, radius*sin(t+sweep/segments)};

GLfloat point4[3] = {radius*cos(t), 0.0, radius*sin(t)};

renderQuad(point1, point2, point3, point4, orientation, 1.0, 1.0);

}

glPopMatrix();

}

// 渲染任何扫到屏幕的光盘(上限为圆柱体)。

void renderCap(GLfloat inner_radius, GLfloat outer_radius, GLfloat inner_sweep, GLfloat outer_sweep, GLuint segments, GLuint &myTexture) {

glPushMatrix();

GLfloat ciX = 0.0, coX = 0.0, ciZ = 0.0, coZ = 0.0;

GLfloat angle = -1.0*outer_sweep/segments;

glBindTexture(GL_TEXTURE_2D, myTexture);

for (int k=0; k < segments; k++) {

ciX = inner_radius*cos(angle + inner_sweep/segments);

ciZ = inner_radius*sin(angle + inner_sweep/segments);

coX = outer_radius*cos(angle + outer_sweep/segments);

coZ = outer_radius*sin(angle + outer_sweep/segments);

angle += inner_sweep/segments;

glBegin(GL_QUADS);

glNormal3f(0.0,1.0,0.0);

glTexCoord2f(coX/(2.0*outer_radius), coZ/(2.0*outer_radius));

glVertex3f(coX, 0.0, coZ);

glNormal3f(0.0,1.0,0.0);

glTexCoord2f(outer_radius*cos(angle + outer_sweep/segments)/(2.0*outer_radius), outer_radius*sin(angle + outer_sweep/segments)/(2.0*outer_radius));

glVertex3f(outer_radius*cos(angle + outer_sweep/segments), 0.0, outer_radius*sin(angle + outer_sweep/segments));

glNormal3f(0.0,1.0,0.0);

glTexCoord2f(inner_radius*cos(angle + inner_sweep/segments)/(2.0*inner_radius), inner_radius*sin(angle + inner_sweep/segments)/(2.0*inner_radius));

glVertex3f(inner_radius*cos(angle + inner_sweep/segments), 0.0, inner_radius*sin(angle + inner_sweep/segments));

glNormal3f(0.0,1.0,0.0);

glTexCoord2f(ciX/(2.0*inner_radius), ciZ/(2.0*inner_radius));

glVertex3f(ciX, 0.0, ciZ);

glEnd();

}

glPopMatrix();

}

// 使得通用校准和预定义扫到屏幕的口袋

void renderPocket(GLfloat sweep) {

glPushMatrix();

glTranslatef(0.0, -1.55, 0.0);

renderCurve(5.5, 2.55, sweep, 16, 1, theTexture[DARK_WOOD]);

renderCurve(3.0, 2.55, sweep, 16, -1, theTexture[GREEN_CARPET]);

renderCap(0.0001, 5.5, 6.3, 6.3, 16, theTexture[BLACK]);

glPopMatrix();

glPushMatrix();

glTranslatef(0.0, 1.0, 0.0);

renderCap(3.0, 5.5, sweep, sweep, 16, theTexture[DARK_WOOD]);

glPopMatrix();

glPushMatrix();

glTranslatef(0.0, -1.4, 0.0);

if (sweep < M_PI+0.001) renderCap(0.0001, 3.0, M_PI, M_PI, 16, theTexture[BLACK]);

else renderCap(0.0001, 3.0, 6.3, 6.3, 16, theTexture[BLACK]);

glPopMatrix();

}

// 呈现弯曲的桌腿屏幕

void renderTableLegs() {

glNewList(displayList[4], GL_COMPILE);

glBindTexture(GL_TEXTURE_2D, theTexture[DARK_WOOD]);

glPushMatrix();

for (double k=0; k < 3.0*M_PI; k+=1.4) {

for (double g=0; g < M_PI*2.0; g+=0.5) {

GLfloat point1[3] = {3.0*sin((k+1.4)/3.0)*cos(g), k*2, 3.0*sin((k+1.4)/3.0)*sin(g)};

GLfloat point2[3] = {3.0*sin((k+1.4)/3.0)*cos(g+0.5), k*2, 3.0*sin((k+1.4)/3.0)*sin(g+0.5)};

GLfloat point3[3] = {3.0*sin(k/3.0)*cos(g+0.5), k*2 - 2.8, 3.0*sin(k/3.0)*sin(g+0.5)};

GLfloat point4[3] = {3.0*sin(k/3.0)*cos(g), k*2 - 2.8, 3.0*sin(k/3.0)*sin(g)};

renderQuad(point1, point2, point3, point4, 1.0, 1.0, 1.0);

}

}

glRotatef(90.0, 1.0, 0.0 ,0.0);

glutSolidTorus(1.0, 1.8, 5, 8);

gluCylinder(pillarCylinder, 1.0, 3.0, 4.0, 8, 2);

glPopMatrix();

glEndList();

}

// 绘制表格的一侧(通常对齐)

void drawSide() {

glPushMatrix();

glTranslatef(0, -0.3, 0);

glScalef(1.0, 1.0, 2.0);

glRotatef(270.0, 0.0, 1.0, 0.0);

glRotatef(45.0, 0.0, 0.0, 1.0);

glBindTexture(GL_TEXTURE_2D, theTexture[WOOD]);

gluCylinder(pillarCylinder, 1.7, 1.7, tableWidth - 6, 4, 4);

glPopMatrix();

// 绿地毯的一侧

glPushMatrix();

glTranslatef(-1.0*tableWidth + 6, 0.0, -2.35);

glRotatef(180.0, 0.0, 0.0, 1.0);

glRotatef(270.0, 0.0, 1.0, 0.0);

glScalef(0.5, 1.0, 1.0);

glBindTexture(GL_TEXTURE_2D, theTexture[GREEN_CARPET]);

gluCylinder(pillarCylinder, 1.7, 1.7, tableWidth - 6, 3, 3);

glPopMatrix();

}

// 绘制整个表屏幕

void renderTable() {

glNewList(displayList[1], GL_COMPILE);

glColor3f(1.0,1.0,1.0);

// 表铺设地毯的区域

renderSurface(tableWidth, tableLength, 10.0, 15.0, -1.5, 1.0, 1.0, 0.0, 1.0, 0.0, theTexture[GREEN_CARPET]);

// 在铺设地毯的区域抗锯齿的游戏线

glPushMatrix();

glDisable(GL_TEXTURE_2D);

glDisable(GL_LIGHTING);

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL_LINE_SMOOTH);

glColor4f(0.5, 0.5, 0.5, 0.4);

glLineWidth(2.5f);

// 水平式线

glTranslatef(0.0, -1.45, 0.0);

glBegin(GL_LINES);

glVertex3f(minX - pocketRadius, 0.0, minZ - minZ/3);

glVertex3f(maxX + pocketRadius, 0.0, minZ - minZ/3);

glEnd();

//半圈

glTranslatef(0.0, 0.0, minZ - minZ/3);

glRotatef(90.0, 0.0, 1.0, 0.0);

glBegin(GL_LINES);

for (GLfloat i = 0.0; i < M_PI-(M_PI/12.0); i+=M_PI/12.0) {

glVertex3f((maxZ/6.0)*sin(i), 0.0, (maxZ/6.0)*cos(i));

glVertex3f((maxZ/6.0)*sin(i+M_PI/12.0), 0.0, (maxZ/6.0)*cos(i+M_PI/12.0));

}

glEnd();

glLineWidth(1.0f);

// 上线的启动点

glRotatef(90.0, 1.0, 0.0, 0.0);

gluDisk(pillarCylinder, 0, 0.3, 9, 1);

glDisable(GL_LINE_SMOOTH);

glDisable(GL_BLEND);

glEnable(GL_LIGHTING);

glEnable(GL_TEXTURE_2D);

glPopMatrix();

// 表面

GLint divCount = -5, angleDirection = 1;

GLfloat offA = 2.4, offB = 3.0, offTemp = 0.0, sideAngle = 270.0;

for(GLint f=1; f >= -1; f--) {

for (GLfloat r=-1.0; r <= 1.0; r+=2.0) {

glPushMatrix();

glTranslatef(tableWidth/(r*2.0) + (abs(divCount)/divCount)*offA, 0.0, f*tableWidth + r*offB);

glRotatef(sideAngle, 0.0, 1.0, 0.0);

drawSide();

glPopMatrix();

divCount += 2;

if ((f == 0) && (r == -1.0)) {

offA = 2.4; offB = 3.0; offTemp = 0.0;

sideAngle = 90.0;

angleDirection = 1;

} else {

offTemp = offA; offA = offB; offB = offTemp;

sideAngle = sideAngle + angleDirection*90.0;

angleDirection *= -1;

}

}

}

// 口袋

GLfloat direction = -1.0, angle = 360.0, sweep = M_PI + M_PI/2.0;

bool sidePocket = false;

for (int g=-1; g <= 1; g+=2) {

for (int d=1; d >= -1; d-=1) {

glPushMatrix();

glTranslatef(g*tableWidth/(2.0), 0.0, d*tableWidth);

glRotatef(angle,0.0,1.0,0.0);

renderPocket(sweep);

glPopMatrix();

if (d == 1) {

sweep = M_PI;

if (g == -1) {

angle = angle + direction*90;

sidePocket = true;

}

} else {

if (sidePocket == false) angle = angle + direction*90; else sidePocket = false;

sweep = M_PI + M_PI/2.0;

}

}

direction = -1*direction;

angle = 90;

}

// 基地

glBindTexture(GL_TEXTURE_2D, theTexture[WOOD]);

glPushMatrix();

glTranslatef(0.0, -1.4, 0.0);

glScalef(1.5, 1.0, 2.9);

glRotatef(45.0, 0.0, 1.0, 0.0);

glRotatef(90.0, 1.0, 0.0, 0.0);

gluCylinder(pillarCylinder, tableWidth/2, tableWidth/2 - 2, 5, 4, 2);

glPopMatrix();

// 腿

glBindTexture(GL_TEXTURE_2D, theTexture[DARK_WOOD]);

for (int g=-1; g <= 1; g+=2) {

for (int d=-1; d <= 1; d+=2) {

glPushMatrix();

glTranslatef(tableWidth/(g*2.0) + g*(-5.0), -20.0, tableLength/(d*2.0) + d*(-5.0));

glCallList(displayList[4]);

glPopMatrix();

}

}

glEndList();

}

// 使用一吨的可调节设置计算楼梯(可能会后记录其使用)

void renderStairs(GLint orientation, GLfloat stepCount, GLfloat stepWidth, GLfloat stepWidthDecrease, GLfloat totalHeight, GLuint &myFlatTexture, GLuint &myStepTexture) {

glPushMatrix();

GLfloat t = 0.0, curve = 0.0, nextCurve = 0.0, groundHeight = 0, groundIncrease = totalHeight/stepCount, depth = 70.0, moveRight = 0.0;

GLfloat spreadFactor = 0.2, minRange = -1.0*sqrt(depth/spreadFactor)+moveRight, maxRange = sqrt(depth/spreadFactor)+moveRight;

vector3 originVector = vector3(0.0, 0.0, 0.0);

// 半楼梯从右到左的攀登

if (orientation == 0) {

maxRange = 0.0;

// 半楼梯从左至右的攀登

} else if (orientation == 1) {

minRange = 0.0;

groundHeight = stepCount*groundIncrease + 2.0*groundIncrease;

stepWidth = stepWidth - stepCount*stepWidthDecrease;

stepWidthDecrease *= -1.0;

groundIncrease *= -1.0;

}

GLfloat incr = (sqrt((maxRange - minRange)*(maxRange - minRange)))/(stepCount+1);

if (orientation == 1) {

maxRange = maxRange - incr;

minRange = 0.0 - 2.0*incr;

minRange = minRange + incr;

} else if (orientation == 0) {

} else if (orientation == 2) {

groundHeight = stepCount*groundIncrease + 2.0*groundIncrease;

stepWidth = stepWidth - stepCount*stepWidthDecrease;

stepWidthDecrease *= -1.0;

groundIncrease *= -1.0;

}

t = minRange;

for (t; t < maxRange; t+= incr) {

curve = spreadFactor*((-1.0*(t - moveRight)*(t-moveRight))) + depth;

nextCurve = spreadFactor*((-1.0*(t + incr - moveRight)*(t + incr -moveRight))) + depth;

vector3 stepNormalV = vector3(0.0,0.0,0.0);

stepNormalV.x = curve - (spreadFactor*((-1.0*(t + incr - moveRight)*(t+incr-moveRight))) + depth);

stepNormalV.y = 0.0;

stepNormalV.z = incr;

GLfloat length = sqrt( (stepNormalV.x*stepNormalV.x) + (stepNormalV.y*stepNormalV.y) + (stepNormalV.z*stepNormalV.z) );

stepNormalV = stepNormalV * (1/length);

stepNormalV = stepNormalV * stepWidth;

GLfloat stairs1[3] = {stepNormalV.x + originV ector.x, groundHeight + groundIncrease, stepNormalV.z + originVector.z};

GLfloat stairs2[3] = {originVector.x, groundHeight + groundIncrease, originVector.z};

GLfloat stairs3[3] = {originVector.x, groundHeight, originVector.z};

GLfloat stairs4[3] = {stepNormalV.x + originVector.x, groundHeight, stepNormalV.z + originVector.z};

GLfloat stairs6[3] = {t+incr, groundHeight + groundIncrease, nextCurve};

GLfloat stairs7[3] = {t+incr, groundHeight, nextCurve};

originVector.x = stairs6[0];

originVector.y = stairs6[1];

originVector.z = stairs6[2];

curve = spreadFactor*((-1.0*(t+incr - moveRight)*(t+incr-moveRight))) + depth;

nextCurve = spreadFactor*((-1.0*(t + incr+incr - moveRight)*(t +incr+ incr -moveRight))) + depth;

stepWidth = stepWidth - stepWidthDecrease;

stepNormalV = vector3(0.0,0.0,0.0);

stepNormalV.x = curve - (spreadFactor*((-1.0*(t+incr + incr - moveRight)*(t+incr+incr-moveRight))) + depth);

stepNormalV.y = 0.0;

stepNormalV.z = incr;

length = sqrt( (stepNormalV.x*stepNormalV.x) + (stepNormalV.y*stepNormalV.y) + (stepNormalV.z*stepNormalV.z) );

stepNormalV = stepNormalV * (1/length);

stepNormalV = stepNormalV * stepWidth;

GLfloat stairs5[3] = {stepNormalV.x + originV ector.x, groundHeight + groundIncrease, stepNormalV.z + originVector.z};

groundHeight = groundHeight + groundIncrease;

if (t != minRange) {

glBindTexture(GL_TEXTURE_2D, myStepTexture);

if (orientation == 0) {

renderQuad(stairs1, stairs2, stairs3, stairs4, 1.0, 1.0, 1.0);

} else {

renderQuad(stairs1, stairs2, stairs3, stairs4, -1.0, 1.0, 1.0);

}

if ((orientation == 1) && (t > maxRange-incr)) { } else {

glBindTexture(GL_TEXTURE_2D, myFlatTexture);

renderQuad(stairs1, stairs2, stairs6, stairs5, -1.0, 1.0, 1.0);

}

}

}

glPopMatrix();

}

// 呈现阳台(楼梯加红屏)屏幕

void renderBalcony() {

glNewList(displayList[3], GL_COMPILE);

glPushMatrix();

glTranslatef(0.0,0.0,-100.0);

glRotatef(145, 0.0, 1.0, 0.0);

renderCurve(70.0, 90.0, 1.945, 16, -1, theTexture[RED_LIGHT]);

glPopMatrix();

glPushMatrix();

glTranslatef(0.0,0.0,-100.0);

glRotatef(180.0, 0.0, 1.0, 0.0);

glPushMatrix();

glTranslatef(-45.0, -3.0, 10.0);

renderStairs(0, 15.0, 60.0, 1.5, 60.0, theTexture[RED_CARPET], theTexture[BLACK]);

glPopMatrix();

glPushMatrix();

glTranslatef(45.0, 0.0, 0.0);

renderStairs(1, 15.0, 60.0, 1.5, 60.0, theTexture[RED_CARPET], theTexture[BLACK]);

glPopMatrix();

glPopMatrix();

glEndList();

}

// 使房间的其余部分(减去阳台,floot和表)屏幕

void renderRoom() {

glNewList(displayList[2], GL_COMPILE);

GLfloat height= 90.0;

// 屋顶

glPushMatrix();

glTranslatef(0.0, 90.0 ,0.0);

glRotatef(-90.0, 1.0, 0.0, 0.0);

glRotatef(22.5, 0.0, 0.0, 1.0);

glBindTexture(GL_TEXTURE_2D, theTexture[ROOF]);

gluCylinder(pillarCylinder, 230.0, 0.0, 50, 8, 1);

glPopMatrix();

// 视窗

glPushMatrix();

glRotatef(292.5, 0.0, 1.0, 0.0);

renderCurve(230, height, (M_PI/4.0), 1, -1, theTexture[SEA_VIEW]);

glRotatef(-45, 0.0, 1.0, 0.0);

renderCurve(230, height, (M_PI/4.0), 1, -1, theTexture[SEA_VIEW2]);

glPopMatrix();

glPushMatrix();

glTranslatef(165, 20.0, -25.0);

glRotatef(22.5, 0.0, 1.0, 0.0);

renderCurve(50, 50, (M_PI/4.0), 1, -1, theTexture[PAINTING2]);

glTranslatef(-20, 0.0, 50.0);

renderCurve(50, 50, (M_PI/4.0), 1, -1, theTexture[PAINTING1]);

glPopMatrix();

glPushMatrix();

glRotatef(202.5, 0.0, 1.0, 0.0);

// 墙壁

renderCurve(230.0, height, ((2*M_PI) - (M_PI/4.0)), 7, -1, theTexture[BLUE_W ALL]);

// 天花板

glPushMatrix();

glTranslatef(0.0,90.0,0.0);

renderCap(135.0, 230.0, M_PI*2.0, M_PI*2.0, 8, theTexture[BLACK]);

renderCurve(135.0, 20.0, M_PI*2.0, 8, -1, theTexture[RED_MARBLE]);

glPopMatrix();

glPushMatrix();

glTranslatef(0.0,0.5,0.0);

renderCap(135.0, 230.0, M_PI*2.0, M_PI*2.0, 8, theTexture[BLACK]);

glPopMatrix();

for (GLfloat t=0.0; t < M_PI*2.0; t+= M_PI*2.0/8.0) {

glBindTexture(GL_TEXTURE_2D, theTexture[DARKBLUE_MARBLE]);

glPushMatrix();

glTranslatef(223.0*cos(t), height, 223.0*sin(t));

glRotatef(90.0, 1.0, 0.0, 0.0);

glutSolidTorus(5.0, 6.0, 8, 12);

gluCylinder(pillarCylinder, 7.0, 7.0, height, 16, 1);

glPopMatrix();

glPushMatrix();

glTranslatef(223.0*cos(t), 1.0, 223.0*sin(t));

glRotatef(90.0, 1.0, 0.0, 0.0);

glutSolidTorus(5.0, 6.0, 8, 12);

glPopMatrix();

glBindTexture(GL_TEXTURE_2D, theTexture[BEIGE_WALL]);

glPushMatrix();

glTranslatef(145.0*cos(t), height, 145.0*sin(t));

glRotatef(90.0, 1.0, 0.0, 0.0);

glutSolidTorus(1.5, 2.5, 8, 12);

gluCylinder(pillarCylinder, 3.0, 3.0, height, 16, 1);

glPopMatrix();

glPushMatrix();

glTranslatef(145.0*cos(t), 1.0, 145.0*sin(t));

glRotatef(90.0, 1.0, 0.0, 0.0);

glutSolidTorus(1.5, 2.5, 8, 12);

glPopMatrix();

}

glPopMatrix();

glEndList();

}

// Renders the cue stick to screen

void renderCueStick() {

glPushMatrix();

updateTarget();

updateCamera();

glTranslatef(camera[3], camera[4], camera[5]);

glRotatef(theta*180.0/M_PI*(-1.0) + 90, 0.0, 1.0 ,0.0);

glRotatef(-11.5, 1.0, 0.0 ,0.0);

glTranslatef(0.0, 0.0, power);

glBindTexture(GL_TEXTURE_2D, theTexture[CUE]);

2.4 开发日志

2014年

5月28日开始构思准备修改这样一个台球游戏。

6月初,在看完老师演示的植物大战僵尸使太阳无限后,开始准备自己的修改方案。虽然与老师的方法有很大不同。但坚持自己的方案可行。

6月1日查找网上台球游戏源代码。通过百度,及书籍开始接触win GUI project项目,并慢慢的会那么一点点。

6月3日,对billiards.cpp中的代码进行修改,更改了相关按键。

6月4日——6日,编写背景图片和音乐代码。

6月8日,基本完成,进行加强修改。

3 程序调试及运行

3.1 程序运行结果

billiards.cpp运行结果,可多视图转换。

打开游戏界面:

对游戏进行控制:

C语言大作业报告

目录 一、设计题目 二、目标和需求分析 三、开发工具 四、应用平台 五、程序模块 1、游戏盒子 2、2048 3、扫雷 4、贪吃蛇 六、开发日志 七、程序调试及运行 八、程序开发总结 总结:虽然做出来的东西真的没什么技术水平,但是我们尽量把这个东西的每个方方面面做完整。

目标和需求分析一个小的游戏盒子,可以用来启动其它游戏,当然,其它游戏也是我们大作业的编写内容,平时可以玩玩用来打发时间 用到的工具VS2005 Easyx图形库 Pthread线程库 Hge 分工 秦贤康 组织大家,编写主程序,及构思计划,技术指导 王尧 所有的文件处理,数据算法方面优化 王懿晨 合作2048模块 杨梓晗 图片资源加工,音乐裁剪,按钮制作 程维驰 合作扫雷模块 应用平台:WINDOWS X64

程序功能模块: 一、 安装包:(写入开始菜单快捷方式,桌面快捷方式,开机启动等)//pascal 脚本编写 #define MyAppName "C 大作业" #define MyAppVersion "2.0" #define MyAppPublisher "五人小组" #define MyAppExeName "1.exe" [Setup] AppId={{49DB1DB4-FAE9-4ACB-A4B9-E5C420C5F10B} AppName={#MyAppName} AppVersion={#MyAppVersion} ;AppVerName={#MyAppName} {#MyAppVersion} AppPublisher={#MyAppPublisher} DefaultDirName={pf}\{#MyAppName} DisableDirPage=yes DefaultGroupName={#MyAppName} DisableProgramGroupPage=yes (剩余代码未全部给出) 安装包 内嵌:C 语言报告 游戏盒子 开机启动,桌面快捷方式等 进入动画,左侧动画 启动模块 通知,和显示游戏信息 2048 扫雷 贪吃蛇 主界面信息显示 通知栏信息显示 意见箱

西北工业大学C语言大作业实验报告

学院*****************

目录 1 摘要 (3) 1.1设计题目 (3) 1.2设计内容 (3) 1.3开发工具 (3) 1.4应用平台 (4) 2 详细设计 (4) 2.1程序结构 (4) 2.2主要功能 (10) 2.3函数实现 (13) 2.4开发日志 (18) 3 程序调试及运行 (20) 3.1程序运行结果 (20) 3.2程序使用说明 (22) 3.3程序开发总结 (22) 4 附件(源程序) (22)

1 摘要 1.1 设计题目 折半法查找演示程序 1.2 设计内容 本程序是一个演示折半查找算法的演示程序。由用户输入查找的数据表列和查找的数据,系统在将数表排序后可以在屏幕上演示在排序后的表列中按折半查找法查找该数据的具体过程(通过每次查找的中间数据、下次查找表列等,具体效果见下图),支持多次演示、错误提醒,程序暂停演示功能。 1.3 开发工具 Visual C++ 6.0和Win32。

1.4 应用平台 Windows 2000/XP/Vista 32位 2 详细设计 2.1 程序结构 程序功能模块: 本程序主要由五大模块组成:程序说明模块、输入模块、排序模块、折半法查找及显示模块、进程选择模块。各模块的主要功能如下: 程序说明模块:给使用者营造一个较为友好的界面,同时提供程序开发人员的相关信息以及程序操作的相关说明信息。 此部分模块主函数源代码如下: int a[N]; /*存储要查找的数表,用户输入*/ int i,n,num,count; /*count为折半次数计数器,n为数表数据个数,num存储所查数据*/ int top,bottom,mid; char c; /*存储选择函数中的输入的字符y或n*/ int flag=1; /*折半法循环标志变量*/ int loc=-1; /*存储所查找数据位置*/ double k=0; p_s(76);puts("\n"); /*引用p_s函数,打出一行'*'*/(p_s函数位于print_star.cpp文件中,参见下文) printf("****欢****迎****使****用****折****半****查****找****法****演****示****器****\n"); puts("\n"); /*程序欢迎语*/ p_s(13); printf("制作者:***************** "); /*作者信息*/ p_s(4); printf("Email:************************ "); /*电子邮件*/

凸轮机构大作业___西工大机械原理要点

大作业(二) 凸轮机构设计 (题号:4-A) (一)题目及原始数据···············(二)推杆运动规律及凸轮廓线方程·········(三)程序框图········· (四)计算程序·················

(五)程序计算结果及分析·············(六)凸轮机构图·················(七)心得体会··················(八)参考书··················· 一题目及原始数据 试用计算机辅助设计完成偏置直动滚子推杆盘形凸轮机构的设计 (1)推程运动规律为五次多项式运动规律,回程运动规律为余弦加速度运动规律; (2)打印出原始数据; (3)打印出理论轮廓和实际轮廓的坐标值; (4)打印出推程和回程的最大压力角,以及出现最大压力角时凸轮的相应转角;(5)打印出凸轮实际轮廓曲线的最小曲率半径,以及相应的凸轮转角; (6)打印最后所确定的凸轮的基圆半径。 表一偏置直动滚子推杆盘形凸轮机构的已知参数 题号初选的 基圆半 径 R0/mm 偏距 E/mm 滚子 半径 Rr/m m 推杆行 程 h/mm 许用压力角许用最小曲率半径 [ρamin] [α1] [α2] 4-A 15 5 10 28 30°70?0.3Rr 计算点数:N=90 q1=60; 近休止角δ1 q2=180; 推程运动角δ2 q3=90; 远休止角δ3 q4=90; 回程运动角δ4 二推杆运动规律及凸轮廓线方程推杆运动规律: (1)近休阶段:0o≤δ<60 o s=0;

ds/dδ=0; 2/δd 2 d=0; s (2)推程阶段:60o≤δ<180 o 五次多项式运动规律: Q1=Q-60; s=10*h*Q1*Q1*Q1/(q2*q2*q2)-15*h*Q1*Q1*Q1*Q1/(q2*q2*q2*q2)+6*h*Q1*Q1*Q 1*Q1*Q1/(q2*q2*q2*q2*q2); ds/dδ =30*h*Q1*Q1*QQ/(q2*q2*q2)-60*h*Q1*Q1*Q1*QQ/(q2*q2*q2*q2)+30*h*Q1*Q1*Q 1*Q1*QQ/(q2*q2*q2*q2*q2); 2/δd 2 d=60*h*Q1*QQ*QQ/(q2*q2*q2)-180*h*Q1*Q1*QQ*QQ/((q2*q2*q2*q2))+1 s 20*h*Q1*Q1*Q1*QQ*QQ/((q2*q2*q2*q2*q2)); (3)远休阶段:180o≤δ<270 o s=h=24; ds/dδ=0; 2/δd 2 d=0; s (4)回程阶段:270≤δ<360 Q2=Q-270; s=h*(1+cos(2*Q2/QQ))/2; ds/dδ=-h*sin(2*Q2/QQ); 2/δd 2 d=-2*h*cos(2*Q2/QQ); s 凸轮廓线方程: (1)理论廓线方程: s0=sqrt(r02-e2) x=(s0+s)sinδ+ecosδ y=(s0+s)cosδ-esinδ (2)实际廓线方程 先求x,y的一、二阶导数 dx=(ds/dδ-e)*sin(δ)+(s0+s)*cos(δ);

C语言程序大作业.doc

大连理工大学C程序设计(大作业)总结报告学生成绩录入处理系统 学生姓名:罗 专业班级: 学号: 联系电话: Email : 完成日期:2015年 5 月29日

一、设计任务 我的程序设计是一个学生成绩录入及处理的程序,该程序包括多种功能,能够满足大多数的学生成绩管理处理。主要能够实现的目的主要有: 第一.学生姓名学号既包括三门成绩等信息的录入,并保存到文件d://score.txt。 第二.对每个学生的成绩进行求平均分及按平均分排序的数字处理。 第三.对输入错误的学生信息加以修改重新排序保存。 第四.增加学生信息,重新排序,加以保存。 第五.按每个学生的平均分进行表格化和图形化处理。 第六.实现某位同学的信息查找,包括姓名,学号,每科成绩及平均分。 以上功能全都可以实现,但是注意录入信息的要求,下面会有注释。 二、程序设计与实现 1.结构框图 下图描述预期实现题目的设计方案或功能设计的组成结构。绘制成框图,如图所示是我设计的成绩信息管理程序设计的结构图示:

2.功能模块设计及其流程图 (1) 数据描述与存储 该学生信息统计系统设计一个全局结构体变量,将学生的姓名,学号,各科成绩及平均分保存在结构体,然后供设计各种程序调用,以完成修改,增加,排序和数据显示的功能。学生成绩数据以二进制存储在d://score.txt文件,可以利用程序随时进行增加和修改,同时它会自动排序。的描述题目所使用的核心数据,如;结构体类型定义及结构体成员含义说明。并说明所使用的数据存储方法,指定文件的路径和文件名,保存数据的格式和读数据的目的。 (2) 结构体定义及介绍 typedef struct rec /*定义一个结构体类型*/ { char name[20]; /*第一个元素为学生姓名,20个字节*/ short number; /*第一个元素为学生学号,2个字节(输入注意不要超出)*/ short score[M]; /*(M为全局3)依次定义三门科目分数:数,英,机*/ float average; /*定义浮点型平均数,保留2位小数,有函数计算赋值*/ }score; score stu[N]; /*(N为全局100)定义全局总数100个学生信息以录入*/ (3)对于该程序的一点说明 1.学号在0~32768之间,请录入前对学号做好数据处理。 2.该系统的成绩满分为一百分制,如有某科成绩不符合应提前处理。 3.录入退出后,同样的数据不需两次输入,可直接运行程序处理及查看。 4.保存退出后请勿删除文件,数据会丢失。 5.柱状图的分辨率在十位数。 (4) 主要函数功能基变量说明

西工大DSP大作业

西工大DSRt作业

实验1基于CCS的简单的定点DSF程序 一、实验要求 1、自行安装CCS3.3版本,配置和运行CCS 2、熟悉CCS开发环境,访问读写DSP勺寄存器AC0-AC3 AR0-AR7, PC, T0-T3 3、结合C5510的存储器空间分配,访问DSR的内部RAM 4、编写一个最简单的定点DSP程序,计算下面式子 y=0.1*1.2+35*20+15*1.6 5、采用定点DSP进行计算,确定每个操作数的定点表示方法,最后结果的定点表示方法,并验证结果 6、对编写的程序进行编译、链接、运行、断点执行、单步抽并给出map映射文件 二、实验原理 DSP芯片的定点运算---Q格式(转)2008-09-03 15:47 DSP 芯片的 定点运算 1. 数据的溢出: 1>溢出分类:上溢(oveflow ): 下溢(underflow ) 2>溢出的结果:Max Min Min Max un sig ned char 0 255 sig ned char -128 127 un sig ned int 0 65535 signed int -32768 32767

上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。 例:signed int : 32767+1 = —32768 ; -32768-1 = 32767 unsigned char : 255+1 = 0; 0-1 = 255 3>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。当 发生溢出时,自动将结果设置为最大值或最小值。 2. 定点处理器对浮点数的处理: 1>定义变量为浮点型(float , double ),用C语言抹平定点处理器和浮点处理器 2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算,3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小 数的精度。Q0 :小数点在第0位的后面,即我们一般采用的方法Q15 小数点在第15位的后面,0~ 14位都是小数位。转化公式:Q= (int ) (F X pow(2, q)) F =(float ) (Qx pow (2,—q)) 3. Q格式的运算 1>定点加减法:须转换成相同的Q格式才能加减 2>定点乘法:不同Q格式的数据相乘,相当于Q值相加 3>定点除法:不同Q格式的数据相除,相当于Q值相减 4>定点左移:左移相当于Q值增加 5>定点右移:右移相当于Q减少 4. Q格式的应用格式 实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。 所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两 种方法:

西工大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语言大作业报告范文

学院XX学院

目录 1 摘要 (3) 1.1设计题目 (3) 1.2设计容 (3) 1.3开发工具 (3) 1.4应用平台 (3) 2 详细设计 (3) 2.1程序结构 (3) 2.2主要功能 (3) 2.3函数实现 (3) 2.4开发日志 (4) 3 程序调试及运行 (4) 3.1程序运行结果 (4) 3.2程序使用说明 (4) 3.3程序开发总结 (4) 4 附件(源程序) (4)

1 摘要 1.1 设计题目 (A)求最大数;(B)高次方数的尾数 1.2 设计容 (A)求555555的约数中最大的三位数; (B)求13的13次方的最后三位数1.3 开发工具 Visual C++ 6.0和Win32。 1.4 应用平台 Windows XP 32位 2 详细设计 2.1 程序结构 (A)求最大数

定义变量a、b、c,a从100至999递增,b为555555,用b除以a,判断是否可以整除,若可以,则把a的值赋给c,a自加1;若不可,a自加1。重复以上步骤,直到a>999,输出c。循环语句采用for 循环。 (B)高次方数的尾数

定义变量i、j,i从1至13递增,j初值为1。用j乘以13,用得到的乘积除以1000并取其余数,赋给j,i自加1。重复以上步骤,直到i>13,输出j。循环语句采用for循环。

2.2 主要功能 程序功能:(A)求555555的约数中最大的三位数; (B)求13的13次方的最后三位数。 原理和方法: (A)题目的原理和方法:因为要求的是三位数,就用555555从小到大依次除以100到999的所有数,并判断能否整除,最后一个可以整除555555的数即为所求。循环语句采用for循环。 (B)题目的原理和方法:乘积的最后三位数只与乘数和被乘数的后三位数有关,因此用1乘以13,再除以1000并取余数,用余数乘以13,再除以1000并取余数,依次进行下去,累乘13个13后除以1000取得的余数即为所求。循环语句采用for循环。 2.3 函数实现 (A)求最大数 int a,b=555555,c; /*定义变量,赋初值*/ for(a=100;a<=999;a++) /*FOR循环*/ { if(b%a==0) /*利用IF语句判断b是否可以被a整除*/ c=a; /*将555555的约数赋给c*/ } printf("%d\n",c); /*输出c*/ (B)高次方数的尾数 int i,j=1; /*定义变量,赋初值*/ for(i=1;i<=13;i++) /*FOR循环*/ { j=j*13%1000; /*将j乘以13的乘积的后三位数赋给j*/ } printf("%d\n",j); /*输出j*/ 2.4 开发日志 (A)选定这个题目后,我先分析此题用何种算法完成,确定了使用FOR循环并限定除数围,然后画出程序框图,再一步步编写源代码。调试过程很顺利,只有一个地方忘加了“;”。运行程序后,结果非常满意。 (B)这个题目不难,但是也不简便,我想到只取三位数的方法,并使用FOR循环,然后画出程序框图,再一步步编写源代码。调试过程发现对其中一个变量的初值是1还是13有待解决,分析程序后发现应该用1,然后进一步调试,运行,直至结果正确。

西工大DSP大作业

实验1 基于CCS的简单的定点DSP程序 一、实验要求 1、自行安装CCS3.3版本,配置和运行CCS 2、熟悉CCS开发环境,访问读写DSP的寄存器AC0-AC3,ARO-AR7, PC, T0-T3 3、结合C5510的存储器空间分配,访问DSP的内部RAM 4、编写一个最简单的定点DSP程序,计算下面式子y=0.1*1.2+35*20+15*1.6 5、采用定点DSP进行计算,确定每个操作数的定点表示方法, 最后结果的定点表示方法,并验证结果 6、对编写的程序进行编译、链接、运行、断点执行、单步抽并给出map映射文件 二、实验原理 DSP芯片的定点运算---Q格式(转) 2008-09-03 15:47 DSP芯片的定点运算 1.数据的溢出: 1>溢出分类:上溢(overflow):下溢(underflow) 2>溢出的结果:Max Min Min Max unsigned char 0 255 signed char -128 127 unsigned int 0 65535 signed int -32768 32767 上溢在圆圈上按数据逆时针移动;下溢在圆圈上顺时钟移动。例:signed int :32767+1=-32768;-32768-1=32767

unsigned char:255+1=0;0-1=255 3>为了避免溢出的发生,一般在DSP中可以设置溢出保护功能。当 发生溢出时,自动将结果设置为最大值或最小值。 2.定点处理器对浮点数的处理: 1>定义变量为浮点型(float,double),用C语言抹平定点处理器和浮点处理器的区 2>放大若干倍表示小数。比如要表示精度为0.01的变量,放大100倍去运算,运算 3>定标法:Q格式:通过假定小数点位于哪一位的右侧,从而确定小 数的精度。Q0:小数点在第0位的后面,即我们一般采用的方法Q15 小数点在第15位的后面,0~14位都是小数位。转化公式:Q=(int) (F×pow(2,q))F=(float)(Q×pow(2,-q)) 3.Q格式的运算 1>定点加减法:须转换成相同的Q格式才能加减 2>定点乘法:不同Q格式的数据相乘,相当于Q值相加 3>定点除法:不同Q格式的数据相除,相当于Q值相减 4>定点左移:左移相当于Q值增加 5> 定点右移:右移相当于Q减少 4.Q格式的应用格式 实际应用中,浮点运算大都时候都是既有整数部分,也有小数部分的。 所以要选择一个适当的定标格式才能更好的处理运算。一般用如下两 种方法: 1>使用时使用适中的定标,既可以表示一定的整数复位也可以表示 小数复位,如对于2812的32位系统,使用Q15格式,可表示

西工大c语言实验100题06

第六次CH1005 #include int main() { int i,a[500]={0},n,*p,j=0,k=0; scanf("%d",&n); for(i=0;i

{ int n; char a[500],b[500]={'\0'},*p1,*p2; gets(a); scanf("%d",&n); p1=a;p2=b; for(p1=p1+n;*p1!='\0';p1++,p2++) *p2=*p1; puts(b); return 0; } #include #include int main() { char str1[50],str2[20]; int m,length; gets(str1); scanf("%d",&m); if((strlen(str1)-m+1)>=20) { printf("ERROR\n"); }else { for(int i=m;str1[i]!='\0';i++) { str2[i-m]=str1[i]; } str2[i-m]='\0'; printf("%s\n",str2); } return 0; } CH1011 #include

C语言大作业(图书管理)

c语言图书管理系统 主要功能: 1. 新进图书基本信息的输入。 2. 显示全部记录 3. 按图书名称查询图书基本信息。 4. 根据图书名称对撤消的图书信息进行删除。 5. 按图书名称从小到大排序。 6. 统计某价格以上的图书数量。 7. 列出所有未借出去的图书信息。 基本信息:图书编号、图书名称、单价、作者、存在状态、借书人姓名、性别、学号等 #include #include #include #include typedef int BOOL; typedef struct bookinfo { char number[15];/*产品编号*/ char name[30];/*产品名称*/ float price;/*单价*/ char auther[20];/*作者*/ BOOL isExit;/*存在状态*/ char lendername[20];/*借书人姓名*/ char lendersex[2];/*借书人性别*/ char lendernum[15];/*借书人学号*/ }BOOKINFO; void menu() { printf("\n\n\n\n\n\n\n"); printf("\t\t\t图书管理系统\n"); printf("\t\t\t1:新进图书基本信息的输入\n"); printf("\t\t\t2:显示全部记录\n");

printf("\t\t\t3:根据图书名称查询图书基本信息\n"); printf("\t\t\t4:根据图书名称对撤销的图书信息进行删除\n"); printf("\t\t\t5:按照图书名称从小大到排序\n"); printf("\t\t\t6:统计某价格以上的图书数量\n"); printf("\t\t\t7:列出所有未借出去的图书信息\n"); printf("\t\t\t8:退出\n"); } void choice_1_input_new()/*输入新进的图书信息*/ { char choice; FILE *p; BOOKINFO newbook; system("cls"); while(1) { printf("输入图书编号:"); gets(newbook.number); printf("输入图书名称:"); gets(https://www.doczj.com/doc/ce1266806.html,); printf("输入图书单价:"); scanf("%f",&newbook.price); while(getchar()!='\n'); printf("输入图书的作者:"); gets(newbook.auther); printf("输入借书人姓名:"); gets(newbook.lendername); printf("输入借书人性别:"); gets(newbook.lendersex); printf("输入借书人学号:"); gets(newbook.lendernum);

西工大C语言POJ作业

T051.合并字符串 #include #include #include int main() { char a[200],b[100]; gets(a); gets(b); strcat(a,b); puts(a); return 0; } T052.字符串排序

#include #include void sort(char s[10][11]) { int i,j; char t[11]; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j],s[j+1])>0) { strcpy(t,s[j+1]); strcpy(s[j+1],s[j]); strcpy(s[j],t); } } int main() { char a[10][11],i; for(i=0;i<10;i++) scanf("%s",a[i]); sort(a); for(i=0;i<10;i++) printf("%s ",a[i]);

printf("\n"); return 0; } T053.特殊要求字符串 #include #include int main() { char s[100],a[100],t; int len,l,i,j; gets(s); len=strlen(s); l=len/2; for(i=0;i

C语言大作业

学院

目录 1 摘要 (3) 1.1设计题目 (3) 1.2设计内容 (3) 1.3开发工具 (3) 1.4应用平台 (3) 2 详细设计 (3) 2.1程序结构 (3) 2.2主要功能 (10) 2.3函数实现 (10) 2.4开发日志 (17) 3 程序调试及运行 (18) 3.1程序运行结果 (18) 3.2程序使用说明 (19) 3.3程序开发总结 (20) 4 附件(源程序) (20)

1 摘要 1.1 设计题目 A题算法型:折半查找算法演示程序 B题空间桁架结构节点位移求解 1.2 设计内容 A题: 本程序是一个演示折半查找算法的演示程序。当用户输入查找数据表列和要查找的数据时,程序会演示折半法查找该数的详细过程,并且支持多次查找、错误提示等功能。 B题: 空间桁架结构节点位移求解 1.3 开发工具 Code Blocks 12.11(内置MinGW) 1.4 应用平台 Windows 7 64位 2 详细设计 2.1 程序结构 A题: 程序功能模块: 本程序主要包含六大模块:程序说明模块、输入模块、排序模块、折半法查找模块、选择模块和程序

退出模块。 工程文件结构: 本程序的工程含有6个文件,其中main.cpp、print_stars.cpp、judge.cpp、sort.cpp、putout.cpp5个cpp 文件和include.h1个头文件(参见下图),两者共同存在于工程“折半法查找演示程序”中。其中main.cpp 文件包含了程序的主体部分,程序说明模块、输入、排序、折半查找、选择、程序退出模块按线性排列。其中输入、排序模块执行一次,这般查找、选择模块可多次执行,直到程序退出模块执行。 六大模块说明: (1) 程序说明模块: 给使用者营造一个较为友好的界面,同时提供程序开发人员的相关信息以及程序操作的相关说明信息。此部分模块主函数源代码如下: int a[N]; /*存储要查找的数表,用户输入*/ int i,n,num,count; /*count为折半次数计数器,n为数表数据个数,num存储所查数据*/ int top,bottom,mid; char c; /*存储选择函数中的输入的字符y或n*/ int flag=1; /*折半法循环标志变量*/ int loc=-1; /*存储所查找数据位置*/ double k=0; p_s(76);puts("\n"); /*引用p_s函数,打出一行'*'*/(p_s函数位于print_star.cpp文件中,参见下文)

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

1.1:2:3 2.一堆8 3.8的次数 4.A*B 5.N边形面积 6.参加竞赛 7.草坪喷水 8.插入排序 9.查找 10.车牌号 11.成绩转化 12.大数>> (见NOJ) 13.大写变小写 14.到底星期几 15.等比数列 16.找到正整数符合要求 17、韩信点兵 18.回文字符串 鸡的体重 计算数据整数部分 加密 阶乘 恐怖水母 卡片 快速排序 两人三足 逆序输出 偶数和 三角形面积 士兵移动 输出位数

数列 数字加密 数组元素和 水仙花数 提取字符串 添加行号 舞伴配对 相乘后位数相加 销售记录 星期几 星座 幸运数 学号 循环移位 月份天数 月份转换英语 运费 字符串替换 字符输出 总分最高 最大公约数 最大值最小值 最小公倍数 左下角

#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; }

西北工业大学 程序设计大作业

学院××××学院班级××××××××学号××××××××姓名×××

目录 1 摘要 (3) 1.1设计题目 (3) 1.2设计内容 (3) 1.3开发工具 (3) 1.4应用平台 (3) 2 详细设计 (3) 2.1程序结构 (3) 2.2主要功能 (4) 2.3函数实现 (5) 2.4开发日志 (7) 3 程序调试及运行 (7) 3.1程序运行结果 (7) 3.2程序使用说明 (12) 3.3程序开发总结 (12) 4 附件(源程序) (12)

1 摘要 1.1 设计题目 算法型大作业题目:编写七种排序算法的演示程序。 1.2 设计内容 编写快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序函数,通过主函数调用以实现七种排序算法的演示。 1.3 开发工具 Visual C++ 6.0 1.4 应用平台 Windows 2000/XP/Vista 32位 2 详细设计 2.1 程序结构 程序的整体结构与流程见下图所示。 程序运行时在主菜单中输入序号选择排序方法或选择结束程序,当进行某种排序方法后,在主函数中输入待排数据个数和待排数据,通过调用对应的排序函数实现排序并输出。该排序结束后再次进入主函数,通过循环重复上述操作。其中,主函数中将数组地址和待排序数据个数传递给排序函数,在排序函数中实现排序功能。

2.2 主要功能 函数的功能为对快速排序、插入排序、选择排序、冒泡排序、堆排序、归并排序、基数排序算法的演示。 主函数:程序运行时,可使运行者根据提醒输入相关操作,从而进入不同的排序方法或者退出。 快速排序函数:根据快速排序的算法,最后输出 插入排序函数:根据插入排序的算法,最后输出 选择排序函数:根据选择排序的算法,最后输出 冒泡排序函数:根据冒泡排序的算法,最后输出 堆排序函数:根据堆排序的算法,最后输出 归并排序函数:根据归并排序的算法,最后输出 基数排序函数:根据基数排序的算法,最后输出

西工大C语言程序作业

第2季:循环第1题 1.完全数 #include int main() {int m,i,j,s;

for(m=6;m<1000;m++) {s=1; for(i=2;i

2.迭代求根 #include #include int main() { float x0,x1,a; scanf("%f",&a); x1=a/2; do { x0=x1;x1=(x0+a/x0)/2; } while(fabs(x0-x1)>=0.00001); printf("%.5f\n",x1); return 0; } 第3题

Time 1000MS Limit 10000KB Memory Limit Descripti 请编写程序,用二分法求下面方程在(-10,10)之间的根:on Input输入区间数据为实型、用空格隔开输出均。 Output输出根为实型,保留两位小数。 -10 10 Sample Input Sample 2.00 Output 3.二分求根 #include #include int main() { float x0,x1,x2,f0,f1,f2; printf("请输入x1,x2的值:"); scanf("%f%f",&x1,&x2); f1=2*x1*x1*x1-4*x1*x1+3*x1-6; f2=2*x2*x2*x2-4*x2*x2+3*x2-6; do

西北工业大学C语言第一套测试题

综合测试题1 一、选择题(单选2分×12,共24分) 1. 下列不合法的C语言常量是D。 A) ?\101? B) 123L C) 0x FF D) -e8 2. 若有定义:int a=123,b=456;long sum; 下列语句不能正确求解a、b之积的为C 。 A) sum=(long)(a)*(long)b; B) sum=(long)a*b; C) sum=(long)(a*b); D) sum=1.0*a*b; 3. 不能正确表示“a为奇数”的逻辑表达式为C。 A) a%2= =1 B) a%2 C) a%2= =0 D) !(a%2= =0) 4. 若有定义:int a=3,b=2,c=1,d;float x=2.3,y=1.0; 下列哪一组C表达式的值是不相同的C。 A) a%b B) (int)x>b C) d=c*2 D) 67-?A? a/b c/b a- =1 d=c++,c++ d=x—c d=a>b>c b&&c+1 --a 5.若有定义int m=12,n=4;float x=8,y=3;下列输出函数中存在格式符不匹配现象的是D。 A) printf(“%d%s%d\n”,m>n?m:n,“>”,m>n?n:m); B) printf(“%d,%e”,m/n,x/y); C) printf(“%f,%ld”,m/5.0,(long)(x/y)); D) printf(“%d,%d”,m*n,(int)x/y); 6. 若运行时输入:12345678↙,则下列程序运行结果为B。 main( ) ﹛int a,b; scanf(“%2d%*2d%3d”,&a,&b); printf(“%d\n”,a+b); ﹜ A) 46 B) 579 C) 5690 D) 出错 7. 循环语句for(i=0,j=8;i<=j;i++,j--)printf(“*”);的循环次数为B。 A) 4 B) 5 C) 9 D) 死循环 8. 若有定义:int c=0,i=0;char s[]= “How do you do”; 执行语句:while(s[i]){c+=s[i]>=97;i++;}后,变量C的值为 D 。 A)14 B)13 C)12 D)9

C语言大作业

C语言大作业题目 1电话簿管理程序 存储的数据包括:人名、工作单位、电话号码和E-mail地址等。程序要求具有如下功能: ①加入一个新电话号码; ②删除一个电话号码; ③显示保存的所有电话号码。 ④修改功能; ⑤排序功能,包括按照电话号码排序和按照姓名字母序排列; ⑥查询功能,包括按人名查询电话号码和按电话号码查询人名。 ⑦保存信息到文件。 ⑧从文件读取信息。 课程设计要求: 程序运行开始,首先显示一个提示信息,作为一个功能选择菜单。用户选用哪条功能,就调用哪项功能。 2班级同学信息管理程序 存储的数据包括:姓名,学号,宿舍,QQ号码和电话号码等。程序要求具有以下功能: ①加入一个同学的记录; ②删除一个同学的记录; ③显示所有同学的记录。 ④排序功能,包括按照学号排序和按照姓名字母序排序显示所有同学的纪录。 ⑤查询功能,包括按学号查询同学的信息或者其他。 ⑥修改功能。 ⑦保存信息到文件。 ⑧从文件读取信息。 课程设计要求: 程序运行开始,首先显示一个提示信息,作为一个功能选择菜单。用户选用哪条命令,就调用哪项功能。 3职工信息管理系统 职工信息包括职工号、姓名、性别、年龄、学历、工资、住址、电话等(职工号不重复)。提供以下功能: ①加入一个职工的记录; ②删除一个职工的记录; ③显示所有职工的记录。 ④排序功能,包括按照学号排序和按照姓名字母序排序显示所有职工的纪录。 ⑤查询功能,包括按工号或姓名查询职工的信息或者其他。 ⑥修改功能。 ⑦保存信息到文件。 ⑧从文件读取信息。 课程设计要求:

程序运行开始,首先显示一个提示信息,作为一个功能选择菜单。用户选用哪条命令,就调用哪项功能。 4图书信息管理系统 图书信息包括:图书号、书名、作者名、分类号、出版单位、出版时间、价格等。 提供以下功能: ①加入一本图书; ②删除一本图书; ③显示所有图书。 ④排序功能,包括按照书名排序所有图书。 ⑤查询功能,包括按书名查询图书。 ⑥修改功能 ⑦保存信息到文件。 ⑧从文件读取信息。 课程设计要求: 程序运行开始,首先显示一个提示信息,作为一个功能选择菜单。用户选用哪条命令,就调用哪项功能。 5图书借阅管理系统 图书信息包括:图书名称、图书编号、单价、作者、存在状态、借书证号、姓名、性别。提供以下功能: ①新进图书基本信息的输入。 ②显示所有图书信息。 ③对撤消图书信息的删除。 ④图书基本信息的查询。 ⑤办理借书手续。 ⑥办理还书手续 ⑦保存信息到文件。 ⑧从文件读取信息。 课程设计要求: 程序运行开始,首先显示一个提示信息,作为一个功能选择菜单。用户选用哪条命令,就调用哪项功能。 6实验设备管理系统 设备信息包括:设备编号,设备名称,设备价格,设备所属实验室。 提供以下功能: ①加入一个设备; ②报废一个设备; ③显示所有设备。 ④排序功能,包括按照编号排序所有设备。

西工大C语言程序作业

第2季:循环 第1题 Title 完全数 Time Limit 1000MS Memor y Limit 10000KB Descrip tion 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。请编写程序,找出1000之内的所有完数。 Input Output 每行按格式输出其因子:6=1+2+3 Sample Input Sample Output 6=1+2+3 28=1+2+4+7+14 496=1+2+4+8+16+31+62+124+248 1.完全数 #include int main()

{int m,i,j,s; for(m=6;m<1000;m++) {s=1; for(i=2;i

Sample 1.41421 Output 2.迭代求根 #include #include int main() { float x0,x1,a; scanf("%f",&a); x1=a/2; do { x0=x1;x1=(x0+a/x0)/2; } while(fabs(x0-x1)>=0.00001); printf("%.5f\n",x1); return 0; } 第3题 Title 二分求根Time 1000MS

相关主题
文本预览
相关文档 最新文档