c语言小游戏Word文件下载.docx
《c语言小游戏Word文件下载.docx》由会员分享,可在线阅读,更多相关《c语言小游戏Word文件下载.docx(48页珍藏版)》请在冰豆网上搜索。
//电脑出拳
intresult;
//比赛结果
//为了避免玩一次游戏就退出程序,可以将代码放在循环中
while
(1){
printf("
这是一个猜拳的小游戏,请输入你要出的拳头:
\n"
);
A:
剪刀\nB:
石头\nC:
布\nD:
不玩了\n"
scanf("
%c%*c"
&
gamer);
switch(gamer){
case65|97:
//A|a
gamer=4;
break;
case66|98:
//B|b
gamer=7;
case67|99:
//C|c
gamer=10;
case68|100:
//D|d
return0;
default:
你的选择为%c选择错误,退出...\n"
gamer);
getchar();
system("
cls"
//清屏
}
srand((unsigned)time(NULL));
//随机数种子
computer=rand()%3;
//产生随机数并取余,得到电脑出拳
result=(int)gamer+computer;
//gamer为char类型,数学运算时要强制转换类型
电脑出了"
switch(computer)
{
case0:
剪刀\n"
break;
//41
case1:
石头\n"
//72
case2:
布\n"
//103
你出了"
switch(gamer)
case4:
case7:
case10:
if(result==6||result==7||result==11)printf("
你赢了!
"
elseif(result==5||result==9||result==10)printf("
电脑赢了!
elseprintf("
平手"
pause>
nul&
//暂停并清屏
}
代码分析
1)首先,我们需要定义3个变量来储存玩家出的拳头(gamer)、电脑出的拳头(computer)和最后的结果(result),然后给出文字提示,让玩家出拳。
接下来接收玩家输入:
scanf("
注意:
由于每次输入以回车结束,缓冲区中除了玩家输入的字母,还有回车符。
回车符要跳过,以免影响下次输入。
Scanf()函数的格式控制字符串个数可以多于参数个数,scanf("
的作用是从缓冲区多输出一个字符(回车符),却不赋给任何变量。
玩家输入结束,使用switch语句判断输入内容,65(A)、97(a)、66(B)、98(b)、67(C)、99(c)、68(D)、100(d)为相应字符的ASCII码。
system("
语句的作用是清屏。
System()函数用来执行dos命令,这里相当于在dos里输入cls命令。
2)玩家出拳结束,电脑开始出拳。
电脑通过产生随机数来出拳:
srand((unsigned)time(NULL));
//为了避免多次运行结果相同,故在前面加入上(需要time.h)
computer=rand()%3;
//获取0~2的随机数
最后通过玩家和电脑出拳的和来判断输赢:
result=(int)gamer+computer;
//...
if(result==6||result==7||result==11)printf("
elseif(result==5||result==9||result==10)printf("
elseprintf("
这是一个很巧妙的算法,玩家和电脑出拳不同,result的值就不同,且不会重复,见下表:
电脑--玩家
石头(4)
剪刀(7)
布(10)
石头(0)
10
剪刀
(1)
11
布
(2)
9
12
3)每次猜拳结束,暂停并清屏,进入下一次猜拳:
//暂停运行和清屏
C语言输出九九乘法表(5种解法)
九九乘法表共9行9列,重点考察for循环的掌握情况。
下面给出了输出完整乘法表、右上、右下、左上、左下乘法表的代码。
【代码一】输出完整的三角形:
intmain(){
inti,j;
//i,j控制行或列
for(i=1;
i<
=9;
i++){
for(j=1;
j<
j++)
//%2d控制宽度为两个字符,且右对齐;
如果改为%-2d则为左对齐
//\t为tab缩进
%d*%d=%2d\t"
i,j,i*j);
运行结果:
1*1=11*2=21*3=31*4=41*5=51*6=61*7=71*8=81*9=9
2*1=22*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18
3*1=33*2=63*3=93*4=123*5=153*6=183*7=213*8=243*9=27
4*1=44*2=84*3=124*4=164*5=204*6=244*7=284*8=324*9=36
5*1=55*2=105*3=155*4=205*5=255*6=305*7=355*8=405*9=45
6*1=66*2=126*3=186*4=246*5=306*6=366*7=426*8=486*9=54
7*1=77*2=147*3=217*4=287*5=357*6=427*7=497*8=567*9=63
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=648*9=72
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
【代码二】输出右上三角形和左上三角形:
i++){
j++){
if(j<
i)
//打印八个空格,去掉空格就是左上三角形
"
else
%d*%d=%2d"
i,j,i*j);
2*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18
3*3=93*4=123*5=153*6=183*7=213*8=243*9=27
4*4=164*5=204*6=244*7=284*8=324*9=36
5*5=255*6=305*7=355*8=405*9=45
6*6=366*7=426*8=486*9=54
7*7=497*8=567*9=63
8*8=648*9=72
9*9=81
去掉八个空格后的运行结果:
2*2=42*3=62*4=82*5=102*6=122*7=142*8=162*9=18
3*3=93*4=123*5=153*6=183*7=213*8=243*9=27
4*4=164*5=204*6=244*7=284*8=324*9=36
5*5=255*6=305*7=355*8=405*9=45
6*6=366*7=426*8=486*9=54
7*7=497*8=567*9=63
8*8=648*9=72
9*9=81
【代码三】输出右下和左下三角形:
intmain(){
inti,j,n;
//将下面的for循环注释掉,就输出左下三角形
for(n=1;
n<
=9-i;
n++)
=i;
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
去掉循环后的运行结果:
1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
C语言文件加密解密软件
文件加密解密是常用的一个功能,可以很好的保护你的隐私内容;
本软件简单的实现了文件加密解密的功能。
为了防止别人随意使用软件,软件本身也有一个密码,必须输入密码才能使用软件。
软件的功能有:
∙加密文件:
打开需要加密的文件,输入密钥,将加密的文件保存;
∙解密文件:
打开需要解密的文件,输入密钥,将解密的文件保存;
∙修改密码:
可以临时修改软件的使用密码,但是软件重启后会被重置;
∙退出程序:
完成工作后退出。
软件使用流程
1)启动软件,输入密码
软件启动后,必须输入密码才能使用(默认密码为123456)。
用户有3次输入密码的机会,连续3次输入错误软件将自动退出。
截图如下:
图1
软件启动时校验密码
2)密码校验正确,显示功能菜单
密码校验完成后,会显示功能菜单,让用户选择要进行的操作,如下图所示:
图2
软件菜单
3)用户选择要进行的操作
①文件加密:
输入1并回车,进入文件加密功能,要求用户输入要加密的文件名、密钥、保存加密内容的文件。
在D盘下创建文件demo.txt,输入一些文本,对该文件进行加密。
加密成功后,用记事本打开加密的文件,看到的全部是乱码,截图如下:
图3
加密成功
如果输入的文件路径错误,或者打开/创建文件失败,将导致加密失败,截图如下:
图4
加密失败
文件名要包含路径,只有文件名表示当前程序所在文件夹下的文件。
②文件解密:
回到主菜单,输入2并回车,进入文件解密功能,同样要求用户输入要解密的文件、密钥和保存解密内容的文件。
输入上次加密的文件,将解密后的文件保存到demo2.txt,解密成功后打开demo2.txt,可以看到被还原的具有可读性的内容。
图5
解密文件成功
③修改密码:
回到主菜单,输入3并回车,进入密码修改功能。
修改密码前要求用户输入原来的密码,并两次输入新密码,保证不会误输入。
图6
修改密码成功
④退出系统:
回到主菜单,输入0退出软件。
对于该软件,我们提供了详细的说明文档,包括软件的使用、设计思路、重要知识点以及常用的编程技巧,并且在代码中做了详细的注释。
软件、说明文档及源码下载地址:
提取密码:
l2aw
C语言写的简单的定时关机程序
写一个定时关机的小程序,可以立即关闭计算机,也可以一段时间后关闭计算机。
这里主要考察system()命令。
string.h>
charcmd[20]="
shutdown-s-t"
;
chart[5]="
0"
intc;
titleC语言关机程序"
//设置cmd窗口标题
modeconcols=48lines=25"
//窗口宽度高度
colorf0"
//可以写成red调出颜色组
date/T"
TIME/T"
-----------C语言关机程序-----------\n"
1.实现10分钟内的定时关闭计算机\n"
2.立即关闭计算机\n"
3.注销计算机\n"
0.退出系统\n"
-------------------------------------\n"
%d"
c);
switch(c){
您想在多少秒后自动关闭计算机?
(0~600)\n"
%s"
t);
system(strcat(cmd,t));
shutdown-p"
case3:
shutdown-l"
Error!
pause"
这个程序虽然实用价值不大,但是可以让我们了解system()函数。
在Windows下,system()函数可以执行dos命令;
在Unix/Linux中,可以执行Shell。
请在Windows下运行上面的程序。
程序中对dos界面的设置和关机功能都是通过dos命令实现的。
你肯定听过内存溢出吧?
通俗地理解就是内存不够。
在运行某些比较吃内存的程序的时候,他们所需要的内存超出了你的电脑能承受的大小,系统会提示内存不足,有时候程序会自动退出。
请用C语言写一个简单的内存溢出的例子。
while
(1){//死循环
malloc
(1);
//分配一个字节长度的内存
不要害怕,编译试试,打开任务管理器,可以看到你的内存占用直飚上去,再等等,程序会出错。
这时候windows的内存管理机制发现了问题,把这个程序给终结了,防止系统奔溃(其他的系统也有相应的措施)。
C语言动态数组的实现:
数组长度随数组元素改变,不会溢出,不会浪费资源
我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。
这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源。
请实现一个简单的动态数组,能够随时改变大小,不会溢出,也不会浪费内存空间。
下面的代码实现了简单的动态数组:
//从控制台获取初始数组大小
intN;
int*a;
inti;
Inputarraylength:
%d\n"
N);
//分配空间
a=(int*)calloc(N,sizeof(int));
//填充数据
for(i=0;
N;
a[i]=i+1;
%-5d"
a[i]);
if((i+1)%10==0){
//释放内存
free(a);
a=NULL;
20
12345678910
11121314151617181920
一道题目,玩转C语言指针数组和指向指针的指针
请先看下面的代码:
char*lines[5]={
COSC1283/1284"
Programming"
Techniques"
is"
greatfun"
};
char*str1=lines[1];
char*str2=*(lines+3);
charc1=*(*(lines+4)+6);
charc2=(*lines+5)[5];
charc3=*lines[0]+2;
str1=%s\n"
str1);
str2=%s\n"
str2);
c1=%c\n"
c1);
c2=%c\n"
c2);
c3=%c\n"
c3);
returnEXIT_SUCCESS;
str1=Programming
str2=is
c1=f
c2=2
c3=E
看下面的分析之前,请先了解指针数组和指向指针的指针的基本概念,如果你不了解,先看下面的文章:
∙指针数组:
∙指向指针的指针:
为了更加直观,把上面的数组改成下面的形式:
char*string0="
char*string1="
char*string2="
char*string3="
char*string4="
char*lines[5];
lines[0]=string0;
lines[1]=string1;
lines[2]=string2;
lines[3]=string3;
lines[4]=string4;
这样,或许会清晰很多,char*lines[5];
定义了一个指针数组,数组的每一个元素都是指向char类型的指针。
最后5行,为数组的每一个元素赋值,都是直接赋给指针。
而lines,是一个指向指针的指针,它的类型为char**,所以*lines是一个指向字符的指针,**lines是一个具体的字符。
这一点很重要,一定要明白。
指针是可以进行运算的,lines为lines[5]数组的首地址,即第0个元素的地址;