第三讲:c/c++循环语句for(),if(),swich(),do while(),

来源:互联网 发布:c语言 buffer 编辑:程序博客网 时间:2024/03/29 09:15
本文的编写是为了在学习c++的时候加深自己的记忆,同时也为与我一般的初学者提供一些参考,此处特别感谢微信公众号“c/c++的编程
教室”,我的学习过程按照公众号的推送进行学习的!
1.for()循环(1)for()格式:for(表达式1;表达式2;表达式3)        {                      do something;        }(2)乘法表程序#include <stdio.h>#include <stdlib.h>int main(){int i, j;for (i = 1; i <= 9; i++){for (j = 1; j <= i; j++)printf("%d*%d=%d\t", j, i, j*i);printf("\n");}system("PAUSE");}
2.if()循环
(1)if()格式,条件是bool型数据

if(条件)

     do;

else if(条件)

     do;

……

else

    do;

(2)实际程序,成绩判断

#include <stdio.h>#include <stdlib.h>int main(){int i;while (scanf_s("%d", &i)){if (i >= 0 && i<60)printf("不及格,重考,下一个\n");else if (i >= 60 && i<70)printf("一般般吧,勉强过关,下一个\n");else if (i >= 70 && i<90)printf("好像还不错的样子,再接再厉,下一个\n");else if (i >= 90 && i <= 100)printf("漂亮,就是要这样,下一个\n");elseprintf("无效成绩,什么玩意,下一个\n");}system("PAUSE");return 0;}

3.swich()循环

(1)swich()循环结构

switch(what)//判断what是什么,what 是整形数据

{

 case  what =what1://当what是what1的时候

         do something;

         break;

 case   what = other what://是其他情况的时候

         do something;

         break;

case  ……:

       ……

default://表示自己不希望what = 的值

      break;

在这里补充一下break和continue的用法区别:

break 命令可以与三种循环形式中的任何一种以及 switch 语句一起使用。它导致程序控制跳过包含它的循环或 switch 语句的剩余

部分,继续执行紧跟在循环或 switch 后的下一条命令。

continue 命令可以与三种循环形式中的任何一种一起使用,但不能和 switch 语句一起使用。它导致程序控制跳过循环中的剩余语

句。对于 while 或 for 循环,开始下一个循环周期。对于 do while 循环对退出条件进行判断,如果必要,开始一个循环周期。

(2)实际程序

①成绩判断

#include<stdio.h>#include<stdlib.h>void main(){int n;printf("请输入成绩:\n");scanf_s("%d:", &n);n = n / 10 + 1;switch (n){case 1:case 2:case 3:case 4:case 5:case 6:printf("不及格,重考,下一个\t\n");break;case 7:printf("一般般吧,勉强过关,下一个\n");break;case 8:case 9:printf("好像还不错的样子,再接再厉,下一个\n");break;case 10:case 11:printf("漂亮,就是要这样,下一个\n");break;default:printf("无效成绩,什么玩意,下一个\n");break;}system("PAUSE");}

②目录预览

#include <stdio.h>#include <stdlib.h>int main(){char ch;int n;printf("回复D或者d查看目录:\n");while (scanf_s("%c", &ch)){switch (ch){case 'D':case 'd':printf("第一讲 Hello World.\t\n");printf("第二讲 printf()(1).\t\n");printf("第三讲 printf()(2).\t\n");printf("…………\t\n");printf("回复相应的数字查看相应章节.\t\n");goto d;default:printf("无效字符,请重新输入:\n");}}d:    while (scanf_s("%d", &n)){switch (n){case 1:printf("第一讲 Hello World.\t\n");break;case 2:printf("第二讲 printf().\t\n");break;case 3:printf("第三讲 printf()(2).\t\n");break;default:printf("敬请期待……\n");break;}}  system("PAUSE");  return 0;}

在此提一下goto语句:goto是一个让人讨厌又让人喜欢的语句,讨厌之处是本身容易出错,但是好处就是可以直接从一个深度循环

里面直接跳转出来,由于while循环有个共性,只要你给的条件满足他就会一直循环下去,俗称死循环,像我们上面的这种写法就更

容难退出了,这是我们所不希望看到的,因为如果这样的话我们就会被这个while给套牢了,我们想要的是当我们进入目录之后就可

以进入查看章节的章程,当然如果我们没有进入目录自然会有重新尝试的机会,所以,我们应该在正确进入目录后直接跳出目录然后

进行查看章节的环节,所以我们在打印完章节后我们使用goto语句直接退出循环,进入下一个环节,goto在这里就起到了关键作用

,goto后面的d是一个标识符,标明要跳转d标记的地方,想要标记某个位置就直接在该行代码前加上该标识符和冒号即可,当程序

运行到goto语句时直接跳转到标记处。

4.do while()循环

(1)循环结构

do

{

    do something;

}while(条件);

(2)实际程序练习:一个同学很喜欢数学,有人问他年龄时他却说:“ 我的年龄平方是三位数,立方是四位数,四次方是六位数,

三次方和四次方正好占遍了0,1,2,3,4,5,6,7,8,9这10个数字。”现在大家能够猜到这位同学年龄吗?

#include <stdio.h>#include <stdlib.h>long power(int n, int m);int age();//return countint agemax();//return maxint main(){int n, m, c;long a[10] = { 0 }, s[10] = { 0 }, i, sum3, sum4;n = age();printf("n=%d\n", n);m = agemax();printf("m=%d\n",m);c = m - n + 1;printf("c=%d\n", c);do{sum3 = power(c, 3);for (i = 3; i >= 0; i--){a[i] = sum3 % 10;sum3 = sum3 / 10;}sum4 = power(c, 4);for (i = 9; i>3; i--){a[i] = sum4 % 10;sum4 = sum4 / 10;}for (i = 0; i <= 9; i++){s[a[i]]++;}for (i = 0; i <= 9; i++){if (s[i] == 1){if (i == 9)printf("这位同学的年龄是:%d\n", c);}elsebreak;}c++;//从满足条件的最小值开始遍历} while (c <= m);system("PAUSE");return 0;}//实现幂次方long power(int n, int m){long s = 1;while (m--){s *= n;}return s;}//求满足sum1和sum2的个数int age(){int age[25];int count = 0;long sum1, sum2;for (int i = 0; i<25; i++){sum1 = power(i, 3);sum2 = power(i, 4);if (sum1 > 1000 && sum1 <10000 &&sum2 > 100000 && sum2 < 1000000){age[i] = i;count++;}}return count;}//求出满足sum1和sum2的最大值int agemax(){int age[25] = { 0 }, max = 0;long sum1, sum2;for (int i = 0; i<25; i++){sum1 = power(i, 3);sum2 = power(i, 4);if (sum1 > 1000 && sum1 <10000 &&sum2 > 100000 && sum2 < 1000000){age[i] = i;}if (max<age[i]){max = age[i];}}return max;}

此处给出c++的实现程序,包含了vector和push_back()

#include <iostream>//c++标准库#include <vector>using namespace std;//标准字声明int main(){vector<int>age;int n, m, a[10] = { 0 }, s[10] = { 0 };long sum1, sum2;for (int i = 0; i<25; i++){sum1 = i*i*i;sum2 = i*i*i*i;if (sum1 > 1000 && sum1 <10000 &&sum2 > 100000 && sum2 < 1000000){age.push_back(i);}}int size = age.size();n = age[0];m = age[size - 1];do{sum1 = n*n*n;for (int i = 3; i >= 0; i--){a[i] = sum1 % 10;sum1 = sum1 / 10;}sum2 = n*n*n*n;for (int i = 9; i>3; i--){a[i] = sum2 % 10;sum2 = sum2 / 10;}for (int i = 0; i <= 9; i++){s[a[i]]++;}for (int i = 0; i <= 9; i++){if (s[i] == 1){if (i == 9)cout << "这位同学的年龄是:" << n << endl;}elsebreak;}n++;} while (n != m);cin.get();return 0;}

1 0
原创粉丝点击