《C语言程序设计》讲义/张华平/2012张华平副研究员博士Email:kevinzhang@bit.edu.cnWebsite:@ICTCLAS张华平博士网络搜索挖掘与安全实验室(wSMS@BIT)2012-3为C语言插上思想的翅膀BuildingWingsofIdeaforCLanguage《C语言程序设计》讲义/张华平/2011-3VC6.0使用指南写一个C程序的过程启动VC6.0菜单File-New,选择Project,选择Win32ConsoleApplication;输入hello,确定;选择第一项:AnEmptyProject(空项目)点击Finish;点击OK。已经建立了工程菜单File-New,选择Files,选择C++SourceFile;输入hello,确定;然后在hello.cpp中编辑自己的程序;Ctrl+F7编译程序,检查语法错误,善于查看下面的错误提示信息;通过后,F7生成.exe;Ctrl+F5执行程序。《C语言程序设计》讲义/张华平/2011-3VC6.0使用指南调试程序指南F9在当前行设置断点;F10单步执行,F11跟踪进入函数内部执行程序跟踪变量Watch《C语言程序设计》讲义/张华平/2011-3大家来找茬找茬1:prinf(“Helloworld!\n”);找茬2:if(ab);x=a;y=b;找茬3:if(ab)x=a;y=b;《C语言程序设计》讲义/张华平/2011-3大家来找茬2找茬4intx,y;scanf(“%d”,“%d”,&x,&y);找茬5intx;scanf(“%d”,&x);if(x=1)printf(“inputxis%d\n”,&x);x==y+1;《C语言程序设计》讲义/张华平/2011-3外语学习VSC语言程序设计英语学习VSC语言程序设计4K常用单词VS32个C语言关键词用词变化规则VS变量定义语法VS顺序结构,分支机构,循环结构文章VS程序读写文章VS程序设计会背几万个单词,知道语法规则,能写出文章来吗?优秀的作家字都认识吗?有几个说得清楚语法的?C语言语句、结构无所不通,能写出解决问题的程序?《C语言程序设计》讲义/张华平/2011-3思想是灵魂上面都是表象,没有思想就没有灵魂,神马都是浮云;专家说:新红楼梦这片子拍得好!首先对宋江这角色处理得当,打破了之前宋江对唐僧言听计从的传说!唐僧也不像以前那样总跟林黛玉叽叽歪歪的!张翼德大战许三多那场戏太真实了!方鸿渐也并非按原著说的对鲁西西从一而终,而是在经历了武则天的移情别恋后才和她擦出的火花,这样的剧情很有逻辑性。《C语言程序设计》讲义/张华平/2011-3思想英文文章的精髓在于作者的思想;文章是思想的表达形式;语言不是关键,好的思想,任何语言承载起来都很精彩,都能达到目的。C语言程序设计的精髓在于编程人员的思想,程序不过是思想算法的实现,C语言不过是思想的一种承载形式,任何程序都可以采用C/C++/C#/Java/php/python中任何的一种实现,语言不是关键。程序设计思想是王道,精通一门编程语言来实现思想即可包打天下。《C语言程序设计》讲义/张华平/2011-3思想训练之一输入三角型的三条边,判断三角形的形状。思路一:正常思维。思路二:如何改进?《C语言程序设计》讲义/张华平/2011-3程序之二:求sinx已知求正弦sin(x)的近似值的多项式公式为:sin(x)=x-x3/3!+x5/5!-x7/7!+……+(-1)nx2n+1/(2n+1)!+…编写程序,要求输入x(单位是弧度)和ε,按上述公式计算sin(x)的近似值,要求计算的误差小于给定的ε。《C语言程序设计》讲义/张华平/2011-3程序设计过程分析问题设计数据结构设计处理流程(初学者尽量在纸上画出流程图)写出接近于自然语言的伪代码;采用C语言或者其他熟悉的语言,将自然语言转译为计算机能识别的语言调试,跟踪==判断每个过程是否和当初设计一样达到目标,撤!《C语言程序设计》讲义/张华平/2011-3典型数值问题-例3例1:从键盘上任意输入一个正整数,要求判断该正整数是否是另一个整数的平方。问题分析与算法设计设:输入的正整数为i,若i满足:i==m*m(整数m0)则i为整数的平方。可以采用试探的方法:令m从1开始逐步增加进行试探。m*mi?m=m+1成立不成立输入一个整数i输出m和i开始结束设试探初值m=1m*m==i?成立不成立《C语言程序设计》讲义/张华平/2011-3典型数值问题-例3scanf(”%d”,&i);m=0;while(m*mi){m++;}if(m*m==i)printf(”%d%d”,m,i);{inti,m;}m*mi?m=m+1成立不成立输入一个整数i输出m和i开始结束设试探初值m=1m*m==i?成立不成立《C语言程序设计》讲义/张华平/2011-3第14页典型数值问题-例3#include”stdio.h”intmain(){inti,m;scanf(”%d”,&i);m=1;while(m*mi)m++;if(m*m==i)printf(“%d*%d=%d\n”,m,m,i);return0;}for(m=1;m*mi;m++);如果采用for语句该如何修改?表达式1表达式2表达式3for语句的循环体是什么?循环体为空语句《C语言程序设计》讲义/张华平/2011-3第15页典型数值问题-例4例4:百钱百鸡问题。中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?问题分析与算法设计设:要买x只公鸡,y只母鸡,z只小鸡,可得到方程:x+y+z=100①5x+3y+z/3=100②取值范围:0=x、y、z=100可以采用穷举法求解。将变量x、y、z的所有取值可能代入方程进行计算《C语言程序设计》讲义/张华平/2011-3第16页典型数值问题-例4穷举法基本思路当x=0,y=0,z=0时:是否满足方程z=1时:是否满足方程z=2时:是否满足方程......z=100时:是否满足方程当x=0,y=1,z=0时:是否满足方程z=1时:是否满足方程......z=100时:是否满足方程当x=0,y=2,z=0时:是否满足方程......当x=100,y=100,z=100时:......z=100满足方程?YN输出z++z=0y=100y++y=0x=100x++x=0开始结束《C语言程序设计》讲义/张华平/2011-3第17页典型数值问题-例4程序z=100满足方程?YN输出z++z=0y=100y++y=0x=100x++x=0开始结束#includestdio.hvoidmain(){intx,y,z,j=0;for(x=0;x=100;x++)for(y=0;y=100;y++)for(z=0;z=100;z++)if(x+y+z==100&&5*x+3*y+z/3==100)printf(..,++j,x,y,z);}《C语言程序设计》讲义/张华平/2011-3第18页典型数值问题-例4#includestdio.hvoidmain(){intx,y,z,j=0;for(x=0;x=100;x++)for(y=0;y=100;y++)for(z=0;z=100;z++)if(x+y+z==100&&5*x+3*y+z/3==100)printf(%2d:cock=%2dhen=%2dchicken=%2d\n,++j,x,y,z);}运行结果:1:cock=0hen=25chicken=752:cock=3hen=20chicken=773:cock=4hen=18chicken=784:cock=7hen=13chicken=805:cock=8hen=11chicken=816:cock=11hen=6chicken=837:cock=12hen=4chicken=84例C3《C语言程序设计》讲义/张华平/2011-3第19页典型数值问题-例4丢失重要条件:z应该能够被3整除。#includestdio.hvoidmain(){intx,y,z,j=0;for(x=0;x=20;x++)for(y=0;y=33;y++)for(z=0;z=100;z++)if(z%3==0&&x+y+z==100&&5*x+3*y+z/3==100)printf(%2d:cock=%2dhen=%2dchicken=%2d\n,++j,x,y,z);}运行程序,正确的结果:1:cock=0hen=25chicken=752:cock=4hen=18chicken=783:cock=8hen=11chicken=814:cock=12hen=4chicken=84z+=3)《C语言程序设计》讲义/张华平/2011-3第20页典型数值问题-例4优化程序:for(x=0;x=20;x++)for(z=0;z100;z+=3){y=100-x-z;if(5*x+3*y+z/3==100)printf(%2d:cock=%2dhen=%2dchicken=%2d\n,++j,x,y,z);}优化程序:for(x=0;x=20;x++)for(y=0;y=(100-5*x)/3;y++){z=100-x-y;if(z%3==0&&5*x+3*y+z/3==100)printf(%2d:cock=%2dhen=%2dchicken=%2d\n,++j,x,y,z);}《C语言程序设计》讲义/张华平/2011-313贪吃的猴*13.贪吃的猴子有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。输入:天数n输出:第一天的桃子个数《C语言程序设计》讲义/张华平/2011-313贪吃的猴分析:A0,A1=A0-(A0/2+1)=A0/2-1A2=A1-(A1/2+2)=A1/2-2...An=A(n-1)/2-n=======》A(n-1)=(An+n)*2《C语言程序设计》讲义/张华平/2011-313贪吃的猴#includestdio.hintmain(){inti,n,amount=1;scanf(%d,&n);for(i=n-1;i=1;i--)amount=2*(amount+i);printf(Themonkeygot%dpeachsinfirstday.\n,amount);}《C语言程序设计》讲义/张华平/2011-314黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包含,给出具体日期。《C语言程序设计》讲义/张华平/2011-314黑色星期五分析:1年1月1日星期一闰年366天(星期数差2),平年365天(星期数差1)每个月的总天数可计算(31,28/29,31,30...)求解n年的黑色星期五前面n-1年中计算闰年的数量,平年的数量,推测出n年1月1日的星期几当前月m,前m-1月的天数可以推算;m月1日的星期数可算;计算m月13日的星期数如果结果为5,输出之。《C语言程序设计》讲义/张华平/2011-3星期几的计算方法inta[13]={0,13,44,73,104,134,165,195,226,257,287,318,348};intb[13]={0,13