<1> 循环
1.1 for
(1)基本结构:
for(表达式1; 表达式2; 表达式3)
{
语句块;
}
#include<stdio.h>
int main(int argc, char const *argv[])
{
for(int i=0;i<5;i++)
{
printf("%d\n",i);
}
return 0;
}
(2)执行顺序:
先执行表达式1,判断表达式2是否成立:
成立:进入循环,执行代码块,再执行表达式3,再判断表达式2
不成立:退出循环
(3)练习:
1.打印所有三位数之间的水仙花数
#include<stdio.h>
int main(int argc, char const *argv[])
{
int a=0,b=0,c=0;
for(int i=100;i<1000;i++)
{
a=i%10; //个位
b=i/10%10; //十位
c=i/100; //百位
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%d\n",i);
}
}
return 0;
}
2.判断一个三位数是不是水仙花数
#include<stdio.h>
int main(int argc, char const *argv[])
{
int x=0;
int a=0,b=0,c=0;
printf("输入一个三位数:");
scanf("%d",&x);
a=x%10;
b=x/10%10;
c=x/100;
if(x==a*a*a+b*b*b+c*c*c)
{
printf("%d是水仙花数\n",x);
}
else
{
printf("%d不是水仙花数\n",x);
}
return 0;
}
(3)变形
int i;
for(i=1;i<5;i++) //原型
{
printf("%d\n",i);
}
printf("i:%d\n",i); //i=5
==============================
int i=1;
for(;i<5;i++) //省略表达式1
{
printf("%d\n",i);
}
================================
int i=1;
for(;i<5;) //省略表达式1和表达式3
{
printf("%d\n",i);
i++;
}
==================================
int i=1;
for(;;); //省略表达式2------会造成无限循环
{
printf("%d\n",i);
i++;
}
==================================
(4)嵌套结构:
for(int i=0;i<5;i++)
{
for(int j=0;j<3;j++)
{
printf("%d %d\n",i,j);
}
}
打印九九乘法表
for(int i=1;i<10;i++)
{
for(int j=1;j<=i;j++)
{
printf("%d*%d=%d\t",i,j,i*j);
}
putchar(10);
}
%m.n 其中m:位宽 .n保留n位小数
int a=2,
b=22,
c=222;
printf("%3d\n",a);
printf("%3d\n",b);
printf("%3d\n",c);
练习:
5
*
**
***
****
*****
***** 0空格
**** 1空格
*** 2空格
** 3
*
#include<stdio.h>
int main(int argc, char const *argv[])
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
printf("*");
}
putchar(10);
}
for(int i=n;i>=1;i--)
{
for(int j=1;j<=n-i;j++)
{
printf(" ");
}
for(int j=1;j<=i;j++)
{
printf("*");
}
putchar(10);
}
return 0;
}
1.2 while
(1)结构:
while(终止条件)
{
代码段;
增值/减值;
}
死循环: while(1) for(;;)
while(0) 含义是 :判断是假,循环结束
1.3 do_while
(1)结构:
do
{
代码段;
} while (终止条件);
(2)while 和 do_while 区别:
do_while 先执行一次代码段,再判断条件是否成立;
while 先判断条件是否成立,再执行代码段
1.4 循环控制语句
break : 终止本层整个循环
continue : 终止本层本次循环,继续下次循环
return 0 : 结束整个程序
练习:
1.输入一个5位数,判断它是不是回文数,当输入0时循环结束。
即12321是回文数,个位与万位相同,十位和千位相同。
#include<stdio.h>
int main(int argc, char const *argv[])
{
int x=0;
int a,b,c,d;
do
{
printf("输入一个5位数:");
scanf("%d",&x);
if(x==0)
{
break;
}
a=x%10;
b=x/10%10;
c=x/1000%10;
d=x/10000;
if(a==d&&b==c)
{
printf("他是回文数\n");
}else
{
printf("他不是回文数\n");
}
}while(1);
return 0;
}
2.写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),计算表达式data1 op data2 的 值.其中op可以为+、-、*、/四个符号中的任一种(用switch语句实现)
#include<stdio.h>
int main(int argc, char const *argv[])
{
int data1=0,data2=0;
char op=0;
printf("输入两个数字和一个字符:");
scanf("%d %c %d",&data1,&op,&data2);
switch(op)
{
case '+':
printf("%d%c%d=%d\n",data1,op,data2,data1+data2);
break;
case '-':
printf("%d%c%d=%d\n",data1,op,data2,data1-data2);
break;
case '*':
printf("%d%c%d=%d\n",data1,op,data2,data1*data2);
break;
case '/':
printf("%d%c%d=%d\n",data1,op,data2,data1/data2);
break;
default:
printf("输入格式错误\n");
}
return 0;
}
3.输入任意两个数,输出两数之间(包括这两个数)偶数之和。
思路: 将输入的两个数a,b中小的数a,依次加1,加到b值的大小,每次循环判断这个数a是否为 偶数,则累加到sum 中
#include<stdio.h>
int main(int argc, char const *argv[])
{
int a=0,b=0;
int sum=0,tem=0;
printf("输入两个数:");
scanf("%d %d",&a,&b);
if(a>b)
{
tem=a;
a=b;
b=tem;
}
for(;a<=b;a++)
{
if(a%2==0)
{
sum+=a;
}
}
printf("sum=%d\n",sum);
return 0;
}