一、for循环基本知识
基本结构:
for (式子1;式子2;式子3) 语句;
执行过程:
首先执行式子1(式子1只执行第一次),然后用式子1的结果去和式子2去判断,式子2为真则执行循环语句(为假就不执行),循环语句执行完去执行式子3,再用式子3执行完后的值去判断式子2的真假,如此重复,直到执行完式子3后的结果不符合式子2,循环结束。
注意事项:
- 一般式子1代表初值,式子2代表条件,式子3代表增量
- 三个式子之间用两个分号进行分隔,且两个分号不可省略
- 三个式子都可以进行省略,若不写式子2,缺省为条件永真
二、经典例题及解析
1.水仙花数
水仙花数:水仙花数是一个三位数,特点是各个位数的立方和等于该数本身。
#include <stdio.h>
int main()
{
int i,a,b,c;
for(i=100;i<=999;i++)
{
a = i%10;
b = i/10%10;
c = i/100;
if ((a*a*a+b*b*b+c*c*c) == i) printf("%d\n",i);
}
return 0;
}
运行结果:
2.求规定范围内的完数
完数:一个正整数的所有真因子(除了自身以外的约数)的和恰好等于它本身
#include <stdio.h>
int main()
{
int n,i,j,sum;
printf("请输入计算完数终止数:\n");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
sum=0;
for (j=1;j<i;j++)
{
if (i%j==0) sum+=j;
}
if (sum==i) printf("%d\n",i);
}
return 0;
}
运行结果:
3.求规定范围内质数
质数:一个大于1的整数只能被1和自己整除
#include <stdio.h>
int main()
{
int i,j,k,n;
printf("请输入终止范围:");
scanf("%d",&n);
for (i=2;i<=n;i++)
{
k=1;
for (j=2;j<i;j++)
{
if (i%j==0){
k=0;
break;
}
}
if (k==1) printf("%d\n",i);
}
}
运行结果:
4.计算阶乘之和
正整数的阶乘:是所有小于及等于该数的正整数的积,并且0的阶乘为1。 自然数n的阶乘写作n! 例:5!=5 * 4 * 3 * 2 * 1
#include <stdio.h>
int main()
{
int i,n,sum=0,p=1;
printf("请输入阶乘终止值:\n");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
p*=i;
sum+=p;
}
printf("阶乘结果为:%d",sum);
}
运行结果:
5.计算5+55+555+555+55555(类型)
大同小异,其他数值也可以这样计算
#include <stdio.h>
int main()
{
int i,sum=0,p=0;
for (i=1;i<=5;i++)
{
p=p*10+5;
sum+=p;
}
printf("结果为:%d",sum);
}
运行结果:
6.计算1+12+123+1234+12345(类型)
此类题大部分都是先找规律,如需累加则在循环体内累加
#include <stdio.h>
int main()
{
printf("%d",1+12+123+1234+12345);
int i,sum=0,p=0;
for (i=1;i<=5;i++)
{
p=p*10+i;
sum+=p;
}
printf("结果为:%d",sum);
}
运行结果:
7.判断用户输入正整数的位数
#include <stdio.h>
int main()
{
int n,k=0;
printf("请输入正整数:\n");
scanf("%d",&n);
for (;n!=0;)
{
k++;
n/=10;
}
printf("该正整数的位数为:%d",k);
}
运行结果: 编写程序计算x的y次方
#include <stdio.h>
int main()
{
int x,y,i,p=1;
printf("请输入x和y\n");
scanf("%d%d",&x,&y);
for (i=1;i<=y;i++)
{
p*=x;
}
printf("x的y次方为%d",p);
return 0;
}
运行结果:
8.判断某正整数是否为回文数
回文数:从左向右看和从右向左看都一样 例:1234321是回文数
#include <stdio.h>
int main()
{
int n,y,p=0;
printf("请输入测试正整数\n");
scanf("%d",&n);
y=n;
while (n!=0)
{
p=p*10+n%10;
n/=10;
}
if (p==y) printf("%d是回文数",y);
else printf("该数不是回文数");
return 0;
}
运行结果:
9.九九乘法表
#include <stdio.h>
int main()
{
int i,j;
for (i=1;i<=9;i++){
for (j=1;j<i+1;j++){
printf("%d*%d=%d ",j,i,i*j);
}
printf("\n");
}
return 0;
}
10.统计用户输入的字符中,英文字母,空格,数字以及其他字符的个数
for循环,并利用ASCII判定范围
#include <stdio.h>
int main()
{
int z=0,s=0,k=0,o=0;
char ch;
printf("请输入字符串\n");
for (;1;){
ch=getchar();
if (ch == '\n') break;
else if (ch>=65&&ch<=90 || ch>=97&&ch<=122) z+=1;
else if (ch == 32) k+=1;
else if (ch>=48&&ch<=57) s+=1;
else o+=1;
}
printf("该字符串中英文字母占:%d个\n该字符串中空格占:%d个\n该字符串中数字占:%d个\n该字符串中其他字符占:%d个\n",z,k,s,o);
}
while方法,利用字符判定范围
#include <stdio.h>
int main()
{
int z=0,s=0,k=0,o=0;
char ch;
printf("请输入字符串\n");
while ((ch=getchar())!='\n')
{
if (ch>='A'&&ch<='Z' || ch>='a'&&ch<='z') z+=1;
else if (ch == ' ') k+=1;
else if (ch>='0'&&ch<='9') s+=1;
else o+=1;
}
printf("该字符串中英文字母占:%d个\n该字符串中空格占:%d个\n该字符串中数字占:%d个\n该字符串中其他字符占:%d个\n",z,k,s,o);
}
运行结果:
11.连续输入计算平均值(保留两位小数)
#include <stdio.h>
int main()
{
int i;
float n,sum=0.0;
for (i=1;i!=0;i++)
{
printf("请输入需要累加的数值%d\n(注:输入0时结束)\n",i);
scanf("%f",&n);
sum+=n;
if (n==0) {
printf("平均值为%.2f",sum/i); break;
}
}
}
运行结果:
|