1.运行程序
#include
void main( )
{ int num=0;
while(num++<=2)
printf(“%d\n”,num);
}
要求:
(1)输入源程序,编译、连接、运行。
(2)将运行结果填入表4-1,并分析循环的次数及变量num的变化过程。
(3)将”while(num++<=2)”改为”while(++num<=2)”,编译后再次运行,比较前后的差别并分析原因。
2.运行程序
#include
void main( )
{ int i;
for(i=1;i<5;++i)
if(i%2) printf("*");
else continue;
printf("End");
}
要求:
(1)输入源程序并进行编译、连接。
(2)运行程序,将运行结果填入表4-2,并分析循环的次数以及continue的流程。
(3)将continue改为break,运行程序分析结果。比较continue语句和break语句在循环控制中的差别。
表4-2 程序测试及结果分析
修改前运行结果: |
修改后运行结果: |
分析:continue 语句只结束本次循环,而不是终止整个循环。continue 只能在循环语句中使用。 |
分析:break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。 |
3. 运行程序
#include
void main( )
{ int a,b;
for(a=1,b=1;a<=100;a++)
{ if(b>=10) break;
if(b%3==1)
{ b+=3;
continue;
}
}
printf("%d\n",a);
}
要求:
(1)输入源程序并进行编译、连接。
(2)运行程序,将运行结果填入表4-3,并分析循环的次数以及continue的流程。
表4-3 程序测试及结果分析
运行结果 |
|
分 析 |
循环一次,continue其作用为结束本次循环跳过循环体中下面尚未执行的语句,然后进行下一次是否执行循环的判定 |
4.运行填空
下列程序的功能是:找出200以内最大的能被17整除,在程序的横线上填入适当内容,运行验证结果。
#include
void main( )
{ int i;
for( ; ;i--)
{ if( ) break;
}
printf("%d\n",i)
}
程序:
#include
#include
void main()
{
system("color f3");
int i;
for (i=200;i>=0 ; i--)
{
if (i%17==0) //能被17整除
break;
}
printf("200以内最大的能被17整除的数是:%d\n", i);
}
5.编写程序
计算并输出数列:1,3,5,…,2n-1,…的前n项之和,其中n由键盘输入。要求分别用3种循环语句实现。
程序:
(1).while语句
#include
int main(void)
{
int n, num, sum = 0;
printf("please input the n:\n");
scanf_s("%d", &n);
num = 2 * n - 1;
while (num >= 1)
{
sum += num;
num -= 2;
}
printf("1+3+5+...%d=%d", sum);
return 0;
}
(2).do-while语句
#include
int main()
{
int n, num, sum = 0;
printf("please input the n:\n");
scanf_s("%d", &n);
num = 2 * n - 1;
do
{
sum += num;
num -= 2;
} while (num >= 1);
printf("1+3+5+...%d=%d", sum);
return 0;
}
(3)for语句
#include
int main()
{
int a, n, num, sum = 0;
printf("please input the n:\n");
scanf_s("%d", &n);
a = 2 * n - 1;
for (num=1;num<=a;num=num+2)
{
sum += num;
}
printf("1+3+5+...%d=%d", sum);
return 0;
}
6.编写程序
求1000以内能被73或127整除的自然数平方根之和。
程序:
#include
#include
void main()
{
ᅠᅠᅠ int n = 1;
ᅠᅠᅠ double sum = 0.0;
ᅠᅠᅠ while (n <= 1000)
ᅠᅠᅠ {
ᅠᅠᅠᅠᅠᅠᅠ if (n % 73 == 0 || n % 127 == 0)
ᅠᅠᅠᅠᅠᅠᅠ {
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ sum += sqrt(n);
ᅠᅠᅠᅠᅠᅠᅠ }
ᅠᅠᅠᅠᅠᅠᅠ n++;
ᅠᅠᅠ }
printf("sum=%f\n", sum);
}
7.编写程序
编写程序打印如下乘法表:
1
2 4
3 6 9
4 8 12 16
… …
9 18 27 36 45 54 63 72 81
程序:
#include
int main()
{
ᅠᅠᅠ int i = 1, j, sum;
ᅠᅠᅠ while (i <= 9)
ᅠᅠᅠ {
ᅠᅠᅠᅠᅠᅠᅠ j = 1;
ᅠᅠᅠᅠᅠᅠᅠ while (j <= i)
ᅠᅠᅠᅠᅠᅠᅠ {
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ sum = i * j;
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ printf("%2d\t", sum);
ᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠᅠ j++;
ᅠᅠᅠᅠᅠᅠᅠ }
ᅠᅠᅠᅠᅠᅠᅠ printf("\n");
ᅠᅠᅠᅠᅠᅠᅠ i++;
ᅠᅠᅠ }
ᅠᅠᅠ return 0;
}
8.一个数如果恰好等于它的因子之和,这个数就称为“完数”。 例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
编写程序,指出1000以内的所有“完数”,并按下面格式输出其因子:
6 its factors are 1,2,3
程序:
#include
void main()
{
int n, i, num;//因子之和
for (n = 2; n <= 1000; ++n)
{
num = 0;
for (i = 1; i < n; ++i)
{
if (n % i == 0) //i代表n对应的任何一个可能的因子
{
num += i;
}
}
if (num == n)//判断因子之和是否和该数相等
{
printf("%d its factors are: ", n);
for (i = 1; i < n; ++i)
{
if (n % i == 0)
{
printf("%5d", i);
}
}
printf("\n");
}
}
}
9.编写程序
程序:
#include
int main()
{
int i, j, k, n=1;
for (k = 1; k < 101; k++)
{
for (i = 1; i < k; i++)
{
for (j = 1; j < k; j++)
if(i*i+j*j==k*k)
{
printf("第%d组解",n);
n++;
printf("%3d %3d %3d\t", i, j, k);
}
}
}
}
10.编写程序
输入两个正整数,求它们的最大公约数和最小公倍数。
程序:
#include
int main()
{
int a, b, c, m, t;
printf("请输入两个数:\n");
scanf_s("%d%d", &a, &b);
if (a < b)
{
t = a;
a = b;
b = t;
}
m = a * b;
c = a % b;
while (c != 0)
{
a = b;
b = c;
c = a % b;
}
printf("最大公约数是:\n%d\n", b);
printf("最小公倍数是:\n%d\n", m / b);
}
程序测试及运行结果:
6.
7.
8.
9.
10.
结果分析与讨论:
- 在实际应用中三种循环语句应该如何选择?
答:
(1)一般来讲需要使用自增++或者自减--这样的形式来遍历的,都会使用for循环;
(2)判断某个条件是否为真或者为假的时候,就使用while循环多一些;
(3)do...while...在先执行后判断,至少执行一次 第1要素与第3要素相同时是首选。
do...while...感觉这个用的好少,因为能用它的地方,也都可以用while,只是某些时候用while会显得代码不那么可读的时候可以用do...while...;2.对于条件恒为真的循环,如何处理?
例如:while(1){…}
do{…} while(1)
for( ; ; ) {…}
答:
(1)while(1){…}:在循环体中加入break,并使他有机会执行;
(2)do{…} while(1):还可以设置循环计数变量,当溢出上限时停止程序并报错, 以便自查;
(3)for( ; ; ) {…}:在循环体中设置退出条件break;
3.当循环体为空语句(;)时是否会出现语法错误?
答:会,没有退出判定条件,也没有循环执行的对象。相当于一个死循环。大括号中需要加个分号,否则会报语法错误。