1、 / 电脑出拳 int result; / 比赛结果 / 为了避免玩一次游戏就退出程序,可以将代码放在循环中 while (1) printf(这是一个猜拳的小游戏,请输入你要出的拳头:n);A:剪刀nB:石头nC:布nD:不玩了n scanf(%c%*c,&gamer); switch (gamer) case 65 | 97: / A | a gamer=4; break; case 66 | 98: / B | b gamer=7; case 67 | 99: / C | c gamer=10; case 68 | 100: / D | d return 0; default:你的选择为
2、 %c 选择错误,退出.n,gamer); getchar(); system(cls / 清屏 srand(unsigned)time(NULL); / 随机数种子 computer=rand()%3; / 产生随机数并取余,得到电脑出拳 result=(int)gamer+computer; / gamer 为 char 类型,数学运算时要强制转换类型电脑出了 switch (computer) case 0:剪刀nbreak; /4 1 case 1:石头n /7 2 case 2:布n /10 3你出了 switch (gamer) case 4: case 7: case 10: i
3、f (result=6|result=7|result=11) printf(你赢了! else if (result=5|result=9|result=10) printf(电脑赢了! else printf(平手pausenul& / 暂停并清屏代码分析1) 首先,我们需要定义3个变量来储存玩家出的拳头(gamer)、电脑出的拳头(computer)和最后的结果(result),然后给出文字提示,让玩家出拳。接下来接收玩家输入:scanf(注意:由于每次输入以回车结束,缓冲区中除了玩家输入的字母,还有回车符。回车符要跳过,以免影响下次输入。Scanf() 函数的格式控制字符串个数可以多于
4、参数个数,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; /获取
5、02的随机数最后通过玩家和电脑出拳的和来判断输赢:result=(int)gamer+computer;/ .if (result=6|result=7|result=11) printf(else if (result=5|result=9|result=10) printf(else printf(这是一个很巧妙的算法,玩家和电脑出拳不同,result 的值就不同,且不会重复,见下表:电脑 - 玩家石头(4)剪刀(7)布(10)石头(0)10剪刀(1)11布(2)9123) 每次猜拳结束,暂停并清屏,进入下一次猜拳: /暂停运行和清屏C语言输出九九乘法表(5种解法)九九乘法表共9行9列,重
6、点考察for循环的掌握情况。下面给出了输出完整乘法表、右上、右下、左上、左下乘法表的代码。【代码一】输出完整的三角形:int main() int i,j; / i, j控制行或列 for(i=1;i=9;i+) for(j=1;jj+) / %2d 控制宽度为两个字符,且右对齐;如果改为 %-2d 则为左对齐 / t为tab缩进%d*%d=%2dt, i, j, i*j);运行结果:1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 92*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*
7、7=14 2*8=16 2*9=183*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=274*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=365*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=456*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=547*1= 7 7*2=14 7*3=21 7*4=28 7*5=35
8、 7*6=42 7*7=49 7*8=56 7*9=638*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=729*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81【代码二】输出右上三角形和左上三角形:i+)j+) if(ji) /打印八个空格,去掉空格就是左上三角形 else%d*%d=%2d ,i,j,i*j); 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*3= 9 3*4=12
9、3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*6=36 6*7=42 6*8=48 6*9=54 7*7=49 7*8=56 7*9=63 8*8=64 8*9=72 9*9=81去掉八个空格后的运行结果:2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=183*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=274*4
10、=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=365*5=25 5*6=30 5*7=35 5*8=40 5*9=456*6=36 6*7=42 6*8=48 6*9=547*7=49 7*8=56 7*9=638*8=64 8*9=729*9=81【代码三】输出右下和左下三角形:int main() int i,j,n; / 将下面的for循环注释掉,就输出左下三角形 for(n=1; n char cmd20=shutdown -s -t ; char t5=0 int c;title C语言关机程序 /设置cmd窗口标题mode con cols=48 line
11、s=25 /窗口宽度高度 color f0 /可以写成 red 调出颜色组date /TTIME /T- C语言关机程序 -n1.实现10分钟内的定时关闭计算机n2.立即关闭计算机n3.注销计算机n0.退出系统n-n%dc); switch(c) 您想在多少秒后自动关闭计算机?(0600)n%s,t); system(strcat(cmd,t);shutdown -p case 3:shutdown -lError!pause这个程序虽然实用价值不大,但是可以让我们了解 system() 函数。在Windows下,system() 函数可以执行 dos 命令;在 Unix/Linux 中,可以
12、执行Shell。请在Windows下运行上面的程序。程序中对dos界面的设置和关机功能都是通过dos命令实现的。你肯定听过内存溢出吧?通俗地理解就是内存不够。在运行某些比较吃内存的程序的时候,他们所需要的内存超出了你的电脑能承受的大小,系统会提示内存不足,有时候程序会自动退出。请用C语言写一个简单的内存溢出的例子。 while(1) /死循环 malloc(1); /分配一个字节长度的内存不要害怕,编译试试,打开任务管理器,可以看到你的内存占用直飚上去,再等等,程序会出错。这时候windows的内存管理机制发现了问题,把这个程序给终结了,防止系统奔溃(其他的系统也有相应的措施)。C语言动态数组
13、的实现:数组长度随数组元素改变,不会溢出,不会浪费资源我们知道,C语言中的数组大小是固定的,定义的时候必须要给一个常量值,不能是变量。这带来了很大的不便,如果数组过小,不能容下所有数组,如果过大,浪费资源。请实现一个简单的动态数组,能够随时改变大小,不会溢出,也不会浪费内存空间。下面的代码实现了简单的动态数组: /从控制台获取初始数组大小 int N; int *a; int i;Input array length:%dnN); /分配空间 a=(int *)calloc(N,sizeof(int); /填充数据 for(i=0;N; ai=i+1;%-5d,ai); if(i+1)%10=
14、0) /释放内存 free(a); a=NULL;201 2 3 4 5 6 7 8 9 1011 12 13 14 15 16 17 18 19 20一道题目,玩转C语言指针数组和指向指针的指针请先看下面的代码: char *lines5 = COSC1283/1284,ProgrammingTechniquesisgreat fun ; char *str1 = lines1; char *str2 = *(lines + 3); char c1 = *(*(lines + 4) + 6); char c2 = (*lines + 5)5; char c3 = *lines0 + 2;st
15、r1 = %sn, str1);str2 = %sn, str2); c1 = %cn, c1); c2 = %cn, c2); c3 = %cn, c3); return EXIT_SUCCESS;str1 = Programmingstr2 = is c1 = f c2 = 2 c3 = E看下面的分析之前,请先了解指针数组和指向指针的指针的基本概念,如果你不了解,先看下面的文章: 指针数组: 指向指针的指针:为了更加直观,把上面的数组改成下面的形式: char *string0 = char *string1 = char *string2 = char *string3 = char
16、*string4 = char *lines5; lines0 = string0; lines1 = string1; lines2 = string2; lines3 = string3; lines4 = string4;这样,或许会清晰很多,char *lines5; 定义了一个指针数组,数组的每一个元素都是指向char类型的指针。最后5行,为数组的每一个元素赋值,都是直接赋给指针。而lines,是一个指向指针的指针,它的类型为 char *,所以 *lines 是一个指向字符的指针,*lines是一个具体的字符。这一点很重要,一定要明白。指针是可以进行运算的,lines 为lines5数组的首地址,即第0个元素的地址;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1