概述
1. 使用do-while循环实现从1到100的累加
#include <stdio.h>
int main()
{
int i=1,sum=0;
do{
sum = sum + i;
i++;
}while(i<=100);
printf("sum = %dn",sum);
return 0;
}
这种累加方法效率比较低,一般可以直接用高斯公式采用乘法解决,那样用不到循环
2. 使用while循环实现从1到10的累乘
#include <stdio.h>
int main()
{
int i = 1;
long product = 1;
while(i <= 10)
{
product *= i;
i++;
}
printf("product = %ld",product);
return 0;
}
这里的用于存储累乘的变量product定义成长整型,数据较大,防止溢出正确显示
3. 使用for循环实现计算1+1/2-1/3+1/4-1/5+…-1/41的值,并输出
#include <stdio.h>
int main()
{
int i , flag = 1;
double s = 1;
for(i = 2 ; i <=41 ; i++)
{
s += flag * 1.0/i;
/*s是double型,flag是int型,乘1.0可以隐含类型转换*/
flag = -1 * flag;
/*交替正负*/
}
printf("1+1/2-1/3+1/4-1/5+...-1/41 = %lf",s);
return 0;
}
这道题是固定的累加长度,可以改善成由用户输入的n值,进行正负交替累加,只需要加一个scanf语句即可
4. 嵌入break语句的循环实现: 检查输入的密码是否正确,正确则直接退出,错误则提示还有两次机会,直到机会用完或者输入正确密码则结束。
#include <stdio.h>
int main()
{
int i = 1 , password1 = 4567 , password2;
/*初始正确密码password1,以及用户输入的密码password2*/
do
{
printf("n请输入密码:");
scanf("%d",&password2);
if(password1 == password2)
{
printf("n口令正确!");
break;
/*正确输入,循环结束*/
}
else
{
printf("n口令错误!还有%d次机会n",3-i);
i++;
/*错误输入,重新输入密码,动态改变输入机会数*/
}
}while(i<=3);
/*i<=3,当i累加到4时,机会用完,循环结束*/
return 0;
}
5. 嵌入continue语句的循环实现: 输出所有从100到1000之间其中十位等于个位加百位的三位数。
#include <stdio.h>
int main()
{
int i = 100,a,b,c,num=0;
while(i++ < 1000)//判断结束后i自增1
{
a = i/100;//接收百位数字,小数自动保留整数部分
b = i/10 % 10;//接收十位数字,先除以10,在对10取余
c = i%10;//接收个位数字,直接对10取余
if(b != a+c)
continue;
/*不满足要求不进行下面语句,直接下一次循环*/
printf("%5dt",i);
num++;
if(num%10 == 0)
printf("n");
}
printf("n这样的数一共有:%d个",num);
return 0;
}
continue语句一般都用在遍历判断是否符合某种条件,如果不满足直接跳过,满足才进行操作
6. 使用多重for循环语句的循环实现: 输出5行的由*号构成的等腰三角形。
#include <stdio.h>
int main()
{
int i,j;
for(i=1 ; i<=5 ; i++)//外层for循环对每一层进行遍历
{
for(j=1 ; j<=(5-i) ; j++)
printf(" ");
/*输入*号前面的空格调整*位于正中输出*/
for(j=1 ; j<2*i ; j++)
printf("*");//第一层一个,第二层三个,第三层五个。。。
printf("n");
}
return 0;
}
7. 编程序,输入10个整数,找出最大数。
#include <stdio.h>
int main( )
{
int k,x,max;
scanf("%d", &x);
max=x;
//对于第一个输入的数字暂时定为最大数
for(k=2;k<=10;k++)
{
scanf("%d", &x);
if (x >= max)
max=x;
//对按序输入的下一个数字进行比较,对max更新
}
printf("Max=%dn", max);
return 0;
}
还可以用一维数组实现,先将数字全部放进数组保存,再对数组遍历比较,这种方法代码偏多,上面的方法,先全部输入10个数字,每进入一次for循环体,取出按序输入的下一个数字
8. 编程序,按上三角,下三角不同格式打印九九表。
下三角:
算法分析:
- 主要用到嵌套的for循环
- 用 i 表示行上的变量,j 表示列上的变量,外层循环控制行,内层循环控制列,再输出当前九九表的值,最后输出一个换行
#include <stdio.h>
int main()
{
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<=i;j++) //j只循环到i,保证以三角形形式输出
printf("%d*%d=%dt",i,j,i*j);
printf("n");//换行输出下一行,t制表符规整输出
}
return 0;
}
运行:
上三角:
算法分析:
- 仍然是用到嵌套的for循环
- 用 i 表示行上的变量,j 表示列上的变量,外层循环控制行,内层循环控制列,与上面的主要是外层循环起点的改变
#include <stdio.h>
int main()
{
int i,j;
for(i=9;i>=1;i--) //第一行最长,从较大数乘以较小数
{
for(j=1;j<=i;j++)
printf("%d*%d=%dt",i,j,i*j);
printf("n");
}
return 0;
}
运行:
上三角输出类似九九表:
分析:
这个外层 i 仍然是从9开始自减至1,内层 j 从 i 开始自减至1
#include <stdio.h>
int main()
{
int i,j;
for(i=9;i>=1;i--)
{
for(j=i;j>=1;j--)
printf("%d*%d=%dt",i,j,i*j);
printf("n");
}
return 0;
}
运行:
9. 编写一个程序,求出1到1000之内能被7或11整除的数。
分析:
- 能被7或11整除也就是逻辑判断式 i % 7== 0 || i %11 ==0 满足。
- 加上一个从1到1000的for循环遍历即可
#include <stdio.h>
int main()
{
int i,k=0;
for(i=1;i<=1000;i++) //外层循环遍历
if(i%7==0||i%11==0) //内层逻辑判断是否可被整除
{
printf("%dt",i);
k++;
if(k%10 == 0)
printf("n"); //满10个数换行输出
}
printf("这样的数字一共有%d个",k);
return 0;
}
运行:
10. 程序设计
有50头牛,运输50筐货物,大牛一次能运3筐,中牛一次能运2筐,两头小牛一次运1筐,编程计算共有多少种运输方案。
提示:
可用试凑法或穷举法:设大牛数量为dn,中牛数量为zn,小牛数量为xn;
则当 dn + zn + xn = 50 且 3dn+2zn+xn/2 = 50 时,就是一种运输法。
想想看dn、zn和xn的取值范围,用三重循环去试凑就可以得出全部结果
参考结果:
#include <stdio.h>
int main()
{
int dn,zn,xn,i=0; //大牛数量dn,中牛数量zn,小牛数量xn,方案数量i
for(dn=0;dn<=16;dn++) //dn最多不超过50/3 ≈ 16
{
for(zn=0;zn<=25;zn++) //zn最多不超过50/2 ≈ 25
{
for(xn=0;xn<=50;xn++) //dn最多不超过50/1 ≈ 50
{
if(dn+zn+xn==50&&3*dn+2*zn+xn/2==50) //循环到某种组合符合要求
printf("方案%d: %d头大牛,%d头中牛,%d头小牛n",++i,dn,zn,xn/2*2);
}
}
}
return 0;
}
运行:
最后
以上就是犹豫向日葵为你收集整理的C语言的循环嵌套结构,使用while,d-while,for,break,continue设计循环累加、正负交替累加、累乘、九九乘法表等的全部内容,希望文章能够帮你解决C语言的循环嵌套结构,使用while,d-while,for,break,continue设计循环累加、正负交替累加、累乘、九九乘法表等所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复