文档库 最新最全的文档下载
当前位置:文档库 › C语言的三维数组的应用

C语言的三维数组的应用

C语言的三维数组的应用
C语言的三维数组的应用

C语言的三维数组的应用

摘要:利用程序语言【C语言】编写一个俄罗斯方块游戏,加深对程序入口、出口的理解和编制,掌握数组的运用,以及对知识的拓展。

关键字:C语言, 俄罗斯方块, 三维数组

Abstract: [C programming language - language prepared by a Russian box game, understand the procedures for import, export of understanding and preparation, master the use of the array, and the expansion of knowledge.

Keyword: C language, the Russian box,

three-dimensional array

前言:本设计是为了制作一个“俄罗斯方块”游戏。

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。

制作此软件是为了使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。

在毕业论文选题上,我利用c语言制作俄罗斯方块游戏,在c语言中通过利用三维数组来存放最初的形状,利用四个方向键,来控制方块的移动和变形,利用ENTER,ESC,SPACE,HOME,来控制占停,退出,快速下落,和开始。方块的形状,颜色都是随机的。在游戏的旁边有积分,和下一个的形状,还设计了过关,加分等等。

系统进入游戏后,会出现俄罗斯方块的字样,和积分NUMBER,NEXTBOX。按ESC退出游戏,结束出现 GAMEOVER,和成员名,通过函数实现各个功能。

目录

一.概述

1.1俄罗斯方块的题目的描述

1.2俄罗斯方块的设计思想

1.2.1详细规则、胜负判定方法

1.2.2游戏操作方法

1.3 开发工具

1.4 软件运行环境

1.5 项目任务书

二、总体设计

2.1 开发与设计的总体思想

2.2 系统模块结构图

2.3 模块设计

2.3.1 主要模块

2.3.2 图形修饰模块

2.3.3 系统流程图

2.3.4 按键及功能对照表

2.3.5 主要函数名称以及功能表

2.4 模块设计小结

三、实验结果分析及程序代码

四、结果分析:

五、总结

六、参考文献:

一、概述:

1.1俄罗斯方块的题目的描述

1. 运行游戏时.界面随机的产生不同形状的方块,游戏者通过自己的操作使方块进行合理的堆积.如果每层达到饱和状态的时候会自动消除.然后游戏有规则的进行加分.分数达到一定的阶段.游戏的级别也会越来越高.然后方块下降的速度也会随之慢慢加快.以迎合游戏者的挑战,达到最加有趣的游戏!

1.2俄罗斯方块的设计思想

游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,所以我们在游戏中添加了漂亮的场景和动听的音乐,设置了过关升级的功能,激发大家的娱乐激情。

从游戏的基本玩法出发,主要就是俄罗斯方块的形状和旋转,利用三维数组每个方块含有各自的状态,变换只需改变到下一个状态就行了,完全可以用数组来实现(不用写旋转算法了:)

比如:

/* 方块类型为■■■■ */

char[2][4][4] B1={

{

{0,1,0,0},□■□□

{0,1,0,0},□■□□

{0,1,0,0},□■□□

{0,1,0,0} □■□□

},

{

{0,0,0,0},□□□□

{1,1,1,1},■■■■

{0,0,0,0},□□□□

{0,0,0,0} □□□□

}};

含两种状态,每个状态是一个4*4数组,为1表示实心,为0表示空心.因此我们总共设计了7种造型,每种造型又可以通过旋转而变化出2到4种形状,利用随机函数在一个预览窗体中提前展示形状供用户参考,然后将展示的形状复制到游戏窗体中进行摆放,在游戏窗体中用户就可以使用键盘的方向键来控制方块的运动,然后利用递归语句对每一行进行判断,

如果有某行的方块是满的,则消除这行的方块,并且使上面的方块自由下落,其中,方块向下的速度是有时钟控件控制的,在游戏中,用户也可以使用向下键加快下落速度,定义一个变量,对消除的函数进行记录,最后就可以得出用户的分数,用if 语句对分数判断,达到一定的积分就可以升级到下一个档次。

俄罗斯方块游戏设计的主要步骤为以下几个方面:

(1)游戏界面的设计。

(2)俄罗斯方块的造型。

(3)俄罗斯方块的旋转。

(4)俄罗斯方块的运动情况(包括向左,向右和向下)。

(5)俄罗斯方块的自动消行功能。

(6)游戏级别的自由选择。

(7)游戏速度的自由选择。

(8)游戏得分的计算。

(9)游戏菜单选项的设计及功能实现。

1.3 开发环境:

硬件环境:一台电脑386,486,586及兼容机以上,包括键盘、

鼠标,最小硬盘空间1G,内存32M以上。

软件环境:本系统的设计采用的是C语言开发,Windows操作

系统,win-tc v1.9.1以上

二、总体设计:

2.1 开发与设计的总体思想:

程序的设计方法是采用结构化程序设计方法,用c语言进行开发。

2.2 系统模块结构图:

2.3 模块设计:

2.3.1 主要模块:

先画出主要窗口界面,由外边框、盒状收缩,百页窗效果、主题字及功能函数组成。根据函数顺序来完成相应功能,进入游戏(先建立游戏界面,屏幕提示选择按任意键开始游戏,);游戏规则(满一行加一分);最后是工作人员(显示小组人员名单后返回主界面);最后按任意键结束整个游戏系统。

2.3.2 图形修饰模块:如下图示:

2.3.3系统流程图:如下图示:

2.3.4 按键及功能对照表:

2.4、模块设计小结

由上述模块分析和设计可知,本游戏的核心模块是主界面模块,图形修饰模块与函数模块均是为其而服务。

三、实验结果分析及程序代码

#include

#include

#include

#include

#include

#define MINBOXSIZE 20 /* 最小方块的尺寸*/

#define BGCOLOR 6 /* 背景着色*/

#define GX 200

#define GY 10

#define SJNUM 10000 /* 每当玩家打到一万分等级加一级*/

/* 按键码*/

#define VK_LEFT 0x4b00 /*左*/

#define VK_RIGHT 0x4d00 /*右*/

#define VK_DOWN 0x5000 /*下*/

#define VK_UP 0x4800 /*上*/

#define VK_SPACE 0x3920 /*空格*/

#define VK_ESC 0x011b /*退出*/

#define VK_ENTER 0x1c0d /*回车*/

/* 定义俄罗斯方块的方向(我定义他为4种)*/

#define F_DONG 0 /*东*/

#define F_NAN 1 /*南*/

#define F_XI 2 /*西*/

#define F_BEI 3 /*北*/

#define NEXTCOL 20 /* 要出的下一个方块的纵坐标*/

#define NEXTROW 12 /* 要出的下一个方块的横坐标*/

#define MAXROW 14 /* 游戏屏幕大小*/

#define MAXCOL 20

#define SCCOL 50 /*游戏屏幕在显示器上的相对位置*/

#define SCROW 30

#define X_Z 0 /* 定义方块的形状(共八种)*/

#define X_REZ 1

#define X_7 2

#define X_RE7 3

#define X_I 4

#define X_REI 5

#define X_TIAN 6

#define X_T 7

void *buf; /*定义无类型指针,用于将来指向内存空间*/

int gril[22][16]; /* 游戏屏幕坐标*/

int col=1,row=7; /* 当前方块的横纵坐标*/

int boxfx=0,boxgs=0; /* 当前方块的形状和方向*/

int nextboxfx,nextboxgs,maxcol=22;/*下一个方块的形状和方向*/

int minboxcolor,nextminboxcolor;/*小方块的颜色,下一个小方块的颜色*/ int num=0; /*游戏分*/

int dj=0,gamedj[10]={18,16,14,12,10,8,6,4,2,1};/* 游戏等级*/

Struct all

{

int x,y;

int fangxiang; /*方向*/

int gesu; /*第几个方块*/

};

/* 以下我用了一个3维数组来纪录方块的最初形状和方向*/

int boxstr[8][4][4]={{

{0,0,0,0},

{0,0,0,0},

{0,1,1,0},

{0,0,1,1}},

{

{0,0,0,0},

{0,0,0,0},

{0,0,1,1},

{0,1,1,0}},

{

{0,0,0,0},

{0,0,1,1},

{0,0,0,1},

{0,0,0,1}},

{

{0,0,0,0},

{0,0,1,1},

{0,0,1,0},

{0,0,1,0}},

{

{0,0,0,1},

{0,0,0,1},

{0,0,0,1},

{0,0,0,1}},

{

{0,0,0,0},

{0,0,0,0},

{0,0,0,0},

{1,1,1,1}},

{

{0,0,0,0},

{0,0,0,0},

{0,0,1,1},

{0,0,1,1}},

{

{0,0,0,0},

{0,0,0,0},

{0,1,1,1},

{0,0,1,0}}

};

/* 随机得到当前方块和下一个方块的形状和方向*/

void boxrad(){

minboxcolor=nextminboxcolor; /*下一个方块的颜色*/

boxfx=nextboxfx; /*下一个方块的方向*/

boxgs=nextboxgs; /*下一个方块是第几个方块*/

nextminboxcolor=random(16); /*随机产生下一个方块的颜色*/

if(nextminboxcolor==6||nextminboxcolor==7) /*如果颜色是棕色或淡灰色*/ nextminboxcolor=9; /*将其改为淡蓝色*/

nextboxfx=random(4); /*随机产生下一个方块的方向*/

nextboxgs=random(8); /*随机产生下一个方块是第几个方块*/}

/*初始化图形模式*/

void init(void)

{

int gh=DETECT,gm=0;

int errorcode;

registerbgidriver(EGAVGA_driver);

initgraph(&gh,&gm," ");}

/* 在图形模式下的清屏*/

void cls()

{

setfillstyle(SOLID_FILL,0);/*以背景颜色实填充*/

setcolor(0);

bar(0,0,640,480); /*基本图形函数*/}

/*在图形模式下的高级清屏*/

void clscr(int a,int b,int c,int d,int color)

{

setfillstyle(SOLID_FILL,color); /*以color颜色实填充*/

setcolor(color); /*设置当前前景色为color*/

bar(a,b,c,d); /*基本图形函数*/}

/*最小方块的绘制*/

void minbox(int asc,int bsc,int color)

{

int a=0,b=0;

a=SCCOL+asc; /*SCCOL 50,SCROW 30游戏屏幕在显示器上的相对位置*/

b=SCROW+bsc;

clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color); /* MINBOXSIZE 20最小方块的尺寸*/

if(color!=BGCOLOR)/*如果当前色是背景色,将其改为白色*/

{

setcolor(15);

line(a+1,b+1,a-1+MINBOXSIZE,b+1);

line(a+1,b+1,a+1,b-1+MINBOXSIZE);

setcolor(0);

line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE);

line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE);} }

/*最小方块的高级绘制*/

void box(int a,int b,int color)

{

clscr(a+1,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE,color);

setcolor(15);

line(a+1,b+1,a-1+MINBOXSIZE,b+1);

line(a+1,b+1,a+1,b-1+MINBOXSIZE);

setcolor(0);

line(a-1+MINBOXSIZE,b+1,a-1+MINBOXSIZE,b-1+MINBOXSIZE);

line(a+1,b-1+MINBOXSIZE,a-1+MINBOXSIZE,b-1+MINBOXSIZE); }

/*游戏中出现的文字*/

void txt(int a,int b,char *txt,int font,int color)

{

setcolor(color);

settextstyle(0,0,font);

outtextxy(a,b,txt); }

/*windows 绘制*/

void win(int a,int b,int c,int d,int bgcolor,char *text,int font,int textcolor) {

clscr(a,b,c,d,7);

clscr(a+3,b+24,c-3,d-3,bgcolor);

clscr(a+3,b+3,c-3,b+20,9);

setcolor(15);

line(a,b,c,b);

line(a,b,a,d);

line(a+2,b+21,c-2,b+21);

line(c-2,b+2,c-2,b+21);

line(a+2,d-2,c-2,d-2);

line(c-2,b+23,c-2,d-2);

txt(a+5,b+8,text,font,textcolor);

setcolor(0);

line(a,d,c,d);

line(c,b,c,d);

line(a+3,b+2,c-3,b+2);

line(a+2,b+2,a+2,b+20);

line(a+2,b+24,a+2,d-2);

line(a+2,b+23,c-3,b+23); }

/*把方块的方向旋转fx个90度(fx最大等于3)*/

void re90(int boxxy[4][4],int fx)

{

int i,j,k,zero;

int a[4][4];

for(k=0;k

{

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=boxxy[3-j][i];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

boxxy[i][j]=a[i][j];

for(i=0;i<4;i++)

{

zero=1;

for(j=0;j<4;j++)

if(boxxy[j][3]!=0)

zero=0;

if(zero)

for(j=0;j<4;j++)

{

boxxy[j][3]=boxxy[j][2];

boxxy[j][2]=boxxy[j][1];

boxxy[j][1]=boxxy[j][0];

boxxy[j][0]=0; } }} }

/* 当前方块的绘制*/

void funbox(int a,int b,int color)

{

int i,j;

int boxz[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

boxz[i][j]=boxstr[boxgs][i][j];

re90(boxz,boxfx);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(boxz[i][j]==1)

minbox((j+row+a)*MINBOXSIZE,(i+col+b)*MINBOXSIZE,color); } /*下一个方块的绘制*/

void nextfunbox(int a,int b,int color)

{

int i,j;

int boxz[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

boxz[i][j]=boxstr[nextboxgs][i][j];

re90(boxz,nextboxfx);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(boxz[i][j]==1)

minbox((j+a)*MINBOXSIZE,(i+b)*MINBOXSIZE,color); }

/*时间中断定义*/

#define TIMER 0x1c

int TimerCounter=0;

void interrupt ( *oldhandler)(__CPPARGS);

void interrupt newhandler(__CPPARGS)

{

TimerCounter++;

oldhandler();

}

void SetTimer(void interrupt (*IntProc)(__CPPARGS))

{

oldhandler=getvect(TIMER);

disable();

setvect(TIMER,IntProc);

enable(); }

/*由于游戏的规则,消掉都有最小方块的一行*/

void delcol(int a)

{

int i,j;

for(i=a;i>1;i--)

for(j=1;j<15;j++){

minbox(j*MINBOXSIZE,i*MINBOXSIZE,BGCOLOR);

gril[i][j]=gril[i-1][j];

if(gril[i][j]==1)

minbox(j*MINBOXSIZE,i*MINBOXSIZE,minboxcolor); } } /*把数字转换为字符串*/

char *numgochar(int x)

{

char k,*a="000000";

int i,j=10;

if(x==0)

return("0");

for(i=0;x>=1;i++)

{

a[i]='0'+ (x % 10);

x=x/10;

}

for(j=0;j<=i/2;j++)

{

k=a[j];

a[j]=a[i-j];

a[i-j]=k;

}

a[i+1]='\0';

return(a); }

/*消掉所有都有最小方块的行*/

void delete()

{

int i,j,zero,delgx=0;

char *nm;

for(i=1;i<21;i++){

zero=0;

for(j=1;j<15;j++)

if(gril[i][j]==0)

zero=1;

if(zero==0){

delcol(i);

delgx++;

} }

num=num+delgx*delgx*10;

dj=num/10000;

nm=numgochar(num);

clscr(456,173,500,200,BGCOLOR);

txt(456,173,"Number:",1,15);

txt(456,193,nm,1,15); }

/*时间中断结束*/

void KillTimer()

{

disable();

setvect(TIMER,oldhandler);

enable(); }

/* 测试当前方块是否可以向下落*/

int downok()

{

int i,j,k=1,a[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=boxstr[boxgs][i][j];

re90(a,boxfx);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(a[i][j] && gril[col+i+1][row+j])

k=0;

return(k); }

/* 测试当前方块是否可以向左行*/

int leftok()

{

int i,j,k=1,a[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=boxstr[boxgs][i][j];

re90(a,boxfx);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(a[i][j] && gril[col+i][row+j-1])

k=0;

return(k); }

/* 测试当前方块是否可以向右行*/

int rightok()

{

int i,j,k=1,a[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=boxstr[boxgs][i][j];

re90(a,boxfx);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(a[i][j] && gril[col+i][row+j+1])

k=0;

return(k); }

/* 测试当前方块是否可以变形*/

int upok()

{

int i,j,k=1,a[4][4];

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=boxstr[boxgs][i][j];

re90(a,boxfx+1);

for(i=3;i>=0;i--)

for(j=3;j>=0;j--)

if(a[i][j] && gril[col+i][row+j])

k=0;

return(k); }

/*当前方块落下之后,给屏幕坐标作标记*/ void setgril()

{

int i,j,a[4][4];

funbox(0,0,minboxcolor);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

a[i][j]=boxstr[boxgs][i][j];

re90(a,boxfx);

for(i=0;i<4;i++)

for(j=0;j<4;j++)

if(a[i][j])

gril[col+i][row+j]=1;

col=1;row=7;

}

/*游戏结束*/

void gameover()

{

int i,j;

for(i=19;i>=0;i--)

for(j=2;j<16;j++)

box(j*MINBOXSIZE+SCROW,i*MINBOXSIZE+SCCOL,6); txt(103,203,"Game Over",3,10);}

/*按键的设置*/

void call_key(int keyx)

{

switch(keyx){

case VK_DOWN: { /*下方向键,横坐标加一。*/

if(downok()){

col++;

funbox(0,0,minboxcolor);}

else{

funbox(0,0,minboxcolor);

setgril();

nextfunbox(NEXTCOL,NEXTROW,BGCOLOR);

boxrad();

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor); delete();

}

break;

}

case VK_UP: { /*上方向键,方向形状旋转90度*/

if(upok())

boxfx++;

if(boxfx>3)

boxfx=0;

funbox(0,0,minboxcolor);

break;

}

case VK_LEFT:{ /*左方向键,纵坐标减一*/

if(leftok())

row--;

funbox(0,0,minboxcolor);

break;

}

case VK_RIGHT:{ /*右方向键,纵坐标加一*/

if(rightok())

row++;

funbox(0,0,minboxcolor);

break;

}

case VK_SPACE: /*空格键,直接落到最后可以落到的们置*/ while(downok())

col++;

funbox(0,0,minboxcolor);

setgril();

nextfunbox(NEXTCOL,NEXTROW,BGCOLOR);

boxrad();

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor); delete();

break;

default: { win(423,53,620,95,15,"Enter Key Error!",1,15); txt(428,80,"Plese Enter Anly Key AG!",1,4);

getch();

clscr(420,50,622,97,BGCOLOR);

} } }

/*时间中断开始*/

void timezd(void){

int key;

SetTimer(newhandler);

boxrad();

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor);

for(;;){

if(bioskey(1)){

key=bioskey(0);

funbox(0,0,BGCOLOR);

if(key==VK_ESC)

break;

call_key(key);

}

if(TimerCounter>gamedj[dj]){

TimerCounter=0;

if(downok()){

funbox(0,0,BGCOLOR);

col++;

funbox(0,0,minboxcolor);

}

else {

if(col==1){

gameover();

getch();

break;

}

setgril();

delete();

funbox(0,0,minboxcolor);

col=1;row=7;

funbox(0,0,BGCOLOR);

nextfunbox(NEXTCOL,NEXTROW,BGCOLOR);

boxrad();

nextfunbox(NEXTCOL,NEXTROW,nextminboxcolor);

} } } }

/*百叶窗函数*/

void byc(void)

{ int i,j;

for(i=0;i<40;i++)

for(j=0;j<640;j= j +40) /*每隔40像素画一条线*/

{ setcolor(BLUE); /*设置前景色*/

line(j+i,0,j+i,479);

delay(500);

}

}

/*盒状收缩代码*/

void hzss(void)

{ int x1=0,y1=0,x2=639,y2=479;

setcolor(1);

for(;y1<=y2;x1++,y1++,x2--,y2--)

{

rectangle(x1,y1,x2,y2);

delay(1000);

}

setcolor(6);

x1=239;y1=239;x2=400;y2=239;

for(;x1>=0&&y1>=0&&x2<=639&&y2<=479;x1--,y1--,x2++,y2++)

{

rectangle(x1,y1,x2,y2);

delay(1000);

}}

void drawmat(char *mat,int matsize,int x,int y,int color) /*汉字点阵输出函数*/

{

int i,j,k,m;

m=(matsize-1)/8+1;

for(j=0;j

for(i=0;i

for(k=0;k<8;k++)

if(mat[j*m+i]&(0x80>>k))

putpixel(x+i*8+k,y+j,color);

}

char zu48H[]={

/* 以下是'组' 的48点阵黑体字模,288 byte */ };

char zhang_48H[]={

/* 以下是'长' 的48点阵黑体字模,288 byte */ };

char dian48H[]={

/* 以下是':' 的48点阵黑体字模,288 byte */ };

char yuan_48H[]={

/* 以下是'员' 的48点阵黑体字模,288 byte */ };

char zhang48K[]={

/* 以下是'张' 的48点阵楷体_GB2312 字模,288 byte */ }; char fang48K[]={

/* 以下是'方' 的48点阵楷体_GB2312 字模,288 byte */ }; char yuan48K[]={

/* 以下是'元' 的48点阵楷体_GB2312 字模,288 byte */ }; char jie48K[]={

/* 以下是'解' 的48点阵楷体_GB2312 字模,288 byte */ }; char ying48K[]={

/* 以下是'莹' 的48点阵楷体_GB2312 字模,288 byte */ }; char zhao48K[]={

/* 以下是'赵' 的48点阵楷体_GB2312 字模,288 byte */ }; char jing48K[]={

/* 以下是'静' 的48点阵楷体_GB2312 字模,288 byte */ }; char tao48K[]={

/* 以下是'陶' 的48点阵楷体_GB2312 字模,288 byte */ }; char yuan_48K[]={

/* 以下是'园' 的48点阵楷体_GB2312 字模,288 byte */ }; char huo48K[]={

/* 以下是'霍' 的48点阵楷体_GB2312 字模,288 byte */ }; char shuai48K[]={

/* 以下是'帅' 的48点阵楷体_GB2312 字模,288 byte */ }; char e64H[]={

/* 以下是'俄' 的64点阵黑体字模,512 byte */ };

char luo64H[]={

/* 以下是'罗' 的64点阵黑体字模,512 byte */ };

char si64H[]={

/* 以下是'斯' 的64点阵黑体字模,512 byte */ };

char fang64H[]={

/* 以下是'方' 的64点阵黑体字模,512 byte */ };

char kuai64H[]={

/* 以下是'块' 的64点阵黑体字模,512 byte */ };

void youximing(void)

{

int x=80,y=200,color=1,space=100;

drawmat(e64H,64,x,y,color);

drawmat(luo64H,64,x+=space,y,color);

drawmat(si64H,64,x+=space,y,color);

drawmat(fang64H,64,x+=space,y,color);

drawmat(kuai64H,64,x+=space,y,color);

}

void show_word(void)

/*调用点阵函数,在指定位置上输出汉字*/

{

int x=0,y=0,color=15,space=50;

drawmat(zu48H,48,x,y,color);

drawmat(zhang_48H,48,x+=space,y,color);

drawmat(dian48H,48,x+=space,y,color);

drawmat(zhang48K,48,x+=space/2,y,color);

drawmat(fang48K,48,x+=space,y,color);

drawmat(yuan48K,48,x+=space,y,color);

x=0;y=70;

drawmat(zu48H,48,x,y,color);

drawmat(yuan_48H,48,x+=space,y,color);

drawmat(dian48H,48,x+=space,y,color);

drawmat(jie48K,48,x+=space/2,y,color);

drawmat(ying48K,48,x+=space,y,color);

drawmat(ying48K,48,x+=space,y,color);

x=0;y=140;

drawmat(zhao48K,48,x,y,color);

drawmat(jing48K,48,x+=space-10,y,color);

drawmat(tao48K,48,x+=space,y,color);

drawmat(yuan_48K,48,x+=space-10,y,color);

drawmat(huo48K,48,x+=space,y,color);

drawmat(shuai48K,48,x+=space-10,y,color);

}

void prep_word(void)/*开辟内存空间*/

{

unsigned size;

cleardevice();

show_word();

size=imagesize(0,0,270,260);/*计算局部图像大小,单位字节*/

while(1)

{

buf=malloc(size); /*在内存中开辟空间,并将返回空间地址*/

if(size!=-1&&buf) /*如果开辟成功则退出循环,确保空间的开辟成功*/ break;

}

getimage(0,0,270,260,buf);/*将图像存入buf所指向的内存空间*/

}

void move_word(void)

{

int i;

cleardevice();/*在图形模式下清屏*/

sleep(1); /*程序等待1秒*/

for(i=0;i<100;i++)

{

setcolor(random(15)+1);

line(i,0,i,479);

line(639-i,0,639-i,479);

delay(1000);

}

sleep(1);

for(i=480;i>=160;i--)

{

delay(10);

putimage(180,i,buf,COPY_PUT);

/*将buf所指向的空间内容显示在屏幕的指定位置上*/

}

setcolor(15);

settextstyle(0,0,1);

outtextxy(230,360,"Any key to continue...");

getch();}

/*主程序开始*/

void main(void)

{

int i,j,color=7;

char *nm;

init();

cls();

hzss();/*盒状收缩代码*/

/*屏幕坐标初始化*/

for(i=0;i<=MAXCOL+1;i++)

for(j=0;j<=MAXROW+1;j++)

gril[i][j]=0;

for(i=0;i<=MAXCOL+1;i++)

{

gril[i][0]=1;

gril[i][15]=1;

}

for(j=1;j<=MAXROW;j++)

{

gril[0][j]=1;

gril[21][j]=1;

}

clscr(0,0,640,480,15);

win(1,1,639,479,BGCOLOR,"",1,15);

youximing();

getch();

win(1,1,639,479,BGCOLOR,"",1,15);

setcolor(color);

for(i=0;i<=21;i++)

{

for(j=0;j<=15;j++)

{

if(gril[i][j]==1)

box(j*MINBOXSIZE+SCCOL,i*MINBOXSIZE+SCROW,color);

} }

nextboxgs=random(8);

nextboxfx=random(4);

nm=numgochar(num);

txt(456,173,"Number:",1,15);

txt(456,193,nm,1,15);

txt(456,243,"Next Box:",1,15);

timezd();

KillTimer();

byc();/*百叶窗*/

prep_word();

move_word();

closegraph();

}

c语言复习题(有答案)●

思考题 不仅要会做这些题,更重要的是要掌握其相关知识点一、一般填空题 1-1、调用fopen函数打开一文本文件,在“打开模式”这一项中,为输出(写)而打开需填入【1】. 1-2、调用fopen函数打开一文本文件,在“打开模式”这一项中,为追加而打开需填入【1】. 1-3、fopen函数的原形在头文件【1】中. 1-4、getchar函数的原形在头文件【1】中. 1-5、sqrt函数的原形在头文件【1】中. 1-6、如果函数不要求带回值,可用【1】来定义函数返回值为空. 答案:w或w+;a或a+;stdio.h ; stdio.h ; math.h ;void . 2-1、字符串“\1011234\\at”的长度(字符数)是【1】. 2-2、字符串“abc\103\\bcd”的长度(字符数)是【1】. 2-3、字符串“1\\t\x43\abx44”的长度(字符数)是【1】. 2-4、“a“在内存中占【1】个字节. 2-5、‘a’在内存中占【1】个字节. 2-6、“\71“在内存中占【1】个字节. 2-7、一维数组下标的最小值是【1】;数组char a[]=“china” ;在内存应占【1】个字节。 答案:8; 8; 9; 2;1;2 ;0;6. 3-1、设x=(5>1)+2, x的植为【1】. 3-2、表达式‘B’+15+‘\x41’+011+0x10的值是【1】. 3-3、表达式‘b’+5+‘\x42’+011+0x10的值是【1】. 答案:3;171;194; 4-1、假设所有变量都为整型,表达式(a=2,b=5,a>b?a++:b++,a+b)的值是【1】. 4-2、if(!a)中的表达式!a等价于【1】. 4_3、已知a=1,b=2,c=3,执行if(a>b>c) b=a;else b=c;a=4;b=8;后,b的值是【1】. 答案:8;a==0;8; 5-1、若所用变量都已定义,下列程序段的执行结果是【1】. for(i=1;i<=5;i++);printf(“OK\n”); 5-2、执行语句char s[3]=”ab”,*p;p=s;后,*(p+2)的值是【1】. 5-3、若有以下定义和语句:int a[4]={0,1,2,3},*p; p=&a[2]; ,则*--p的值是【1】. 5-4、下列程序的输出结果是【1】,main(){int a=011;printf(“%d\n”,++a);} 答案:OK;’\0’;1;10 6-1、若宏定义为:#define y(x) 2+x, 则表达式a=3*y(3)的值为【1】. 6-2、若宏定义为:#define y(x) 2+x, 则表达式a=4*y(2)的值为【1】. 6-3、若宏定义为:#define y(x) 2/x, 则表达式a=4+3*y(3)的值为【1】. 答案:9;10;6 . 二、单项选择题 1-1、若以"a+"方式打开一个已存在的文件,则以下叙述正确的是()。 A:文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和读操作 B:文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读操作 C:文件打开时,原有文件内容被删除,只可作写操作 D:以上各种说法皆不正确 1-2、若执行fopen函数时发生错误,则函数的返回值是()。

C语言实验报告参考答案(原)

C语言实验报告参考答案 实验一熟悉C语言程序开发环境及数据描述 四、程序清单 1.编写程序实现在屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 答案: #include<> main() { printf("The dress is long\n"); printf("The shoes are big\n"); printf("The trousers are black\n"); } 2.编写程序: (1) a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。 (2)a=160,b=46,c=18,d=170, 编写求(a+b)/(b-c)*(c-d)的程序。 答案: (1) #include<> main() { int a,b,c,x,y;

a=150; b=20; c=45; x=a/b; y=a/c; printf("a/b的商=%d\n",x); printf("a/c的商=%d\n",y); x=a%b; y=a%c; printf("a/b的余数=%d\n",x); printf("a/c的余数=%d\n",y); } (2) #include<> main() { int a,b,c,d; float x; a=160; b=46; c=18; d=170; x=(a+b)/(b-c)*(c-d);

printf("(a+b)/(b-c)*(c-d)=%f\n",x); } 3. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将0赋给c。(提示:用条件运算符) 答案: #include<> main() { int a,b,c; a=0; b=-10; c= (a>b) b:a; printf("c = %d\n",c); } 五、调试和测试结果 1.编译、连接无错,运行后屏幕上显示以下结果: The dress is long The shoes are big The trousers are black 2、(1) 编译、连接无错,运行后屏幕上显示以下结果: a/b的商=7 a/c的商=3

C语言数组编程题

实验4 数组 一.实验目的: 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组定义、初始化、赋值的方法; 3.了解常见的字符串函数功能及其使用方法; 4.掌握二维数组的定义与引用。 二.实验内容: 1.编写程序,输入10个整数存入一维数组,统计输出其中的正数、负数和零的个数。 2.编写程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。 3.编写程序,输入10个整数存入一维数组,对其进行升序排序后输出。 4.编写程序,求二维数组中元素的最大值和最小值。 5.编写程序,求一个4×4矩阵中所有元素之和。 6.编写程序:从键盘上输入一字符串,统计输出该字符串中的字母字符、数字字符、空格以及其他字符的个数。 7.编写程序:从键盘上输入一字符串,并判断是否形成回文(即正序和逆序一样,如“abcd dcba”)。 8. 产生一个由10个元素组成的一维数组并输出,数组元素由随机数(0-99)构成。 9. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,按原来的规律将其插入并输出。 页脚内容1

10. 产生一个由10个元素组成的一维数组,数组元素由随机数(0-99)构成。按照升序排列并输出。再输入一个数,要求找出该数是数组中的第几个元素,如果不在数组中,则输出找不到。 11. 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。可能没有鞍点。 12. 编程输出杨辉三角。(要求输出10行)(杨辉三角:每行端点与结尾的数为1.每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大) 13. 输入一行字符,统计大写字母、小写字母、数字、空格以及其它字符个数。 14. 编写程序,将两个字符串连接起来,不用strcat。 15. 编写程序实现strcpy函数功能。 16. 编程实现strlen函数功能。 17. 编程求2-4+6-8…-100+102的值。 18. 假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。 19. 输入若干个正整数,以0结束,将其中大于平均值且个位为5的数排序后输出。(按由大到小的顺序排序) 20. 输入一个字符串,将其中ASCII码值为基数的字符排序后输出。(按由小到大的顺序) 21. 输入一个以回车结束的字符串(少于80个字符),滤去所有的非16进制字符后,组成一个新字符串(16进制形式),然后将其转换为10进制数后输出。 22. 读入一个正整数n(1<=n<=6),再读入n阶矩阵,计算该矩阵除副对角线、最后一行、最后一列 页脚内容2

C语言 数组 实验题目及答案

实验六数组程序设计 【实验目的】 1、掌握使用一维数组编程方法 2、掌握使用二维数组进行程序设计 【实验内容】 一、上机验证程序,并分析结果 要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。1、#include int main() { int a[ ]={1,2,3,4,5} , i, j, s=0 ; j = 1; for ( i = 4 ; i>=0 ; i--) { s = s+ a[i] * j ; j = j * 10 ; } printf(" s= %d \n" , s ); return 0; } 二、程序改错题 1.下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。源代码如下,程序中存在错误,请将其改正。 #include int main()

{ int a(10);/*定义数组*/ int count,i;/* i循环变量 count 正数个数*/ for(i=0;i<=10;i++) {/*循环输入*/ scanf("%d",a[i]); } count=1; for(i=0;i<=10;i++) {/*查找正数*/ if(a(i)>0) count++; } printf("数组中正数有:%d个\n",count); return 0; } 三编写程序 1.编写程序要求输入30个学生的单科成绩,输出高于平均分的成绩。#include #define N 30 int main() { float score[N],sum=0,aver; int i; for(i=0;i<30;i++) { scanf("%f",&score[i]); sum=sum+score[i]; } aver=sum/30; printf("平均分为:%.2f\n",aver); for(i=0;iaver) printf("%.2f ",score[i]); printf("\n");

C语言练习3(数组)=参考答案

C语言(数组) 一、选择题 1. 设有程序: main() { int i,a[11]; printf("给数组赋值:\n"); for (i=0;i<=10;i++) scanf("%d",( )); ... ... printf("输出数组:\n"); for(i=0;i<=10;i++) printf("%d,",( )); } 则在程序中的两个园括号中分别应填入:C A) &a[i]和&a[i] B) a[i]和&a[i] C) &a[i]和a[i] D) a[i]和a[i] 2. 设已定义:int a[15]; 则数组a占用的内存单元数是( C ). A) 15 B) 16 C) 30 D) 32 3. 阅读程序: main() { int a[2]={0},i,j,k=2; for(i=0;i

return r; } main() { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("%d\n",x); } 以上程序的输出结果是( D ). A) 720 B) 6 C)24 D) 120 5. 以下定义语句中,错误的是( B ). A) int a[ ] = {6,7,8}; B) int n=5, a[n]; C) char a[ ]= "string"; D) char a[5 ]={'0','1','2','3','4'}; 6. 以下描述中正确的是( D ). A) 数组名后面的常量表达式用一对圆括弧括起来 B) 数组下标从1开始 C) 数组下标的数据类型可以是整型或实型 D) 数组名的规定与变量名相同 7. 若定义数组并初始化char a[10]={'0','1 ','2','3','4','5','6','7','8','9'};指出以下错误语句( AB ). A) scanf("%c",a[0]); B) scanf("%s",&a); C) printf("%c",a[3]); D) printf("%s",a); 8.若定义数组int a[10] ,其最后一个数组元素为( C ). A) a[0] B) a[1] C) a[9] D) a[10] 9. 若定义数组并初始化int a[10]={ 1,2,3,4},以下语句哪一个不成立( B )? A) a[8] 的值为0 B) a[1] 的值为1 C) a[3] 的值为4 D) a[9] 的值为0 10. 指出以下错误语句( A ).

C语言实验报告(五-数组2)

华北水院高级语言程序设计(C语言)实验报告(五) 2015--2016学年第二学期 2015级专业:学号:姓名:……………………………………………………………………………………………… 一、实验题目:数组(2) 二、实验目的:(略) 三、实验内容 1.有一个数值从小到大排好顺序的数组,要求从键盘输入一个数,将该数插入数组后,数组中的数仍按从小到大有序。例如,数组中原来的顺序为{1,5,11,16,18,21},从键盘输入一个数15,将其插入到该数组后,数组中数的顺序为{1,5,11,15,16,18,21} 源代码:运行结果: #include #include void main () {int a[20]; int i,t,j=0; printf("请输入数字组"); for (t=0;t<6;t++) {scanf("%d",a[t]);}; printf("请输入插入数字"); scanf("%d",&i); for (t=0;i

#include #include void main () {int xh[20]; int cj[20]; int i,j,k,m,sum=0; double b; printf("请输入学号"); for (i=0;i<10;i++) scanf("%d",&xh[i]); printf("请输入学号的成绩"); for (i=0;i<10;i++) scanf ("%d",&cj[i]); for (i=0;i<9;i++) {k=i; for (j=i+1;j<10;j++) {if (cj[k]

c语言编程有关数组的几道例题

实验四一维数组、二维数组 一、实验目的与要求 1、熟练掌握一维数组、二维数组的定义、赋值和输入输出的方法。 2、掌握与数组有关的算法。 二、实验内容 1、(1)输入N个整数,使用冒泡排序,将数据由大到小输出。 #include "stdafx.h" #include void swap2(int*,int*); void bubble(int a[],int n); int main(void) { int n,a[8]; int i; printf("Enter n(n<=8):"); scanf("%d",&n); printf("Enter a[%d]:", n); for(i=0;ia[j+1]) swap2(&a[j],&a[j+1]); /*交换*/ } void swap2(int *px,int *py) { int t; t=*px; *px=*py; *py=t; } 单向冒泡排序法: //输入10个整数,按从大到小输出// #include

C语言数组练习及答案

第四部分数组 4. 1 选择题 1. 以下关于数组的描述正确的是(c ) 。 A. 数组的大小是固定的,但可以有不同的类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同的类型的数组元素 2. 以下对一维整型数组a的正确说明是(d )。 A. int a(10); B. int n=10,a[n]; C.int n; D. #define SIZE 10 scanf("%d",&n); int a[SIZE]; int a[n]; 3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是(c)。 A. 整型常量 B. 整型表达式 C. 整型常量或整型表达式 D. 任何类型的表达式 4. 以下对一维数组m进行正确初始化的是(c )。 A. int m[10]=(0,0,0,0) ; B. int m[10]={ }; C. int m[ ]={0}; D. int m[10]={10*2}; 5. 若有定义:int bb[ 8] ;。则以下表达式中不能代表数组元bb[1] 的地址的是(c ) 。 A. &bb[0]+1 B. &bb[1] C. &bb[0]++ D. bb+1 6. 假定int 类型变量占用两个字节,其有定义:int x[10]={0,2,4}; ,则数组x 在内存中所占字节数是(d ) 。 A. 3 B. 6 C. 10 D. 20 7. 若有以下说明: int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g; 则数值为4的表达式是(d ) A. a[g-c] B. a[4] C. a['d'-'c'] D. a['d'-c] 8. 以下程序段给数组所有的元素输入数据,请选择正确答案填入(a ) #include main() { int a[10],i=0; while(i<10) scanf("%d",_______ ); }

C语言程序设计实验报告(数组)

C语言程序设计实验报告(数组) 1实验目的 (1)熟练掌握一维数组,二维数组的定义,初始化和输入、输出方法; (2)熟练掌握字符数组和字符串函数的使用; (3)掌握与数组有关的常用算法(查找、排序等)。 2实验内容 编写函数catStr(char str1[],char str2[])用于进行两个字符串的连接,编写函数lenStr(char str[])用于统计一个字符串的长度,并在主函数中调用。 要求: 1、不允许用strcat()和strlen()字符处理库函数; 2、在主函数以直接初始化的方式输入两个字符串str1和str2.调用函数 strlen()计算并返回两个字符串的长度; 3、调用函数catstr()连接两个字符串(将str2连接在str1后面); 4、调用函数lenstr()计算并返回连接后字符串的长度; 5、在主函数中输入两个原始的字符串及几个字符串的长度,以及处理后字 符串及其长度。

3算法描述流程图

4源程序 #include #include void catStr(char str1[],char str2[]) { int i,j; for (i=0;str1[i]!='\0';i++); for(j=0;str2[j]!='\0';j++) str1[i+j]=str2[j]; str1[i+j]='\0'; } lenStr(char m[] ) {int i;

for (i=0;m[i]!='\0';i++); printf("%d",i); } void main() {char s1[50]="forever",s2[50]="more"; printf("s1=%s,s2=%s",s1,s2); printf("\ns1的长度:"); lenStr(s1); printf("\ns2的长度:"); lenStr(s2); catStr(s1,s2); printf("\n连接后的字符:"); printf("%s\n",s1); printf("连接后字符的长度:"); lenStr(s1); printf("\n"); } 5测试数据 s1=forever, s2=more 6运行结果 7出现问题及解决方法 在输入程序时,少写了半边引号,调试时发现存在错误,找到了错误并加以改正。无论什么事,细心都是必不可少的,认真是解决问题的关键。 8实验心得 通过本次实验,对于函数的定义和声明,数组以及循环语句有了进一步的认识,掌握了字符数组和字符串函数的使用,以及与数组有关的常用算法。此次实验不是调用strlen()和strcat()函数,而是通过自己设计程序来进行字符串的连接以及计量字符串的长度,由此我学会了如何去理清自己的思路来设计程序。

C语言中数组排序算法及函数调用

C语言中数组排序算法及函数调用 一、冒泡法(起泡法) 算法要求:用起泡法对10个整数按升序排序。 算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。 算法源代码: # include main() { int a[10],i,j,t; printf("Please input 10 numbers: "); /*输入源数据*/ for(i=0;i<10;i++) scanf("%d",&a[i]); /*排序*/ for(j=0;j<9;j++) /*外循环控制排序趟数,n个数排n-1趟*/ for(i=0;i<9-j;i++) /*内循环每趟比较的次数,第j趟比较n-j次*/ if(a[i]>a[i+1]) /*相邻元素比较,逆序则交换*/ { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } /*输出排序结果*/ printf("The sorted numbers: "); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n"); } 算法特点:相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。 算法分析:定义n-1次循环,每个数字比较n-j次,比较前一个数和后一个数的大小。然后交换顺序。二、选择法 算法要求:用选择法对10个整数按降序排序。 算法分析:每趟选出一个最值和无序序列的第一个数交换,n个数共选n-1趟。第i趟假设i为最值下标,然后将最值和i+1至最后一个数比较,找出最值的下标,若最值下标不为初设值,则将最值元素和下标为i的元素交换。 算法源代码: # include main() { int a[10],i,j,k,t,n=10; printf("Please input 10 numbers:"); for(i=0;i<10;i++)

C语言数组作业编程题答案

1、请先用记事本创建文件original.txt,往其中写入一组已排好序的整型数,今输入一个整数,要求按原来排序的规律将它插入数中,仍写入文件。例如:原来整数依次为4、6、8、41、56、77、102(数据间的分隔符为空格)。若将42插入数中,则插入后整数依次为4、6、8、41、4 2、56、77、102。 答案: #include #include void main() { int a[100]; int ijnumber; int n; FILE *fp; fp=fopen("e:\\C语言\\original.txt""r"); if(fp==NULL) { printf("open error"); exit(0); }

i=0; while(!feof(fp)) { fscanf(fp"%d"&a[i++]); fgetc(fp); } number=i-1; //number中存最后一个数据的下标 fclose(fp); scanf("%d"&n); //以下的while循环用来找n要放的位置循环结束时正好是a[i]的位置i=0; while(n>a[i]) { i++; } //for循环的功能是将a[i]到最后一个元素全后移一个位置 for(j=number;j>=i;j--) a[j+1]=a[j]; //将n放入找到的位置

a[i]=n; number=number+1; //加入n后,元素个数增1,用来控制向文件中的写入次数 fp=fopen("e:\\C语言\\original.txt""w"); if(fp==NULL) { printf("open error"); exit(0); } //写入数据 for(i=0;i<=number-1;i++) fprintf(fp"%d "a[i]); fprintf(fp"%d"a[i]); //最后一个数据后没有空格 fclose(fp); } 2、假定整型数组中的元素值不重复。今输入一个整数,先查找,如数组中存在此元素,则删除,否则不做操作。例如:原来数组的元素依次为14、6、28、41、96、77、89、102。若将96删除,则删除后数组元素依次为14、6、28、41、77、89、102。 答案:

C语言指针实验报告

C语言程序设计实验报告 1实验目得 (1)掌握指针得概念,会定义与使用指针变量; (2)能正确使用变量得指针与指向变量得指针变量; (3)能正确使用数组得指针与指向数组得指针变量; (4)能正确使用字符串得指针与指向字符串得指针变量; 2实验内容 将一个任意整数插入到已排序得整形数组中,插入后,数组中得数仍然保持有序; 要求: (1)整形数组直接由赋值得方式初始化,要插入得整数有scanf()函数数入; (2)算法实现过程采用指针进行处理; (3)输入原始数据以及插入整数后得数据,并加以说明;

3算法描述流程图

4源程序 #include main() { int a[100],m,i,*p,n,w; printf("请输入要输入得数组得元素个数:\n"); scanf("%d",&n); printf("请输入已排好序得数组:\n"); for(i=0;i=w;i--) { a[i+1]=a[i]; } a[i+1]=m; for(i=0;i<=n;i++) { printf("%-4d",a[i]); } printf("\n"); } 5测试数据 “1,3,5,7,9,11,13,15,17,19······10” 6运行结果 7出现问题及解决方法 在编写过程中,

for(i=n-1;a[i]>=w;i--) { a[i+1]=a[i]; } a[i+1]=m; 这一步没有注意a[i++]=m与a[i+1]=m中i++与i+1不同,a[i++]=m就是先将得值赋给a[i],然后在执行自增;而在实验过程中忽略了这一点,造成了不必要得麻烦; 8实验心得 通过这次指针实验掌握了指针得概念,会定义与使用指针变量,并且能利用指针来简单化一些问题,给以后得编程带来了很大得便利;

数据结构线性表的顺序表示和实现(C语言)概论

/* 线性结构,线性表的顺序表示和实现 */ # include # include # include //包含了exit()函数 //定义一个数组结构体 struct Arr { int * pBase; //保存数组的指针 int len; //保存数组的长度 int cnt; //数组元素的有效个数 }; //前置函数声明 void init_arr(struct Arr * pArr,int length); //初始化 bool append_arr(struct Arr * pArr,int val); //追加一个元素 bool insert_arr(struct Arr * pArr, int pos, int val); //插入一个元素 bool delete_arr(struct Arr * pArr, int pos, int * val); //删除数组中的一个元素int get(struct Arr * pArr, int pos); //获取某个元素的值 bool is_empty(struct Arr * pArr); //判断数组是否为空 bool is_full(struct Arr * pArr); //判断数组是否已满 void sort_arr(struct Arr * pArr); //为数组进行从小到大排序 void show_arr(struct Arr * pArr); //显示数组内容 void inversion_arr(struct Arr * pArr); //反转数组中的所有值 /* 创建一个数组,实现对这个数组的操作 1,追加一个元素 2,插入一个元素 3,对数组排序 4,反转数组元素 */ int main(void) { //定义一个结构体变量 struct Arr array; //获取一个被删除的元素的值 int val; //使用函数init_arr()初始化数组 init_arr(&array, 5);

c语言数组典型试题设计含答案

一.选择题(2*20) 【题1】在C 语言中,引用数组元素时,其数组下标的数据类型允许是。A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【题2】以下对一维整型数组a 的正确说明是。 A)int a(10); B)int n=10,a[n]; C)int n; D)#define SIZE 10 scanf(“%d”,&n); int a[SIZE]; int a[n]; 【题3】若有说明:int a[10];则对a 数组元素的正确引用是。 A)a[10] B)a[3.5] C)a(5) D)a[10-10] 【题4】在C 语言中,一维数组的定义方式为:类型说明符数组名; A)[整型常量表达式] B)[整型表达式] C)[整型常量] 或[整型表达式] D)[常量] 【题5】以下能对一维数组a 进行正确初始化的语句是。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]=”10*1”; 【题6】以下对二维数组a 的正确说明是。 A)int a[3][]; B)float a(3,4); C)double a[1][4]; D)float a(3)(4); 【题7】若有说明:int a[3][4];则对a 数组元素的正确引用是。 A)a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) 【题8】若有说明:int a[3][4];则对a 数组元素的非法引用是。 A)a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] 【题9】以下能对二维数组a 进行正确初始化的语句是。 A)int a[2][]={{1,0,1},{5,2,3}}; B)int a[][3]={{1,2,3},{4,5,6}}; C)int a[2][4]={{1,2,3},{4,5},{6}}; D)int a[][3]={{1,0,1},{},{1,1}}; 【题10】以下不能对二维数组a 进行正确初始化的语句是。 A)int a[2][3]={0}; B)int a[][3]={{1,2},{0}}; C)int a[2][3]={{1,2},{3,4},{5,6}}; D)int a[][3]={1,2,3,4,5,6};

C语言实验报告《数组》.doc

《c语言程序设计》课程实验报告 ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡篇二:c语言实验报告本(数组函数) 《c语言程序设计》 实验报告 2009~2010学年第二学期 专业 班级 姓名 学号 任课教师 计算机教学实验中心 2010年 5 月 《c语言程序设计》实验报告( 1 ) 学号:姓名:班级:成绩: 任课教师签名: 《c语言程序设计》实验报告( 2 ) 学号:姓名:班级:成绩: 任课教师签名:篇三:c语言实验报告数组 实验报告 实验课程名称高级c语言程序设计 实验项目名称数组 年级 09 级 专业数学 学生姓名李军 学号 0907010170 理学院 实验时间: 2010 年 4 月 22 日 学生实验室守则 一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。 二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。 三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。 五、实验中要节约水、电、气及其它消耗材料。 六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。 七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。 八、实验完毕,应清理好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。 九、无故不参加实验者,应写出检查,提出申请并缴纳相应的实验费及材料消耗费,经

c语言 数组排序 字符串排序 函数实现

1.数组倒叙 #include void show(int *a,int len) { int i; for(i=0;i

2.字符串排序 #include #include int main() { char *a[]={"aaaaaaa","ddddddd","eeeee","cccccc"}; int i; int len=sizeof a/sizeof *a; for(i=0;i0) { a[y]=(char *)((int )a[y]^(int)a[y+1]); a[y+1]=(char *)((int )a[y]^(int)a[y+1]); a[y]=(char *)((int )a[y]^(int)a[y+1]); } for(i=0;i

C语言综合习题及答案

C语言综合习题及答案 Prepared on 24 November 2020

C语言练习题 一、选择题 1. 一个完整的C源程序是【B 】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【C】。 A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以定义任意一个函数 3. 以下关于函数的叙述中不正确的是【B】。 A)C程序是函数的集合,包括标准库函数和用户自定义函数 B)在C语言程序中,被调用的函数必须在main函数中定义 C)在C语言程序中,函数的定义不能嵌套 D)在C语言程序中,函数的调用可以嵌套 4. 在一个C程序中,【B 】。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 程序的执行是从【A 】开始的。 A)主函数 B)子函数 C)从程序第一行 D)printf()函数 6.以下选项中不合法的标识符是【C 】 A)print B)FOR C)&a D)_00 7.以下选项中可作为C语言合法常量的是【A】 A)-80 B)-080 C) D) 8.以下选项中不属于字符常量的是【B】 A)′C′ B)"C" C)′\xCC′ D) ′\072′ 9. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【C】

C语言数组典型例题分析与解答

数组练习解答 1 定义一个名为a的单精度实型一维数组,长度为4,所有元素的初值均为0的数定义语句是________________ 【分析】按照一般数据定义语句的格式,可以直接写出方法一(参看答案);考虑到所有元素均赋初值时可以省略数组长度,可以写出方法二(参看答案);考虑到不省略数组长度,给部分元素赋初值时,所有未赋初值的元素均有空值(对数值型数组来说,初值为0),可以写出方法三(参看答案);考虑到选用静态型,不赋初值所有元素也自动赋予。空值(对数值型数组来说,初值为0),可以写出方法四(参看答案)。 【答案】方法一:float a[4]={0.0,0.0,0.0,0.0}; 方法二:float a[]={ 0.0,0.0,0.0,0.0}; 方法三:float a[4]= {0.0}; 方法四:static float [4]; 2 下列数组定义语句中,错误的是() ①char x[1]='a';②auto char x[1]={0}; ③static char x[l];④char x[l]; 【分析】显然答案①中给字符型数组赋初值的格式不对(不能直接赋予字符常量,必须用花括号括住),所以备选答案①是符合题意的答案。 【答案】① 3 用"冒泡排序法"对n个数据排序,需要进行n一1 步。其中第k步的任务是:自下而上,相邻两数比较,小者调上;该操作反复执行n-k次。现在假设有4个数据:4、l、3、2要排序,假定4为上、2为下,则利用"冒泡排序法"执行第2步后的结果是_________________。【分析】开始排序前的排列执行第1步后的排列执行第2步后的排列 41 1 14 2 32 4 23 3 【答案】l、2、4、3 4 用"选择排序法"对n个数据排序,需要进行n-1步。其中第k步的任务是:在第k个数据到第n个数据中寻找最小数,和第k个数据交换。现在假设有4个数据:4、1、3、2要排序,则利用"冒泡排序法"执行第2步后的结果是______________________。 【分析】开始排序前的排列为:413 2 执行第1步后的排列为:143 2 执行第2步后的排列为:123 4 【答案】1、2、3、4 5 下列数组定义语句中,正确的是() ①int a[][]={1,2,3,4,5,6};②char a[2]「3]='a','b'; ③int a[][3]= {1,2,3,4,5,6};④static int a[][]={{1,2,3},{4,5,6}}; 【分析】C语言规定,二维数组定义时不允许省略第二维的长度,所以备选答案①④是错误的。C语言还规定,定义字符型数组时不允许直接使用"字符常量"的方式赋初值,所以备选答案②也是错误的。显然备选答案③符合题意。【答案】③ 6 定义一个名为"s"的字符型数组,并且赋初值为字符串"123"的错误语句是() ①char s[]={‘1','2','3','\0 '};②char s「」={"123"}; ③char s[]={"123\n"};④char s[4]={'1','2','3'};

相关文档