给我一个较复杂的C语言程序

给我一个较复杂的C语言程序,第1张

好,给你一个有趣的程序,下面程序的作用是,输入一个4位数,之后将这个数分解成4个数字,并将这4个数字组合成一个最大数和一个最小数,并将两者相减,结果作为新的4位数,重复前面的步骤,最后的结果是什么?自己测试一下。

#include <stdio.h>

void mysort(int *a, int size)

{

int i, j, k, t

for (i = 0i <size - 1++i)

{

k = i

for (j = ij <size++j)

{

if (a[k] >a[j])

k = j

}

if (k != i)

{

t = a[i]

a[i] = a[k]

a[k] = t

}

}

}

void main()

{

int num, a[4], max, min

do

{

scanf("%d", &num)/* 输入最初的4位数 */

} while (num <1000 || num >9999)

while (num)

{

/* 将4位数分解成4个独立的数字,并保存在a数组中 */

a[0] = num % 10

num /= 10

a[1] = num % 10

num /= 10

a[2] = num % 10

num /= 10

a[3] = num

/* 排序数组元素 */

mysort(a, 4)

/* 从数组的4个元素中产生最大数字和最小数字 */

max = a[3] * 1000 + a[2] * 100 + a[1] * 10 + a[0]

min = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3]

/* 产生新的4位数 */

num = max - min

printf("%d\n", num)

if (num == 6174)

break

}

printf("The magic number is: %d\n", num)

}

一个“歼灭敌机”的小游戏,DEVc++通过编译:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <windows.h>

#include <time.h>

#define zlx 10  //增量坐标(x)让游戏框不靠边

#define zly 3   //增量坐标(y)让游戏框不靠边

#define W 26  //游戏框的宽度

#define H 24  //游戏框的高度

int jiem[22][22]={0}, wj=10  //界面数组, 我机位置(初值为10)

int speed=4,density=30, score=0,death=0//敌机速度, 敌机密度, 玩家成绩,死亡次数

int m=0,n=0 // m,n是控制敌机的变量

void gtxy (int x, int y)  //控制光标位置的函数

{ COORD pos

pos.X = x  pos.Y = y

SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos )

}

void Color(int a)  //设定颜色的函数(a应为1-15)

{ SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE), a )}

void yinc(int x=1,int y=0)   //隐藏光标的函数

{ CONSOLE_CURSOR_INFO  gb={x,y}   //y设为0即隐藏

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &gb)

}

void csh( )  //初始化函数

{ int i

Color(7)

gtxy(zlx,zly)printf("╔")  gtxy(zlx+W-2,zly)printf("╗")  //左上角和右上角的框角

gtxy(zlx,zly+H-1)printf("╚")gtxy(zlx+W-2,zly+H-1)printf("╝")//下边两框角

for(i=2i<W-2i+=2) {gtxy(zlx+i,zly)  printf("═")}      //打印上横框

for(i=2i<W-2i+=2) {gtxy(zlx+i,zly+H-1)printf("═")}  //打印下横框

for(i=1i<H-1i++) { gtxy(zlx,zly+i) printf("║")}       //打印左竖框

for(i=1i<H-1i++) {gtxy(zlx+W-2,zly+i)printf("║")}  //打印右竖框

Color(14)gtxy(19,2)printf("歼灭敌机")Color(10)

gtxy(37,5)printf("设置:Esc ")

gtxy(37,7)printf("发射:↑ ")

gtxy(37,9)printf("控制:← → ")

gtxy(37,11)printf("得分:%d",score)

gtxy(37,13)printf("死亡:%d",death)

yinc(1,0)

}

void qcjm( )  //清除界面函数

{int i,j

for(i=0i<H-2i++)

for(j=0j<W-4j++){gtxy(zlx+2+j,zly+1+i)printf(" ")}

}

void feiji( )  //飞机移动函数

{int i,j

for(i=21i>=0i--)  //从底行往上是为了避免敌机直接冲出数组

  for(j=0j<22j++)

     {if(i==21&&jiem[i][j]==3) jiem[i][j]=0  //底行赋值0 以免越界

       if(jiem[i][j]==3) jiem[i][j]=0, jiem[i+1][j]=3

     }

if(jiem[20][wj]==3&&jiem[21][wj]==1) death++

}

void zidan( )  //子d移动函数

{ int i,j

for(i=0i<22i++)

  for(j=0j<22j++)

     {if(i==0&&jiem[i][j]==2) jiem[i][j]=0

     if(jiem[i][j]==2) { if(jiem[i-1][j]==3) score+=100,printf("\7")

                                  jiem[i][j]=0,jiem[i-1][j]=2}

     }

}

void print(  )  //输出界面函数

{int i,j

qcjm( )

for(i=0i<22i++)

for(j=0j<22j++)

{ gtxy(12+j,4+i)

if(jiem[i][j]==3) {Color(13)printf("□")}

if(jiem[i][j]==2) {Color(10)printf(".")}

if(jiem[i][j]==1) {Color(10)printf("■")}

}

gtxy(37,11)Color(10)printf("得分:%d",score)

gtxy(37,13)printf("死亡:%d",death)

}

void setting( )  //游戏设置函数

{ qcjm( )

gtxy(12,4)printf("选择敌机速度:")

gtxy(12,5)printf("  1.快 2.中 3.慢>>")

switch(getche( ))

    {case '1': speed=2break

     case '2': speed=4break

     case '3': speed=5break

     default: gtxy(12,6)printf("  错误!默认值")

   }

gtxy(12,7)printf("选择敌机密度:")

gtxy(12,8)printf("  1.大 2.中 3.小>>")

switch(getche( ))

     {case '1': density=20break

      case '2': density=30 break

      case '3': density=40break

       default: gtxy(12,9)printf("  错误!默认值")

     }

for(int i=0i<22i++)

 for(int j=0j<22j++) jiem[i][j]=0

jiem[21][wj=10]=1jiem[0][5]=3

gtxy(12,10)printf("  按任意键保存...")

getch( )

qcjm( )

}

void run( )  //游戏运行函数

{ jiem[21][wj]=1  //值为1代表我机(2则为子d)

jiem[0][5]=3   //值为3代表敌机

SetConsoleTitle("歼灭敌机") //设置窗口标题

while(1)

  { if (kbhit( ))  //如有键按下,控制我机左右移动、发射或进行设定

       {int key

        if((key=getch( ))==224) key=getch( )

        switch(key)

           {case 75: if(wj>0) jiem[21][wj]=0,jiem[21][--wj]=1break

            case 77: if(wj<20) jiem[21][wj]=0,jiem[21][++wj]=1 break

            case 72: jiem[20][wj]=2break

           case 27: setting( )

         }

      }

   if(++n%density==0)  //控制产生敌机的速度

      { n=0srand((unsigned)time(NULL))

        jiem[0][rand( )%20+1]=3

      }

   if(++m%speed==0) { feiji( )m=0}  //控制敌机移动速度(相对子d而言)

   zidan( )  //子d移动

   print( )  //输出界面

Sleep(120)  //延时120毫秒

  }

}

int main( )

{csh( )

 run( )

 return 0

}

#include "stdio.h"

#include "ctype.h"

#include "malloc.h"

#include "stdlib.h"

#define M 100

#define ZERO 0

#define SUCC 1

#define DEFT 0

#define MIN -1

#define MAX 2001

typedef int valuetype

typedef struct Bnode

{

valuetype data

int layer

struct Bnode *Lson,*Rson

}Bnode,*Bptr

void writeT(Bptr root)

{

int first=0,last=1

Bptr p,q[M]

if(root->data==MIN)p=root->Rson

else p=root->Lson

if(p==NULL)

{ printf(" 当前二叉树为空,没有结点。\n")return}

printf(" 当前二叉树的结点为:\n")

printf(" 层号 当前结点 左儿子右儿子\n")

p->layer=1

q[0]=p

while(first!=last)

{

p=q[first++]

printf("%6d%10d ",p->layer,p->data)

if(p->Lson==NULL)printf("%12c",'\040')

else

{

printf("%12d",p->Lson->data)

p->Lson->layer=p->layer+1

q[last++]=p->Lson

}

if(p->Rson!=NULL)

{

printf("%12d",p->Rson->data)

p->Rson->layer=p->layer+1

q[last++]=p->Rson

}

printf("\n")

}

}

void inorder(Bptr p)

{

if(!p)return

inorder(p->Lson)

printf("%5d",p->data)

inorder(p->Rson)

}

void sortT(Bptr root)

{

if(root->data==MIN) inorder(root->Rson)

else inorder(root->Rson)

printf("\n")

}

Bptr search (valuetype x,Bptr p)

{

while (p!=NULL)

{

if(x==p->data)return p

if(x<p->data) p=p->Lson

else p=p->Rson

}

return NULL

}

void searchT(Bptr root)

{

int x

printf("请输入要查找的结点值x>0,x=")

scanf("%d",&x)

if(search(x,root)==NULL)printf("数中没有%d!\n",x)

else printf("%d 已经找到!\n",x)

}

void insert(valuetype x,Bptr &root)

{

Bptr f,p

f=NULLp=root

while(p!=NULL)

{

if(x<p->data)f=p,p=p->Lson

else f=p,p=p->Rson

}

p=new Bnode

p->data=xp->Lson=p->Rson=NULL

if(f==NULL)root=p

else

if(x<=f->data)f->Lson=p

else f->Rson=p

}

void insertT(Bptr p)

{

int x

printf("请输入要插入的结点的值x>0,x=")

scanf("%d",&x)

insert(x,p)

printf("%d已经被插入了\n",x)

}

Bptr creatST()

{

Bptr root valuetype x

root =NULL

printf(" 构造初始检索树,请输入元素序列,元素个数不得超过%d,要求:\n",M)

printf("序列以%d或%d开始,以0结束,元素值均为小于%d的正整数\n",MIN,MAX,MAX)

scanf("%d",&x)

while(x!=ZERO)

{

insert(x,root)

scanf("%d",&x)

}

return root

}

int deleteST(valuetype x,Bptr root)

{

Bptr f,p,s,r

for (p=root)

{

if(p==NULL)return DEFT

if (x==p->data)break

if(x<p->data)

{

f=pp=p->Rson

}

else

{

f=pp=p->Rson

}

}

if (p->Rson==NULL)

{

if(p==f->Lson)

f->Lson=p->Rson

else

f->Rson=p->Lson

free (p)

return SUCC

}

s=p->Lson

if (s->Rson==NULL)

{

p->data=s->data

p->Lson=s->Lson

free (s)

return SUCC

}

r=s->Rson

while (r->Rson!=NULL)

{

s=r

r=r->Rson

}

p->data=r->data

s->Rson=r->Lson

free (r)

return SUCC

}

void deleteT(Bptr root)

{

int x

printf("请输入要删除的结点值x>0,x=")

scanf("%d",&x)

if(deleteST(x,root))

printf("%d 已经被删除!\n",x)

else

printf(" %d不在树中,无法删除!\n",x)

}

char getalpha()

{

char c

while(1)

{

c=getchar()

if(isalpha(c))

return c

}

}

void treeT(Bptr root)

{

char c

printf(" 对检索树可以进行下列 *** 作:\n")

while (1)

{

printf("请输入 *** 作码:查找F/f 插入I/i 删除D/d 显示P/p 结点排序S/s 终止E/e\nC=")

c=getalpha()

switch(c)

{

case 'f':

case 'F': searchT(root)break

case 'p':

case 'P': writeT(root)break

case 'i':

case 'I': insertT(root)break

case 'd':

case 'D': deleteT(root)break

case 's':

case 'S': sortT(root)break

case 'e':

case 'E': writeT(root)return

default:printf("输入的 *** 作码不正确,请重新输入!\n")

continue

}

}

}

void main()

{

Bptr root

root=creatST()

treeT(root)

printf("程序结束,再见!\n")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11844618.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存