编程用for和while语句编写10以内相加的c语言程序,C语言循环结构程序设计

内容详解

while语句

do—while语句

for语句

循环嵌套

break和continue语句

实例展示

热身小练:打印6行6列的 “ * ”矩阵,两个“ * ”之间用空格隔开

#include

int main()

{

for(int i=1;i<=6;i++)

{

for(int j=1;j<=6;j++)

{

printf("* ");

}

printf("\n");

}

return 0;

}

while语句

解释说明:

a3440af8ee6f4220a63de649d6eb60ba.jpg

①while语句可以是单语句,也可以是复合语句

②循环体中应有使循环趋于结束的语句

举个栗子:求解前100项和

#include

int main()

{

int i = 1; //设置循环初值

int sum = 0;

while(i<=100)

{

sum+=i; //循环主体,累加求和

i++; //修改循环的控制变量

}

printf("前100项和为:%d",sum);

return 0;

}

注意点:

while语句的作用范围

循环体如果包含一个以上的语句,应当用花括号括起来作为复合语句,否则while循环体的作用范围只到while后面的第一个分号处。

例如:

while(a>1);

{a++

}

复合语句{a++;}不是循环体,while(a>1);后的分号所代表的空语句才是这里的循环体内嵌语句。

算法实例:

1.求解300~800之间7的倍数和

#include

int main()

{

int num = 300; //循环初值

int sum = 0;

while(num<=800)

{

if(num%7==0) //筛选7的倍数

{

sum+=num; //对筛选的数据进行求和

}

num++; //修改循环变量

}

printf("300~800间7的倍数和为:%d",sum);

return 0;

}

2.依次输入一批正数,并求所有输入的正数之和,当输入负数或0时结束。

#include

int main()

{

float num,sum = 0.0;

scanf("%f",&num);

while(num>0.0)

{

sum+=num;

scanf("%f",&num);

}

printf("这批正数的和为:%f",sum);

return 0;

}

do—while语句

解释说明:

1fbafae0b884471e97255f02fc446013.jpg

①do—while先执行循环体,后判断循环条件

②do—while作为一个整体,while后必须加“;”

栗子依旧:求解前100项和

#include

int main()

{

int i = 1;

int sum = 0;

do

{

sum+=i;

i++;

}while(i<=100);

printf("前100项和为:%d",sum);

return 0;

}

1.依次输入一批正数,并求所有输入的正数之和,当输入负数或0时结束。

#include

int main()

{

float num,sum = 0.0;

do

{

scanf("%f",&num);

sum+=num;

}while(num>=0.0);

printf("这批正数的和为:%f",sum);

return 0;

}

2.a35d3479144c8940f93ab032707e7254.png

#include

#include

int main()

{

float t,pi,n,s;

t=1;pi=0;n=1.0;s=1;

do

{

pi = pi+t;

n+=2;

s=-s; //符号位,正负号变换

t=s*1./n;

}while((fabs(t))>1e-6); //fabs(t)为绝对值函数

pi=pi*4;

printf("pi=%f\n",pi);

return 0;

}

for语句

解释说明:

19159afa7a8c9baa2b272dbe9131d16e.png

网罗到的新栗子:

36be12d0bca20f6b55227649570bf695.png

#include

#include

int main()

{

int a,s,k;

scanf("%d",&a);

s = 0;

for(k=1;k<=100;k++)

{

s+=(k+a);

}

if(s>0)

printf("s=%d\n",sqrt(s));

else

printf("s=0\n");

}

2.打印斐波那契数列:1,1,2,3,5,8····的前20个数,并按每行打印5个数的格式输出

#include

int main()

{

int f1 = 1,f2 = 1,f3;

printf("%d %d ",f1,f2);

for(int i = 3;i <= 20;i++)

{

f3 = f1+f2;

f1 = f2;

f2 = f3;

printf("%d ",f3);

if(i%5==0)

{

printf("\n");

}

}

return 0;

}

3.计算1!+2!+3!+···+n!,其中n=1,2,···20

#include

int main()

{

int sum = 0,j = 1;

for(int i = 1;i <= 20;i++)

{

j = i*j; //计算n!

sum+=j; //各阶乘的求和

}

printf("1!+2!+···+20!=%d",sum);

return 0;

}

4.判断一个整数m是否是素数

#include

#include

int main()

{

int m,n,flag = 1; //flag作为一个标志

scanf("%d",&m);

for(n = 2;n

{

if(m%n==0)

flag=0;

}

if(flag)

{

printf("%d is a prime number",m);

}else

{

printf("%d is not a prime number",m);

}

return 0;

}

循环语句的比较

b59403d2a6adc42e92d0380b83fc993c.png

注意点:当初始条件不满足时,两种循环语句有所区别,区别点可参与上述所写的关于各个语句的“注意点”。

循环嵌套(多重循环)

一、嵌套

dfd3fe9d9dacf4cdd8988ac7608f622f.png

注意点:为使程序结构清晰,采用逐层缩进的方式。

二、执行过程

1.打印九九乘法表

#include

int main()

{

int k;

for(int i = 1;i<=9;i++)

{

for(int j = 1;j<=i;j++)

{

k = i*j;

printf("%d*%d=%d ",j,i,k);

}

printf("\n");

}

return 0;

}

注意点:

①内循环必须完全嵌套在外循环内,不得互相交叉;

②嵌套循环的循环控制变量不可同名,并列循环的循环控制变量可以同名

2.百鸡问题:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各几何?”

#include

int main()

{

int i,j,k;

for(int i = 0;i <= 20;i++)

{

for(int j = 0;j <= 33;j++)

{

for(int k = 0;k <= 100;k++)

{

if((i+j+k)==100&&(5*i+3*j+(1/3)*k)==100)

{

printf("%d %d %d\n",i,j,k);

}

}

}

}

return 0;

}

break和continue语句

1.作用:用于循环的中途退出

21c66d1d9ac6588ec11458262eb1516b.png

break语句:

功能:跳出循环体,即提前结束,接着执行循环下面的语句。

实战小练:

①韩信点兵:韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10,计算韩信至少有多少兵?

#include

int main()

{

for(int i = 1; ;i++ )

{

if(i%5==1 && i%6==5 && i%7==4 && i%11==10)

{

printf("i = %d\n",i);

break;

}

}

}

②判断一个整数m是否为素数(要求:包含break语句)

34a81b095d2971b66befcfb3e6275365.png

#include

#include

int main()

{

int m,i,k;

scanf("%d",&m);

k=sqrt(m);

for(i=2;i<=k;i++)

{

if(m%i==0);

break;

}

if(i>=k+1)

{

printf("%d is a prime number",m);

}else

{

printf("%d is not a prime number",m);

}

return 0;

}

扩展:输出100~200之间的全部素数

#include

#include

int main()

{

int m,n=0,k,i;

for(m=101;m<=200;m=m+2) //m=m+2用于加快循环速度

{

if(n%10==0&&n!=0)

{

printf("\n");

}

k=sqrt(m);

for(i=2;i<=k;i++)

{

if(m%i==0)

break;

}

if(i>=k+1)

{

printf("%d ",m);

n=n+1;

}

}

return 0;

}

continue语句

功能:结束本次循环,即跳过循环体中下面尚未执行的语句,结束本次循环。

举个栗子:输出100~200之间不能被3整除的数

#include

int main()

{

for(int i=100;i<=200;i++)

{

if(i%3==0)

continue;

printf("%d ",i);

}

return 0;

}

goto语句

功能:无条件转向标号所在的语句

用处:与if语句构成循环

举个栗子:求1~100之间的奇数和,即求1+3+5+7+···+99

#include

int main()

{

int i = 1,sum = 0;

loop:sum+=i;

i+=2;

if(i<100)goto loop;

printf("sum=%d\n",sum);

return 0;

}

循环应用

①求两个非负整数的最大公约数

分析:此题目是循环次数不固定的实例,采用相除取余的迭代算法

已知:两正整数 x,y,两数的余数为 r ,gcd()为求公因数函数

则: gcd(x,y)=gcd(y,r)

直到第二项值为0,第一项即为最大公因数

范例:(24,9)=(9,6)=(6,3)=(3,0)=3

#include

int main()

{

int a,b,x,y,r;

scanf("%d %d",&a,&b);

x=a;

y=b;

while(y!=0)

{

r=x%y;

x=y;

y=r;

}

printf("最大公约数=%d\n",x);

return 0;

}

同理可求解最小公倍数:a*b/最大公因数

综合应用

生成两个10以内的随机数,选菜单完成两个随机数的算法四则运算

分析:该题目采用菜单完成,主要训练做题者用程序实现人机交互以及程序的持续执行。在四则运算的基础上,加上循环while(1),在循环中使用菜单实现与用户反复交互,可执行多遍运算。选菜单0退出循环,用break实现;选菜单超值,继续显示菜单,用continue实现。生成两个10以内的随机数,用函数rand()%d获取,函数srand(time(0))使每次初始产生的随机数不同。

随机数的使用

C语言中有如下几种几种产生随机数的常见函数,其头文件:stdlib.h,time.h

①rand() 函数产生一个0到32767之间的随机数,例如rand()%10产生一个10以内的随机数

②srand(time(n))函数和rand函数配合使用,产生随机数的初始发生数据,n为任意时间数值,例如srand(time(0))使随机数初始化函数,使每次初始产生的随机数不同。

#include

#include

#include

int main()

{

int op;

int a=1,b=2,c;

srand(time(0));

//随机数初始化函数,使每次初始产生的随机数不同

while(1) //循环使用菜单

{

a=rand()%10; //产生两个0~10的随机数a,b

b=rand()%10;

printf(" ****************************************\n");

printf(" * 请输入选项代码(0-4) *\n");

printf(" * 1——加法 *\n");

printf(" * 2——减法 *\n");

printf(" * 3——乘法 *\n");

printf(" * 4——除法 *\n");

printf(" * 0——退出 *\n");

printf(" ****************************************\n");

scanf("%d",&op); //接受菜单选项

switch(op) //判断所选菜单值,做相应的四则运算

{

case 1: c=a+b;break;

case 2: c=a-b;break;

case 3: c=a*b;break;

case 4: if(b!=0) c=a/b;break;

}

if(op<0||op>5) continue; //选菜单超界,继续显示菜单

if(op==0) break;

printf("a=%d b=%d c=%d\n",a,b,c);

getchar();

}

return 0;

}

小结

循环结构是结构化程序设计三大结构之一,是学习程序设计语言的基础和重点之一,同时也是难点之一。希望阅读者可以熟练掌握循环语句的使用,在此为大家提供一些小技巧:编写循环程序,一般可采用穷举法、迭代法或递推法,但有时也需要具体问题具体分析,采用其他的算法解体,结合不同的应用也会有不同的解题方法,可以通过大量不同类型的实例训练,拓宽解题思路,学会循环解题的逻辑思维方式及编程技巧,加油,奥里给!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值