C语言之180行“随机迷宫”代码详解与分析之整理版

C语言之180行“随机迷宫”代码详解与分析之整理版
C语言之180行“随机迷宫”代码详解与分析之整理版

C语言之180行“随机迷宫”代码详解与分析之整理版

代码如下:

*迷宫游戏by CDQ*/

/*

vc++ 6.0 编译成功

本程序参照网上一个特殊算法随机生成迷宫

该算法优点:

效率高,从入口到出口只有唯一路径,入口出口自己设定

该算法缺点:

宽度高度都必须为奇数,只能生成n*m矩阵迷宫

*/

#include

#include

#include

#include

#define Height 31 //迷宫的高度,必须为奇数

#define Width 25 //迷宫的宽度,必须为奇数

#define Wall 1

#define Road 0

#define Start 2

#define End 3

#define Esc 5

#define Up 1

#define Down 2

#define Left 3

#define Right 4

int map[Height+2][Width+2];

void gotoxy(int x,int y) //移动坐标

{

COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

}

void hidden()//隐藏光标

{

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo(hOut,&cci);

cci.bVisible=0;//赋1为显示,赋0为隐藏SetConsoleCursorInfo(hOut,&cci);

}

void create(int x,int y) //随机生成迷宫

{

int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向

int i,j,t;

//将方向打乱

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

{

j=rand()%4;

t=c[i][0];c[i][0]=c[j][0];c[j][0]=t;

t=c[i][1];c[i][1]=c[j][1];c[j][1]=t;

}

map[x][y]=Road;

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

if(map[x+2*c[i][0]][y+2*c[i][1]]==Wall)

{

map[x+c[i][0]][y+c[i][1]]=Road;

create(x+2*c[i][0],y+2*c[i][1]);

}

}

int get_key() //接收按键

{

char c;

while(c=getch())

{

if(c==27) return Esc; //Esc

if(c!=-32)continue;

c=getch();

if(c==72) return Up; //上

if(c==80) return Down; //下

if(c==75) return Left; //左

if(c==77) return Right; //右

}

return 0;

}

void paint(int x,int y) //画迷宫

{

gotoxy(2*y-2,x-1);

switch(map[x][y])

{

case Start:

printf("入");break; //画入口

case End:

printf("出");break; //画出口

case Wall:

printf("※");break; //画墙

case Road:

printf(" ");break; //画路

}

}

void game()

{

int x=2,y=1; //玩家当前位置,刚开始在入口处int c; //用来接收按键

while(1)

{

gotoxy(2*y-2,x-1);

printf("☆"); //画出玩家当前位置

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(30,24);

printf("到达终点,按任意键结束");

getch();

break;

}

c=get_key();

if(c==Esc)

{

gotoxy(0,24);

break;

}

switch(c)

{

case Up: //向上走

if(map[x-1][y]!=Wall)

{

paint(x,y);

x--;

}

break;

case Down: //向下走

if(map[x+1][y]!=Wall)

{

paint(x,y);

x++;

}

break;

case Left: //向左走

if(map[x][y-1]!=Wall)

{

paint(x,y);

y--;

}

break;

case Right: //向右走

if(map[x][y+1]!=Wall)

{

paint(x,y);

y++;

}

break;

}

}

}

int main()

{

int i,j;

srand((unsigned)time(NULL)); //初始化随即种子

hidden(); //隐藏光标

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

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

if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫

map[i][j]=Road;

else map[i][j]=Wall;

create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数

for(i=0;i<=Height+1;i++) //边界处理

{

map[i][0]=Wall;

map[i][Width+1]=Wall;

}

for(j=0;j<=Width+1;j++) //边界处理

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

for(i=1;i<=Height;i++)

for(j=1;j<=Width;j++) //画出迷宫

paint(i,j);

game(); //开始游戏

getch();

return 0;

}

分析如下:

首先,先挂上代码。然后说部分废话,读代码好处非常之多,提高技术,增加理解力,以及获得不同思路等。读代码甚至对比写代码来说,学习效率有过之而无不及.文章针对初级又在初级之上,没有一定的基础看不懂,有一定的基础就可以跟着这篇帖子,做出你自己的C语言随机迷宫,这里的做出并不是抄代码,而是变为你真正的知识,在没有参考的时候,也可以流畅的写出你的代码.

然后我们开始分析代码..

先看头文件。

#include //包涵标准输入输出函数

#include //控制台输入输出库,非标准库哦

#include //WINDOWS.H是主要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。具体包涵了什么。。太多了自行百度

#include //包涵时间和日期处理函数

#define Height 21 //迷宫的高度,必须为奇数

#define Width 21 //迷宫的宽度,必须为奇数

#define Wall 1 //即字面意思墙

#define Road 0 //即字面意思路

#define Start 2 //入口

#define End 3 //终点

#define Esc 5 //退出

#define Up 1 //上,下,左,右

#define Down 2

#define Left 3

#define Right 4

这里为什么要用宏,什么情况下使用宏,可能要问为什么不直接用12345来代替。简单的来说就是提供一个方便,并增加一定的效率。还有重要的一点就是增加代码的可读性。尽量避免用01234这样无意义的数字而使用宏定义能良好的提高开发效率,在小程序中可能不算什么,但是在大程序可就不一样了,然而宏定义也并非只能定义简单的1234 。

接下来我们看一共有几个函数

void gotoxy(int x,int y) //既字面含义移动坐标

void create(int x,int y) //字面含义创建迷宫

void hidden() //隐藏光标(注并非鼠标)

int get_key() //得到按键

void paint(int x,int y) //绘制迷宫

void game() //游戏相关操作

先不要管main函数里的代码,我们先逐个分析一下函数

先来看看gotoxy() 接受两个参数,代码如下

void gotoxy(int x,int y) //移动坐标

{

COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );

}

看到这里可能就有很多人蒙了COORD是个什么东西?COORD实际上是一个结构体包括结构体成员SHORT X,SHORT Y;

typedef struct COORD { SHORT X; SHORT Y;} COORD, *PCOORD;暂时先不管他是做什么的,先看看SetConsoleCursorPosition这个API的声明他接受两个参数,作用是定位光标位置,需要配合COORD 使用

BOOL WINAPI SetConsoleCursorPosition( __in HANDLE hConsoleOutput, //句柄就不介绍了__in COORD dwCursorPosition // COORD原来是SetConsoleCursorPosition的形参之一); GetStdHandle 声明如下:

HANDLE WINAPI GetStdHandle( //获得输入、输出/错误的屏幕缓冲区的句柄。__in DWORD nStdHandle );

而其参数nStdHandle的值可以为下面几种类型的一种:STD_INPUT_HANDLE 标准输入的句柄STD_OUTPUT_HANDLE 标准输出的句柄STD_ERROR_HANDLE 标准错误的句柄这么说出来其实也并非很容易理解,我们用一个小程序来举例

#include

#include

int main(void)

{

COORD cod;

cod.X=5;

cod.Y=4;

SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), cod );

}

编译一下程序,就能理解这两个函数是做什么的了

gotoxy() 就讲到这里

下面讲第二个函数

声明:void create(int x,int y)

void create(int x,int y) //随机生成迷宫

{

int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向// 这里的四个方向乃是0,1 1,0 0,-1 -1,0 代表着上下左右

int i,j,t;

//将方向打乱

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

{

j=rand()%4;

t=c[0];c[0]=c[j][0];c[j][0]=t;

t=c[1];c[1]=c[j][1];c[j][1]=t;

}

map[x][y]=Road;

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

if(map[x+2*c[0]][y+2*c[1]]==Wall) //

{

map[x+c[0]][y+c[1]]=Road;

create(x+2*c[0],y+2*c[1]);

}

}

这个函数中的算法根据源代码作者所说是从网上找的.然后搜了搜.我去略长,略长,转到论坛压力略大略大还分别有不会离散数学的和使用深度优先遍历..两种版本,最主要的是带图了,推荐亲自前去观看吧https://www.360docs.net/doc/ee3125820.html,/view/f22455126edb6f1aff001f13.html ,带上图理解比较容易..所以想要理解算法部分,还是看连接文章吧

然后我们接着说一下int get_key()

函数如下:

int get_key() //接收按键

{

char c;

while(c=getch())

{

if(c==27) return Esc; //Esc

if(c!=-32)continue;

c=getch();

if(c==72) return Up; //上

if(c==80) return Down; //下

if(c==75) return Left; //左

if(c==77) return Right; //右

}

return 0;

}

其实理解这个函数很容易getch() 为无回显获取一个字符,什么叫无回显获取一个字符?写一个小程序来测试一下

#include

#include

int main()

{

char a;

a=getch();

putch(a);

}

可以发现只会进行输出,而输入时不会显示所输入字符。可能会有人疑惑ESC的ASCII确实是27 可是其他的是什么呀?ASCII中是没有上下左右的值的,这里的值是键盘控制码,不是ASCII!注意了!关于获取某个按键的值可以用以下程序

#include

#include

int main()

{

int key;

key = getch();

while( key != 27 ) //键入值不为ESC

{

printf("%d\n", key);

key = getch();

}

}

继续看看paint 函数

函数如下

void paint(int x,int y) //画迷宫

{

gotoxy(2*y-2,x-1);

switch(map[x][y])

{

case Start:

printf("入");break; //画入口

case End:

printf("出");break; //画出口

case Wall:

printf("※");break; //画墙

case Road:

printf(" ");break; //画路

}

}

这个函数实际上比较容易理解,他首先将光标指向入口,然后在main函数中遍历整个map 数组,画出地图。也可以不用入出※空格这些来做地图比如改一下

switch(map[x][y])

{

case Start:

printf("1");break; //画入口

case End:

printf("2");break; //画出口

case Wall:

printf("3");break; //画墙

case Road:

printf("4");break; //画路

}

然后就应该能理解了这部分是怎么做到的

接下来我们看最后一个函数void game() //游戏相关操作

void game()

{

int x=2,y=1; //玩家当前位置,刚开始在入口处

int c; //用来接收按键

while(1)

{

gotoxy(2*y-2,x-1); //这里的含义是到达入口处

printf("☆"); //画出玩家当前位置

if(map[x][y]==End) //判断是否到达出口

{

gotoxy(30,24);

printf("到达终点,按任意键结束");

getch();

break;

}

c=get_key();

if(c==Esc)

{

gotoxy(0,24);

break;

}

switch(c)

{

case Up: //向上走

if(map[x-1][y]!=Wall)

{

paint(x,y);

x--;

}

break;

case Down: //向下走

if(map[x+1][y]!=Wall)

{

paint(x,y);

x++;

}

break;

case Left: //向左走

if(map[x][y-1]!=Wall)

{

paint(x,y);

y--;

}

break;

case Right: //向右走

if(map[x][y+1]!=Wall)

{

paint(x,y);

y++;

}

break;

}

}

}

事实上这个函数也不是很难理解所有函数除了算法部分都不难理解,就看用不用心去读代码了

就像注释那样,gotoxy(2*y-2,x-1); 到达入口处用☆当玩家,然后先进行判断是否到达终点,

如果达到终点或按ESC则结束游戏,负责就开始接受按键,进行移动,说是移动实际上就是不断变化map[x][y] x和y的值并进行判断是否到达终点,按下ESC如果没有则根据x++ x-- y++ y-- 来进行上下左右后改变所在二维数组中的位置打个比方

a[2][2]

分别有a[0][0]a[0][1] 11

a[1][0]a[1][1] 21 如果处在2的位置那么按下上也就是说数组元素a[1][0]变成了a[0][0] 如果用这里用a[x][y]来进行表示,那么就是等于x--;其他同理

最后我们来看一下main函数

int main()

{

int i,j;

srand((unsigned)time(NULL)); //初始化随即种子

hidden(); //隐藏光标

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

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

if(i==0||i==Height+1||j==0||j==Width+1) //初始化迷宫

map[j]=Road;

else map[j]=Wall;

create(2*(rand()%(Height/2)+1),2*(rand()%(Width/2)+1)); //从随机一个点开始生成迷宫,该点行列都为偶数

for(i=0;i<=Height+1;i++) //边界处理

{

map[0]=Wall;

map[Width+1]=Wall;

}

for(j=0;j<=Width+1;j++) //边界处理

{

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

for(i=1;i<=Height;i++)

for(j=1;j<=Width;j++) //画出迷宫

paint(i,j);

game(); //开始游戏

getch();

return 0;

}

先是srand来初始化随机种子为create打下基础

然后给map赋值输出后成四面全是墙,中间全是路的也就是000 010

000 //0是墙,1是路这样

然后用create生成正式的迷宫,根据rand来随机生成路线

之后重新处理边界,以及定义入口点和出口点,可以试着删掉

for(i=0;i<=Height+1;i++) //边界处理

{

map[0]=Wall;

map[Width+1]=Wall;

}

for(j=0;j<=Width+1;j++) //边界处理

{

map[0][j]=Wall;

map[Height+1][j]=Wall;

}

这段如果在入口处按左,你会发现BUG了!!

删掉这两段

map[2][1]=Start; //给定入口

map[Height-1][Width]=End; //给定出口

导致你一旦从入字走出,就再也走出不迷宫

最后使用print函数根据数组元素的值画出迷宫.

用game进行游戏循环并判断游戏是否结束

第一次写源码分析..蛋疼..尤其是发帖发了N次

最后..我爱C语言么么哒

给个疑惑解答:

============================================================

下面讲第二个函数

声明:void create(int x,int y)

void create(int x,int y) //随机生成迷宫

{

int c[4][2]={0,1,1,0,0,-1,-1,0}; //四个方向// 这里的四个方向乃是0,1 1,0 0,-1 -1,0 代表着上下左右

int i,j,t;

//将方向打乱

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

{

j=rand()%4;

t=c[0];c[0]=c[j][0];c[j][0]=t;

t=c[1];c[1]=c[j][1];c[j][1]=t;

}

================================================================

t=c[0];c[0]=c[j][0];c[j][0]=t;

t=c[1];c[1]=c[j][1];c[j][1]=t;

我卡在这里N久

一直在想,这是个什么赋值

最后才发现原来是个错误

C语言程序设计模拟试题1(附答案)

《C语言程序设计》模拟试卷一 一、单项选择题(每题2分,共30分) 1、下列有关C语言的叙述中错误的是()。 A) C语句必须以分号结束 B) 任何一个C程序中有且只有一个主函数 C) 复合语句在语法上可被看作一条语句 D) C程序中对数据的任何操作都可由运算符实现 2、以下不能定义为用户标识符的是()。 A) MAIN B) _HJ C) 2ong D) LINE1 3、下列符号中用来表示C语言中的回车换行的是()。 A) \r B) \n C) \b D) \t 4、如有如下定义:int a=1,则语句printf(“%d,%d”, a, ++a);的运行结果为()。 A) 1, 1 B) 1, 2 C) 2, 2 D) 2, 1 5、已知ch为字符型变量,下面表达式中正确的是()。 A) ch=’\xff ’B) ch=’\ff ’C) ch=’ ff ’D) ch=” ff ” 6、以下能正确定义一维数组的是()。 A) int a[5]={0,1,2,3,4,5}; B) int a[5]=”012345”; C) char a[ ]=”012345”; D) char a[5]={0,1,2,3,4,5}; 7、以下语句中能正确定义变量并赋初值的是()。 A) char c=65; B) float f=f+1.1; C) double x=12.3e3.6; D) int m=n=2.0; 8、在执行下列程序时输入:1357924,则程序的运行结果为()。 main( ) { int x, y; scanf(“%2d%2d”,&x,&y); printf(“%2d”,x*y); } A) 13 B) 1357 C) 74 D) 741 9、执行下列程序段后输出的结果是()。 x = 9; while (x > 7)

c语言程序代码

1.要求在屏幕上输出下一行信息。 This is a c program. 程序: #include int main() { printf(“this is a c program.\n”); return 0; } 2.求两个整数之和。 程序: #include int main() { int a,b,sum; a=122; b=234; sum=a+b; printf(“sum is %d\n”,sum); return 0; } 3.求两个整数之间的较大者。

#include int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; } int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z); } 4.有人用温度计测量出华氏发表示的温度(如69°F),今要求把 她转换成以摄氏法表示的温度(如20℃)。 公式:c=5(f-32)/9. 其中f代表华氏温度,c代表摄氏温度。

#include int main() { float f,c; f=64.0; c=(5.0/9)*(f-32); printf("f=%f\nc=%f\n",f,c); return 0; } 5.计算存款利息。有1000元,想存一年。有一下三种方法可选: (1)活期:年利率为r1;(2)一年定期:年利率为r2;(3)存两次半年定期:年利率为r3。分别计算一年后按三种方法所得到的本息和。 程序: #include int main() { float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; p1=p0*(1+r1); p2=p0*(1+r2);

C语言编程游戏代码

#include #include #include #include #include #define L 1 #define LX 15 #define L Y 4 static struct BLOCK { int x0,y0,x1,y1,x2,y2,x3,y3; int color,next; intb[]={{0,1,1,1,2,1,3,1,4,1},{1,0,1,3,1,2,1,1,4,0},{1,1,2,2,1,2,2,1,1,2},{0,1,1,1,1,0,2,0,2,4}, {0,0,0,1,1,2,1,1,2,3},{0,0,1,0,1,1,2,1,3,8},{1,0,1,1,2,2,2,1,2,5},{0,2,1,2,1,1,2,1,2,6},{0,1,0,2,1,1,1 ,0,3,9},{0,1,1,1,1,2,2,2,3,10},{1,1,1,2,2,1,2,0,3,7},{ 1,0,1,1,1,2,2,2,7,12},{0,1,1,1,2,1,2,0,7,13},{0 ,0,1,2,1,1,1,0,7,14},{0,1,0,2,1,1,2,1,7,11},{0,2,1,2,1,1,1,0,5,16},{0,1,1,1,2,2,2,1,5,17},{1,0,1,1,1, 2,2,0,5,18},{0,0,0,1,1,11,2,1,5,15},{0,1,1,1,1,0,2,1,6,2,0},{0,1,1,2,1,1,1,0,6,21},{0,1,1,2,1,1,2,1,6 ,22},{1,0,1,1,1,2,2,1,6,19}}; static int d[10]={33000,3000,1600,1200,900,800,600,400,300,200}; int Llevel,Lcurrent,Lnext,Lable,lx,ly,Lsum; unsigned Lpoint; int La[19][10],FLAG,sum; unsigned ldelay; void scrint(),datainit(),dispb(),eraseeb(); void throw(),judge(),delayp(),move(0,note(0,show(); int Ldrop(),Ljudge(),nextb(),routejudge(); } main() { char c; datainit(); Label=nextb(); Label=Ldrop(); while(1){ delayp(); if(Label!=0) { Ljudge(); Lable=nextb(); } ldelay--; if(ldelay==0)

C语言程序设计模拟试题A附答案

《C语言程序设计》模拟试卷A 一、单项选择题(每题2分,共20分) 1、下列有关C语言的叙述中错误的就是(D)。 A) C语句必须以分号结束 B) 任何一个C程序中有且只有一个主函数 C) 复合语句在语法上可被瞧作一条语句 D) C程序中对数据的任何操作都可由运算符实现 2、以下不能定义为用户标识符的就是(C)。 A) MAIN B) _HJ C) 2ong D) LINE1 3、以下能正确定义一维数组的就是(C)。 A) int a[5]={0,1,2,3,4,5}; B) int a[5]=”012345”; C) char a[ ]=”012345”;D) char a[5]={0,1,2,3,4,5}; 4、执行下列程序段后输出的结果就是(C)。 x = 9; while (x > 7) { printf(“*”); x- -; } A) **** B) *** C) ** D) * 5、设char str1[10] = “ABCDE”, str2[10] = “xyz”; 则执行语句 printf(“%d”, strlen(strcpy(str1, str2))); 后的输出结果就是(D)。 解析: strcpy(str1,str2); 后,str1[] 里就是"XYZ", Z 后面有字符串结束符 strcpy(str1,str2); 执行后,函数返回的就是str1, 因为str1[] 里就是新值"XYZ", 而 strlen(strcpy(str1,str2)) 就就是strlen(str1的新值),所以得3。 strlen 统计到字符串结束符以前,即,不计入字符串结束符。 A) 9 B) 8 C) 5 D) 3 6、若用数组名作为函数调用的实参,则传递给形参的就是(A)。

c语言程序代码

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 1.要求在屏幕上输出下一行信息。 This is a c program. 程序: #include int main() { printf(“this is a c program.\n”); return 0; } 2.求两个整数之和。 程序: #include int main() { int a,b,sum; a=122; b=234;

sum=a+b; printf(“sum is %d\n”,sum); return 0; } 3.求两个整数之间的较大者。 程序: #include int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; } int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z);

} 4.有人用温度计测量出华氏发表示的温度(如69°F),今要 求把她转换成以摄氏法表示的温度(如20℃)。 公式:c=5(f-32)/9. 其中f代表华氏温度,c代表摄氏温度。 程序: #include int main() { float f,c; f=64.0; c=(5.0/9)*(f-32); printf("f=%f\nc=%f\n",f,c); return 0; } 5.计算存款利息。有1000元,想存一年。有一下三种方法可 选:(1)活期:年利率为r1;(2)一年定期:年利率为r2; (3)存两次半年定期:年利率为r3。分别计算一年后按三种方法所得到的本息和。 程序: #include

C语言程序设计期末考试试题(含答案)

C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是( ) 。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是( ) A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( )

#include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是( ) #include main() { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、下列运算符中优先级最高的是( ) A、< B、十 C、% D、!= 12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是( ) 。 A、’x’&&’y’ B、x<=y C、x||y+z&&y-z D、!((x<y)&&!z ||1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、’a’<=c1<=f’z’ B、(c1>=a)&&(c1<=z) C、(‘a’>=c1) (‘z’<=c1) D、(c1>=’a’)&&(c1<=’z’) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、 1 C、 2 D、 3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main() {int num=0; while(num<=2) {num++; printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3

c语言基本代码

c语言基本代码 Prepared on 22 November 2020

'\0':是字符串的结束标志 ‘‘:空格 auto:声明自动变量一般不使用 double:声明双精度变量或函数(和%lf连用), m=(double)(v-l)/l*100+; 这个式子加个double是将后面式子中非double类型强制转换类型为double float:声明浮点型变量或函数(和%f连用),单精度 int:声明整型变量或函数(与%d连用) struct:声明结构体变量或函数 long:声明长整型变量或函数 switch:用于开关语句 enum:声明枚举类型 register:声明积存器变量 typedef:用以给数据类型取别名(当然还有其他作用) extern:声明变量是在其他文件正声明(也可以看做是引用变量) return:子程序返回语句(可以带参数,也看不带参数) union:声明联合数据类型 const:声明只读变量 short:声明短整型变量或函数 unsigned:声明无符号类型变量或函数 signed:生命有符号类型变量或函数 void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)default:开关语句中的“其他”分支 goto:无条件跳转语句 sizeof:计算数据类型长度,,是整型表达式用法sizeof(类型说明符,数组名或表达式);sizeof()是获取类型占用的字节数,是整形的 volatile:说明变量在程序执行中可被隐含地改变 static:声明静态变量 char:声明字符型变量或函数 strcmp:strcmp(s1,s2)比较字符串大小两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止大于返回1小于返回-1等于返回0 循环: for:一种循环语句(可意会不可言传)for(表达式1;表达式2;表达式3)while:循环语句的循环条件 do:循环语句的循环体 break:跳出当前循环 continue:结束当前循环,开始下一轮循环 判断: d=a>30b:c:相当于if暨当a>30是d=b否则d=c;

C语言程序设计模拟试题2(附答案)

《C语言程序设计》模拟试卷二 一、填空题。(每空2分,共30分) 1.设有变量说明语句 int x=1,y=2; 则执行下述printf语句的输出结果是___1.000000___ _____。 printf("%f\n",1.0+x/y); 2.执行下述程序 #include main() { int x,y; scanf("%2d%*2s%1d",&x,&y); printf("%d\n",x+y); } 若从键盘输入 12345671 则程序的输出结果是__17______。 3.以下程序的功能是:从键盘上输入若干名学生的成绩(百分制,可带小数,以输入负数或0为结束标志),统计并输出最高成绩和最低成绩。请填空。 #include main() {

float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while ( X>0&&X<=100 ) { if (x>amax) amax=x; else if (x

_k++ _________; d=1.0/(k*(k+1)); } while (k<=n); printf("%f\n",s); 5.执行下述程序的输出结果是_-3 -4 0 4 4 3___ ____。 #inclued main() { int a[6],i; for (i=0;i<6;i++) { a[i]=9*(i-2+4*(i>3))%5; printf("%3d",a[i]); } printf("\n"); } 6.执行下述程序时的输出结果是____6_____ ________。 #include main() { int a[]={2,4,6,},*ptr=&a[0],x=8,y,z; for (y=0;y<3;y++) z=(*(ptr+y)

(完整word版)一些简单的C语言程序代码

由键盘任意输入1个4位数整数,分别输出其中的个位、十位、百位、千位。 /* expe 3-10 */ #include #include void main(void) { int mun,a,b,c,d; scanf("%d",&mun); a=mun / 1000; /*千位*/ b=(mun % 1000) / 100; /*百位*/ c=(mun % 100) / 10; /*十位*/ d=(mun % 10); /*个位*/ printf("千位数字为=%d\n",a); printf("百位数字为=%d\n",b); printf("十位数字为=%d\n",c); printf("个位数字为=%d\n",d); } 由键盘任意输入3个数据,找出其中的最大数和最小数。 #include void main(void) { float a,b,c,k,g;/* k 小g 大*/ printf ("请输入三个数"); scanf("%f%f%f",&a,&b,&c); if (a < b) { k = a; g = b; } else { k = b; g = a; } if (k < c)/*最小*/ { printf ("\n最小的数=%5.2f",k);} else {printf ("\n最小的数=%5.2f",c);} if (g > c)/*最大*/ {printf ("\n最大的数=%5.2f",g);} else {printf ("\n最大的数=%5.2f",c);} } 判断三角形的形状 #include #include void main(void) { printf("请输入三角形三边"); float a,b,c,p,s,k1,k2,k3; scanf("%f%f%f",&a,&b,&c); while (a + b < c || b + c < a || a + c < b ) { printf("不能构成三角形,请重新输入"); scanf("%f%f%f",&a,&b,&c); } k1 = a * a; k2 = b * b; k3 = c * c; if (a == b && b == c && c ==a) {printf("此三角形为等边三角形");} else if (a == b || b == c || c ==a) {printf("此三角形为等腰三角形"); } else if ((k1 == b * b + c * c) || (k2 == a * a + c * c) || (k3 = a * a + b * b)) {printf("此三角形为直角三角形");} else {printf("此三角形为一般三角形");} } 九九乘法表 整体 #include void main(void) { int i,j;

一些比较简c语言程序源代码

/**返回的long型的最大值是startLongValue+count-1(产生一个随机数) * param needCount * param count * param startLongValue * return */ public static List randomNoRepeatLongArray(int needCount,int count,long startLongValue){ //这种情况会出现无限循环的 if(needCount>count) return null; Random random = new Random(); int[] ints = new int[count]; for(int i=0;i list = new ArrayList(); while(list.size() #include #include

C语言程序代码

1.编写一个C程序,输入a、b、c三个数,输出其中最大者。 #include "stdio.h" void main() { int paixu(int a,int b,int c); int a1,a2,a3,m; scanf("%d %d %d",&a1,&a2,&a3); m=paixu(a1,a2,a3); printf("%d",m); } int paixu(int a,int b,int c) { int max(int x,int y); int m; m=max(a,b); m=max(m,c); } int max(int x,int y) { if(x>y) return x; else return y; } 依次将10个数输入,要求将其中最大的数打印出来。 #include "stdio.h" void main() { int a[10],i,m; for(i=0;i<10;i++) scanf("%d",&a[i]); m=a[0]; for(i=1;i<10;i++) if(a[i]>m){m=a[i];} printf("最大数是:"); printf("%d\n",m); } 有3个数a、b、c,要求按从大到小的顺序把它们打印出来。 #include "stdio.h" void main() { int a[3]; int m,i,j; for(i=0;i<3;i++) scanf("%d",&a[i]); for(i=1;i<3;i++) for(j=0;ja[j]) {m=a[j];a[j]=a[i];a[i]=m;} printf("按由大到小排列:"); for(i=0;i<3;i++) printf("%d ",a[i]); } 求1+2+3+ (100) #include "stdio.h" void main() { int i,sum=0; for(i=1;i<=100;i++) { sum=sum+i; } printf("1+2+3+……+100=%d\n" ,sum); } 判断一个数n能否同时被3和5除。 #include "stdio.h" void main() { int a,b; printf("请输入一个整数\n"); scanf("%d",&a); if(a%3==0 && a%5==0) printf("能同时被3和5整除\n"); else printf("不能同时被3和5整除\n"); } 将100~200之间的素数打印出来。

C语言程序设计模拟试题1

C语言程序设计模拟试题. 一、填空题. 1. C语言程序的三种基本结构是顺序结构,选择结构,循环结构。 2.if语句控制表达式只有其值为非0表示逻辑值“真”,其值为0表示逻辑值“假”。 3.说明语句:int b[10]; 定义了数组b有10个整型元素,这些数组元素的下标是从0开始,最大为9。 4. 有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]=0,a[2][1]=6. 5. 设x,y,z均为int 型变量,C语言描述”x或y中有一个小于z”的表达式是x

8. 在C语言中,十进制数30的八进制表示形式是036 ,十六进制表示形式是0x1e 9. C程序是由函数组成的。一个C程序由一个main()函数和若干个子函数构成。函数的构成可分为两部分:函数说明(或函数头) 和函数体。 10.标识符是指程序中的符号常量、变量、函数等对象的名称。在C语言中,标识符只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。 11.在C语言中整型常量有十进制、八进制和十进制三种表示方法。实型常量有小数形式和指数两种表示方法。 12.C语言中语句的作用是向计算机系统发出操作命令,从而完成一定的操作任务。C语句可以分为:表达式语句、函数调用语句、控制语句、复合语句和空语句等五种类型。 二、单项选择题) 1.一个C语言的执行是从 A (A)本程序的main函数开始,到main函数结束 (B)本程序文件的第一个函数开始,到本程序文件的 最后一个函数结束

C语言程序设计竞赛模拟试题

1、编写程序,从键盘上连续输入若干字符,直到回车换行符结束。统计并输出所输入的空格、 大写字母、小写字母,以及其他字符(不含回车换行符)的个数。 #include "" main() { char ch=' '; int i=0, j=0, k=0, m= ?1; do { if (ch>='a' && ch<='z') i++; else if (ch>='A' && ch<='Z') j++; else if (ch == ' ') m++; else k++; }while((ch=getchar())!='\n'); printf ("small letter = %d, capital letter = %d\n", i, j); printf ("space = %d, other = %d\n", m, k); } 编写程序,求100~999之间所有的水仙花数。所谓“水仙花数”,即是一个三位数,它个位、十位、百位数字的立方和,恰好等于该数本身。 #include "" main() { int i, j = 1; int nf, ns, nt; for (i =100; i<=999; i++) { nf = i%10; ns = i/10%10; nt = i/100; nf = nf * nf * nf; ns = ns * ns * ns; nt = nt * nt * nt; if ((nf + ns + nt) == i) { printf ("The %d's number is %d\n", j, i); j++; } } 编写程序,求1-1/2+2/3-3/4+4/5-5/6+6/7….-99/100= 4、编写程序,随机产生1-35个不重复的数,并打印结果。

C语言源程序

C语言程序设计 <一> 1、程序运行从main()函数开始,也从main()函数结束。 2、函数是C程序的基本单位,由函数头和函数体组成。 3、C语言源程序是由函数组成,它们的数目可以有多个。 4、在C语言源程序中,是必须有一个函数名为main的函数。main()后的小括号()没有任何内容,它不可以省略。 5、C程序中的语句用分号结束,在一个程序行上可以有多个语句,一个C 语句能写在多个程序行上。 6、函数体是由一对大括号围起来语句序列组成。小括号是函数的标志。 二、C语言的组成元素 1、命令、函数和变量等是组成程序的基本对象,每一个程序对象都需要一个名字来标识,程序对象的名称就是标识符。 2、在C语言中,标识符分为用户标识符和系统标识符。 3、用户标识符是指在程序中由程序员为变量、函数、数组等程序对象自行命名的标识符。 4、系统标识符是指C语言编译系统内部预定义的用于表示命令数据内型的标识符,又称保留字符。 5、基本字符集 英文字母:a~z和A~Z。 阿拉伯数字:0~9。其他字符:()、[]、+、-、*、/、%、<、>、<=、>=、==、!=、!、&&、‖、++、--、+=、-=、*=、/=、%=。它们是由1~2个字符组成。用作C语言的运算符;还包括:空格、换行符,回车符,单双引号,大括号,逗号,分号,反斜线,它们在程序中起到分隔和定界作用。 6、标识符:是用于标识命令;变量、函数,数组,数据类型等程序对象名称的字符序列。 7、组成标识符的合法字符有:字母,数字,下划线,三种,数字不能作首字符。 三、执行C语言程序 1、单击“开始”——“程序”——“附件”——“命令提示符”。 2、按功能键<10>激活菜单,执行“File”——“NEW”(ALT+回车)全屏。 3、为保存,输入程序文件名。 4、+运行 有输入:等待输入→回车 通过 无输入:返回到编辑 未通过:回车→F6→修改 F3(打开)

C语言程序设计试题集及其答案

第一章基础知识 一.填空 1. 每个C 程序都必须有且仅有一个__________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、___________ 、链接、加载 和执行。 3. 软件是程序,以及________ 、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________ ”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和_________ 两大类 。 6. C 语言是由_______ 组成的。 7. C 语言的函数可分为主函数main 、标准库函数和____________ 。 8. 一个函数是由两部分组成的,即:___________ 和函数体。 9. 编译是将C语言所编写的源程序___________ 成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为。 11. 机器语言是以___________ 形式表示的机器基本指令的集合,是计算机系统唯一不需要翻 译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用____________ 来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以_____ 开头的代码行都先由预处理程序预处理。 13. C 程序的执行均是由执行_________ 开始。 15. 函数体即为包含在{2内的部分。它分为 __________ 和为完成功能任务由若干个C语句组成的执行部分。 16. C 语言程序中一条简单语句是以___________ 字符作为结束符的。 17. C 语言是结构化、 ________ 的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______ 程序” ,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以说,用高级语言进行程序设计,其编程效率高,方便易用,但_______ 没有低级语言高。 20. 第一个系统体现结构化程序设计思想的教学工具语言是 _______ 语言。 解答: 1. main()

C语言编程基础考试试题

C语言编程基础考试试题 文档名称文档密级 C语言编程基础考试 [考前说明]本题目中不考虑头文件引用问题(假定已经包含正确的头文件),C 语言的标 准函数都可用;如果不特别说明, 假定程序运行环境为:操作系统Windows 2000, VC6.0编译环境,缺省为四字节对齐, X86(80586)CPU处理器(32位小字节序处理器). 一、单选题 1、给出以下定义: char acX[ ]= "abcdefg"; char acY[ ]= {'a','b','c','d','e','f','g'}; 则正确的叙述为( ) A) 数组acX和数组acY等价 B) 数组acX和数组acY的长度相同 C) 数组acX的长度大于数组acY的长度 D) 数组acX的长度小于数组Y的长度 2、 void example(char acHello[]) { printf("%d", sizeof(acHello)); return; } void main()

{ char acHello[] = "hello"; example(acHello); return; } 的输出是( ) A 4 B 5 C 6 D不确定 3、以下叙述中不正确的是( ) A) 在不同的函数中可以使用相同名字的变量 B) 函数中的形式参数是在栈中保存 C) 在一个函数内定义的变量只在本函数范围内有效 D) 在一个函数内的复合语句中定义的变量在本函数范围内有效(复合语句指函数 中的成对括号构成的代码) 4、设有如下定义: unsigned long pulArray[] = {6, 7, 8, 9, 10}; unsigned long *pulPtr; 则下列程序段的输出结果为( ) 1 文档名称文档密级 pulPtr = pulArray; *(pulPtr + 2) += 2; printf ("%d,%d\n", *pulPtr, *(pulPtr + 2)); A)8,10 B)6,8 C)7,9 D)6,10

C语言程序设计模拟试题3(附答案)

《C语言程序设计》模拟试卷三 一、填空题。(每空2分,共16分) 1.在内存中,短整型变量占字节,单精度实型变量占字节,字符型变量占字节。 2.一个C语言文件就是由若干个组成。 3.设有以下变量定义,并已赋确定得值 char w; int x; float y; double z; 则表达式:w*x+z-y所求得得数据类型为。 4.若x为int类型,请以最简单得形式写出与逻辑表达式!x等价得C语言关系表达 式。 5.若有如下图所示五个连续得int类型得存储单元并赋值如下图,a[0]得地址小于a[4]得地址。p与s就是基类型为int得指针变量。请对以下问题进行填空。 a[0] a[1] a[2] a[3] a[4] p,给s赋值,使s指向最后一个存储单元a[4]得语句就 是。 (2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p得值就是。 二、单项选择题。(每题2分,共40分) 1.设有 int x=11; 则表达式 (x++ * 1/3) 得值就是()。 A) 3 B) 4 C) 11 D) 12 2.下列程序得输出结果就是()。 A) 3 B) 3、2 C) 0 D) 3、07 main() {double d=3、2; int x,y; x=1、2; y=(x+3、8)/5、0; printf(“%d \n”, d*y); } 3.下列程序执行后得输出结果就是(小数点后只写一位)()。 A) 6 6 6、0 6、0 B) 6 6 6、7 6、7 C) 6 6 6、0 6、7 D) 6 6 6、7 6、0 main() { double d; float f; long l; int i; i=f=l=d=20/3; printf("%d %ld %f %f \n", i,l,f,d); scanf("%d",&d); } 4.下列变量定义中合法得就是()。

初学C语言常用简单程序代码

初学C语言常用简单程序代码素数的筛选 #include #include #define N 1000 int main(int argc, char* argv[]) { int i,j,num[N]; for(i=0;i

main() { int x,s,t,d; scanf("%d",&x); s=x%60; t=(x/60)%60; d=(x/60)/60; printf("%d时%d分%d秒",d,t,s); } 三个数的交换 #include void main() { int a,b,c,t; scanf("%d%d%d",&a,&b,&c); printf("The original number:a=%d,b=%d,c=%d\n",a,b,c); t=a,a=b,b=t; t=a,a=c,c=t; printf("after swap:a=%d,b=%d,c=%d",a,b,c); } switch语句的运用 #include main() { int a,m; printf("please input a number:"); scanf("%d",&a); switch(a/10) { case 10: case 9: m=5; break;

C语言程序设计(医院信息管理系统)附源代码

C语言程序设计(医院信息管理系统)附源代码

————————————————————————————————作者:————————————————————————————————日期:

专业设计报告 课程名称: C 语言程序设计课题名称:医院信息管理系统 专业班别:12本计算机科学与技术二班 姓名: 学号: 指导教师: 设计日期:2012-5-25

教师评语: 等级 优良中及格差项目 专业设计目的 设计基本要求 算法分析 源程序代码 源程序代码测试 设计总结 成绩评定: 指导教师签名: 日期:2012 年月日

课程设计题目医院信息管理程序 作者姓名: 同组成员: 摘要利用结构体存储每个病人的信息和每种药品的信息,并使用链表存储全部病人的信息;能完成对医院内所有病人信息的注册、查询、删除和修改等操作,同时又能对药房内库存的药品进行查询;可以将链表中的病人信息保存在文件中,并且可以对文件中的病人信息进行读取与显示 1.专业设计目的 1、掌握链表的操作,包括链表节点的创建、释放还有链表的遍历 2、掌握对二进制文件的创建、增添等基本操作。 3、熟悉C语言函数的使用方法,学会模块化处理问题以及多个源文件的处理方式 2.设计基本要求( 1、使用结构体来存储病人的信息,结构体中包括病的id号码、姓名、病历以及消费信息,并用链表将所有病人信息整合。 2、用文件来存储链表的信息以便下次再使用该程序时载入病人信息 3、能够实现病人信息的注册、病人信息的查询、病人消费统计、保存链表信息、载入链表信息、查询库存等几项功能。 4、要求用四个源文件main.c、link.c、find.c、save_load.c 5、系统完成后应实现类似下面所示界面

相关文档
最新文档