C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx
- 文档编号:11205085
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:61
- 大小:445.62KB
C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx
《C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx》由会员分享,可在线阅读,更多相关《C语言经典小程序和C语言编写的小游戏带注释 自动保存的.docx(61页珍藏版)》请在冰点文库上搜索。
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,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言经典小程序和C语言编写的小游戏带注释 自动保存的 语言 经典 程序 编写 小游戏 注释 自动 保存