c语言编程有趣的小程序(c语言编程有趣的小程序叫什么)
c语言能写出什么样有意思的小程序?
C语言是一门通用计算机编程语言,应用广泛。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
程序源代码:
main()
{int i,j,k;printf(\n);for(i=1;i5;i++)/*以下为三重循环*/ for(j=1;j5;j++)
for (k=1;k5;k++),{f (i!=ki!=jj!=k) /*确保i、j、k三位互不相同*/ printf(%d,%d,%d\n,i,j,k); }}
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf(%ld,i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i=100000)
bonus=i*0.1;
else if(i=200000)
bonus=bonus1+(i-100000)*0.075;
else if(i=400000)
bonus=bonus2+(i-200000)*0.05;
else if(i=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
printf(bonus=%d,bonus);
}
6.题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果。
程序源代码:
#include math.h
main()
{
long int i,x,y,z;
for (i=1;i100000;i++)
{ x=sqrt(i+100); /*x为加上100后开方后的结果*/
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
if(x*x==i+100y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
printf(\n%ld\n,i);
}
}
7.题目:输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
程序源代码:
main()
{
int day,month,year,sum,leap;
printf(\nplease input year,month,day\n);
scanf(%d,%d,%d,year,month,day);
switch(month)/*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
defaultrintf(data error);break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0year%100!=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1month2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf(It is the %dth day.,sum); }
8.题目:输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。
程序源代码:
main()
{
int x,y,z,t;
scanf(%d%d%d,x,y,z);
if (xy)
/*交换x,y的值*/
if(xz)
/*交换x,z的值*/
if(yz)
/*交换z,y的值*/
printf(small to big: %d %d %d\n,x,y,z);
}
9.题目:用*号输出字母C的图案。
程序分析:可先用|*|号在纸上写出字母C,再分行输出。
程序源代码:
#include stdio.h
main()
{
printf(Hello C-world!\n);
printf( ****\n);
printf( *\n);
printf( * \n);
printf( ****\n);
}
10.题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
程序分析:字符共有256个。不同字符,图形不一样。
程序源代码:
#include stdio.h
main()
{
char a=176,b=219;
printf(%c%c%c%c%c\n,b,a,a,a,b);
printf(%c%c%c%c%c\n,a,b,a,b,a);
printf(%c%c%c%c%c\n,a,a,b,a,a);
printf(%c%c%c%c%c\n,a,b,a,b,a);
printf(%c%c%c%c%c\n,b,a,a,a,b); }
11.题目:输出9*9口诀。
程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
程序源代码:
#include stdio.h
main()
{
int i,j,result;
printf(\n);
for (i=1;i10;i++)
{ for(j=1;j10;j++)
{
result=i*j;
printf(%d*%d=%-3d,i,j,result);/*-3d表示左对齐,占3位*/
}
printf(\n);/*每一行后换行*/
}
}
12.题目:要求输出国际象棋棋盘。
程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
程序源代码:
#include stdio.h
main()
{
int i,j;
for(i=0;i8;i++)
{
for(j=0;j8;j++)
if((i+j)%2==0)
printf(%c%c,219,219);
else
printf( );
printf(\n);
}
}
13.题目:打印楼梯,同时在楼梯上方打印两个笑脸。
程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
程序源代码:
#include stdio.h
main()
{
int i,j;
printf(\n);/*输出两个笑脸*/
for(i=1;i11;i++)
{
for(j=1;j=i;j++)
printf(%c%c,219,219);
printf(\n);
}
有什么好玩的C语言小程序
一个“歼灭敌机”的小游戏,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=2;iW-2;i+=2) {gtxy(zlx+i,zly);? printf("═"); }? ????//打印上横框
for(i=2;iW-2;i+=2) {gtxy(zlx+i,zly+H-1); printf("═"); } ?//打印下横框
for(i=1;iH-1;i++) { gtxy(zlx,zly+i); ?printf("║"); }? ?????//打印左竖框
for(i=1;iH-1;i++) {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=0;iH-2;i++)
for(j=0;jW-4;j++){gtxy(zlx+2+j,zly+1+i);printf(" ");}
}
void feiji( ) ?//飞机移动函数
{int i,j;
for(i=21;i=0;i--)? //从底行往上是为了避免敌机直接冲出数组
? for(j=0;j22;j++)
? ? ?{if(i==21jiem[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]==3jiem[21][wj]==1) death++;
}
void zidan( ) ?//子弹移动函数
{ int i,j;
for(i=0;i22;i++)
??for(j=0;j22;j++)
? ? ?{if(i==0jiem[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=0;i22;i++)
for(j=0;j22;j++)
{ 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=2; break;
? ? ?case '2': speed=4; break;
? ? ?case '3': speed=5; break;
? ? ?default: gtxy(12,6);printf("? 错误!默认值");
? ?}
gtxy(12,7);printf("选择敌机密度:");
gtxy(12,8);printf("? 1.大 2.中 3.小");
switch(getche( ))
? ? ?{case '1': density=20; break;
case '2': density=30;?break;
case '3': density=40; break;
? ?? default: gtxy(12,9);printf("? 错误!默认值");
? ???}
for(int i=0;i22;i++)
?for(int j=0;j22;j++)jiem[i][j]=0;
jiem[21][wj=10]=1; jiem[0][5]=3;
gtxy(12,10);printf("? 按任意键保存...");
getch( );
qcjm( );
}
void run( ) ?//游戏运行函数
{ jiem[21][wj]=1;? //值为1代表我机(2则为子弹)
jiem[0][5]=3;? ?//值为3代表敌机
SetConsoleTitle("歼灭敌机"); ?//设置窗口标题
while(1)
{?if (kbhit( ))? //如有键按下,控制我机左右移动、发射或进行设定
? ?? {int key;
? ? ? if((key=getch( ))==224) key=getch( );
? ? ? switch(key)
? ? ??{ case 75: if(wj0) jiem[21][wj]=0,jiem[21][--wj]=1; break;
? ? ? ? case 77: if(wj20)?jiem[21][wj]=0,jiem[21][++wj]=1;?break;
? ? ? ? case 72: jiem[20][wj]=2; break;
? ? ?? case 27: setting( );
? ? ??}
?? }
?? if(++n%density==0)? //控制产生敌机的速度
? ? ?{ n=0;srand((unsigned)time(NULL));
? ? ? ?jiem[0][rand( )%20+1]=3;
? ? ?}
? ??if(++m%speed==0) {feiji( ); m=0;} ?//控制敌机移动速度(相对子弹而言)
? ? zidan( );
?? print( );
Sleep(120); ?//延时120毫秒
? }
}
int main( )
{csh( );
?run( );
?return 0;
}
新手要方便写代码,可以收藏下面几个自编函数:
SetConsoleTitle("俄罗斯方块");? //设置窗口左上角标题栏处出现"俄罗斯方块"5个字
srand( (unsigned) time(NULL) ); ?//初始化随机数发生器
n= rand(? ) % 20; ??//产生随机数0-19中的一个. 如 rand(? )%5 就产生0-4中的一个数
SetConsoleTitle(? )函数在windows.h里,?srand(? )函数与rand(? )函数要配合用,
就是同时要用,在stdlib.h里。如果 rand( )%10+1 就产生1-10之中的一个数。
Sleep(300); ? //延时300毫秒(就是程序暂停300毫秒后继续运行)
system("cls"); ? //清屏(把窗口里的内容全部清除,光标定于(0,0)位置处)
这两个函数都在windows.h里。开头4个自编函数 编写如下:
void gtxy (int x, int y) ?//控制光标位置的函数
{ COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition ( GetStdHandle (STD_OUTPUT_HANDLE), pos );
}
void Color (int a) ?//设定颜色的函数
{ SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ),a ); }
void yinc (int x,int y) ? //隐藏光标的函数
{ CONSOLE_CURSOR_INFO ? gb={ x , y }; ? //gb代表光标
SetConsoleCursorInfo ( GetStdHandle(STD_OUTPUT_HANDLE),? gb );
}
void kou(int w,int h)? //设置窗口大小的函数
{HANDLE? hl=GetStdHandle ( STD_OUTPUT_HANDLE ) ;
COORD? size={ w , h };
SetConsoleScreenBufferSize( hl , size );
SMALL_RECT? rc={ 0, 0, w, h };
SetConsoleWindowInfo( hl, 1, rc );
}
最后这个函数,参数w是宽h是高。里边5行中第一行定义了句柄型变量hl,并给它赋值。
第二行定义了坐标型结构体变量size,它的取值决定了缓冲区的大小。第三行就是使用
size的值设置好缓冲区大小。第四行定义了变量rc,它的值决定当前窗口显示的位置与
大小(不得超过缓冲区的大小)。前两个0,0是从缓冲区左上角0列0行位置处开始,后两
个参数可以小于w和h.比如?rc={0,0,w-10,h-5}; 最后一行使用rc的值设置好窗口,中间
那个参数要为" 1 "或写“ true ”才有效。
用C语言编写的小游戏代码是什么?
“猜数字小游戏”,每个数字后按空格,最后按回车确认
#includestdio.h
#includestdlib.h
#includetime.h
int a[4],b[4];
int count=0;? //计算猜测次数
void csh( );? //初始化
void start( );? //开始游戏
int main( )
{ csh( );
start( );
}
void csh( )? //初始化
{ printf("\n\n???????? 猜? 数? 字? 小? 游? 戏\n\n");
printf(“? ??猜四个数字,如数字与顺序都正确记为A,数字正确位置不对记为B.\n”);
}
void start( )? //开始游戏
{int m,n;? //m是完全猜对的个数,n是顺序不对的个数
while(1)
{srand((unsigned)time(NULL));? //初始化随机数发生器srand( )
while(1) { for(int i=0;i4;i++) a[i]=rand( )%10; ?//rand( )函数每次随机产生一个0-9的数
if( (a[3]!=a[2]a[3]!=a[1]a[3]!=a[0])
(a[2]!=a[1]a[2]!=a[0])a[1]!=a[0] ) break; }? //4个随机数各自不相等
printf("?? ?请依次输入4个一位整数:\n\n? ?");
while(1)
{for(int i=0;i4;i++) scanf(“%d”,b[i]);
printf("?? ?你输入的是:%d? %d? %d? %d ",b[0],b[1],b[2],b[3]);
m=0;n=0;
for(int i=0;i4;i++)
{for(int j=0;j4;j++)
{ if(b[i]==a[j]i==j)m=m+1; if(b[i]==a[j]i!=j)n=n+1; }
}
count=count+1;
printf("????? %dA? %dB?? 你试了%d次\n? ?",m,n,count);
if(m==4)break;
if(count==8){ count=0; break; }
}
printf("\n");
if(m==4)printf("???? 你猜对了(^-^)! 就是:%d %d %d %d\n",a[0],a[1],a[2],a[3]);
else printf("???? 你输了(T-T)!哈哈!应该是:%d %d %d %d\n",a[0],a[1],a[2],a[3]);
int z;
printf("???? (要继续吗?1或0)\n? ?");
scanf(“%d”,z);
if(z==0) break;
}
}