C语言经典小程序和C语言编写的小游戏带注释(自动保存的)_第1页
C语言经典小程序和C语言编写的小游戏带注释(自动保存的)_第2页
C语言经典小程序和C语言编写的小游戏带注释(自动保存的)_第3页
C语言经典小程序和C语言编写的小游戏带注释(自动保存的)_第4页
C语言经典小程序和C语言编写的小游戏带注释(自动保存的)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言经典小程序和 C语言编写的小游戏, 带注释 1、写一个定时、写一个定时关机的小程关机的小程序,可以立即关序,可以立即关闭计算机,闭计算机, 也可以一段也可以一段时间后关闭时间后关闭计算机。计算机。 #include #include #include #include int main() char cmd20 = shutdown -s -t ;/远程关机,系统在一定时间之后关机 char t5 = 0;/将输入的时间初始化为0 int c; system(title C语言关机程序); /设置cmd窗口标题 system(mode con cols=48 lines=25); /窗

2、口宽度高度 system(color f0); /可以写成 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, /对输入的数值进行判断循环 switch (c) case 1: printf(您想在多少秒后自动关闭计算机?(0600)n); scanf(

3、%s, t); system(strcat(cmd, t); /将输入的时间连接上已经调用的命令 break; case 2: system(shutdown -p);/立即关闭计算机 break; case 3: system(shutdown -l);/注销计算机 break; case 0: system(pause); break; default: printf(Error!n); system(pause); return 0; 2、这是一个简、这是一个简单的猜拳游单的猜拳游戏(剪刀、石头、步),戏(剪刀、石头、步), 让你与电脑让你与电脑对决。你出的拳头对决。你出的拳头由你自己决

4、由你自己决定,电脑则定,电脑则 随机随机出拳,最后判断胜出拳,最后判断胜负。负。 #include #include #include int main() char gamer; / 玩家出拳 int computer; / 电脑出拳 int result; / 比赛结果 / 为了避免玩一次游戏就退出程序,可以将代码放在循环中 while (1) printf(这是一个猜拳的小游戏,请输入你要出的拳头:n); printf(A:剪刀nB:石头nC:布nD:不玩了n); scanf(%c%*c, switch (gamer) case 65: case 97: / A | a gamer =

5、4; break; case 66: case 98: / B | b gamer = 7; break; case 67: case 99: / C | c gamer = 10; break; case 68: case 100: / D | d return 0; default: printf(你的选择为 %c 选择错误,退出.n, gamer); getchar(); system(cls); / 清屏 return 0; break; srand(unsigned)time(NULL); / 随机数种子 computer = rand() % 3; / 产生随机数并取余,得到电脑出

6、拳 result = (int)gamer + computer; / gamer 为 char 类型,数学运算时要强制转换成 int类型 printf(电脑出了); switch (computer) case 0:printf(剪刀n); break; /4 1 case 1:printf(石头n); break; /7 2 case 2:printf(布n); break; /10 3 printf(你出了); switch (gamer) case 4:printf(剪刀n); break; case 7:printf(石头n); break; case 10:printf(布n);

7、break; if (result = 6 | result = 7 | result = 11) printf(你赢了!); else if (result = 5 | result = 9 | result = 10) printf(电脑赢了!); else printf(平手); system(pausenul / 暂停并清屏 return 0; 3、实现统计文、实现统计文件中的字符件中的字符数、单词数以及数、单词数以及总行数。总行数。 (空白字符(空格符、(空白字符(空格符、tab缩进缩进符、换行符)不计入符、换行符)不计入 字符字符总数)总数) #include #include i

8、nt *getCharNum(char *filename, int *totalNum); int main() char filename30; / totalNum0: 总行数 totalNum1: 总字符数 totalNum2: 总单词数 int totalNum3 = 0, 0, 0 ; printf(请输入需要统计的文件地址及文件名:n ); scanf(%s, filename); if (getCharNum(filename, totalNum) printf(统计得: %d 行, %d 个单词,%d 个字符(不含空白字符)n, totalNum0, totalNum2, t

9、otalNum1); else printf(统计失败!!n); return 0; /* * 统计文件的字符数、单词数、行数 * param filename 文件名 * param totalNum 文件统计数据 * return 成功返回统计数据,否则返回NULL */ int *getCharNum(char *filename, int *totalNum) FILE *fp; / 指向文件的指针 char buffer1003; /缓冲区,存储读取到的每行的内容 int bufferLen; / 缓冲区中实际存储的内容的长度 int i; / 当前读到缓冲区的第i个字符 char

10、c; / 读取到的字符 int isLastBlank = 0; / 上个字符是否是空格 int charNum = 0; / 当前行的字符数 int wordNum = 0; / 当前行的单词数 if (fp = fopen(filename, rb) = NULL) /为输入打开一个二进制文件 perror(filename);/perror是系统错误输出函数 return NULL; printf(行数tt单词数tt字符数(不含空白字符)n); / 每次读取一行数据,保存到buffer,每行最多只能有1000个字符 while (fgets(buffer, 1003, fp) != NU

11、LL) bufferLen = strlen(buffer); / 遍历缓冲区的内容 for (i = 0; ibufferLen; i+) c = bufferi; if (c = | c = t) / 遇到空格 !isLastBlank / 如果上个字符不是空格,那么单词数加1 isLastBlank = 1; else if (c != n / 如果既不是换行符也不是空格,字符数加1 isLastBlank = 0; !isLastBlank / 如果最后一个字符不是空格,那么单词数加1 isLastBlank = 1; / 每次换行重置为1 / 一行结束,计算总字符数、总单词数、总行数

12、 totalNum0+; / 总行数 totalNum1 += charNum; / 总字符数 totalNum2 += wordNum; / 总单词数 printf(第%-3d行,共%-5d个单词,共%-6d个字符n, totalNum0, wordNum, charNum); / 置零,重新统计下一行 charNum = 0; wordNum = 0; system(pause); return totalNum; 4、实现文件复、实现文件复制代码制代码(包括文本文包括文本文件和二进制件和二进制文件文件) #include #include int copyFile(char *fileR

13、ead, char *fileWrite); int main() char fileRead100; / 要复制的文件名 char fileWrite100; / 复制后的文件名 / 获取用户输入 printf(要复制的文件:); scanf(%s, fileRead); printf(将文件复制到:); scanf(%s, fileWrite); / 进行复制操作 if (copyFile(fileRead, fileWrite) printf(恭喜你,文件复制成功!n); else printf(文件复制失败!n); return 0; /* * 文件复制函数 * param fileR

14、ead 要复制的文件 * param fileWrite 复制后文件的保存路径 * return int 1: 复制成功;2: 复制失败 */ int copyFile(char *fileRead, char *fileWrite) FILE *fpRead; / 指向要复制的文件的指针 FILE *fpWrite; / 指向复制后的文件的指针 int bufferLen = 1024 * 10; / 缓冲区长度 char *buffer = (char*)malloc(bufferLen); / 开辟10K的缓存 int readCount; / 实际读取的字节数 if (fpRead =

15、 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:从

16、文件在中读 数据 fwrite(buffer, 1, readCount, fpWrite);/fwrite:在文件里写数据 free(buffer);/释放节点 fclose(fpRead);/关闭文件 fclose(fpWrite);/关闭文件 return 1; 5、实现将一个、实现将一个正整数分解正整数分解质因数,如:输入质因数,如:输入90,打,打 印出印出90=2*3*3*5。 #include int main() int n; / 用户输入的整数 int i; / 循环标志 printf(输入一个整数:); scanf(%d, printf(%d=, n); / n=2才执行下

17、面的循环 for (i = 2; i = n; i+) while (n != i) if (n%i = 0)/算出因子 printf(%d*, i);/输出分解的因式 n = n / i; else break; printf(%dn, n);/输出分解的因式的最后一个数字 return 0; 6、向文件写入、向文件写入内容并读取内容并读取显示。程序功能实显示。程序功能实现将学现将学 生信生信息(姓名、年龄、学号和平均息(姓名、年龄、学号和平均分)写入文件,然分)写入文件,然 后读取显后读取显示出来。示出来。 要求:要求: 从控制台输从控制台输入学生信息入学生信息; 可以输入任可以输入任意数

18、目的学意数目的学生信息;生信息; 文件每行存文件每行存储一条学生储一条学生信息,姓名、年龄、学号、平信息,姓名、年龄、学号、平 均分以均分以tab(t)为分隔。为分隔。 #include #include #include #define FILE_PATH D:/demo.txt / 文件路径 int main() char name20; / 姓名 int age; / 年龄 int studNo; / 学号 int num,i; float score; / 平均分 FILE *fp; / 文件指针 / 判断文件是否能够正确创建/打开 if (fp = fopen(FILE_PATH,

19、wt+) = NULL)/ wt+: 为读写打开或着建立一个文本文件 perror(FILE_PATH); exit(1); printf(请输入需要写入的学生总数:); scanf(%d, / 从控制台输入学生信息并写入文件 printf(n请输入姓名、年龄、学号和平均分(以空格相隔):n); for (i = 0; i num; i+ ) scanf(%s %d %d %f, name, fprintf(fp, %st%dt%dt%.2fn, name, age, studNo, score); / 刷新缓冲区,将缓冲区的内容写入文件 fflush(fp); / 重置文件内部位置指针,让位

20、置指针指向文件开头 rewind(fp); / 从文件中读取学生信息 printf(n读取文件内容:n); for (i = 0; i num; i+) fscanf(fp, %st%dt%dt%f, name, printf(%st%dt%dt%fn, name, age, studNo, score); fclose(fp);/关闭文件 return 0; 7、猴子第一天、猴子第一天摘了若干个摘了若干个桃子,当即吃了一桃子,当即吃了一半,还半,还 不解馋,又多吃了一不解馋,又多吃了一个;第二天,吃剩下的桃个;第二天,吃剩下的桃子的一子的一 半,还不过瘾,又多吃了一半,还不过瘾,又多吃了一个

21、;以后每天都个;以后每天都吃前一天吃前一天 剩剩下的一半多下的一半多一个,到第一个,到第10天天想再吃时,只剩下一想再吃时,只剩下一 个个桃子了。问第一天共桃子了。问第一天共摘了多少个摘了多少个桃子?桃子? #include #include int main() int day, x1, x2; day = 9;/总天数减去1 x2 = 1;/初始第10天吃了1个桃 printf(第10天共有%d个桃子。n, x2); while (day0) x1 = (x2 + 1) * 2; / 第一天的桃子数是第2天桃子数加1后的2倍 x2 = x1; printf(第%d天共有%d个桃子。n,da

22、y,x2); day-;/每循环一次,总天数减去1 printf(n小猴第1天共摘了%d个桃子。n, x1); return 0; 8、从键盘输入、从键盘输入年号和月号年号和月号,求这一年的,求这一年的这一月共有这一月共有 多少天。多少天。 #include #include void main() int year, month, days; printf(输入年份(19902050):); scanf(%d, printf(输入月份(112):); scanf(%d, /对输入的月份进行判断 switch (month) case 1: case 3: case 5: case 7: ca

23、se 8: case 10: case 12:days = 31;break; case 4: case 6: case 9: case 11:days = 30;break; /判断是否为闰年或平年 case 2: if (year % 4 = 0 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、程

24、序功能:将从字符数、程序功能:将从字符数组中删除特组中删除特定的字符,要定的字符,要 求字符数求字符数组和要删除组和要删除的字符都是的字符都是手动输入。手动输入。 #include int main() char s80, c; int j, k; printf(请输入任意字符串: ); gets(s); printf(n请输入需要删除的字符:); c = getchar(); / 对字符串进行扫描 for (j = k = 0; sj != 0; j+) / 找到输入的字符,将剩余的字符往前推移一位 if (sj != c) sk+ = sj; / 将字符串的尾填0 sk = 0; prin

25、tf(n删除字符%c后的字符串为:%sn, c,s); return 0; 10、输入一个字、输入一个字符串,判断其是否符串,判断其是否为回文。所谓回为回文。所谓回 文字文字符串,是指从左到符串,是指从左到右读和从右右读和从右到左读完全到左读完全相同的相同的 字符字符串。串。 #include #include void main() char s1024; / 存放输入的字符串 int i, j, n; printf(请输入任意字符串:); gets(s); n = strlen(s);/计算字符串长度 /从左至右,从右至左进行扫描判断 for (i = 0, j = n - 1; i= j

26、) printf(n%s是回文串!n,s); else printf(n%s不是回文串!n,s); 11、打印杨辉三、打印杨辉三角,用角,用n控制输控制输出行数。出行数。 (解法一:使用数组)(解法一:使用数组) #include #define N 15 void main() int i, j, k, n = 0, aNN; /定义二维数组a1515 while (n = 13) /控制打印的行数不要太大,过大会造成显示不规范 printf(n请输入要打印的行数(小于13):); scanf(%d, printf(n%d行杨辉三角如下:n, n); for (i = 1; i = n; i

27、+) ai1 = aii = 1; /两边的数令它为1,因为现在循环从1开始,就认为ai1为 第一个数 for (i = 3; i = n; i+) for (j = 2; j = i - 1; j+) aij = ai - 1j - 1 + ai - 1j; /除两边的数外都等于上两顶数之和 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

28、ij); printf(n); /当一行输出完以后换行继续下一行的输出 printf(nn); (解法二:使用阶乘)(解法二:使用阶乘) #include /* * 定义阶乘,在这里可能会想。为什么要用float,当我试第一次的时候, * 如果用int的话,那么在打印行数多了以后就会出错。 * 这是因为阶乘的数比较大,如果用int就不够用了。下同 */ float J(int i) /定义阶乘 int j; float k = 1; for (j = 1; j = i; j+) k = k*j; return(k); float C(int i, int j)/定义组合数 float k; k

29、 = J(j) / (J(i)*J(j - i); return(k); void main() int i = 0, j, k, n; /打印杨辉三角 while (i =13) printf(n请输入要打印的行数(小于13):); scanf(%d, printf(n%d行杨辉三角如下:n, i); for (j = 0; ji; j+) for (k = 1; k = (i - j); k+) printf( ); /这一行主要是在输出数之前打上空格占位,让输出的数更美观 for (n = 0; n = j; n+) printf(%6.0f, C(n, j); printf(n); p

30、rintf(nn); 13、程序的功能、程序的功能是将一个是将一个 44 的数组进行的数组进行逆时针逆时针 旋转旋转 90 度后输出,要求原始数度后输出,要求原始数组的数据随组的数据随机输入,机输入, 新数组以新数组以 4 行行 4 列的方式输列的方式输出。出。 #include int main() int a44, b44, i, j; /a 存放原始数组数据,b 存放旋转后数组数据 printf(请输入16个数据: n); /输入一组数据存放到数组 a 中,然后旋转存放到 b 数组中 for (i = 0; i4; i+) for (j = 0; j4; j+) scanf(%d, pr

31、intf(n); /打印输入的4*4矩阵 printf(n4*4矩阵显示如下:n); for (i = 0; i4; i+) for (j = 0; j4; j+) printf(%10d, aij); b3 - ji = aij;/进行旋转赋值 printf(n); /打印原矩阵经逆时针旋转 90 度后的矩阵 printf(n原矩阵经逆时针旋转 90 度后为:n); for (i = 0; i4; i+) for (j = 0; j4; j+) printf(%10d, bij); printf(n); return 0; 14、打印九九乘、打印九九乘法表。法表。 (解法一:矩形)(解法一:

32、矩形) #include int main() int i, j; / i, j控制行或列 printf(九九乘法表(矩形):n); for (i = 1; i = 9; i+) for (j = 1; j = 9; j+) / %2d 控制宽度为两个字符,且右对齐;如果改为 %-2d 则为左对齐 / t为tab缩进 printf(%d*%d=%2dt, i, j, i*j); printf(n); return 0; (解法二:右上三角形(解法二:右上三角形和左上三角和左上三角形)形) #include int main() int i, j; / 打印九九乘法表(右上三角形) printf

33、(九九乘法表(右上三角形):n); for (i = 1; i = 9; i+) for (j = 1; j = 9; j+) if (j i) printf(t);/ t为tab缩进,打印右上三角形 else printf(%d*%d=%2d , i, j, i*j); printf(n); / 打印九九乘法表(左上三角形) printf(n九九乘法表(左上三角形):n); for (i = 1; i = 9; i+) for (j = 1; j = 9; j+) if (j i) printf();/此处不缩进,打印左上三角形 else printf(%d*%d=%2d , i, j, i

34、*j); printf(n); return 0; (解法三:右下三角形(解法三:右下三角形和左下三角和左下三角形)形) #include int main() int i, j, n; / 打印九九乘法表(右下三角形) printf(九九乘法表(右下三角形):n); for (i = 1; i = 9; i+) / 将下面的第一个for循环注释,就输出左下三角形 for (n = 1; n = 9 - i; n+) printf(t);/ t为tab缩进 for (j = 1; j = i; j+) printf(%d*%d=%2d , i, j, i*j); printf(n); / 打印

35、九九乘法表(左下三角形) printf(n九九乘法表(左下三角形):n); for (i = 1; i = 9; i+) /将下面的第一个for循环打开,就输出右下三角形 /* for (n = 1; n = 9 - i; n+) printf(t);/ t为tab缩进 */ for (j = 1; j = i; j+) printf(%d*%d=%2d , i, j, i*j); printf(n); return 0; 15、有一对兔子、有一对兔子,从出生后第,从出生后第 3 个月起每个个月起每个月都生月都生 一对一对兔子,小兔子长到兔子,小兔子长到第三个月后第三个月后每个月又生每个月又生

36、一对兔一对兔 子,假如兔子都子,假如兔子都不死,问每个月的不死,问每个月的兔子总数为兔子总数为多少?多少? 要求输入,总月份。兔子的规律要求输入,总月份。兔子的规律为数列:为数列:1, 1, 2, 3, 5, 8, 13, 21 . (解法一:使用迭代法(解法一:使用迭代法) #include int main() long f1 = 1, f2 = 1; / 兔子的数量 int i; / 循环次数 int n; / 要计算的月份 printf(输入要计算的月数:); scanf(%d, / 计算出循环次数 if (n % 2 = 1) n = (n + 1) / 2;/ 避免输入的奇数月,以

37、免多输出 else n = n / 2; for (i = 1; i = n; i+) printf(第%d个月有%d只n, i * 2 - 1, f1); printf(第%d个月有%d只n, i * 2, f2); f1 = f1 + f2; /*前两个月加起来赋值给第三个月*/ f2 = f1 + f2; /*前两个月加起来赋值给第三个月*/ return 0; (解法二:使用数组)(解法二:使用数组) #include void main() int a100, i, n; printf(请输入月数:); scanf(%d, a0 = a1 = 1;/初始第1个月,第2个月都是1对兔子

38、 /输出前2个月的兔子数 for (i = 0; i 2; i+) printf(第%d个月的兔子为:%dn, i+1, ai); /输出第3个月到第n个月的兔子数 for (i = 2; i n; i+) ai = ai - 1 + ai - 2; printf(第%d个月的兔子为:%dn, i+1, ai); 16、生成随机数、生成随机数,要求:要输入随机,要求:要输入随机数上限数上限num, 要输入要生要输入要生成几个随机成几个随机数数n。提示:定义一个数。提示:定义一个数组,组, 来存放随机来存放随机数;使用数;使用right = rand() % n生成随机生成随机数。数。 。 #i

39、nclude #include #include int main() int i, a1024, num, n; char flag; loop:/循环标志 printf(请输入产生随机数的上限:); fflush(stdin);/避免缓冲区干扰 scanf(%d, /输入产生随机数的上限 printf(请输入要产生几个随机数:); fflush(stdin);/避免缓冲区干扰 scanf(%d, /输入要产生几个随机数 srand(unsigned)time(NULL); /初始化时间函数,因为时间是变化的,所以生成的随机数千变万化 printf(以下是产生的%d个随机数:n, num);

40、 for (i = 0; i num; i+) ai = rand() % n;/对于数组,进行随机赋值 printf(%dn, ai); printf(继续吗?(y/n)t); fflush(stdin);/避免缓冲区干扰 scanf(%c, if (flag = y | flag = Y) goto loop;/若返回y或Y,进入循环 system(cls);/清屏 else exit(0); system(pause);/暂停,按任意键结束程序 return 0; 17、猜数字游戏、猜数字游戏,先生成随机,先生成随机数,再对于输入数,再对于输入的数的数 进行判进行判断。提示:使用断。提示

41、:使用right = rand() % 100生成生成随随 机数。机数。 #include #include #include /* rand() 获取随机数 system() 调用cmd命令行命令 */ int check(void);/初始界面函数 int Guess(int right);/对生成的随机数,和输入的数进行比较 int check(void)/初始界面函数 int password; printf(*n); printf(* 该程序需要用户验证,请输入邀请码 *n); printf(*n); scanf(%d, return password; int main(void)

42、 int right;/生成的随机数 int password;/加密变量 /跳转初始界面,并对程序的加密,若输错密码则不进入游戏 do password = check(); while (password != 1234); system(cls);/清屏 printf(*n); printf(* 欢迎来到猜数字游戏: *n); printf(*n); printf(*n); printf(* 猜数字游戏4.0版:XXX *n); printf(*n); srand(unsigned)time(NULL); /初始化时间函数,因为时间是变化的,所以生成的随机数千变万化 do right =

43、 rand() % 100;/对于内存里的任意数,求模生成随机数 while (Guess(right) = y);/若函数里返回是y,则继续游戏 printf(n感谢您的参与,再见!n); system(pause);/暂停,按任意键结束程序 return 0; int Guess(int right)/对生成的随机数,和输入的数进行比较 int number;/输入的数 char come;/输入y或n继续判断是否继续游戏 /当输入的数和生成的随机数不等是,进入以下 do printf(n请输入一个1至100之间的数:n); scanf(%d, /当输入的数大于生成的随机数,进入以下的判断

44、 if (number right) switch (number - right) / 10) case 0: printf(加油,只大了一点点!); break; case 1: printf(数字大了不少。); break; case 2: printf(数字大太多了!); break; default: printf(数字大太多了!); /当输入的数小于生成的随机数,进入以下的判断 else if (number right) switch (right - number) / 10) case 0: printf(加油,只小了一点点!); break; case 1: printf(

45、数字小了不少。); break; case 2: printf(数字小太多了!); break; default: printf(数字小太多了!); while (number != right);/当输入的数和生成的随机数相等时,结束该循环 printf(n恭喜你,猜对了!n); printf(再来一遍吗,少年?(y/n)n); scanf(%c, do scanf(%c, while (come != y /返回y或n给主函数,由主函数判断是否继续游戏 if (come = y) system(cls);/清屏 printf(*n); printf(* 欢迎来到猜数字游戏: *n); pr

46、intf(*n); printf(*n); printf(* 猜数字游戏4.0版:XXX *n); printf(*n); return y; else if (come = n) system(cls);/清屏 return n; 18、C语言获取语言获取开机时间。函数功能:开机时间。函数功能:GetTickCoun 返回(返回(retrieve)从操作系统)从操作系统启动到现在启动到现在所经过的毫所经过的毫 秒数,它的返回值秒数,它的返回值是是DWORD。 #include #include int main() DWORD k = GetTickCount(); /获取开机时间要用到 G

47、etTickCount() 这个 API,功能是获取重系统开始到运行时的时间 / DWORD 就是 Double Word, 每个word为2个字节的长度,每个字节是8位,共32位。1个二进 制位称为1个bit,8个二进制位称为1个Byte,也就是1个字节(8位),2个字节就是1个Word(1个字, 16位),则DWORD(DOUBLE WORD)就是双字的意思,即两个字节(32位) int s = k / 1000; /GetTickCount()计算的是从操作系统启动到现在所经过的毫秒数,所以要转换成秒数 int min = 0, h = 0; if (s = 60) min = s /

48、60; s = s % 60; if (min = 60) h = min / 60; min = min % 60; printf(重系统启动到现在过了的时间:%d h %d min %d sn, h, min, s); system(pause);/暂停,按任意键结束程序 return 0; 19、公鸡一个五、公鸡一个五块钱,母鸡一个三块钱,母鸡一个三块钱,小鸡三个块钱,小鸡三个 一一块钱,现在要用一块钱,现在要用一百块钱买一百块钱买一百只鸡,问公鸡、母百只鸡,问公鸡、母 鸡、小鸡各多少鸡、小鸡各多少只?只? 提示:如果用数学提示:如果用数学的方法解决的方法解决百钱买百鸡百钱买百鸡问题,可

49、将问题,可将 该问题该问题抽象成方程抽象成方程式组。设公鸡式组。设公鸡x只只,母鸡,母鸡y只,小只,小 鸡鸡z只,得到以下方只,得到以下方程式组:程式组: A:5x+3y+1/3z = 100 B:x+y+z = 100 C:0 = x = 100 D:0 = y = 100 E:0 = z = 100 #include int main() int i, j, k; printf(百元买百鸡的问题所有可能的解如下:n); /保证公鸡,母鸡,小鸡的数量不超过100,且大于0 for (i = 0; i = 100; i+) for (j = 0; j = 100; j+) for (k = 0

50、; k = 100; k+) /保证公鸡,母鸡,小鸡的总和数量等于100 if (5 * i + 3 * j + k / 3 = 100 return 0; 20、编写函数:、编写函数:void LoopMove(char * pStr, int steps),函数的功能,函数的功能是把一个是把一个char组成组成的字符串循的字符串循环环 右移右移n位位。例如,原来是。例如,原来是“abcdefghi”,如果,如果 n=2,移位后应该,移位后应该是是“hiabcdefgh”。 (解法一:使用(解法一:使用memcpy()函数)()函数) #include #include #define MA

51、X_LEN 100 void LoopMove(char *pStr, int steps) int n = strlen(pStr) - steps;/计算需要拷贝的字符数 char tmpMAX_LEN;/存放拷贝的字符串 /memcpy的功能是从源source中拷贝n个字节到目标destin中 memcpy(tmp, pStr + n, steps);/拷贝右移n位之后字符串 memcpy(pStr + steps, pStr, n);/拷贝右移n位之前的字符串 memcpy(pStr, tmp, steps); /合并得到结果 int main() char str1024; int

52、n; printf(请输入任意字符串:); scanf(%s, str); printf(n输入的字符串为:); printf(%sn, str); printf(n请输入需要循环右移的位数:); scanf(%d, LoopMove(str, n); printf(n循环右移%d位后的字符串为:,n); printf(%sn, str); return 0; (解法二:使用(解法二:使用strcpy()函数)()函数) #include #include #define MAX_LEN 100 void LoopMove(char *pStr, int steps) int n = strl

53、en(pStr) - steps;/计算需要拷贝的字符数 char tmpMAX_LEN;/存放拷贝的字符串 strcpy(tmp, pStr + n);/拷贝右移n位之后字符串 strcpy(tmp + steps, pStr);/拷贝右移n位之前的字符串 *(tmp + strlen(pStr) = 0;/将字符串尾填0 strcpy(pStr, tmp); /合并得到结果 int main() char str1024; int n; printf(请输入任意字符串:); scanf(%s, str); printf(n输入的字符串为:); printf(%sn, str); print

54、f(n请输入需要循环右移的位数:); scanf(%d, LoopMove(str, 3); printf(n循环右移%d位后的字符串为:,n); printf(%sn, str); return 0; 21、一只刚出生、一只刚出生的奶牛,的奶牛,4年生年生1只只奶牛,以后每一奶牛,以后每一 年年生生1只。现在给你一只。现在给你一只刚出生的只刚出生的奶牛,求奶牛,求n年后有年后有 多少奶牛,多少奶牛,n由键盘输由键盘输入。入。 #include int CalCowsNum(int iYear) int iCnt = 0; long lCowsNum = 1; /奶牛总数 for (iCnt

55、= 1; iCnt = 4)/4年以后奶牛数量开始增多 if (iYear - iCnt)3)/第2个4年开始后产的奶牛开始生新奶牛 lCowsNum += CalCowsNum(iYear - iCnt);/递归法算出奶牛数量 else lCowsNum+; return lCowsNum; /返回奶牛总数 int main() int iYear = 0; printf(请输入需要计算的年份:); scanf(%d, /输入年数 printf(n在 %d 年后, 总共有 %d 只牛。n, iYear, CalCowsNum(iYear); /输出结果 return 0; 22、用、用1分钱

56、、分钱、2分钱、分钱、5分钱组成分钱组成1元钱,请给出所元钱,请给出所 有有的组合方式的组合方式。 (解法一)(解法一) #include int main() int m, n, k = 0; /算出所有可能 for (m = 0; m = 100 / 5; m+) for (n = 0; n = (100 - 5 * m) / 2; n+) printf(1分%d个,2分%d个,5分%d个n, 100 - 5 * m - 2 * n, n, m); k+; printf(共有%d种组合方式n, k); return 0; (解法二)(解法二) #include int main() int

57、 n5, n2, k = 0; /算出所有可能 for (n5 = 100 / 5; n5 = 0; -n5) for (n2 = (100 - 5 * n5) / 2; n2 = 0; -n2) printf(5分%d个,2分%d个,1分%d个n, n5, n2, 100 - 5 * n5 - 2 * n2); / 输出结果 k+; printf(共有%d种组合方式n, k); return 0; 23、对情侣参加、对情侣参加婚礼,婚礼,3个新郞为个新郞为A、B、C,3个新个新 娘为娘为X、Y、Z,有人不知道,有人不知道谁和谁结婚谁和谁结婚,于是询问了,于是询问了 6位新人中位新人中的的3位

58、,但听到的回位,但听到的回答是这样的答是这样的:A说他将说他将 和和X结婚;结婚;X说她的未说她的未婚夫是婚夫是C; C说他将和说他将和Z结婚。这结婚。这 人听后知人听后知道他们在开道他们在开玩笑,全是假话。请编程找出玩笑,全是假话。请编程找出谁谁 将和谁结将和谁结婚。婚。 提示:将提示:将A、B、C这这3人用人用 1、2、3 表示,将表示,将X和和A 结结婚表示为婚表示为“X=1”,将将Y不与不与A结婚表示为结婚表示为“Y!=1”。 按照题目中按照题目中的叙述可以的叙述可以写出表达式写出表达式: x!=1 A不与不与X结结婚婚 x!=3 X的未婚夫的未婚夫不是不是C z!=3 C不与不与Z结

59、结婚题意还隐婚题意还隐含着含着X、Y、Z这这3个新个新娘娘 不能结为不能结为配偶,则有:配偶,则有:x!=y 且且x!=z且且y!=z,穷举以,穷举以 上所上所有可能的情有可能的情况,代入上述表况,代入上述表达式中进行达式中进行推理运算,推理运算, 若假设的情若假设的情况使上述表况使上述表达式的结果达式的结果均为真,则假设情均为真,则假设情 况况就是正确的就是正确的结果。结果。 #include void Marry(void); int main() Marry(); return 0; void Marry() int x, y, z; /穷举x的全部可能配偶 for (x = 1; x

60、= 3; x+) /穷举y的全部可能配偶 for (y = 1; y = 3; y+) /穷举z的全部可能配偶 for (z = 1; z = 3; z+) if (x != 1 /打印判断结果 printf(Y和%c结婚n, A + y - 1); printf(Z和%c结婚n, A + z - 1); return 0; 24、在一个、在一个8*8国际象棋国际象棋盘上,有盘上,有8个皇后个皇后,每个皇,每个皇 后占后占一格;要求皇后之一格;要求皇后之间不会出现间不会出现相互相互“攻击攻击”的现的现 象,即不能有两象,即不能有两个皇后处在个皇后处在同一行、同一列或同同一行、同一列或同一对一对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论