for循环结构的嵌套

外层循环每循环一次,内层循环会完整循环一次。

外层循环是竖。

内层循环是横。

for, do...while, while的选择:

如果有固定次数,如阶乘! ,判断素数,用 for

如果必须执行一次,用 do...while

其他情况用 while

判断某个数是否为素数,输出2~100之间的素数,用 for

输出前 n 个素数,用 while

做求和的程序时,记录结果的变量应该初始化为0,而做求积的变量时,记录结果的变量应该初始化为1

for (i = 0;i < n;++i)

则循环的次数是 n,而循环结束以后,i 的值是 n

输入一个整数 x,并输出其位数。

 #include <stdio.h>
main()
{
int x;
int y, cnt = ;
scanf("%d", &x); if (x < )
{
y = -x;
}
else y = x; do
{
y = y / ;
cnt++;
} while (y > ); printf("%d", cnt);
}

多个 for 循环嵌套使用

 #include <stdio.h>
main()
{
int i, j; for (i = ;i < ;++i)
for (j = ;j < ;++j)
printf("呵呵\n");
printf("哈哈\n");
}

输出格式:

呵呵
呵呵
呵呵
呵呵
呵呵
呵呵
呵呵
呵呵
呵呵
哈哈
请按任意键继续. . .

 #include <stdio.h>
main()
{
int i, j; for (i = ;i < ;++i)
{
printf("A\n");
for (j = ;j < ;++j)
{
printf("BB\n");
printf("CCC\n");
}
printf("DDDD\n");
}
}

输出格式:
A
BB
CCC
BB
CCC
BB
CCC
DDDD
A
BB
CCC
BB
CCC
BB
CCC
DDDD
A
BB
CCC
BB
CCC
BB
CCC
DDDD
请按任意键继续. . .

while 和 for 的相互比较

while 和 for 可以相互转化,但是 for 的逻辑性更强,更不容易出错,推荐多使用 for

 #include <stdio.h>
main()
{
for (;;)
A; //等价于 while ()
{
A;
;
}
}

从键盘输入一个数字,如果该数字是回文数,则返回yes,否则返回no

回文数:正写和倒写都一样

比如:121 12321 都是回文数

 #include <stdio.h>
main()
{
int val; //存放待判断的数字
int m;
int sum = ; printf("请输入需要判断的数字:");
scanf("%d", &val); m = val;
while (m)
{
sum = sum * + m % ;
m /= ;
} if (sum == val)
printf("YES\n");
else
printf("NO\n");
}

求费波拉契序列

 #include <stdio.h>
main()
{
int n;
int f1, f2, f3;
int i; f1 = ;
f2 = ; printf("请输入需要求的项的序列:");
scanf("%d", &n); if ( == n)
{
f3 = ;
}
else if ( == n)
{
f3 = ;
}
else
{
for (i = ;i <= n;++i)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
} printf("%d", f3);
}

求一元二次方程

do-while 多用于人机交互,即:输入Y继续,输入N结束

 #include <stdio.h>
#include <math.h>
main()
{
double a, b, c;
double delta;
double x1, x2;
char ch; do
{
printf("请输入一元二次方程的三个系数:\n"); printf("a=");
scanf("%lf", &a); printf("b=");
scanf("%lf", &b); printf("c=");
scanf("%lf", &c); delta = b*b - * a*c; if (delta > )
{
x1 = (-b + sqrt(delta)) / ( * a);
x2 = (-b - sqrt(delta)) / ( * a);
printf("有两个解,x1=%lf,x2=%lf", x1, x2);
}
else if (delta == )
{
x1 = x2 = (-b) / ( * a);
printf("有唯一个解,x1=x2=%lf", x1);
}
else
{
printf("无实数解");
} printf("您想继续吗?(Y/N):");
scanf(" %c", &ch);
} while ('y' == ch || 'Y' == ch);
}

switch 语句

 #include <stdio.h>
main()
{
int val; printf("请输入要进入的楼层:");
scanf("%d", &val); switch (val)
{
case :printf("1\n");
//break;
case :printf("2\n");
//break;
default:printf("null\n");
//break;
case :printf("3\n");
//break;
}
}

输入3,输出格式:

请输入要进入的楼层:3
3
请按任意键继续. . .

输入4,输出格式:

请输入要进入的楼层:4
null
3
请按任意键继续. . .

break 和 continue

break 如果用于循环是用来终止循环。

break 如果用于switch ,则是用于终止 switch

break 不能直接用于 if ,除非 if 属于循环内部的一个子句

break 虽然是 if 内部的语句,但 break 终止的是外部的 for 循环

在多层循环中,break 只能终止距离它最近的循环

 #include <stdio.h>
main()
{
int i, j; for (i = ;i < ;++i)
{
for (j = ;j < ;++j)
break; //break 只能终止距离它最近的循环
printf("hello\n");
}
}

for

计算1+1/2+1/3+...+1/100

这样有错误,因为i是整型常量,1/i也是整型常量,没有小数点

 #include <stdio.h>
main()
{
int i;
double sum = ; for (i = ;i <= ;++i)
{
sum = sum + / i;
} printf("%f", sum);
}

强制类型转换,把整型i转换为实型常量

 #include <stdio.h>
main()
{
int i;
double sum = ; for (i = ;i <= ;++i)
{
sum = sum + / (double)(i); //强制类型转换,把整型i转换为实型常量
} printf("%f", sum);
}

更为简单的方法,推荐使用

 #include <stdio.h>
main()
{
int i;
double sum = ; for (i = ;i <= ;++i)
{
sum = sum + 1.0 / i;
} printf("%f", sum);
}

如何用1角,2角和5角的硬币凑出10元以下的金额?

 #include <stdio.h>
main()
{
int x;
int one, two, five; scanf("%d", &x);
for (one = ;one < x * ;one++)
{
for (two = ;two < x * / ;two++)
{
for (five = ;five < x * / ;five++)
{
if (one + two * + five * == x * )
{
printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n", one, two, five, x);
}
}
}
}
}

1求1^2+2^2+3^2+...+n^2,直到累加和大于或等于10000为止。

 #include <stdio.h>
main()
{ int i, sum;
i = ; sum = ; /*i和sum的初值为0*/
while (sum < ) /*当sum小于10000时执行循环体*/
{ sum = sum + i*i; /*sum累加i的平方*/
i = i + ; /*在循环体中每累加一次后,i增1*/
}
printf("n=%d sum=%d \n", i - , sum);
}

2用pi/4=1-1/3+1/5-1/7+1/9-....公式计算pi的近似值,直到最后一项的绝对值小于10^(-6)为止。

 #include <stdio.h>
#include <math.h>
main()
{ int s;
float n, t, pi;
t = 1.0;
pi = ;
n = 1.0;
s = ;
while (fabs(t)>=1e-)
{ pi = pi + t;
n = n + 2.0;
s = -s;
t = s / n;
}
pi = * pi;
printf("pi=%f \n", pi);
}

3用迭代法求方程x=cos x的根,要求误差小于10^(-6)

1使x1=0, x2=cos x1

2判|x2-x1|<10^(-6),若x2-x1的绝对值小于10^(-6),则执行x1=x2,重复执行步骤1;否则执行步骤3

3计算结束,输出结果

 #include <stdio.h>
#include <math.h>
main()
{ double x1, x2;
x1 = 0.0;
x2 = cos(x1);
while (fabs(x2 - x1) > 1e-)
{ x1 = x2;
x2 = cos(x1);
}
printf("x=%f \n", x2);
}

4计算费波纳Fibonacci数列,直到某项大于1000为止,并输出该项的值

费波纳Fibonacci数列:f1=0, f2=1, f3=1, f4=2, f5=3, ..., fn=f(n-2)+f(n-1)

f=f1+f2; f1=f2; f2=f

4.1 do-while 语句

 #include <stdio.h>
main()
{
int f1, f2, f;
f1 = ;
f2 = ;
do
{
f = f1 + f2;
f1 = f2;
f2 = f;
} while (f2 <= );
printf("F=%d \n", f2);
}

4.2 for 语句

 #include <stdio.h>
main()
{ int f1, f2, f, i;
f1 = ;
f2 = ;
for (i = ;f2 <= ;i++)
{ f = f1 + f2;
f1 = f2;
f2 = f;
}
printf("%d", f);
}

5求1+2+3+...+100。

for 语句

 #include <stdio.h>
#include <math.h>
main()
{
int i, sum;
sum = ; /*sum的初值为0*/
for (i = ;i <= ;i++) /*当i小于或等于100时执行循环体*/
sum = sum + i; /*在循环体中累加i一次*/
printf("sum=%d \n", sum);
}

6计算半径为0.5mm, 1.0mm, 1.5mm, 2.0mm, 2.5mm时的圆面积。

for 语句

 #include <stdio.h>
#include <math.h>
main()
{
double r, s, Pi = 3.1416;
for (r = 0.5;r <= 2.5;r = r + 0.5)
{
s = Pi*r*r;
printf("r=%3.1f s=%f \n", r, s);
}
}

7找出2~100以内的所有质数(素数)。(考点)

 #include <stdio.h>
main()
{
int x, i, isprime;
for (x = ;x < ;x++)
{
isprime = ; /* 每次判断,先默认其是素数 */
for (i = ;i < x / 2;i++)
{
if (x%i == )
{
isprime = ;
break;
}
}
if (isprime == )
{
printf("%d,", x);
}
}
}

8输入某个数,判断是否为素数。(考点)

 #include <stdio.h>
main()
{
int x, i, isprime;
scanf("%d", &x); for (i = ;i < x / 2;++i)
{
isprime = ;
if (x%i == )
{
isprime = ;
break;
}
}
if (isprime == )
{
printf("YES\n");
}
else printf("NO\n");
}

8.1 输入一个数 n,输出前 n 个素数。(考点)

 #include <stdio.h>
main()
{
int x = , cnt = , tag, i;
int n;
scanf("%d", &n); while (cnt < n)
{
tag = ;
for (i = ;i <= x / ;i++)
{
if (x%i == )
{
tag = ;
break;
}
}
if (tag == )
{
printf("%d,", x);
cnt++;
}
x++;
}
}

9计算1+2+3+...+i,直到累加到s大于5000为止,并给出s和i的值。

break  语句

 #include <stdio.h>
main()
{
int i, s;
s = ;
for (i = ;; i = i + )
{
s = s + i;
if (s > ) break;
}
printf("s=%d,i=%d", s, i);
}

10 把100~200之间不能被3整除的所有数输出

continue 语句

 #include <stdio.h>
main()
{
int i;
for (i = ; i <= ; i++)
{
if (i % == ) continue;
printf("%d,", i);
}
}

11求1-3+5-7+...-99+101的值。

11.1 for 语句

 #include <stdio.h>
main()
{
int i, j, sum;
j = ;
sum = ;
for (i = ; i <= ; i = i + )
{
sum = sum + i*j;
j = (-)*j;
}
printf("%d", sum);
}

11.2 while 语句

 #include <stdio.h>
main()
{
int i, j, sum;
i = ;
j = ;
sum = ;
while (i <= )
{
sum = sum + i*j;
j = (-)*j;
i = i + ;
}
printf("%d", sum);
}

11.3 do-while 语句

 #include <stdio.h>
main()
{
int i, j, sum;
i = ;
j = ;
sum = ;
do {
sum = sum + i*j;
i = i + ;
j = (-)*j;
} while (i <= );
printf("%d", sum);
}

12求e的值,e=1+1/(1!)+1/(2!)+1/(3!)+1/(4!)+...

12.1用 for 循环,计算前50项。

 #include <stdio.h>
main()
{
double n, e;
int i;
e = ;
n = ;
for (i = ;i <= ;i = i + )
{
n = n*i;
e = e + / n;
}
printf("e=%lf \n", e);
}

12.2用 while 循环,要求直至最后一项的值小于10^(-6)。

 #include <stdio.h>
main()
{
double n, e;
int i;
e = 1.0;
n = 1.0;
i = ;
while ( / n >= 10e-)
{
n = n*i;
e = e + / n;
i = i + ;
}
printf("%lf", e);
}

13输出从公元2000年至公元3000年所有闰年的年号,每输出10个年号换一行。判断公元年是否为闰年的条件是:(1)公元年数如能被4整除,而不能被100整除的,则是闰年。(2)公元年数能被400整除也是闰年。

13.1 for 语句

 #include <stdio.h>
main()
{
int i, n;
n = ;
for (i = ;i <= ;i = i + )
if (i % == && i % != || i % == )
{
printf("%d ", i);
n = n + ;
if (n % == ) printf("\n");
}
}

13.2 while 语句

 #include <stdio.h>
main()
{
int i, n;
n = ;
i = ;
while (i <= )
{
if (i % == && i % != || i % == )
{
printf("%d ", i);
n = n + ;
if (n % == ) printf("\n");
}
i = i + ;
}
}

13.3 do-while 语句

 #include <stdio.h>
main()
{
int i, n;
n = ;
i = ;
do
{
if (i % == && i % != || i % == )
{
printf("%d ", i);
n = n + ;
if (n % == ) printf("\n");
}
i = i + ;
}
while (i <= );
}

14输入n,求1+1/2+1/6+1/12+...+1/[n+(n+1)]

 #include <stdio.h>
main()
{
double s;
int n, k;
s = 1.0;
scanf("%d", &n);
for (k = ;k <= n;k++)
{
s = s + 1.0 / (k*(k + ));
}
printf("s=%f", s);
}

全国计算机等级考试二级教程-C语言程序设计_第5章_循环结构的更多相关文章

  1. 全国计算机等级考试二级教程-C语言程序设计_第4章_选择结构

    switch什么时候用break,什么时候不用break 调用break:一次执行一个分支,输入一个数据,对应一个级别 不调用break:连续执行多个分支 if...else 可以处理任何情况,大于小 ...

  2. 全国计算机等级考试二级教程-C语言程序设计_第8章_地址和指针

    面试: unsigned int *p1 = &num; int *p2 = &num; #define _CRT_SECURE_NO_WARNINGS #include<std ...

  3. 全国计算机等级考试二级教程-C语言程序设计_第15章_位运算

    位运算,不适用于实数,仅仅适用于整数.字符. C语言的位运算只能操作整数.字符,实数是指数方式表示的,不适用于位运算. #define _CRT_SECURE_NO_WARNINGS #include ...

  4. 全国计算机等级考试二级教程-C语言程序设计_第9章_数组

    四维数组,可用于航天卫星,三维+时间 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第14章_结构体、共用体和用户定义类型

    函数的返回值是结构体类型 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> struct ...

  6. 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串

    字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...

  7. 全国计算机等级考试二级教程-C语言程序设计_第3章_顺序结构

    1输入两个整数给变量x和y:然后输出x和y:在交换x和y中的值后,在输出x和y. #include <stdio.h> main() { int x, y, t; printf(" ...

  8. 全国计算机等级考试二级教程-C语言程序设计_第2章_C程序设计的初步知识

    正负号与被除数一致. 3 % (-5) == 3 (-3) % 5 == -3 不用求余运算符,求出余数. int x, y; 答:x - x / y * y; const int i = 10; c ...

  9. 全国计算机等级考试二级教程-C语言程序设计_第7章_函数

    函数执行,从右到左执行 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> main() ...

随机推荐

  1. 【转】morgan stanley 电面面经新鲜出炉

    楼楼早上上午大概11点接到的电话,一个声音炒鸡好听的GG,说他是来自morgan stanley的,想和我约一下店面时间.我一听,真是戳不及防,掐指一算,online的IKE测试已经过去20几天了吧, ...

  2. 对Linux 新手非常有用的20 个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现在我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳 ...

  3. Unity 调用android插件

    1. Unity的Bundle Identifier必须和你的android报名一致 Activity和View的区别: Activity应该是一个展示页面,View是页面上一些按钮视图等等. 如何调 ...

  4. Sublime Text 3 乱码解决

    步骤: 在Sublime Text里,按ctrl+`,打开Console,一次性输入如下代码: import urllib.request,os; pf = 'Package Control.subl ...

  5. Atom编辑器

    Atom介绍 Github的员工Nathan Sobo在Atom的博客中提到:”Sublime和TextMate十分方便,但是扩展性不足:另一方面,Emacs和 Vim扩展性很强却需要学习日程工作中很 ...

  6. oracle ORA_ROWSCN 行记录的更新时间

    在这介绍两个oracle 10G开始提供的一个伪列ORA_ROWSCN,它又分为两种模式一种是基于block,这是默认的模式,还有一种是基于row上,这种模式只能在建里表时指定ROWDEPENDENC ...

  7. 六步实现Spring.NET 与 NHibernate 的整合

    最近刚完成一个项目,其中对数据库的架构用到的是Spring.NET 与 NHibernate相结合的产物.对于这两项技术,我自己也不是太熟悉,不过好在网上有很多关于这方面的介绍文档,在这里就不多说了. ...

  8. Linux下重要日志文件及查看方式

    http://os.51cto.com/art/201108/282184_all.htm   1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的 ...

  9. PHP学习笔记四【类型运算】

    <?php //类型运算符 class Dog { } class Cat { } $a=new Cat; var_dump($a instanceof Cat); //在实际开发中,判断某一个 ...

  10. JS 一个修改ul的小示例

    javascript提供了innerHTML属性可以获取和设置对象的文本内容. 下面实例演示——单击<ul>下的<li>标签后,改变其显示值: 1.HTML结构 <ul  ...