标签:info main 大学 小学 老师 inf 结束 do while 显示
5.3.1、用for语句实现循环
5.3.2、用whlie循环语句实现循环
5.3.3、用do while语句实现循环
5.3.4、用whlie语句和for语句配合实现循环
5.3.5、用for语句嵌套实现循环
5.3.1、用for语句实现循环
5.3.1.1 掌握for语句实现循环的方法
5.3.1.2掌握for语句实现循环的方法
循环嵌套的使用
5.3.2、用whlie循环语句实现循环
5.3.2.1掌握while语句实现循环的方法
5.3.2.2进一步掌握while语句实现循环的方法
5.3.3、用do while语句实现循环
5.3.4、用whlie语句和for语句配合实现循环
5.3.5、用for语句嵌套实现循环
5.3.5.1掌握for语句嵌套实现循环的方法
5.3.5.2掌握for语句嵌套(3层)实现循环的方法
掌握continue语句的用法
5.3.5.3掌握for语句嵌套实现循环的方法
掌握continue语句的用法
5.3.1.1 求数列前n项
问题的简单描述:编写一程序,求出1,1+2,1+2+3.....数列中前n项的值。流程图如下
#include<stdio.h>
#include<conio.h>
main()
{
int i,j=0,k,s=0;
printf("enter a number :");
scanf("%d",&k);
for (i=1;i<=k;i++)
{
s=s+i;
printf("%d ",s);
j++;
}
}
问题分析:分清楚i与s的关系就ok
5.3.1.2求数列前n项
问题的简单描述:编写一程序,求数列1,-3!,5!,-7!...(-1)^n-1(2n-1)!前n项的和。n的值由键盘输入。流程图如下
#include<stdio.h>
main()
{
int n,i,j,sign=1;
float fac,sum;
printf("please input value of n:");
scanf("%d",&n);
sum=0.0;
for(i=1;i<=n;i++)
{
fac=1.0;
for(j=1;j<=2*i-1;j=j+1)
{
fac=fac*j;
}
fac=fac*sign;
sum=sum+fac;
sign=-sign;
}
printf("sum=%.0f\n",sum);
}
问题分析:理清楚外循环和内循环之间的联系,并且看流程图就可以得出。刚开始老师没讲按照书上的打,打不出,发现是i 的条件表达式错误了,再次说明不能一味的按照书上的。
5.3.2.1统计学生的最高最低成绩
问题描述:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。程序流程图如下图。
#include<conio.h>
#include<stdio.h>
main()
{
float x,max,min;
printf("please input scores:");
scanf("%f",&x);
max=min=x;
while(0<=x&&x<=100)
{
if (x>max) max=x;
if (x<min) min=x;
scanf("%f",&x);
}
printf("\nmax=%f\nmin=%f\n",max,min);
}
问题分析:知道成绩一定要大于零,用while语句就行。
5.3.2.2 求水仙花数
问题描述:求所有水仙花数(水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身,如153为水仙花数1^3+5^3+3^3=153)。程序流程图如下图。
#include<stdio.h>
main()
{
int x,y,z;
int k=100;
while(k<=999)
{
x=k/100;
y=(k/10)%10;
z=k%10;
if(k==x*x*x+y*y*y+z*z*z)
printf("%d\n",k);
k++;
}
}
问题分析:看了流程图就比较简单。
5.3.3、求不等式。
问题描述:求满足下列不等式求满足1+1/2+1/3+...+1/n>value这个不等式的n最小值,的n的最小值,其中,value是大于1的任何数。流程图如下
#include<stdio.h>
main()
{
float sum,value;
int n;
printf("Input value:");
scanf("%f",&value);
sum=0.0;
n=0;
do
{
++n;
sum+=1.0/(float)n;
}
while(sum<value);
printf("n=%d",n);
}
问题分析:看流程图中可以知道sum<value时才会输出。
5.3.4、十进制转换
问题描述:输入4个数字字符,并把其转换为4位十进制整数后显示出来。程序流程图如下图。
#include<stdio.h>
main()
{
char c;
int k,data;
data=0;
for(k=0;k<4;k++)
{
while(1)
{
c=getchar();
if (c>='0'&&c<='9')
break;
}
if(k==0) data+=(c-'0')*1000;
if(k==1) data+=(c-'0')*100;
if(k==2) data+=(c-'0')*10;
if(k==3) data+=(c-'0');
}
printf("Data=%d",data);
}
问题分析:刚开始的时候把等号又写成了一个,而不是两个,然后一直显示不出来,后面同学看了发现是没有写成两个等于号,改了之后就ok了。还是要细心啊。用for循环来完成程序运行。利用if语句进行判断,输入非数字字符则继续;否则,程序跳出本次循环。输入的字符为数字字符则将其转换为对应的十进制整数。
5.3.5.1 百马百担问题
#include<stdio.h>
main()
{
int m,n,k;
int sum=0;
printf("各种驮法如下:\n");
for(m=1;m<=100;m++)
for(n=1;n<=100-m;n++)
{
k=100-m-n;
if((k%2==0)&&(3*m+2*n+0.5*k==100))
{
printf("大马%3d匹;中马%3d匹;小马%3d匹.\n",m,n,k);
sum++;
}
}
printf("共有%d种驮法.\n",sum);
}
问题分析:知道马和马可以驮担之前的关系,因为两匹小马可以驼一担所以为k%2==0。
5.3.5.2求等差数列
#include<stdio.h>
main()
{
int a,b,c,d,i,sum=0;
for(a=1;a<=26;a++)
for(d=1;d<=26;d++)
{
b=4*a+6*d;
if (b!=26)
continue;
else
{
c=a*(a+d)*(a+2*d)*(a+3*d);
if(c!=880)
continue;
else
for(i=0;i<6;i++)
{
printf("%d,",a+i*d);
sum=sum+(a+i*d);
}
}
}
printf("\n数列的前六项的和:%d\n",sum);
}
问题分析:满足数列前4项值之和为26,还必须满足数列前4项之积为880。根据其中的关系写出表达式。
5.3.5.3食品分配问题
问题描述:有30个学生一起买小吃,共花钱50元,其中,每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?程序图如下:
#include<stdio.h>
main()
{
int x,y,z,sum;
sum=0;
for(x=1;x<30;x++)
{
for(y=1;y<30;y++)
{
z=30-x-y;
if((z!=0)&&(3*x+2*y+z==50))
{
printf("大学生%3d\t中学生%3d\t小学生%3d\n",x,y,z);
sum=sum+1;
}
else
continue;
}
}
printf("sum=%d\n",sum);
}
问题分析:和5.3.5.2一样,找出满足的关系式然后利用for循环表达来进行。
1.在上课的时候还是不够时间去完成所有的题目,打字速度和解题速度都有待提高。
2.在百马百担的问题上思考了很久,主要是关系式要清楚
3.有时候还是会犯一些低级错误,但是比以前好多了。
标签:info main 大学 小学 老师 inf 结束 do while 显示
原文地址:https://www.cnblogs.com/zzzdka/p/10722823.html