第3讲C++基础与编程2.ppt
《第3讲C++基础与编程2.ppt》由会员分享,可在线阅读,更多相关《第3讲C++基础与编程2.ppt(27页珍藏版)》请在三一文库上搜索。
1、1,C+基础与编程(2),1 编程练习一:回文素数的判断 2 编程练习二:数据的循环显示 3 编程练习三:Josephus问题 4 深入学习一:左值的概念 5 深入学习二:关于goto语句 6 深入学习三:volatile的用法,2,要求: 求10000以内的所有回文素数。,1 编程练习一:回文素数的判断,基本思想: (1)输出偶素数2 (2)在奇数中寻找素数 (3)判断该数是否是回文数,3,1 编程练习一:回文素数的判断,程序: #include #include using namespace std; int main() int i,j,s,n; cout2“ ”; for(i=3;i
2、10000;i+=2) n=int(sqrt(i); for(j=3;j=n;j+=2) if(i%j=0) break; if(j=n) continue; n=i; s=0; while(n) s=10*s+n%10; n/=10; if(s=i) couti“ ”; ,4,要求: 给一维数组a输入任意6个整数,假设为:7 4 8 9 1 5。然后根据a打印如下所示的方阵。 7 4 8 9 1 5 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7,2 编程练习二:数据循环显示,5,2 编程练习二:数据循环显示,基本思想:
3、 (1)从第二行开始,每行都是由上一行的元素向右循环移动一个元素后得到的 (2)可以不断将数组a的元素向右循环移动,然后输出它,6,程序: #include using namespace std; int main() int a6, i, j, k; for(i=0;iai; for(i=0;i0;j-) aj=aj-1; a0=k; ,2 编程练习二:数据循环显示,7,Josephus问题-约瑟夫问题 要求: n个小孩围成一圈,任意假定一个数m,从第s个小孩起按顺时针方向从1开始报数,当报到m时,该小孩便离开,然后继续向后重新以1开始报数。这样,小孩不断离开,圈子不断缩小。最后剩下的一个
4、小孩便是胜利者。,3 编程练习三:Josephus问题,8,3 编程练习三:Josephus问题,基本思想: (1)对每一个小孩赋以标识值作为小孩离开(值为0)和不离开(值为1)的标志 (2)用指针变量指向第s个小孩,并用i来计数,当i等于m时,该小孩离开圈子,此时将该小孩的值置为0(作为离开标志) (3)将指针变量指向下一个值不为0的小孩,i重新计数,当i等于m时,该小孩离开圈子,再将该小孩的值置为0,如此反复,直到剩下最后一个小孩 (4)查找值不为0的那个小孩,然后将其序号值返回,9,程序: #include using namespace std; int josephus(int n,
5、 int m, int s); int main() cout“最后胜利者:NO。”josephus(10,8,1)endl; cout“最后胜利者:NO。”josephus(10,2,1)endl; ,3 编程练习三:Josephus问题,10,int josephus(int n, int m, int s) int win; /最后胜利者的序号 int *child=new intn, *p, num=n; int i; /计数 int k; /循环变量 for(k=0;kn)|(s1) if(*p) i+; /值不为0计数 if(i=m) /报到m时,置为0,重新计数,小孩数减1 *p
6、=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 编程练习三:Josephus问题,11,int 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) co
7、ut“开始报数的小孩序号超过范围!”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+=childj; coutj+1“ ”; childj=0; coutendl; delete child; return j+1; ,3 编程练习三:Josephus问题,12,概念: 凡是可以出现在赋值运算左边的表达式都是左值。 凡是可以出现在赋值运算右边的表达式都是右值。 左值一定可以作为右值,而反过来不成立。 注意: (1)左值一定是可以寻址的表达式,不能寻址的表
8、达不能作为左值。 (2)常变量虽然可以寻址,但由于只读的限制,也不能作为左值。 (3)如果表达式的运算结果是一个临时的无名对象,则此表达式不能作为左值。 (4)如果表达式的运算结果是一个引用,则此表达式可以作为左值。P22,4 深入学习一:左值的概念,13,例子: #include using namespace std; int func() return 0; int main() int i; i+1=5; /错误 func()=5; /错误 ,4 深入学习一:左值的概念,例子: #include using namespace std; int global; int ,14,结论:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 基础 编程
链接地址:https://www.31doc.com/p-2973893.html