IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 第5章 循环结构程序设计 -> 正文阅读

[C++知识库]第5章 循环结构程序设计

循环结构是结构化程序设计中的基本结构之一。

几乎所有的实用价值程序中都包含循环结构

特点:可以完成有规律的需要重复计算或处理的任务

C语言提供了for语句,while语句和do-while三种循环语句

例5.1 假设今年我国人口数为13亿,若按每年2%增长,计算从现在开始10年内每年人口的数量

#include<stdio.h>
#include<math.h>
int main()
{
?int n=13,year;
?double number, rate = 0.02;
?for(year=1;year<=10;year++)
?{
? number = n * pow((1 + rate), year);
? printf("%2d年后,人数为:%.2f亿\n", year, number);
?}
?return 0;
}

?例5.2 计算一项数的和,直到某一项的绝对值为10负六次方为止

#include<stdio.h>
#include<math.h>
int main()
{
?double sum, item, flag, denominator;
?sum = 0; item = 1; flag = 1; denominator = 1;
?while (fabs(item) >= 1e-6)
?{
? sum = sum + item;
? flag = -flag;
? denominator = denominator + 3;
? item = flag / denominator;
?}
? printf("sum=%f\n",sum);
?return 0;
}

For语句是C语言提供的功能强大,使用广泛的一种循环结构,不仅可以解决循环次数未知的循环问题,特别适合解决循环次数已知的循环问题

For语句的执行过程如下:

  1. 首先计算表达式1
  2. 判断表达式2,若其值为真(非0),则执行循环体语句,然后执行第3步;若值为假(0),结束循环,转到第5步执行
  3. 计算表达式3
  4. 返回第2步继续执行
  5. 循环结束,继续执行for语句的下一条语句

大部分情况下,循环体语句为一复合语句

For语句的执行流程如图5.2所示

注意,表达式1只是在进入循环之前计算一次。表达式2.循环体语句和表达式3将重复执行

根据for语句格式的特点,其实际应用可以有多种形式

????????????? 循环体语句:

说明:循环变量赋初值是一个赋值语句,用于给循环变量赋初值;循环条件是一个关系表达式,决定何时终止循环(即确定循环的终值);循环变量增量决定循环变量在完成一次循环后如何变化。三部分之间以‘;‘隔开

例5.3输入一个正整数n,求i的值

首先抽象出需要反复执行的部分:

Sum=sim+i

Sum用于存放累加和,其初值为0.该语句重复n次,同时i从1变到n,就实现了从1累加到n。计数型循环的结构如下:

1.循环变量赋初值:i

2.循环条件:i<=n

3.循环变量增量:i++

4.循环体语句:sum=sum+i

?#include<stdio.h>
#include<math.h>
int main()
{
?int i, n, sum;
?scanf_s("%d", &n);
? sum = 0;
? for (i = 1; i <= n; i++)
? ?sum = sum + i;
? printf("由1到%d的和是:%d\n",n,sum);
?return 0;
}

例5.4输入一个正整数你,求n!

首先抽象出需要反复执行的部分:

Factorial= Factorial*i

计数型循环的结构如下:

1.循环变量赋初值:i=1

2.循环条件:i<=n

3.循环变量增量:i++

4.循环体语句:Factorial= Factorial*i

int main(void)
? ? ? ? ?{
? ? ? ? ? ? ?int i, n;
? ? ? ? ? ? ?double factorial;
? ? ? ? ? ? ?printf("输入n的值:");
? ? ? ? ? ? ?scanf_s("%d", &n);
? ? ? ? ? ? ?factorial = 1;
? ? ? ? ? ? ?for (i = 1; i <= n; i++)
? ? ? ? ? ? ? ? ?factorial = factorial * i;
? ? ? ? ? ? ?printf("%d!=%.0f\n", n, factorial);
? ? ? ? ? ? ?return 0;
? ? ? ? ?}int main(void)
? ? ? ? ?{
? ? ? ? ? ? ?int i, n;
? ? ? ? ? ? ?double factorial;
? ? ? ? ? ? ?printf("输入n的值:");
? ? ? ? ? ? ?scanf_s("%d", &n);
? ? ? ? ? ? ?factorial = 1;
? ? ? ? ? ? ?for (i = 1; i <= n; i++)
? ? ? ? ? ? ? ? ?factorial = factorial * i;
? ? ? ? ? ? ?printf("%d!=%.0f\n", n, factorial);
? ? ? ? ? ? ?return 0;
? ? ? ? ?}

For语句的一般形式中省略表达式1

格式如下:for(;表达式2;表达式3)

循环语句;

说明:省略表达式1时,可以将循环变量赋初值放在for之前。注意,此时不能省略第一个;

For语句的一般形式中省略表达式2

格式如下:for(;表达式1;表达式3)

循环语句;

说明:省略表达式3时,可以在循环体语句中加入修改循环变量的值的语句

For语句的一般形式中表达式1和表达式3也可以是逗号表达式

For语句的一般形式中表达式2的值只要非0,就能执行循环体

for语句的一般形式中循环体语句可以省略

for循环使用示例

例5.5编写程序,输入一个整数n、计算前n项之和

#include<stdio.h>
#include<math.h>
int main()
{
?int n, i, denominator, flag;
?float sum,item;
?printf("输入n的值:");
?scanf_s("%d", &n);
?flag = 1;
?denominator = 1;
?sum = 0;
?for (i = 1; i <= n; i++)
?{
? item = flag * 1.0 / denominator;
? sum = sum + item;
? flag = -flag;
? denominator = denominator + 3;
?}
? printf("sum=%.2f\n",sum);
?return 0;
}

?例5.6输入十个数,输出其中最大的最大数

#include<stdio.h>
#include<math.h>
int main()
{
?int i;
?float x, max;
?printf("输入第1个数:");
?scanf_s("%f", &x);
?max = x;
?for (i = 1; i <= 9; i++)
?{
? printf("请输入第%d个数:", i++);
? scanf_s("%f", &x);
? if (x > max)
? ?max = x;
?}
? printf("10个数的最大值是:%.0f",max);
?return 0;
}

例5.7输出所有的水仙数

#include<stdio.h>

int main()
{
? ? int number, a, b, c;
? ? for(number=100;number <=999;number++)
? ? {
? ? ? ? a = number / 100;
? ? ? ? b= number%100 / 10;
? ? ? ? c= number % 10;
? ? ? ? if (number == a * a * a + b * b * b + c * c * c)
? ? ? ? ? ? printf("%5d", number);
? ? }
? ? return 0;
}?

?例5.8 由键盘输入一个正整数,判断该数是否为完数

#include<stdio.h>

int main()
{
? ? int number, sum, i;
? ? printf("请输入一个正整数:");
? ? scanf_s("%d", &number);
? ? sum = 0;
? ? for (i = 1; i <= number - 1; i++)
? ? ? ? if (number % i == 0)
? ? ? ? ? ? sum = sum + i;
? ? if (number == sum)
? ? ? ? printf("%d是完数\n", number);
? ? else
? ? ? ? printf("%d不是完数\n", number);
? ? return 0;
}

例5.9 统计由键盘输入的若干字符中,大写英文字母,小写英文字母,数字字符和其他字符的个数

??? ?说明:

  1. 在for循环中,每次读入一个字符,根据字符的种类,选择不同的分支执行相应的运算。
  2. 程序中使用字符输入函数个体插入()读入字符,使用多分支if结构实现分支,用了逻辑表达式判断字符的种类。
  3. #include<stdio.h>
    int main(void)
    {
    ?int upper,lower,digit,i,other;
    ?char ch;
    ?upper = lower = digit = other = 0;
    ?printf("输入10个字符:");
    ?for (i = 1; i <= 10; i++)
    ?{
    ? ch = getchar();
    ? if (ch >= 'a' && ch <= 'z')
    ? ?lower++;
    ? else if (ch >= 'A' && ch <= 'Z')
    ? ?upper++;
    ? else if (ch >= '0' && ch <= '9')
    ? ?digit++;
    ? else
    ? ?other++;
    ?}
    ? printf("小写字母%d个,大写字母%d个,数字%d个,其他字符%d个\n", upper, lower, digit,other);
    ?return 0;
    }

例5.10 任意输入一行小写字母,将它们转换为大写字母后输出

说明:

  1. for语句中运算符!=的左侧是赋值表达式。运算时先计算赋值表达式然后在和\n比较
  2. 赋值运算符=的优先级低于关系运算符!=,所以不能省略表达式中的括号
  3. 循环的次数是由输入的字符\n控制的,与变量i的计算次数无关
  4. #include<stdio.h>

int main()
{
?int i;
?char ch;
?for (i = 1; (ch = getchar()) != '\n'; i++)
? putchar(ch - 32);
?return 0;
}

例5.11 由键盘输入三个数字,将其组合成一个整型数并输出

说明:

  1. 程序中使用的是在for循环语句中读入字符,随意键盘输入三位数字字符时,应连续输入,数字字符之间不能出现空格。如果输入空格或回车符,由于%c表示要读入一个字符,而空格或回车符本身也是一个字符,因此会被作为输入字符。
  2. 表达式时将输入的数字字符组合成一个整型数。

#include<stdio.h>

int main()
{
? ? int n = 0, i;
? ? char ch;
? ? printf("输入三个数字:");
? ? for(i=1;i<=3;i++)
? ? {
? ? ? ? scanf_s("%c", &ch);
? ? ? ? n = n * 10 + ch - '0';
? ? }
? ? printf("%d\n", n);
? ? return 0;
}?

例5.12 由键盘输入一个正整数,判断其是否为素数

说明:上述算法中,若number较大,且为素数时,for循环重复的次数会很多。这时可以优化成简

?#include<stdio.h>
int main()
{
?int i,flag,number;
?printf("输入一个正整数:");
?scanf_s("%d", &number);
?flag = 1;
?for (i = 2; i <=number - 1 && flag; i++)
? if (number % i == 0)
? ?flag = 0;
?if (flag)
? printf("%d是素数\n", number);
?else
? printf("%d不是素数\n", number);
?return 0;
}

?例5.13 计算sum的值

#include<stdio.h>
int main()
{
?int i,sum;
?i = 1; sum = 0;
?while(i<=100)
?{
? sum = sum + i;
? i = i + 1;
?}
?printf("sum=%d\n",sum);
?return 0;
}

?例5.14 输入一个正整数n,计算n!

#include<stdio.h>
int main()
{
?int i; long n, fact;
?i = 2; fact = 1;
?printf("请输入n的值:");
?scanf_s("%ld", &n);
?while(i<=n)
?{
? fact = fact * i;
? i = i + 1;
?}
?printf("%ld!=%ld\n",n,fact);
?return 0;
}

?例5.15 有键盘输入一串字符,分别统计输入字符中

#include<stdio.h>
int main()
{
?int digit, letter, other;
?char ch;
?digit = letter = other = 0;
?printf("请输入一串字符:");
?while (ch = getchar() != '\n')
? if ((ch >= '0') && (ch <= '9'))
? ?digit++;
? else if ((ch >= 'a' && (ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
? ?letter++;
? else
? ?other++;
? ?printf("数字%d个,字母%d个,其他%d个\n", digit, letter, other);
? ?return 0;
}

说明:

  1. 程序中while语句的条件:(ch=getchar())!=’\n’

不能写成ch=getchar()!=’\n’

  1. 循环体为一条完整的if语句,若有多条语句时,必须使用复合语句的形式
  2. 例5.16使用do-while语句计算sum=n的值#include<stdio.h>
    int main()
    {
    ?int i, sum;
    ?i = 1; sum = 0;
    ?do
    ?{
    ? sum = sum + i;
    ? i = i + 1;
    ?}?
    ?while (i <= 100);
    ?printf("sum=%d\n", sum);
    ?return 0;
    }

注意:

  1. 在do之后不能有语句结束符‘;’,因为该语句还没有结束
  2. 在while(表达式)之后必须要有结束符“;”,表达do-while语句到此结束
  3. 在循环体中必须有改变循环条件的语句,否则会出现死循环
  4. 例5.17 求两个自然数的最大公约数和最小公倍数
  5. int main()
    {
    ? ? int a, b, r, n, m;
    ? ? printf("请输入两个整数:");
    ? ? scanf_s("%d%d", &a, &b);
    ? ? m = a, n = b;
    ? ? do
    ? ? {
    ? ? ? ? r = a % b;
    ? ? ? ? a = b;
    ? ? ? ? b = r;
    ? ? } while (r != 0);
    ? ? printf("%d和%d的最大公约数是:%d\n", m, n, a);
    ? ? printf("最小公倍数是:%d", m * n / a);
    ? ? return 0;
    }

?例5.18输入一个整数,统计一个该数的位数

#include<stdio.h>
int main()
{
?long n, m;
?int count = 0;
?printf("请输入一个整数:");
?scanf_s("%ld", &n);
?m = ?n ;
?if (n < 0)n = -n;
?do
?{
? n = n / 10;
? count++;
?} while (n != 0);
? ?printf("整数%ld有%d位数\n",m,count);
? ?return 0;
}

?

5.5改变循环结构的跳转语句

当循环结构中出现多个循环条件时,要求当某个条件满足时会立刻结束循环,或者循环结构中根据条件会跳过某些语句继续循环,这就要在循环结构中配合使用break语句和continue语句

Break语句的一般形式如下:当break语句用于循环语句中时,可使程序终止循环而转去执行循环语句的后续语句。通常break语句总是与if一起配合使用,即满足条件时便跳出循环

例5.19 分析下面的程序结果

#include<stdio.h>
int main()
{
?int i = 5;
?do
?{
? if (i % 3 == 1)
? ?if (i % 5 == 2)
? ?{
? ? printf("%d", i);
? ? break;
? ?}
? i++;
?} while (i != 0);
? ?return 0;
}

?

例5.20 编写程序,由键盘输入一个正整数,判断其是否为素数

说明:

  1. 程序中结束for循环的条件有两个:一是i>m;二是break语句
  2. 若i>m,说明for循环正常结束,则n一定是素数
  3. 若遇到break语句,说明循环中条件n%i=0成立,n能被某个i整除,执行break语句退出循环,此时i<=m,n一定不是素数int main()
    {
    ? ? int n, m, i;
    ? ? printf("请输入一个正整数:");
    ? ? scanf_s("%d", &n);
    ? ? m = sqrt(n);
    ? ? for (i = 2; i <= m; i++)
    ? ? ? ? if (n % i == 0)
    ? ? ? ? ? ? break;
    ? ? if (i > m)
    ? ? ? ? printf("%d是素数!\n", n);
    ? ? else
    ? ? ? ? printf("%d不是素数!\n", n);
    ? ? return 0;
    }

?

  1. 例5.21 从键盘输入一批学生的成绩(以负数作为结束标志),计算平均分,并统计不及格成绩的个数#include<stdio.h>
    int main()
    { int num, n;
    ?float score, total = 0;
    ?num = 0; n = 0;
    ?while (1)
    ?{
    ? printf("请输入分数#%d(0~100):", n + 1);
    ? scanf_s("%f", &score);
    ? if (score < 0)
    ? ?break;
    ? if (score < 60)
    ? ?num++;
    ? total = total + score;
    ? n++;
    ?}
    ? printf("平均分数是:%.2f.\n", total/n);
    ? printf("不及格的有:%d.\n", num);
    ? ?return 0;
    }

?

  1. continue语句

continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环。Continue语句只能用在循环语句中,常与if语句一起使用

例5.22 把1到100之间能被7整除的数,以每行5个的形式在屏幕上输出

说明:1.“if(i%7!=0)continue;”语句的功能是:如果n不能被7整除,则结束本次循环,转而执行“i++;”,继续下次循环#include<stdio.h>
int main()
{ int i,n=1;
?for (i = 1; i <= 100; i++)
{
?if (i % 7 != 0)
? continue;
?printf("%4d", i);
?if (n++ % 5 == 0)printf("\n");
}
? ?return 0;
}

?

  1. 本例主要是continue语句的使用示例,也可以不使用continue语句

例5.23 分析下面程序的运行结果

int main()
{
? ? int n, s = 0;
? ? n = 1;
? ? while(n < 10)
? ? {
? ? ? ? s = s + n;
? ? ? ? if (s > 5)
? ? ? ? ? ? break;
? ? ? ? if (n % 2 == 1)
? ? ? ? ? ? continue;
? ? ? ? n++;
? ? }
? ? printf("s=%d,n=%d\n", s, n);
? ? return 0;
}

      1. goto语句

说明:语句标号是一个有效的标识符,适用时在语句标号的后面跟一个“;”出现在函数中某语句的前面。程序执行到goto语句时,会控制跳转到该语句标号处,达到控制循环的目的

例5.24 使用goto语句计算sum=n的值

注意,语句标号必须与goto语句处于同一个函数中。通常goto语句与if语句连用实现循环控制。大型程序中由于goto语句可能存在一些不合理的使用,会使程序结构变坏,所以结构化程序中,不建议使用goto语句

int main()
{
? ? int i,sum;
? ? i = 1; sum = 0;
loop:if(i<=100)
{
? ? sum = sum + i;
? ? i = i + 1;
? ? goto loop;
}
printf("sum=%d\n", sum);
return 0;
}

?

    1. 循环嵌套

当一个循环的循环体内又包含了另一个完整的循环体结构时,称为循环的嵌套或者是二重循环。根据问题的需要,可以构成三重循环及以上的循环嵌套结构,但一般情况下最多使用到三重循环

使用for语句,while语句及do-while语句相互嵌套,构成的嵌套结构有以下几种

六种循环嵌套

使用循环嵌套时,注意以下几点

  1. 外循环执行一次,内循环要执行一轮
  2. 循环嵌套格式中的内外循环体不允许出现交叉,即外循环要完全包含内循环
  3. 循环嵌套时,内循环体中使用break语句和continue语句时,只影响包含他们的循环,与外循环无关
  4. 例5.25 求1!+2!+3!+……+10!#include <stdio.h>
    int main()
    {
    ?int i,j;
    ?double factorial, s = 0;
    ?for(i=1;i<=10;i++)
    ?{
    ? factorial=1;
    ? for (j = 1; j <= i; j++)
    ? ?factorial = factorial * j;
    ? s = s + factorial;
    ?}
    ?printf("1!+2!=3!+.....+10!=%.0f\n", s);
    ?return 0;
    }

?例5.26 编写程序,输出乘法口诀表

#include <stdio.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");
?}
?return 0;
}

?例5.27 求100以内的素数。要求每行输出10个

int main()
{
? ? int i, n, k, count = 0;
? ? n = 2;
? ? while(n<100)
? ? {
? ? ? ? k = sqrt(n);
? ? ? ? for (i = 2; i <= k; i++)
? ? ? ? ? ? if (n % i == 0)break;
? ? ? ? if(i>k)
? ? ? ? {
? ? ? ? ? ? printf("%4d", n);
? ? ? ? ? ? if (++count % 10 == 0)printf("\n");
? ? ? ? }
? ? ? ? n++;
? ? }
? ? return 0;
}

?例5.28 将10-20之间的正整数分解质因数。

例如,12可分解为2*2*3

int main()
{
? ? int i, n, m;
? ? for(m=10;m<=20;m++)
? ? {
? ? ? ? n = m,i = 2;
? ? ? ? printf("%d=", n);
? ? ? ? do
? ? ? ? {
? ? ? ? ? ? if (n % i == 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("%d*", i);
? ? ? ? ? ? ? ? n = n / i;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? i++;
? ? ? ? } while (n != i);
? ? ? ? printf("%d\n", n);
? ? }
? ? return 0;
}

?

    1. 典型算法举例

5.7.1 递推法

例5.29 猴子吃桃问题:猴子第一天摘下若干个桃子,吃了一半,还觉得不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到了第十天早上时,只剩下一个桃子。问第一天共摘了多少个桃子

int main()
{
? ? int day, d1, d2;
? ? day = 9;
? ? d2 = 1;
? ? do
? ? {
? ? ? ? d1 = (d2 + 1) * 2;
? ? ? ? d2 = d1;
? ? ? ? --day;
? ? } while (day > 0);
? ? printf("第一天摘了%d\n", d1);
? ? return 0;
}例5.30 求sin()=x-x33! +…的近视值,要求精确到10-6

?例5.30 求sin()=x-x33! +…的近视值,要求精确到10-6

int main()
{
? ? int n = 1; float x;
? ? double fz, fm = 1, sinx;
? ? printf("输入x的值:");
? ? scanf_s("%f", &x);
? ? fz = x; sinx = x;
? ? do
? ? { n = n + 1;
? ? fz = -fz * x * x;
? ? fm = fm * (2 * n - 2) * (2 * n - 1);
? ? sinx = sinx + fz / fm;
? ? } while (fabs(fz / fm) > eps);
? ? printf("sin(%f)=%0.6f\n", x, sinx);
? ? printf("sin(%f)=%0.6f\n", x, sin(x));
? ? return 0;
}

?

5.7.2 迭代法

例5.31 用牛顿迭代法求方程2x3-4x2+3x-6=0在1.0附近的根

int main()
{
? ? float x1, x0, f, f1;
? ? x1 = 1.0;
? ? do
? ? {
? ? ? ? x0 = x1;
? ? ? ? f = ((2 * x0 - 4) * x0 + 3) * x0 - 6;
? ? ? ? f1 = (6 * x0 - 8) * x0 + 3;
? ? ? ? x1 = x0 - f / f1;
? ? } while (fabs(x1 - x0) > eps);
? ? printf("%6.2f", x1);
? ? return 0;
}

?

5.7.3 穷举法

例5.32搬砖问题:36块砖,36人搬。男搬4,女搬3,两个小孩抬一砖,要求一次全搬完,问男,女,小孩个若干

int main()
{ ? int men, women, child;
? ? for(men=0;men<=9;men++)
? ? for (women=0;women<=12;women++)
? ? {
? ? ? ? child = 36 -men - women;
? ? ? ? if (men * 4 + women * 3 + child * 0.5 == 36)
? ? ? ? ? ? printf("男:%d,女:%d,小孩:%d\n", men, women, child);
? ? }
? ? return 0;
}

?例5.33 编写程序,判断由1,2,3,4四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数

int main()
{
? ? int i, j, k, n = 0;
? ? for(i=1;i<5;i++)
? ? ? ? for(j=1;j<5;j++)
? ? ? ? ? ? for(k=1;k<5;k++)
? ? ? ? ? ? ? ? if(i!=k&&i!=j&&j!=k)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? printf("%d%d%d\t", i, j, k);
? ? ? ? ? ? ? ? ? ? if (++n % 5 == 0)printf("\n");
? ? ? ? ? ? ? ? }
? ? printf("\n共有:%d\n", n);
? ? return 0;
}

?

    1. 循环程序设计示例

例5.34编程输出如下图形

int main()
{
? ? int i, j;
? ? for (i = 1; i <= 5; i++)
? ? {
? ? ? ? for (j = 1; j <= 20 - i; j++)
? ? ? ? ? ? printf(" ");
? ? ? ? for (j = 1; j <= 2 * i - 1; j++)
? ? ? ? ? ? printf("*");
? ? ? ? printf("\n");
? ? }
? ? return 0;
}

?

例5.35猜数字游戏:由计算机随机产生一个10-80之间的数据,然后由用户进行猜数,在5次之内猜中则成功,否则给出大小提示。猜5次之后结束程序

例5.36编写程序输出100-1000内的回文素数。回文素数是指既是回文数同时也是素数的整数

int main()
{
? ? int m, n, count = 0;
? ? m = rand() % (80 - 10 + 1) + 10;
? ? printf("请输入一个10-80之间的数:");
? ? while (1) {
? ? ? ? scanf_s("%d", &n);
? ? ? ? count++;
? ? ? ? if (m == n)
? ? ? ? {
? ? ? ? ? ? printf("恭喜!你猜对了!你真棒!\n");
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? else if (m > n && count < 5)
? ? ? ? ? ? printf("对不起!你猜小了!再来一次!");
? ? ? ? else if(m < n && count < 5)
? ? ? ? ? ? printf("对不起!你猜小了!再来一次!");
? ? ? ? if(count==5)
? ? ? ? {
? ? ? ? ? ? printf("对不起!你没有机会了!\n这个数是:%d,游戏结束!\n", m);
? ? ? ? ? ? break;
? ? ? ? }
? ? ? ? return 0;
? ? }
}

?例5.36编写程序输出100-1000内的回文素数。回文素数是指既是回文数同时也是素数的整数int main()
{
? ? int x, i, j = 0, n, k = 0;
? ? for (x = 100; x < 1000; x++)
? ? {
? ? ? ? k = sqrt(x);
? ? ? ? for (i = 2; i <= k; i++)
? ? ? ? ? ? if (x % i == 0)
? ? ? ? ? ? ? ? break;
? ? ? ? if (i > k)
? ? ? ? {
? ? ? ? ? ? k = x;
? ? ? ? ? ? n = 0;
? ? ? ? ? ? while (k > 0)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? n = n * 10 + k % 10;
? ? ? ? ? ? ? ? k /= 10;
? ? ? ? ? ? }
? ? ? ? ? ? if (x == n)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("%d\t", x);
? ? ? ? ? ? if (++j % 5 == 0)printf("\n");
? ? ? ? }
? ? }
}
? ? return 0;
}

?例5.37? 在所有三位整数中找出平方数中有连续的三位数字是该数本身的数。例如,250的平方是62500,250便是所要找的一个满足条件的三位整数

int main()
{
? ? int x, t;
? ? printf("i\tpower\n");
? ? for(x=100;x<1000;x++)
? ? {
? ? ? ? t = x * x;
? ? ? ? while (t != 0)
? ? ? ? {
? ? ? ? ? ? if (x == t % 1000)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf("%d\t%d\n", x, x * x);
? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? ? ? t = t / 10;
? ? ? ? }
? ? }
? ? return 0;
}

?

?

?

?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-11 15:32:36  更:2021-12-11 15:34:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:22:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码