C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx

上传人:b****4 文档编号:24640665 上传时间:2023-05-29 格式:DOCX 页数:61 大小:445.62KB
下载 相关 举报
C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx_第1页
第1页 / 共61页
C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx_第2页
第2页 / 共61页
C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx_第3页
第3页 / 共61页
C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx_第4页
第4页 / 共61页
C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx

《C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx》由会员分享,可在线阅读,更多相关《C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx(61页珍藏版)》请在冰豆网上搜索。

C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx

C语言经典小程序和C语言编写的小游戏带注释自动保存的

1、写一个定时关机的小程序,可以立即关闭计算机,也可以一段时间后关闭计算机。

#include

#include

#include

#include

intmain()

{

charcmd[20]="shutdown-s-t";//远程关机,系统在一定时间之后关机

chart[5]="0";//将输入的时间初始化为0

intc;

system("titleC语言关机程序");//设置cmd窗口标题

system("modeconcols=48lines=25");//窗口宽度高度

system("colorf0");//可以写成red调出颜色组,这里f0是调亮白色

system("date/T");//输出系统当前日期

system("TIME/T");//输出系统当前时间

printf("-----------C语言关机程序-----------\n");

printf("1.实现10分钟内的定时关闭计算机\n");

printf("2.立即关闭计算机\n");

printf("3.注销计算机\n");

printf("0.退出系统\n");

printf("-------------------------------------\n");

scanf("%d",&c);

//对输入的数值进行判断循环

switch(c)

{

case1:

printf("您想在多少秒后自动关闭计算机?

(0~600)\n");

scanf("%s",t);

system(strcat(cmd,t));//将输入的时间连接上已经调用的命令

break;

case2:

system("shutdown-p");//立即关闭计算机

break;

case3:

system("shutdown-l");//注销计算机

break;

case0:

system("pause");

break;

default:

printf("Error!

\n");

}

system("pause");

return0;

}

 

2、这是一个简单的猜拳游戏(剪刀、石头、步),让你与电脑对决。

你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负。

#include

#include

#include

intmain()

{

chargamer;//玩家出拳

intcomputer;//电脑出拳

intresult;//比赛结果

//为了避免玩一次游戏就退出程序,可以将代码放在循环中

while

(1)

{

printf("这是一个猜拳的小游戏,请输入你要出的拳头:

\n");

printf("A:

剪刀\nB:

石头\nC:

布\nD:

不玩了\n");

scanf("%c%*c",&gamer);

switch(gamer)

{

case65:

case97:

//A||a

gamer=4;break;

case66:

case98:

//B||b

gamer=7;break;

case67:

case99:

//C||c

gamer=10;break;

case68:

case100:

//D||d

return0;

default:

printf("你的选择为%c选择错误,退出...\n",gamer);

getchar();

system("cls");//清屏

return0;

break;

}

srand((unsigned)time(NULL));//随机数种子

computer=rand()%3;//产生随机数并取余,得到电脑出拳

result=(int)gamer+computer;//gamer为char类型,数学运算时要强制转换成int类型

printf("电脑出了");

switch(computer)

{

case0:

printf("剪刀\n");break;//41

case1:

printf("石头\n");break;//72

case2:

printf("布\n");break;//103

}

printf("你出了");

switch(gamer)

{

case4:

printf("剪刀\n");break;

case7:

printf("石头\n");break;

case10:

printf("布\n");break;

}

if(result==6||result==7||result==11)printf("你赢了!

");

elseif(result==5||result==9||result==10)printf("电脑赢了!

");

elseprintf("平手");

system("pause>nul&&cls");//暂停并清屏

}

return0;

}

 

3、实现统计文件中的字符数、单词数以及总行数。

(空白字符(空格符、tab缩进符、换行符)不计入字符总数)

#include

#include

int*getCharNum(char*filename,int*totalNum);

intmain()

{

charfilename[30];

//totalNum[0]:

总行数totalNum[1]:

总字符数totalNum[2]:

总单词数

inttotalNum[3]={0,0,0};

printf("请输入需要统计的文件地址及文件名:

\n");

scanf("%s",filename);

if(getCharNum(filename,totalNum))

{

printf("统计得:

%d行,%d个单词,%d个字符(不含空白字符)\n",totalNum[0],totalNum[2],totalNum[1]);

}

else

{

printf("统计失败!

!

\n");

}

return0;

}

/**

*统计文件的字符数、单词数、行数

*@paramfilename文件名

*@paramtotalNum文件统计数据

*@return成功返回统计数据,否则返回NULL

**/

int*getCharNum(char*filename,int*totalNum)

{

FILE*fp;//指向文件的指针

charbuffer[1003];//缓冲区,存储读取到的每行的内容

intbufferLen;//缓冲区中实际存储的内容的长度

inti;//当前读到缓冲区的第i个字符

charc;//读取到的字符

intisLastBlank=0;//上个字符是否是空格

intcharNum=0;//当前行的字符数

intwordNum=0;//当前行的单词数

if((fp=fopen(filename,"rb"))==NULL)//为输入打开一个二进制文件

{

perror(filename);//perror是系统错误输出函数

returnNULL;

}

printf("行数\t\t单词数\t\t字符数(不含空白字符)\n");

//每次读取一行数据,保存到buffer,每行最多只能有1000个字符

while(fgets(buffer,1003,fp)!

=NULL)

{

bufferLen=strlen(buffer);

//遍历缓冲区的内容

for(i=0;i

{

c=buffer[i];

if(c==''||c=='\t')

{//遇到空格

!

isLastBlank&&wordNum++;//如果上个字符不是空格,那么单词数加1

isLastBlank=1;

}

elseif(c!

='\n'&&c!

='\r')

{//忽略换行符

charNum++;//如果既不是换行符也不是空格,字符数加1

isLastBlank=0;

}

}

!

isLastBlank&&wordNum++;//如果最后一个字符不是空格,那么单词数加1

isLastBlank=1;//每次换行重置为1

//一行结束,计算总字符数、总单词数、总行数

totalNum[0]++;//总行数

totalNum[1]+=charNum;//总字符数

totalNum[2]+=wordNum;//总单词数

printf("第%-3d行,共%-5d个单词,共%-6d个字符\n",totalNum[0],wordNum,charNum);

//置零,重新统计下一行

charNum=0;

wordNum=0;

system("pause");

}

returntotalNum;

}

 

4、实现文件复制代码(包括文本文件和二进制文件)

#include

#include

intcopyFile(char*fileRead,char*fileWrite);

intmain()

{

charfileRead[100];//要复制的文件名

charfileWrite[100];//复制后的文件名

//获取用户输入

printf("要复制的文件:

");

scanf("%s",fileRead);

printf("将文件复制到:

");

scanf("%s",fileWrite);

//进行复制操作

if(copyFile(fileRead,fileWrite))

{

printf("恭喜你,文件复制成功!

\n");

}

else

{

printf("文件复制失败!

\n");

}

return0;

}

/**

*文件复制函数

*@paramfileRead要复制的文件

*@paramfileWrite复制后文件的保存路径

*@returnint1:

复制成功;2:

复制失败

**/

intcopyFile(char*fileRead,char*fileWrite)

{

FILE*fpRead;//指向要复制的文件的指针

FILE*fpWrite;//指向复制后的文件的指针

intbufferLen=1024*10;//缓冲区长度

char*buffer=(char*)malloc(bufferLen);//开辟10K的缓存

intreadCount;//实际读取的字节数

if((fpRead=fopen(fileRead,"rb"))==NULL)//为输入打开一个二进制文件

{

perror(fileRead);//perror是系统错误输出函数

exit

(1);

}

if((fpWrite=fopen(fileWrite,"wb"))==NULL)//为输出打开一个二进制文件

{

perror(fileWrite);//perror是系统错误输出函数

exit

(1);

}

//不断从fileRead读取内容,放在缓冲区

//再将缓冲区的内容写入fileWrite

while((readCount=fread(buffer,1,bufferLen,fpRead))>0)//fread:

从文件在中读数据

{

fwrite(buffer,1,readCount,fpWrite);//fwrite:

在文件里写数据

}

free(buffer);//释放节点

fclose(fpRead);//关闭文件

fclose(fpWrite);//关闭文件

return1;

}

 

5、实现将一个正整数分解质因数,如:

输入90,打印出90=2*3*3*5。

#include

intmain()

{

intn;//用户输入的整数

inti;//循环标志

printf("输入一个整数:

");

scanf("%d",&n);

printf("%d=",n);

//n>=2才执行下面的循环

for(i=2;i<=n;i++)

{

while(n!

=i)

{

if(n%i==0)//算出因子

{

printf("%d*",i);//输出分解的因式

n=n/i;

}

else

break;

}

}

printf("%d\n",n);//输出分解的因式的最后一个数字

return0;

}

 

6、向文件写入内容并读取显示。

程序功能实现将学生信息(姓名、年龄、学号和平均分)写入文件,然后读取显示出来。

要求:

从控制台输入学生信息;

可以输入任意数目的学生信息;

文件每行存储一条学生信息,姓名、年龄、学号、平均分以tab(\t)为分隔。

#include

#include

#include

#defineFILE_PATH"D:

/demo.txt"//文件路径

intmain()

{

charname[20];//姓名

intage;//年龄

intstudNo;//学号

intnum,i;

floatscore;//平均分

FILE*fp;//文件指针

//判断文件是否能够正确创建/打开

if((fp=fopen(FILE_PATH,"wt+"))==NULL)//wt+:

为读写打开或着建立一个文本文件

{

perror(FILE_PATH);

exit

(1);

}

printf("请输入需要写入的学生总数:

");

scanf("%d",&num);

//从控制台输入学生信息并写入文件

printf("\n请输入姓名、年龄、学号和平均分(以空格相隔):

\n");

for(i=0;i

{

scanf("%s%d%d%f",name,&age,&studNo,&score);

fprintf(fp,"%s\t%d\t%d\t%.2f\n",name,age,studNo,score);

}

//刷新缓冲区,将缓冲区的内容写入文件

fflush(fp);

//重置文件内部位置指针,让位置指针指向文件开头

rewind(fp);

//从文件中读取学生信息

printf("\n读取文件内容:

\n");

for(i=0;i

{

fscanf(fp,"%s\t%d\t%d\t%f",name,&age,&studNo,&score);

printf("%s\t%d\t%d\t%f\n",name,age,studNo,score);

}

fclose(fp);//关闭文件

return0;

}

 

7、猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。

问第一天共摘了多少个桃子?

#include

#include

intmain()

{

intday,x1,x2;

day=9;//总天数减去1

x2=1;//初始第10天吃了1个桃

printf("第10天共有%d个桃子。

\n",x2);

while(day>0)

{

x1=(x2+1)*2;//第一天的桃子数是第2天桃子数加1后的2倍

x2=x1;

printf("第%d天共有%d个桃子。

\n",day,x2);

day--;//每循环一次,总天数减去1

}

printf("\n小猴第1天共摘了%d个桃子。

\n",x1);

return0;

}

 

8、从键盘输入年号和月号,求这一年的这一月共有多少天。

#include

#include

voidmain()

{

intyear,month,days;

printf("输入年份(1990~2050):

");

scanf("%d",&year);

printf("输入月份(1~12):

");

scanf("%d",&month);

//对输入的月份进行判断

switch(month)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

days=31;break;

case4:

case6:

case9:

case11:

days=30;break;

//判断是否为闰年或平年

case2:

{

if(year%4==0&&year%100!

=0||year%400==0)

{

days=29;

printf("\n%d年是闰年!

\n",year);

}

else

{

days=28;

printf("\n%d年是平年!

\n,year")

}

break;

}

//处理因误输入的错误月份

default:

{

printf("月份输入错误!

\n");

exit

(1);

break;

}

}

printf("\n%d年的%d月份有%d天!

\n",year,month,days);

}

 

9、程序功能:

将从字符数组中删除特定的字符,要求字符数组和要删除的字符都是手动输入。

#include

intmain()

{

chars[80],c;

intj,k;

printf("请输入任意字符串:

");

gets(s);

printf("\n请输入需要删除的字符:

");

c=getchar();

//对字符串进行扫描

for(j=k=0;s[j]!

='\0';j++)

{

//找到输入的字符,将剩余的字符往前推移一位

if(s[j]!

=c)

s[k++]=s[j];

}

//将字符串的尾填0

s[k]='\0';

printf("\n删除字符%c后的字符串为:

%s\n",c,s);

return0;

}

 

10、输入一个字符串,判断其是否为回文。

所谓回文字符串,是指从左到右读和从右到左读完全相同的字符串。

#include

#include

voidmain()

{

chars[1024];//存放输入的字符串

inti,j,n;

printf("请输入任意字符串:

");

gets(s);

n=strlen(s);//计算字符串长度

//从左至右,从右至左进行扫描判断

for(i=0,j=n-1;i

//判断是否为回文串

if(s[i]!

=s[j])

break;

if(i>=j)

printf("\n%s是回文串!

\n",s);

else

printf("\n%s不是回文串!

\n",s);

}

 

11、打印杨辉三角,用n控制输出行数。

(解法一:

使用数组)

#include

#defineN15

voidmain()

{

inti,j,k,n=0,a[N][N];//定义二维数组a[15][15]

while(n<=0||n>=13)//控制打印的行数不要太大,过大会造成显示不规范

{

printf("\n请输入要打印的行数(小于13):

");

scanf("%d",&n);

}

printf("\n%d行杨辉三角如下:

\n",n);

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

a[i][1]=a[i][i]=1;//两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数

for(i=3;i<=n;i++)

for(j=2;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];//除两边的数外都等于上两顶数之和

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

{

for(k=1;k<=n-i;k++)

printf("");//这一行主要是在输出数之前打上空格占位,让输出的数更美观

for(j=1;j<=i;j++)//j<=i的原因是不输出其它的数,只输出我们想要的数

printf("%6d",a[i][j]);

printf("\n");//当一行输出完以后换行继续下一行的输出

}

printf("\n\n");

}

(解法二:

使用阶乘)

#include

/*

*定义阶乘,在这里可能会想。

为什么要用float,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1