第五章 循环结构程序设计

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

 文字描述:

1.定义int变量n,year,定义double变量number,rate;

2.n赋值为13,rate赋值为0.02,year赋值为1;

3.判断year<=10是否成立,若成立则计算“number=n*pow((1+rate),year)”并输出year和number;

4. year=year++;

5.继续运行第3步直到year>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】编写程序,计算1-1/4+1/7-1/10+1/13-1/16+···的和,直到某一项的绝对值小于10^-6为止

文字描述:

1.定义double变量sum,item,flag,denominator;

2.sum赋值为0,item赋值为1,flag赋值为1,denominator赋值为1;

3.当|item|>=0.000001时,执行循环语句;

4.计算“sum=sum+item”,“flag=-flag”,“denominator=denominator+3”,“item=flag/denominator”;

5.输出sum.

流程图:

代码:

#include<stdio.h>
#include<math.h>
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;
}

运行结果:

【例5.3】输入一个正整数n,求\sum_{i=1}^{n}{i}的值

文字描述:

1.定义int变量n,sum;

2.输入n;

3.sum赋值为0,i赋值为i;

4.如果i<=n为真则“sum=sum+i,i=i++”,否则进行下一步;

5.输出sum.

流程图:

代码、运行结果:

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

文字描述:

1.定义int变量i,n,定义double变量factorial;

2.输入n;

3.factorial赋值为1,i赋值为1;

4.如果i<=n则factorial=factorial*i,i=i++,否则进行下一步;

5.输出n,factorial.

流程图:

 代码:

#include<stdio.h>
int main()
{
	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;
}

流程图:

【例5.5】编写程序,输入一个整数n,计算1-1/4+1/7-1/10+1/13-1/16+···

文字描述:

1.定义int变量n,i,定义float变量sum,item;

2.输入n;

3.flag赋值为1,denominator赋值为1,sum赋值为0,i赋值为1;

4.如果i<=n那么“item=flag*1.0/denominator,sum=sum+item,flag=-flag,denominator=denominator+3”,i=i++否则运行下一步;

5.输出sum.

流程图:

代码、运行结果: 

【例5.6】编写程序,输入10个数,输出其中的最大数

文字描述:

1.定义int变量i,float变量x,max;

2.输入x;

3.使max赋值为x,i赋值为1;

4.如果i<=9那么输入第i+1个数x再判断x>max是否成立,若成立则进行i=i++并循环语句直到i>9时进行下一步;

5.输出max.

流程图:

 

代码、运行结果:

【例5.7】编写程序,输出所有水仙花数

文字描述:

1.定义int变量number,a,b,c;

2.number定义为1000;

3.如果number<=999为真那么“a=number/100,b=number%100/10,c=number%10”“number=a*a*a+b*b*b+c*c*c”并转到第4步,否则直接转第5步;

4.number++,并转到第3步;

5.输出number;

流程图:

代码:

#include<stdio.h>
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】编写程序,由键盘输入一个正整数,判断其是否为完数

文字描述:

1.定义int变量number,sum,i;

2.输入number;

3.sum赋值为0,i赋值为1;

4.如果i<=number-1为真则计算i++,number%i==0,sum=sum+1并在次循环语句若为假则进行下一步;

5.判断是否符合number==sum,若符合则完数,否则不是;

6.结束;

流程图:

代码、流程图:

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

文字描述:

1.定义int变量upper,lower,digit,i,other,定义char变量ch;

2.使upper,lower,digit,other赋值为0,i赋值为1;

3.如果i<=10成立那么进行下一步,不成立则跳转到第7步;

4.输入ch;

5.如果ch>'a'&&ch<='z'为真那么lower++,为假则判断ch>='A'&&ch<='Z'是否为真,若为真则upper++否判断ch>+='0'&&ch<='9'是否为真,若为真则digit++,若为假则other++,转到第6步;

6.i++,转到第3步;

7.输出upper,lower,digit,other;

流程图:

代码、运行结果:

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

文字描述:

1、定义int变量i,char变量ch;

2、i赋值为1;

3,如果(ch=getchar())!='\n'为真那么putchar(ch-32)并且i++,如果为假则结束程序.

流程图:

代码:

#include<stdio.h>
int main()
{
	int i;
	char ch;
	for (i = 1; (ch = getchar() )!= '\n';i++)
		putchar(ch-32);
		return 0;
}

运行结果: 

【5.11】由键盘输入3个数字,将其组合成一个整数并输出

文字描述:

1.定义int变量n,i,定义char变量ch;

2.将n赋值为0,i赋值为1;

3.如果i<=3那么输入ch并使n=n+ch-'0'并进行第4步,否则直接输出n;

4.i++并循环第3步;

流程图:

代码:

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

运行结果

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

文字描述:

1.定义int变量i,flag,number;

2.输入number;

3.flag赋值为1,i赋值为2;

4.如果“i<=number-1&&flag”为真那么判断“number%i==0”是否为真,若为真那么数并使flag=0,i++,否则再判断flag真假,为真输出“number是素数”为假则输出“number不是素数”;

流程图:

代码、运行结果: 

【例5.13】计算sum=\sum_{n=1}^{100}n的值

文字描述:

1.定义int变量i,sum;

2.i赋值为1,sum赋值为0;

3.如果i<=100为真那么执行第4步,为假执行第5步;

4.使sum=sum+i,i=i+1,跳回第3步;

5.输出sum.

流程图:

代码、运行结果:

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

文字描述:

1.定义int变量i,long变量n,fact;

2.i赋值为2,fact赋值为1;

3,输入n;

4,若i<=n为真执行第5步为假执行第6步;

5,使fact=fact*i,i=i+1跳转到第4步;

6.输出n,fact;

流程图: 

代码:

#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】由键盘输入一串字符,分别统计输入字符中数字字符、字母字符、及其他字符的个数

文字描述:

1. 定义int变量digit,letter,other,定义char变量ch;

2.使digit、letter、other都赋值为0;

3.输入ch;

4.若“ch!='\n'”为真则继续执行第3步,为假则执行第5步;

5.若“(ch>='0')&&(ch<'9')”为真则执行digit++,为假则执行第6步;

7.若“(ch>='a'&&ch<='z')||(ch>='A'&&ch'Z')”为真则l执行etter++,为假则执行other++;

8.输出digit,letter,other.

流程图:

代码、运行结果:

【例5.16】使用do-while语句计算sum=\sum_{n=1}^{100}n的值

文字描述:

1.定义int变量i,sum;

2.i赋值为1,sum赋值为0;

3.若i<=100为真那么执行第4步否则执行第5步;

4.执行sum=sum+1,i++并返回第3步;

5.输出sum.

流程图:

代码:

#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;
}

运行结果: 

【例5.17】求两个自然数的最大公约数和最小公倍数

文字描述:

1.定义int变量a,b,c,r,n,m;

2.输入a,b;

3.使m=a,n=b;

4.若“r!=0”为真则执行第5步,为假则执行第6步;

5.使r=a%b,a=b,b=r,并跳转到第4步;

6.输出最大公约数和最小公倍数.

流程图:

代码、运行结果:

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

文字描述:

1.定义long变量n,m,定义int变量count;

2.count赋值为0;

3.输入n;

4.使m=n;

5.若n<0为真则n=-n,为假则进行下一步;

6.判断“n!=0”,若为真则“n=n/10,count++”并重复第6步,为假则执行下一步;

7.输出m,count.

流程图:

代码:

#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.19】分析下面程序的运行结果

文字描述:

1.定义int变量i,

2.将i赋值为5;

3.判断“i%3==1”,若为真则进行第4步,若为假则执行第5步;

4.判断“i%5==2”,若为真则输出i,若为假则执行第5步;

5.i++;

6.判断“i!=0”,若为真则返回第3步,若为假则结束程序

流程图:

 代码:

#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.定义int变量n,m,i;

2.输入n;

3.m=sqrt(n);

4.i赋值为2;

5.判断i<=m,若为真则执行下一步,若为假则执行第7步;

6.判断n%i==0,若为真则执行下一步,若为假则返回第5步;

7.判断i>m,若为真则输出n是素数,若为假则输出n不是素数;

流程图:

代码:

#include<stdio.h>
#include<math.h>
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;
}

运算结果: 

【例5.21】从键盘输入一批学生的成绩(以负数作为结束标志),计算平均分,并统计不及格成绩个数

文字描述:

1.定义int变量num,n,定义float变量score,total;

2.使score,total赋值为0;

3.num赋值为0,n赋值为0;

4.输入score;

5.判断score<0,若为假则执行下一步,若为真则执行第9步;

6.判断score<60,若为真则执行下一步,若为假则执行第9步;

7.num++,total=total+score,n++;

8.返回第4步;

9.输出total/n,num.

流程图:

 代码:

#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;
}

运行结果:

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

文字描述:

1.定义int变量i,n;

2.i赋值为1,n赋值为1;

3.判断i<=100,若为真则执行下一步,若为假则结束程序;

4.判断i%7!=0,若为真则返回第3步,若为假则执行下一步;

5.输出i;

6.判断n++%5=0,若为真则输出\n,若为假则执行下一步;

7.i++,并返回第3步;

流程图:

代码:

#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;
}

运行结果:

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

文字描述:

1.定义int变量n,s;

2.s赋值为0,n赋值为1;

3.判断n<10,若为真则使s=s+n并执行下一步,若为假则执行第6步 ;

4.判断s>5,若为真则执行第6步,若为假则执行下一步;

5.判断n%2==1,若为真则返回第3步,若为假则执行n++;

6.输出s,n

流程图:

代码、运行结果:

【例5.24】使用goto语句计算sum=\sum_{n=1}^{100}n的值

文字描述:

1.定义int变量i,sum;

2.i赋值为1,sum赋值为0;

3.判断i<=100,若为真则执行sum=sum+1并执行下一步,若为假则输出sum;

4.i=i+1;

5.返回第3步;

流程图:

代码:

#include<stdio.h>
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;
}

运行结果:

【例5.25】求1!+2!+3!+···+10!

文字描述:

1.定义int变量i,j,定义double变量factorial;

2. factorial赋值为1,s赋值为0,i赋值为1;

3.判断i<=10,若为真则执行“factorial=1,j=1”并继续执行下一步,若为假则结束程序;

4.判断j<=i,若为真则执行“factorial=factorial*j,j++”并重新执行第4步,若为假则执行“s=s+factorial,i++”,并返回第3步;

流程图:

代码:

#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】编写程序,输出乘法口诀表

文字描述:

1.定义int变量i,j;

2.i赋值为1;

3.判断i<=9,若为真则使j=1并继续执行下一步,若为假则结束程序;

4.判断j<=i,若为真则输出“j*i=j*i”使i++并重新执行第4步,若为假则i++并返回第3步;

流程图:

 代码:

#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个

文字描述:

1.定义int变量i,n,k,count;

 2.count赋值为0,n赋值为2,;

3.判断n<100,若为真则“k=sqrt(n),i=2”并继续执行下一步,若为假则结束程序;

4.判断j<=k,若为真则执行下一步,若为假则执行第6步;

5.判断n%i==0,若为真则执行 i++并返回第4步,若为假则执行下一步;

6.判断i>k,若为真则输出n并执行下一步,若为假则执行n++后结束程序;

7.判断++count%10==0,若为真则输出\n,若为假则执行n++后结束程序

流程图:

代码:

#include<stdio.h>
#include<math.h>
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之间的正整数分解质因数

文字描述:

1.定义int变量i,j;

2.m赋值为10;

3.判断m<=20,若为真则执行“n=m,i=2”,若为假则结束程序;

4.输出n,并执行下一步;

5.判断n%i==0,若为真则输出i并执行下一步,若为假则执行i++并执行第7步;

6.n=n/i,继续执行下一步;

7.判断n!=i,若为真则返回第5步,若为假则执行m++并返回第3步;

流程图:

代码:

#include<stdio.h>
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;
}

运行结果:

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

文字描述:

1.定义int变量day,d1,d2;

2.day赋值为9,d2赋值为1;

3.使d1=(d2+1)*2;

4.使d2=d1,--d;

5.判断day>0,若为真则返回第3步,若为假则输出d1;

流程图:

代码、运行结果:

【例5.30】求sin(x)=x=x-x^3/3!+x^5/5!-x^7/7!+···

文字描述:

1.定义int变量n,float变x,double变量fz,fm;

2.n赋值为1,fm赋值为1;

3.输入x;

4.使fz=x,sinx=x;

5.n=n+1;

6.fz=fz*x*x;

7.fm=fm*(2*n-2)*(2*n-1);

8.sinx=sinx+fz/fm;

9.判断fabs(fz/fm>eps),若为真则返回第5.步,若为假则输出sin(x)=sinx;

10.输出sin(x)=sin(x)

流程图:

代码、运行结果

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

文字描述:

1.定义 float变量x1,x0,f,f1;

2,x1赋值为1.0;

3.x0=x1;

4.f=((2*x0-4)*x0+3)*x0-6;

5.f1=(6*x0-8)*x0+3;

6.x1=x0-f/f1;

7.判断fabs(z1-z0)>eps,若为真则返回第3步,若为假则输出x1

流程图:

代码,运行结果:

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

文字描述:

1.定义int变量men,women,child;

2.men赋值为0;

3.判断men<=9,若为真则women=0,若为假则结束程序;

4.判断women<=12,若为真则child=36-men-women,若为假则m++并返回第3步;

5.判断men*4=women*3=child*0.5==36,若为真则输出men,women,child;

6.women++,并返回第3步;

流程图:

代码

#include<stdio.h>
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四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数

文字描述:

流程图:

代码

#include<stdio.h>
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");
				

运行结果

【例5.34】编写程序如下图形:*

                                                 ***       

                                               *****        

                                              *******

                                             *********

文字描述:

1.定义int变量i,j;

2.i赋值为1;

3.判断i<=20-i,若为真则输出""执行j++并再次执行第3步,若为假则j=1;

4.判断j<=20*i-1,若为真则输出*,执行i++并再一次执行第4步,若为假则输出\n;

流程图:

代码

#include<stdio.h>
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次后结束程序

代码

#include<stdio.h>
#include<stdlib.h>
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("恭喜!你答对了,你真棒!");
			break;
		}
		else if (m > n && count < 5)
			printf("对不起!你猜小了!再来一次!");
		else if (m < n && count < 5)
			printf("对不起!你猜大了!再来一次!");
		if (count == 5)
		{
			printf("对不起!你没有机会了!\n这个数是:%d,游戏结束!\n", m);
		}
	}
	return 0;
}

运行结果

【例5.36】编写程序输出100~1000内的回文素数。回文素数是指既是回文数同时也是素数的整数。例如,131既是回文数也是素数,因此131是回文素数

代码

#include<stdio.h>
#include<math.h>
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】在所有三位整数中找出平方数中有连续的三位数字是该数本身的数,例如,50的平方是62500,250便是所要找的一个满足条件的三位整数

文字描述:

1.定义int变量x,t;

2.i\topwer\n;

3.xz赋值为100;

4.判断x<1000,若为真则执行t=x*x,若为假则结束程序;

5.判断t!=0,若为真则执行下一步,若为假则执行x++并再次执行第4步;

6.判断x==t%1000,若为真则输出x,x*x并返回第5步,若为假则执行并t=t/10并返回第5步;

流程图: 

代码

#include<stdio.h>
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;

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值