《第3讲C基础与编程2.ppt》由会员分享,可在线阅读,更多相关《第3讲C基础与编程2.ppt(27页珍藏版)》请在优知文库上搜索。
1、C+程序设计1C+基础与编程基础与编程(2)C+程序设计2 1 编程练习一:回文素数的判断编程练习一:回文素数的判断 基本思想:基本思想:(1 1)输出偶素数)输出偶素数2 2(2 2)在奇数中寻找素数)在奇数中寻找素数(3 3)判断该数是否是回文数)判断该数是否是回文数C+程序设计31 编程练习一:回文素数的判断编程练习一:回文素数的判断 程序:程序:#include#includeusing namespace std;int main()int i,j,s,n;cout2“”;for(i=3;i10000;i+=2)n=int(sqrt(i);for(j=3;j=n;j+=2)if(i%
2、j=0)break;if(j=n)continue;n=i;s=0;while(n)s=10*s+n%10;n/=10;if(s=i)couti“”;C+程序设计4 2 编程练习二:数据循环显示编程练习二:数据循环显示C+程序设计52 编程练习二:数据循环显示编程练习二:数据循环显示 基本思想:基本思想:(1 1)从第二行开始,每行都是由上一行的元素向)从第二行开始,每行都是由上一行的元素向右循环移动一个元素后得到的右循环移动一个元素后得到的(2 2)可以不断将数组)可以不断将数组a a的元素向右循环移动,然的元素向右循环移动,然后输出它后输出它C+程序设计6 程序:程序:#includeus
3、ing namespace std;int main()int a6,i,j,k;for(i=0;iai;for(i=0;i6;i+)for(j=0;j6;j+)coutaj“”;cout0;j-)aj=aj-1;a0=k;2 编程练习二:数据循环显示编程练习二:数据循环显示C+程序设计7 Josephus问题问题-约瑟夫问题约瑟夫问题3 编程练习三:编程练习三:Josephus问题问题C+程序设计83 编程练习三:编程练习三:Josephus问题问题 基本思想:基本思想:(1 1)对每一个小孩赋以标识值作为小孩离开(值为)对每一个小孩赋以标识值作为小孩离开(值为0 0)和不离开(值为和不离开
4、(值为1 1)的标志)的标志(2 2)用指针变量指向第)用指针变量指向第s s个小孩,并用个小孩,并用i i来计数,当来计数,当i i等于等于m m时,该小孩离开圈子,此时将该小孩的值置为时,该小孩离开圈子,此时将该小孩的值置为0 0(作为离开标志)(作为离开标志)(3 3)将指针变量指向下一个值不为)将指针变量指向下一个值不为0 0的小孩,的小孩,i i重新计重新计数,当数,当i i等于等于m m时,该小孩离开圈子,再将该小孩的值时,该小孩离开圈子,再将该小孩的值置为置为0 0,如此反复,直到剩下最后一个小孩,如此反复,直到剩下最后一个小孩(4 4)查找值不为)查找值不为0 0的那个小孩,然
5、后将其序号值返回的那个小孩,然后将其序号值返回C+程序设计9 程序:程序:#includeusing namespace std;int josephus(int n,int m,int s);int main()cout“最后胜利者:最后胜利者:NO。”josephus(10,8,1)endl;cout“最后胜利者:最后胜利者:NO。”josephus(10,2,1)endl;3 编程练习三:编程练习三:Josephus问题问题C+程序设计10int josephus(int n,int m,int s)int win;/最后胜利者的序号最后胜利者的序号 int*child=new intn
6、,*p,num=n;int i;/计数计数 int k;/循环变量循环变量 for(k=0;kn)|(s1)cout“开始报数的小孩序号超过范围!开始报数的小孩序号超过范围!”1)if(*p)i+;/值不为值不为0计数计数 if(i=m)/报到报到m时,置为时,置为0,重新计数,小孩数减,重新计数,小孩数减1 *p=0;i=0;num-;p+;/向后报数向后报数 if(pchild+n-1)p=child;/回到第回到第0个元素个元素 /查找胜利者查找胜利者 for(k=1;k=n;k+)if(0!=childk-1)win=k;break;delete nchild;return win;3
7、 编程练习三:编程练习三:Josephus问题问题C+程序设计11int josephus(int n,int m,int s)int win;/最后胜利者的序号最后胜利者的序号 int*child=new intn,num=n;int i,j;/i计数计数,j下标(小孩序号下标(小孩序号-1)int k;/循环变量循环变量 for(k=0;kn)|(s1)cout“开始报数的小孩序号超过范围!开始报数的小孩序号超过范围!”endl;delete nchild;return-1;j=s-2;for(k=1;k=n;k+)i=0;while(im)if(jn-1)j+;else j=0;i+=c
8、hildj;coutj+1“”;childj=0;coutendl;delete child;return j+1;3 编程练习三:编程练习三:Josephus问题问题C+程序设计124 深入学习一:左值的概念深入学习一:左值的概念C+程序设计134 深入学习一:左值的概念深入学习一:左值的概念C+程序设计144 深入学习一:左值的概念深入学习一:左值的概念C+程序设计154 深入学习一:左值的概念深入学习一:左值的概念C+程序设计164 深入学习一:左值的概念深入学习一:左值的概念C+程序设计174 深入学习一:左值的概念深入学习一:左值的概念C+程序设计185 深入学习二:关于深入学习二:
9、关于goto语句语句C+程序设计19 5 深入学习二:关于深入学习二:关于goto语句语句C+程序设计20 5 深入学习二:关于深入学习二:关于goto语句语句C+程序设计216 深入学习三:深入学习三:volatile的用法的用法C+程序设计226 深入学习三:深入学习三:volatile的用法的用法C+程序设计236 深入学习三:深入学习三:volatile的用法的用法输出结果:1010C+程序设计246 深入学习三:深入学习三:volatile的用法的用法输出结果:1080C+程序设计256 深入学习三:深入学习三:volatile的用法的用法C+程序设计266 深入学习三:深入学习三:volatile的用法的用法C+程序设计27小知识小知识