程序结构:
if结构,if…else结构 ,多重if分支结构,switch结构
while循环,do..while循环和for循环。
写循环结构主要注意两点:循环条件(做多少遍)和循环体(重复做的事情)。
while结构语法:
while(条件){
//循环体;
}
特点:先判断,后执行,条件不满足一次都不执行。
注意:检查循环条件是否恒成立,如果循环条件恒成立将造成死循环。
示例1:
int i=1;
while(i<=5){
printf("第%d遍:我是最棒的!\n",i);
i++;//i=i+1;
}
示例2:
int num=1,result;
while(num<=10){
result = num*10;
printf("%d*10=%d\n",num,result);
num++;
}
示例3:
int realPrice=1600;
int price,i=1;
while(i<=5){
printf("第%d次,输入商品的价格",i);
scanf("%d",&price);
if(price<realPrice){
printf("低了\n");
}else if(price==realPrice){
printf("中了\n");
break;//跳出循环
//i=10;
}else{
printf("高了\n");
}
i++;
}
printf("您一共猜了%d次\n",i);
do…while循环结构:
语法:do{
循环体;
}while(条件);
特点:先执行,后判断, 至少执行1次
示例1:
//计算100以内所有3的倍数和个位或十位带3数字之和。
int i=0,sum=0,ge,shi;
do{
ge = i%10; //获取个位
shi = i/10%10;//获取十位
if(i%3==0||ge==3||shi==3){
sum+=i;
}
i++;
}while(i<=100);
printf("100以内所有3的倍数和带3数字之和为:%d",sum);
示例2:
//猜数游戏。要求猜一个介于1~10之间的数字,并统计用户所用的次数。
int number=8,guess;
int count=0;//用于统计用户猜的次数
do{
printf("请输入一个1~10之间的整数:\n");
scanf("%d",&guess);
if(guess>number){
printf("大了\n");
}else if(guess<number){
printf("小了\n");
}
count++;//更加次数
}while(guess!=number);
printf("您一共用了%d次猜到了答案%d\n",count,number);
循环嵌套: 一个循环结构中包含其他循环结构
循环嵌套的特点:只要当内层循环结束之后,才会执行下一趟外层循环。
while(条件){
while(条件){
}
}
示例1:打印矩形
//打印4行8列的矩形
int i=0,j;
//外层循环控制行数
while(i<4){
j=0;
while(j<8){ //内层循环控制每行打印星号的个数
printf("*");
j++;
}
printf("\n");//换行
i++;
}
示例2: 打印直角三角形
*
**
***
****
*****
int i=0,j;
while(i<5){//外层循环控制打印的行数
j=0;
while(j<=i){//内层循环控制打印星号的个数
printf("*");
j++;
}
printf("\n");
i++;
}
示例3: 倒直角三角形
*****
****
***
**
*
int i=0,j;
while(i<5){//外层循环控制行数
j=0;
while(j<5-i){//内层循环控制星号的个数
printf("*");
j++;
}
printf("\n");//换行
i++;
}
示例4: 打印平行四边形(倒直角三角形+矩形)
********
********
********
********
实现思路: 外层循环控制行数,内层循环控制星号或空格的个数
每一行有两部分:空格+星号
i=0,第一行:3个空格+8个星号
i=1,第二行:2个空格+8个星号
i=2,第三行:1个空格+8个星号
i=3,第四行:0个空格+8个星号
int i=0,j,k;
while(i<4){//外层循环控制行数
j=0;
k=0;
//控制空格的循环
while(j<3-i){
printf(" ");
j++;
}
//控制星号的循环
while(k<8){
printf("*");
k++;
}
printf("\n");
i++;
}
示例5: 使用do…while嵌套打印奇数班直角三角形
*
***
*****
*******
分析:
i=0,第一行:1个星号
i=1,第二行:3个星号
i=2,第三行:5个星号
i=3,第四行:7个星号
int i=0,j;
//外层循环控制打印的行数
do{
//内层循环控制打印星号的个数
j=0;
do{
printf("*");
j++;
}while(j<2*i+1);
printf("\n");//换行
i++;
}while(i<4);
示例6:打印倒直角三角形
*******
*****
***
*
i=0;打印7个星号
i=1;打印5个星号
i=2;打印3个星号
i=3;打印1个星号
int i=0,j;
do{
j=0;
do{
printf("*");
j++;
}while(j<7-2*i);
printf("\n");
i++;
}while(i<4);
示例7: 正等腰三角形:
*
***
*****
*******
分析:
外层循环控制行数:4行
内层循环控制每行打印的内容: 空格+星号
i=0,第一行: 3个空格+1个星号
i=1,第二行: 2个空格+3个星号
i=2,第三行: 1个空格+5个星号
i=3,第四行: 0个空格+7个星号
int i=0,j,k;
while(i<4){//外层循环控制行数
//空格部分
j=0;
while(j<3-i){
printf(" ");
j++;
}
//星号部分
k=0;
while(k<2*i+1){
printf("*");
k++;
}
printf("\n");
i++;
}
示例8: 倒等腰三角形
*****
***
*
分析:每行有空格和星号组成
i=0;第一行: 0个空格+5个星号
i=1;第二行: 1个空格+3个星号
i=2;第三行: 2个空格+1个星号
int i=0,j,k;
while(i<3){
//空格
j=0;
while(j<i){
printf("$");
j++;
}
k=0;
//星号
while(k<5-2*i){
printf("*");
k++;
}
printf("\n");
i++;
}
示例9: 打印菱形
*
***
*****
*******
*****
***
*
分析:正的等腰三角形+倒的等腰三角形
int i=0,j,k;
while(i<4){//外层循环控制行数
//空格部分
j=0;
while(j<3-i){
printf(" ");
j++;
}
//星号部分
k=0;
while(k<2*i+1){
printf("*");
k++;
}
printf("\n");
i++;
}
//倒等腰三角形
i=0;
while(i<3){
//空格
j=0;
while(j<=i){
printf(" ");
j++;
}
k=0;
//星号
while(k<5-2*i){
printf("*");
k++;
}
printf("\n");
i++;
}
for循环结构: 当明确知道循环次数时,for循环更加简洁。
语法:
for(表达式1;表达式2;表达式3){
//循环体;
}
执行顺序: 1.第一步执行表达式1,表达式1代表循环变量的初始化,只会执行1次.
2. 第二步执行表达式2, 表达式2代表循环条件.
3. 第三步:执行循环体
4. 第四步:执行表达式3,表达式3:更改循环变量。
注意:从语法上表达式1,表达式2和表达式3都可以缺少。但是如果缺少表达式2(条件)或表达式3(更改循环变量)经常会导致死循环发生。从语法上说for中的分号(;)不能缺少。
示例1:
int i;
for(i=0;i<10;i++){
printf("我是徐晓东,我冤枉!\n");
}
示例2: 计算阶乘: 5!=5*4*3*2*1
int i,number,fact=1;
printf("请输入一个正整数:\n");
scanf("%d",&number);
for(i=1;i<=number;i++){
fact=fact*i;
}
printf("%d的阶乘为%d",number,fact);
示例3: 输出所有水仙花数
分析:水仙花数是一个三位数: 个位^3+十位^3+百位^3=这个数
1.获取所有的三位数
2.从三位数中获取个位,十位,百位
3.判断这个数是否为水仙花数:个位^3+十位^3+百位^3==这个数
4.将水仙花数输出
int i,ge,shi,bai;
for(i=100;i<1000;i++){
ge = i%10;//个位
shi = i/10%10;//十位
bai = i/100;//百位
if(i==ge*ge*ge+shi*shi*shi+bai*bai*bai){
printf("%d\t",i);
}
}
示例4: 打印99乘法表:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
int i,j;
//外层循环控制行数
for(i=1;i<=9;i++){
//内层循环控制每行的列数
for(j=1;j<=i;j++){
printf("%d*%d=%d\t",i,j,i*j);
}
printf("\n");
}
示例5: 打印正等腰三角形
*
***
*****
*******
int i,j,k;
//外层循环控制行数
for(i=0;i<4;i++){
//空格
for(j=0;j<3-i;j++){
printf(" ");
}
//星号
for(k=0;k<2*i+1;k++){
printf("*");
}
printf("\n");
}
break和continue关键字:
break:
1.如果使用在switch结构中case语句中,跳出当前的case语句
2.如果使用循环结构中,跳出当前循环。
continue:如果使用在循环结构中,代表跳过本次循环,开始下一次循环
while(条件){
…
break;
….
}
while(条件){
…
continue;
….
}
示例1:
int i;
for(i=0;i<10;i++){
if(i%3==0){
//break;//跳出循环
continue;//跳过本次循环
}
printf("%d\t",i);
}
示例2:
//逢"3"过小游戏
int i;
for(i=1;i<=50;i++){
//i%3==0:3的倍数; i%10==3:个位带3; i/10==3:十位带3
if(i%3==0||i%10==3||i/10==3){
printf("过\t");
continue;
//break;
}
printf("%d\t",i);
}
示例3:输出100~200之间所有素数(只能被1和本身整除的数)
分析:1.获取100~200之间的数
2.将这个数从2开始除到(数值-1),如果中间除的过程中出现除尽情况,跳出
int i,j,flag;
for(i=100;i<=200;i++){
flag=0;//flag代表是否能除尽
for(j=2;j<i;j++){
if(i%j==0){
flag=1;//除了1和他本身之外有能除尽的数
//break;
}
}
if(flag==0){
printf("%d\t",i);
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章