有趣的c 好玩的 程序设计 c c++

上传人:汽*** 文档编号:494780550 上传时间:2024-02-19 格式:DOCX 页数:35 大小:72.92KB
返回 下载 相关 举报
有趣的c 好玩的 程序设计 c c++_第1页
第1页 / 共35页
有趣的c 好玩的 程序设计 c c++_第2页
第2页 / 共35页
有趣的c 好玩的 程序设计 c c++_第3页
第3页 / 共35页
有趣的c 好玩的 程序设计 c c++_第4页
第4页 / 共35页
有趣的c 好玩的 程序设计 c c++_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《有趣的c 好玩的 程序设计 c c++》由会员分享,可在线阅读,更多相关《有趣的c 好玩的 程序设计 c c++(35页珍藏版)》请在金锄头文库上搜索。

1、1功能:求三个整数的平均值。程序如下:#in elude vstdio.h /* 载入头文件 stdio.h*/void main() /*主函数 main*/int a,b,c,d; /*定义 a,b,c,d 为整型变量*/a=105;b=75;c=85;d=(a+b+c)/3;printf(d=%dn,d); /*显示d=某数并换行,某数是d的值*/getchar(); /*等待用户,按任意键退出*/return 0;2功能:由键盘输入多边形的边数,求其内角和。程序如下:#in clude void mai n()/*辨别多边形是否成立,不成立重新执行do-while语句间的命令*/doi

2、nt x;pri ntf(” n=);scanf(%d,&x); /*由键盘输入x的值*/printf(%dn,(x-2)*180); /*显示内角和,公式为(x-2) *180*/*辨别多边形是否成立,不成立显示Error”,成立显示“Right”*/if (x=2)pri ntf(Errorn);elsepri ntf(Rightn);while (x=2); /*do-while 语句 */getchar();return 0; 3功能:由键盘输入两个数,显示器上显示较大数。程序如下:#in clude in t big(i nt,i nt); /*创建整型变量函数big*/void m

3、ai n()int x,y;sea nf(%d,%d, &x, &y);pri ntf(big is %dn,big(x,y);/*输出big函数的值,因为main函数与用户自定义函数big无关系,所以printf后的输出 项表是 big(x,y),而不是 big(n1,n2)*/getchar();return 0;in t big( int n 1,i nt n2) /*用 户自定义函数 big*/if (n1n2)return n1; /*返回 n1 值*/elsereturn n2; /*返回 n2 值*/4功能:由键盘输入一个等腰三角形的层数,画一个这样的三角形。程序如下:#in c

4、lude void mai n()int i,j,n;pri ntf(” n:);sca nf(%d,&n);for (i=1;i=n;i+) /*循环n次,每次输出一行*/for (j=1;j#i nclude vmath.h /* 数学文件*/void mai n()int n ,m,flag,i,j, num=1;prin tf( n:);sca nf(%d,&n);pri ntf(2%d:n,n);for (i=2;i=n;i+) /* 循环查找质数 */flag=1;m=(i nt)sqrt(i);for (j=2;j=m;j+)if (i%j=0) /*条件为真时表示不是质数,退出

5、for循环*/flag=0;break;if (flag=1) /*条件为真时表示i是质数*/prin tf(%4d,i);if (num+%10=0) /*每行最多输出10个数*/prin tf(n);prin tf(n);getchar();return 0;6.功能:显示保护屏幕。程序如下:#in clude /* 综合库 */#i nclude /* 绘图库 */int ma in()int gdriver=DETECT; /*定义图象驱动器为 DETECT*/int gmode=DETECT; /*定义图象模式为 DETECT*/long n; /*定义长型变量n*/in itgra

6、ph(&gdriver, &gmode,E:TCbgi);/*进入图象状态(警告:之间的是图象驱动器的路径,建议网友们设置为空,即只有或 设为编程系统的路径,例路径是C:TC,那么就是输入C:TCbgi)*/sleep(1); /*暂停一秒,以保证无误差进入图象状态*/for (n=1;nv=40000000;n+) /*画 40000000 个圆*/setcolor(ra nd(); /* 作图颜色随机 */circle(ra ndom(639),ra ndom(639),25); /* 画圆,位置随机,半径为 25*/getchar();return 0;最近在一个论坛发现了一段简单的C程

7、序很有意思,其中蕴含着不少技 巧,在此与大家分享一下。原程序如下:#include main(_)char*x=*b#*000*I#*2*0*#-.*5.*-#-.*54.#*2*6#*00*0.#;while(_=*x/4)_- =8,printf(n%*s+!_,_+_,_/_/_/+*x+%4*2);表面看起来很奇怪的代码,我把它放到VC+6下面编译,发现不能通过, 提示”_”未声明,对以上代码稍加修改,如下:#include main(int _)char*x=*b#*000*I#*2*0*#-.*5.*-#-.*54.#*2*6#*00*0.#;while(_=*x/4)_- =8,

8、printf(n%*s+!_,_+_,_/_/_/+*x+%4*2);细心的人已经看出来了,就是在main函数的参数” _”前面加上了变量的 类型:int。此时,以上代码在VC6中就能够正常的编译和连接了。运行的结果 如下:_/ _/_/_/ _/_/_/_/_/_/_/_/_/_/ _/ _/_/_/_/ _/ _/_/ _/_/_/ _/_/_/_/ _/ _/ _/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ _/_/_/_/_/_/_/ _/_/_/_/ _/_/_/_/_/_/_/_/_/ _/ _/_/_/_/_/是

9、用”_/ ”组成的单词“ knocker”。下面我们来分析这个小小的程序,不过为了看起来直观,我把这个程序稍 加改动:#include main(int _)char*x=*b#*000*I#*2*0*#-.*5.*-#- .*54.#*2*6#*00*0.#;while(_=*x/4)_-=8; printf(n%*s+!_,_+_,_/_/_/+*x+%4*2);首先来看看main函数参数,这个参数的名称比较奇怪” _”,我们看着有 些不习惯,但它确实是合法的变量名称。另外,本来我们常见的main函数一般 都不带参数,如果有参数是因为程序希望处理命令行格式下运行这个程序所需 要的参数,一般

10、是这样的:main(int argc, char *argv),第一个参数argc 表示参数表中参数的个数,argc是一个char型二维数组,保存着参数字符 串。举个例子,如果我们在命令行下输入命令:dir - s c:此时,argc的值为3 (包括命令本身),argv0指向字符串:dir,arg1 指向字符串:-s,arg2指向字符串c:。那么既然main函数的参数通常要不 没有,要不就是两个,而这个程序只有一个,这样做是否合法呢?答案是肯定 的!我在关于C语言中的变量中提到过,函数中的参数是保存在堆栈中 的,所以这就涉及到一个谁来平衡堆栈的问题,是调用者还是被调用者。在使 用VC6编译器的

11、时候,如果函数没有特别的声明,默认是调用者清理堆栈。换 句话说,运行时库(runtime)调用main函数的时候,只传递一个参数给main函 数,这一点它自己是知道的,当main函数调用结束以后,它在平衡堆栈的时 候,只清除掉一个函数,因此不会出现任何问题。我们接着往下看,下面定义了一个char型指针变量x,指向一个字符串。 接下来是while语句,while(_=(*x)/4),但表达式_=(*x)/4的值不为0的时 候就执行while的循环体,然而表达式_=(*x)/4是一个赋值语句,它的值又是 多少呢?在这种情况下,通常赋值号右面的表达式的值就是整个表达式的值。 第一次执行这个语句的时候

12、,x指向字符对应的值为42,以此类推,当 x=0时,也就是字符串结束的时候,循环结束。接下来在原来的程序中是:_-=8,prin tf(n% *s+!_,_+_,_/_/_/+ *x+%4 *2);这里的逗号作用有些类似分 号,但是逗号两侧组成的是一条语句,而分号则是两条语句。我们仔细看printf这条语句,它的格式字符串为:” n%*s”,其中*s 很少见,很多人不知道这是什么格式,不过我们可以在MSDN中找到这样的描 述:If the width specification is an asterisk (*), an int argument from the argument list

13、 supplies the value. The width argument must precede the value being formatted in the argument list.意思是说如果宽度用星号(*)来指定,则应该在参数列表中提供一个int型 参数作为宽度的值。这样就清楚了,原来这个printf语句是用表达式_+_来控 制字符串” *s”的宽度,也就是替换其中的(*)。在仔细一看,原来格式字符串还没有完!完整的应该是:n%*s+!_。这 就奇怪了,字符串怎么和!_相加呢?其实也不奇怪,在这里!_是对变量_作了 两次“非”的操作,结果应该是0或1。要明确的是,字符串作为参数传递给 函数的时候,只是把字符串的首地址传递给了函数,所以字符串n% *s的首地 址就是字符n的地址,当这个地址加1的时候,传递给printf函数的格式 字符串就变成了%*s,所以这个+!_的奥妙就在于控制换行!是不是很有创 意?当然了,下面的代码同样有创意,就是printf语句要打印的字符串参数: _/_/_/+ *x+%4*2。经过刚才的分析,我们不难理解_/_/_/加上后面的表达 式的用意了,同样是控制输出字符的个数,是一

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号