重温C语言八----程序流程控制

2024-01-12 23:50

本文主要是介绍重温C语言八----程序流程控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序流程控制

(1).介绍

在程序中程序运行的流程控制决定程序是如何执行的,是我们必须掌握的主要有三大流程控制语句

1)顺序控制

介绍:程序从上到下逐行执行中,中间没有任何判断和跳转

代码案例:

void main(){int num=12;int num2=num+2;
}

2)分支控制

-1.分支控制if-else

介绍:让程序有选择的执行,也分三种

(1)单分支
if(条件表达式){​      执行代码块; }

说明:当条件表达式为真(非0)时,就会执行{}的代码,返回假(0)时,不会执行{}的代码

案例

#include <stdio.h>int main() {printf("请输入一个整数:\n");int age=0;fflush(stdout);scanf("%d",&age);if(age>18){printf("你的年龄大于18岁了,要对自己的行为负责!");}return 0;
}
(2)双分支
if(条件表达式){
执行代码块1;
}else{
执行代码块2
}

说明:当条件表达式成立时(为真),执行代码块1,否则执行代码块2

案例:

#include <stdio.h>int main() {printf("请输入一个整数:\n");int age=0;fflush(stdout);scanf("%d",&age);if(age>18){printf("你的年龄大于18岁了,要对自己的行为负责!");}else{printf("你的年龄不大,这次放过你了!");}return 0;
}

案例练习:

#include <stdio.h>
void main(){/** 第一题int a=24;int b=34;if(a+b>50){printf("hello world");}第二题:double a=12.0;double b=13.0;if(a>10.0 && a+b>20.0){printf("a+b=%f",a+b);}else{printf("数太小了,没必要");}第二题int a=16;int b=15;int c=a+b;if(c%3==0&&c%5==0){printf("sucess!");}else{printf("fail1");}*/int age=2008;if(age%4==0 && age %100!=0 ||age%400==0){printf("是闰年");}
}
(3)多分支

基本语法:

if(条件表达式){执行表达式1}else if(条件表达式2){执行代码块2}
...else{
执行代码块;
}

在这里插入图片描述

1)当条件表达式1成立时,即执行代码块1

2)如果表达式1不成立时,才去判断表达式2是否成立。

3)如果表达式2成立,就执行代码块2,

以此类推,如果所有的表达式都不成立,则执行else代码块

注意:只能有一个执行入口

案例演示:

岳小鹏参加C语言2级考试,他和父亲岳不群达成协议

如果:

成绩为100分奖励一辆BMW;成绩为[60,80]时,奖励一台iphone7plus.

当成绩为[60,80]奖励一个ipad;

其他什么奖励也没有,请从键盘上输入他的期末考试并加以判断。

#include <stdio.h>
void main(){/** 岳小鹏参加C语言2级考试,他和父亲岳不群达成协议如果:成绩为100分奖励一辆BMW;成绩为[60,80]时,奖励一台iphone7plus.当成绩为[60,80]奖励一个ipad;其他什么奖励也没有,请从键盘上输入他的期末考试并加以判断。
分析:1,定义一个double保存成绩2.因为判断条件有多个,因此我们使用多分支处理*/double score=0;printf("请输入成绩:");fflush(stdout);scanf("%lf",&score);if(score==100){printf("奖励宝马一台");}else if(score>80 && score<=99){printf("奖励一台iphone7plus");}else if(score>=60 && score<=80){printf("奖励一台ipad");}else{printf("没有奖励");}
}

案例:

#include <stdio.h>
#include <math.h>
/** 求ax^2+bx+c=0的根。a,b,c分别为函数的参数,如果b^2-4ac>0,则有两个解;* b^2-4ac=0,则有一个解。b^2-4ac<0则无解* 提示* x1=(-b+sqrt(b^2-4ac))/2a* x2=(-b-sqrt(b^2-4ac))/2a* 提示2:sqrt(num) 需要#include<math.h>* 分析:*   1.定义三个double a,b,c*   2.b^2-4ac出现了很多次(>3)。,因此我们可以使用一个变量来保存从而避免重复计算提高效率*   3.sqrt(num),需要#include<stdio.h>*   使用到多分支*   走代码*/
void main(){/**
double a=3,b=100,c=6,x1=0,x2=0;
double t=b*b-4*a*c;if(t>0){x1=(-b+sqrt(t))/(2*a);x2=(-b-sqrt(t))/(2*a);printf("\nx1=%.2f",x1);printf("\nx2=%.2f",x2);}else if(t==0){x1=(-b+sqrt(t))/(2*a);printf("\nx1=%.2f",x1);}else{printf("无解");* */int height=0;int money=0;int handsome=0;printf("请输入值:");fflush(stdout);scanf("%d,%d,%d",&height,&money,&handsome);if(height>180 && money>100000 && handsome==1){printf("我一定要嫁给他");}else if(height>180 || money>10000000 || handsome==1){printf("嫁吧,比上不足,比下有余");}else{printf("不嫁");}}
(4)嵌套分支

基本介绍

在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支结构称为内层分支外面的分支结构称为外层分支。嵌套分支不适合过多,最多不要超过3层

基本语法

if(){if(){	//被包含的可以是各种分支类型}else{}
}

案例:

#include <stdio.h>
/** 参加百米运动会,如果用时8秒以内就进入决赛,否则提示淘汰。并且根据性别提示进入* 男子组或女子组 。输入成绩和性别* double second;chr gender;* 1.变量double second保存时间* 2.变量 char gender 保存性别* 3.使用嵌套分支*/
void main(){double time=0.0;char gender= ' ';printf("请输入跑步成绩(s)\n");fflush(stdout);scanf("%lf",&time);//根据time判断是否进入决赛if(time<=8){//进入printf("请输入性别(m/f)\n");fflush(stdout);scanf("%c",&gender);//接收到上次回车fflush(stdout);scanf("%c",&gender);//这次才接收到性别if(gender=='m'){printf("请进入男子组就决赛");}else{printf("请进入女子组就决赛");}}else{printf("你被淘汰");}}
#include <stdio.h>
/** 出票系统:根据淡旺季的月份和年龄打印票价* 4-10旺季*     成人:(18-60):60*     儿童: (<18):半价*     老人(>60):1/3*   淡季:*      成人: 40*      其他:20*/
void main (){int month=0;int age=0;double price =60.0;printf("month:");fflush(stdout);scanf("%d",&month);printf("age:");fflush(stdout);scanf("%d",&age);if(month>=4 && month <=10){//旺季if(age>60){printf("¥%.2f",price/3);}else if(age>=18){printf("¥%.2f",price);}else{printf("¥%.2f",price/2);}}else{//淡季if(age>=18 && age<60){printf("¥40");}else{printf("¥20");}}
}
-2.switch分支结构

流程图:

在这里插入图片描述

基本介绍:
switch(表达式){
case常量1://当语句块1break;
case常量2:语句块2break;
...
case 常量n:语句块n;
break;
default:default 语句块;
break;
}
#include <stdio.h>
/** 案例:* 请编写一个程序,该程序可以接收一个字符,比如 :a,b,c,d,e.f,g* a表示星期一。。。依次类推* 根据用户输入的信息提示相应的信息* switch语句完成*/
void main(){char c1=' ';printf("请输入一个字符:\n");fflush(stdout);scanf("%c",&c1);//任何有值的都可以看做表达式switch (c1) {case 'a':printf("星期一");break;case 'b':printf("星期二");break;case 'c':printf("星期三");break;case 'd':printf("星期四");break;case 'e':printf("星期五");break;case 'f':printf("星期六");break;case 'g':printf("星期日");break;default:printf("只能输入a~g");}
}
switch细节谈论

1)switch语句中的expression是一个常量表达式,必须是一个整形(char\short,int long等)或枚举类型

2)case子句中的值必须是常量,而不是变量

3)default子句是可选的,当没有匹配的cse时,执行default

4)break语句用来执行完一个case分支后使程序跳出switch语句块;

5)如果没有写break,会执行下一个case语句块,直到遇到break或者执行到switch结尾,这个现象称为穿透

超级案例:

#include <stdio.h>
void main(){/*//使用switch把小写类型的char型转为大写。只转换a,b,c.其他的输出出otherchar c1=' ';printf("please input a char:\n");fflush(stdout);scanf("%c",&c1);switch (c1) {case 'a':printf("A");break;case 'b':printf("B");break;case 'c':printf("C");break;default:printf("other");}*//*//对学生成绩大于60分的,输出"合格",低于60分的,输出"不合格"。(输入的成绩不能大于100)double d1=0.0;printf("请输入成绩:");fflush(stdout);scanf("%lf",&d1);switch ((int)(d1/60)) {//括号中可以是一个表达式case 0:printf("不合格");break;case 1:printf("合格");break;default:printf("你输入的成绩有误");break;}*///根据用于指定月份,打印该月份所属的季节,3,4,5春季6,7,8夏季 9,10,11秋季 12,1,2冬季
int month=0;printf("请输入月份;");fflush(stdout);scanf("%d",&month);switch (month) {//会自动向下穿透case 3:case 4:case 5:printf("春季");break;case 6:case 7:case 8:printf("夏季");break;case 9:case 10:case 11:printf("秋季");break;case 12:case 1:case 2:printf("冬季");break;}}
switch与if的比较

1.如果判断的具体数值不多,而且符合整形、枚举类型。虽然两个语句都可以使用,建议使用switch语句

2.其他情况:对区间判断,对结果为真假的判断,使用if,if的范围更广

3)循环控制

基本介绍:可以让代码循环执行

-1.for循环

基本语法:

for(循环变量初始化,循环条件,循环变量迭代){循环语句操作;
}

案例:

#include <stdio.h>
void main(){for(int i=0;i<5;i++){printf("你好C语言\n");}
}

注意 事项和细节说明

1)循环条件是返回一个表示真(非0)假(0)的表达式

2)for(;循环判断条件;)中的初始化变量迭代可以不写(写到其他地方)但是两边的分号不能省略

 /** 第一种写法for(int i=0;i<50;i++){printf("你好C语言\n");}*///写法2:可以将变量的初始化和迭代放在其他地方/*int i=1;for(;i<=5;){printf("你好世家\n");i++;}

3)循环初始值可以有多条初始化语句,但要求类型一样,并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开

for(i=0,j=0;j<count;i++,j+=2)

 //循环初始值可以有多条初始化语句,但要求类型一样,// 并且中间用逗号隔开,循环变量迭代也可以有多条变量迭代语句,中间用逗号隔开int i=0;int j=0;for(i=0,j=0;i<=3;i++,j++){printf("i=%d,j=%d\n",i,j);}printf("%d,%d",i,j);//i=4,j=4

for的练习案例:

#include <stdio.h>
void main(){//1.打印1~100之间所有是9的倍数的整数的个数及总和,使用for完成int sun=0;int count=0;for(int i=1;i<=100;i++){if(i%9==0){//判断i是不是9的倍数count++;sun+=i;printf("%d  ",i);}}printf("个数是:%d  他们的和是%d\n",count,sun);
}

第二道题:

int a=0;printf("请输入一个整数:\n");fflush(stdout);scanf("%d",&a);for(int i=0,j=a;i<=a,j>=0;i++,j--){printf("%d+%d=%d\n",i,j,i+j);}
-2.while循环

基本语法:

while(循环条件){循环体(语句)循环变量迭代
}

使用while循环做题:

#include <stdio.h>
void main(){//输出5句你好世界int i=1;while(i<=5){printf("你好世界\n");i++;}
}
//2//2.打印1~100之间所有能被3整除的数int i=1;while(i<=100){if(i%3==0){printf("%d  ",i);}i++;}//3.打印40——200之间所有的偶数int i=40;while(i<=200){if(i%2==0){printf("%d  ",i);}i++;}/** 不断输入姓名,直到输入exit为止(while完成)* 分析:*   1.需要接收用户的输入,字符串[字符数组]*   2。提示:<string.h>是一个strcmp函数,判断两个字符是否相同*   int strcmp(const char *str1,const char *str2)*   把Str1所指向的字符串和str2所指向的字符串进行比较,返回0表示相等,非0表示不相等*/char name[10] =" ";while(strcmp(name,"exit")!=0){printf("请输入姓名:\n");fflush(stdout);scanf("%s",&name);printf("您输入的名字是:%s",name);}

流程图:d

在这里插入图片描述

while循环的细节注意事项

1)循环条件是返回一个表示真(非0)假(0)的表达式

2)while循环是先判断再执行语句

-3.do while循环

基本语法:

循环变量的初始化;
do  {循环语句;循环变量迭代;
}while(循环条件);
//注意.do while后面的 ;不能省略

实战案例:

#include <stdio.h>
void main(){//5句话int i=1;//循环变量初始化int max=5;//循环的最大次数do{printf("你好世界 ");i++;}while(i<=max);//循环条件
}

注意事项与细节说明:

1)循环条件是返回一个表示真(非0)假(0)的表达式

2)do…while循环是先执行,再判断

案例:

1.求出1~100的和:

#include <stdio.h>
void main(){//求出1~100的和int i=1;//循环变量初始化int sum=0;//循环的最大次数do{sum=sum+i;i++;}while(i<=100);//循环条件printf("1~100的和为:%d",sum);
}

2.统计1~200之间能被5整除但不能被3整除的个数

#include <stdio.h>
void main(){/*//求出1~100的和int i=1;//循环变量初始化int sum=0;//循环的最大次数do{sum=sum+i;i++;}while(i<=100);//循环条件printf("1~100的和为:%d",sum);*/int i=1;int count=0;do{if((i%5==0)&&(i%3!=0)){count ++;printf("%d  ",i);}i++;}while(i<=200);printf("1~200之间的符合条件的数为: %d",count);
}

题2:

#include <stdio.h>
void main(){/** 如果老公同意老婆购物,则老婆一直购物,* 直到老婆说不同意为止[printf("老婆问:我可以继续购物吗?y/n")]*/char answer=' ';do{printf("老婆问:我可以继续购物吗?y/n");fflush(stdout);scanf("%c",&answer);//获取用户getchar();//过滤掉回车键}while(answer =='y');printf("老婆终于退出购物了");
}

4)多重循环控制

介绍:
  1. 将一个循环放在另一个循环体内,就行成了嵌套循环,其中for,while,do…while均可以作为外层循环和内层循环。【建议一般使用两层,最多不超过三层】如果循环过多,会造成可读性降低
  2. 实质上,嵌套循环就是把内层循环当作外层循环的循环体。当只有内层循环的循环条件位false时。才会完全跳出内层循环,才可结束外层的当次循环,开始下一轮循环
  3. 设外层循环次数为m次,内层为m次,则内层循环实际上要执行m*m次。
案例
  • 统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】

    #include <stdio.h>
    /** 多重循环的操作*/
    void main(){/** 第一题* 统计3个班成绩情况,每个班有5名同学,* 求出各个班的平均分和所有班级的平均分【学生的成绩从键盘输入】* 分析:先死后活,先简单后复杂* 1,各个班级的平均分* 2,所有班级的平均分* 3,定义变量表示班级的个数ClassNum定义变量表示学生的个数 stuNum* 4,定义变量classTotalScore* 5,定义变量score接受学生的成绩'* 6.使用两层for循环*/int stuNum=5;int classNum =2;double classTotalScore=0.0;double score=0.0;int i,j;for(i=1;i<=classNum;i++){//控制班级的循环次数//每次给一个班级输入成绩时需要清零classTotalScore=0.0;for(j=1;j<=stuNum;j++){printf("\n请输入第%d个班级的第%d个学生的成绩\n",i,j);fflush(stdout);scanf("%lf",&score);classTotalScore +=score;//累计成绩}//当内层的for循环结束后,就得到了该班级的总成绩printf("\n第%d个班级的平均分=%.2f",i,classTotalScore/stuNum);}}
  • 统计三个班级的及格人数,每个班有5名同学

    //在上一个代码的基础之上,定义一及格人数变量。符合条件的话就进行递增迭代 
    int stuNum=5;int classNum =2;double classTotalScore=0.0;double score=0.0;int jige=0;int i,j;for(i=1;i<=classNum;i++){//控制班级的循环次数//每次给一个班级输入成绩时需要清零classTotalScore=0.0;jige=0;for(j=1;j<=stuNum;j++){printf("\n请输入第%d个班级的第%d个学生的成绩\n",i,j);fflush(stdout);scanf("%lf",&score);classTotalScore +=score;//累计成绩if(score>=60){jige++;}}//当内层的for循环结束后,就得到了该班级的总成绩printf("\n第%d个班级的平均分=%.2f",i,classTotalScore/stuNum);printf("\n第%d个班级的及格人数为:=%d",i,jige);}}
  • 打印出九九乘法表

    #include <stdio.h>
    void main(){//99乘法表for(int i=1;i<=9;i++){for(int j=1;j<=i;j++){printf("%d*%d=%d ",i,j,i*j);}printf("\n");}
    }
    

    打印金子塔;

    #include <stdio.h>
    void main(){/** 打印金字塔* 从简单的金子塔开始慢慢改进操作*//*单侧金子塔int i;int j;for(i=1;i<=5;i++){for(j=1;j<=i;j++){printf("*");}printf("\n");}****************///打印标准金字塔/**(2*i-1)=2-1=1个  空格有4个=5-1***(2*i-1)=2*2-1=3个 3个空*****(2*i-1)=2*3-1=5个 2*******(2*i-1)=2*4-1=7个 1*********(2*i-1)=2*5-1=9个 0*int i,j,k;for(i=1;i<=5;i++){//使用k控制空格的数量for(k=1;k<=5-i;k++){printf(" ");}for(j=1;j<=2*i-1;j++){printf("*");}printf("\n");}*///打印出空心金字塔/*在输出*号的时候,需要考虑是否输出的*还是空格**  //i=1该输入*号就输入** * //如果是 第一个*和最后一个*输出的*。其他的应该输入 空格*   *  //如果是 第一个*和最后一个*输出的*。其他的应该输入 空格*     *  //如果是 第一个*和最后一个*输出的*。其他的应该输入 空格********* //i=5该输入*号就输入**/int i,j,k,end=5;for(i=1;i<=end;i++){for(k=1;k<=end-i;k++) {printf(" ");}for(j=1;j<=2*i-1;j++){if(j==1||j==2*i-1 || i==end){//当i=5的时候就全部输出星printf("*");}else{printf(" ");}}printf("\n");}}
    

跳转语句

跳转语句–break:

需求:

随机生成一个数,直到生成97个数,看看你哟用了几次;

提示:

  • rand()返回一个范围在0到RAND_MAX之间的随机数

  • rand()函数在stdlib.h头文件当中

    通过该需求可以说明他流程控制数据的必要性,比如break

    #include <stdio.h>
    #include <stdlib.h>
    int main() {int i=0;//定义一个变量统计生成次数printf("开始生成随机数\n");while(1){int a=rand();//生成一个随机数if(a==97){printf("%d\n",a);break;}printf("%d\n",i);//顺序输出次数i++;}printf("生成了%d次",i);return 0;
    }

    基本介绍:

    break语句用于终止某个语句块的执行,一般使用在switch或者循环中(三大循环)

    基本语法:

    {.....
    break;
    }
    
#include <stdio.h>
#include <String.h>
void main(){//100以内的数进行求和,看看当和大于20的时候该数是多少?
//    int i=1;
//    int sum=0;
//    for(i=1;i<=100;i++){
//        sum +=i;
//        if(sum>20){
//            printf("i=%d",i);
//            break;
//        }
//    }//实现登录验证,有三次机会,如果用户名为张无忌,密码为i"888"提示登录成功
//否则提示登录失败
int chance=3;
int loginCount=chance;
char name[10]=" ";
char pwd[10]=" ";
for(int i=1;i<=loginCount;i++){printf("请输入名字:\n");fflush(stdout);scanf("%s",name);printf("请输入密码:\n");fflush(stdout);scanf("%s",pwd);//使用strcmp函数进行操作用于比较两个字符串是否相同if(strcmp("张无忌",name)==0&&strcmp("888",pwd)==0){printf("登录成功");break;}else{//机会次数减少chance --;printf("你还有%d次机会",chance);}
}}
跳转语句-continue

基本介绍:

continue语句可用于结束本次循环,继续执行下一次循环

基本语法:

{
......continue;
}

注意事项和细节说明:

continue语句,只能配合循环语句使用,不能单独和switch语句使用。

void main(){
int i=0;
switch(i){
case 1:
continue;//错误
}
if(i>1){
continue;//错误
}
}

案例练习:

#include <stdio.h>
void main(){//从键盘读入不同个数不确定的数,并判断读入的正数和负数的个数//输入为0时结束程序【使用for循环,break,continue完成】// 【positive 正数 negative负数】
/** 分析:* 1.定义变量positive保存正数的个数* 2.定义变量negative保存负数的个数*3.使用for + continue+break语句进行控制*/
int positive=0;
int negative=0;
int num =0;//接收从控制台输入的个数
for(;;){//表示一个死循环,永不退出printf("请输入数:\n");fflush(stdout);scanf("%d",&num);if(num==0){break;//跳出for循环}if(num>0){positive++;continue;}//num是一个负数negative++;
}
printf("正数的个数%d,负数的个数%d",positive,negative);
}
#include <stdio.h>
void main(){/** 某人有100000元,没经过一次路口,需要缴费规则如下* 当现金 >50000,每次交5%* 当现金<=50000时,每次交1000* 编程计算该人可经过多少此路口,使用while break方式完成!*/int money=100000;int count =0;while(1){if(money<1000){break;}if(money>50000){money=money*0.95;}else if(money<=50000){money-=1000;}count++;}printf("可以经过%d个路口剩余%d元",count,money);
}
跳转语句-goto

介绍:

  1. C语言的goto语句可以无条件地转移到程序中指定的行。
  2. goto语句通常与条件语句配合使用。可用来实现条件转移,跳出循环体等功能。
  3. 在C程序设计中一般不主张使用goto语句,以免造成程序混乱,使理解和调试程序都产生困难

基本语法:

gotolabel
....
label:statement

案例演示:

#include <stdio.h>
void main(){printf("start\n");goto label1;//标签,到下一个标签内的语句都不会被执行printf("ok1\n");printf("ok2\n");label1:printf("ok3\n");printf("ok4\n");
}
输出结果:
start
ok3
ok4
跳转语句-return

跳出所有函数,函数细说;

练习;

#include <stdio.h>
void main(){/** 实现判断一个整数,属于哪个范围:大于0,小于0,等于0*int a=0;printf("请输入一个整数:\n");fflush(stdout);scanf("%d",&a);if(a>0){printf("该数范围大于0;");}else if(a==0){printf("该数等于0");}else{printf("该数小于0");}*///水仙花数//判断一个整数是否是水仙花数,所谓水仙花数就是一个3位数// 其各个数字上的;立方和等于其本身例如:153=1*1*1 +5*5*5 +3*3*3;
int i=153;
int bai=i/100;
int shi=i%100/10;
int ge=i%10;if(i==bai*bai*bai +shi*shi*shi +ge*ge*ge){printf("%d是水仙花数\n",i);}else{printf("不是水仙花数");}}

案例2:

#include <stdio.h>
void main(){/*int b1=0,b2=1;if((b1==2>3)&& (b2=5>0)){//2>3==0 5>0==1 此时b2被赋值为了1printf("\n(b1=2>3)&& (b2=5>0)为真");}printf("\nb1=%d,b2=%d",b1,b2);int a=2;while(a<2){printf("\n执行while");}do{printf("执行do while");//至少会执行一次}while(a<2);*///输出1000~9999的闰年使用 for while do while这三种循环进行操作/** for循环for(int i=1000;i<=9999;i++){if(i%4==0&&i/100!=0||i%400==0){printf("i=%d ",i);}*/
//while 循环
/*int i=1000;while(i<=9999){if(i%4==0&&i/100!=0||i%400==0){printf("i=%d ",i);}i++;}*/
//do while 循环操作
int i=1000;
do{if(i%4==0&&i/100!=0||i%400==0){printf("i=%d ",i);}i++;
}while(i<=9999);}

案例3:

#include <stdio.h>
void main(){//输出小写a-z以及大写Z-Achar c1,c2;for( c1='a';c1<='z';c1++){printf("%c ",c1);//输出26个字母}printf("\n================\n");for(c2='Z';c2>='A';c2--){printf("%c ",c2);}
}
  //求出1-1/2+1/4.....1/100的和/** 分析:* 找到算术的规律* 1-1/2+1/3*/
#include <stdio.h>
void main(){
double sum=0;for(int i=1;i<=100;i++){if(i%2!=0){sum+=1.0/i;//考虑保留小数1.0而不是1}else{sum-=1.0/i;}}printf("sum=%.2f",sum);
}

}
printf(“\nb1=%d,b2=%d”,b1,b2);

int a=2;
while(a<2){printf("\n执行while");
}
do{printf("执行do while");//至少会执行一次
}while(a<2);*/
//输出1000~9999的闰年使用 for while do while这三种循环进行操作
/** for循环
for(int i=1000;i<=9999;i++){if(i%4==0&&i/100!=0||i%400==0){printf("i=%d ",i);}*/

//while 循环
/*
int i=1000;
while(i<=9999){
if(i%40&&i/100!=0||i%4000){
printf("i=%d ",i);
}
i++;
}
*/
//do while 循环操作
int i=1000;
do{
if(i%40&&i/100!=0||i%4000){
printf("i=%d ",i);
}
i++;
}while(i<=9999);

}


案例3:```c
#include <stdio.h>
void main(){//输出小写a-z以及大写Z-Achar c1,c2;for( c1='a';c1<='z';c1++){printf("%c ",c1);//输出26个字母}printf("\n================\n");for(c2='Z';c2>='A';c2--){printf("%c ",c2);}
}
  //求出1-1/2+1/4.....1/100的和/** 分析:* 找到算术的规律* 1-1/2+1/3*/
#include <stdio.h>
void main(){
double sum=0;for(int i=1;i<=100;i++){if(i%2!=0){sum+=1.0/i;//考虑保留小数1.0而不是1}else{sum-=1.0/i;}}printf("sum=%.2f",sum);
}

这篇关于重温C语言八----程序流程控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599573

相关文章

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,

C语言指针入门 《C语言非常道》

C语言指针入门 《C语言非常道》 作为一个程序员,我接触 C 语言有十年了。有的朋友让我推荐 C 语言的参考书,我不敢乱推荐,尤其是国内作者写的书,往往七拼八凑,漏洞百出。 但是,李忠老师的《C语言非常道》值得一读。对了,李老师有个官网,网址是: 李忠老师官网 最棒的是,有配套的教学视频,可以试看。 试看点这里 接下来言归正传,讲解指针。以下内容很多都参考了李忠老师的《C语言非

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou

C 语言的基本数据类型

C 语言的基本数据类型 注:本文面向 C 语言初学者,如果你是熟手,那就不用看了。 有人问我,char、short、int、long、float、double 等这些关键字到底是什么意思,如果说他们是数据类型的话,那么为啥有这么多数据类型呢? 如果写了一句: int a; 那么执行的时候在内存中会有什么变化呢? 橡皮泥大家都玩过吧,一般你买橡皮泥的时候,店家会赠送一些模板。 上