C语言进阶中的分支和循环结构,如何巧妙改写为高效的长尾?

2026-04-12 03:231阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1967个文字,预计阅读时间需要8分钟。

C语言进阶中的分支和循环结构,如何巧妙改写为高效的长尾?

C语言是一种结构化程序设计语言,包含以下结构:1. 顺序结构;2. 选择结构;3. 循环结构。语句:C语言中,由一个分号隔开的即是语句;注释:以//开头的即是注释;分支语句:if、switch;循环语句:。

C语言是一门结构化的程序设计语言

1、顺序结构

2、选择结构

3、循环结构

一、语句

C语言中 由一个分号隔开的就是一条语句

;//该是语句——具体为空语句

分支语句:

if

switch

循环语句:

for

while

do while

goto语句:

1、分支语句(选择结构)

if语句的语法结构:
第一种:如表达式为真,if语句才可以执行

if(表达式) 语句;

第二种:如表达式为真执行语句1,为假执行语句2

if(表达式) 语句1; else 语句2;

第三种:按顺序

表达式1成立——执行语句1,不成立,——是否表达式2成立,成立——执行语句2 不成立——执行语句3

//多分支

C语言进阶中的分支和循环结构,如何巧妙改写为高效的长尾?

if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;

eg:结果为刚成年

#include <stdio.h> #include <string.h> int main() { int age=18; if(age<18) printf("未成年"); else if(age==18) printf("刚成年"); else printf("成年"); return 0; }

eg:使用了逻辑与&&

#include <stdio.h> #include <string.h> int main() { int age=18; if(age<18) printf("未成年"); else if(age>=18 && age<28) printf("青年"); else printf("成年"); return 0; }

如果条件成立,要执行多条语句,应使用代码块(一对{}就是一个代码块)

if(表达式) { 语句列表1; } else { 语句列表2; } return 0;

eg:

#include <stdio.h> #include <string.h> int main() { int age=17; if(age<18) { printf("未成年\n"); printf("需要管教"); } else if(age>=18 && age<28) printf("青年"); return 0; }

输出:

未成年

需要管教

if书写形式导致结果不同

悬空else(else和离它最近的if匹配)

#include <stdio.h> #include <string.h> int main() { int a=0; int b=2; if(a==1) if(b==2) printf("hehe\n"); else printf("haha\n"); return 0; }

输出结果为 空


对比上下两图,else是第2个if对应,与第一个if无关

1、下述语句就是相当于if...else...的语句

//遇到一个return就停了

if (condition){ return x; } return y;


2、

int main() { int num=4; if(num=5) //结果会输出 num=5是赋值(=), 所以不影响hehe输出;而==才是判断相等 { printf("hehe\n"); } return 0; }

那就写为:

涉及到判断变量是否等于常量,一般把常量写在前面 不容易出错

int num=4; if(5==num) //错写为5=num会报错,5是常量 { printf("hehe\n");

练习:

输出1-100之前的奇数:

使用了while嵌套if语句:

#include <stdio.h> #include <string.h> int main() { int b=0; while(b<100) { b++; if(1==b%2) printf("%d\n",b); } return 0; }

int b=0; while(b<=100) { if(1==b%2) printf("%d\n",b); b++; }

根据奇数的特性书写:

int b=1; while(b<=100) { printf("%d\n",b); b+=2; }

switch语句

switch语句是一种分支语句,多用于多分支的情况

简化书写编码:

#include <stdio.h> int main() { int day=0; scanf("%d",&day); //输入数据使用scanf函数 if(1==day) printf("星期一\n"); else if(2==day) printf("星期二\n"); else if(3==day) printf("星期三\n"); else if printf("星期四\n"); //... printf("星期天\n"); return 0; }

上述转化为switch语句:

case 1://指输入的常量为1时执行

break; //用于跳出 不一定全部的case后都需要加break,根据情况设置

#include <stdio.h> int main() { int day=0; scanf("%d",&day); switch(day) { case 1: printf("星期一\n"); break; //用于跳出 case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; //... case 7: printf("星期天\n"); break; } return 0; }

省略break的一些代码:

//default是当输入不符合规则时跳出,default可有可无

#include <stdio.h> int main() { int day=0; scanf("%d",&day); switch(day) { case 1: case 2: case 3: case 4: case 6: printf("工作日\n"); break; case 6: case 7: printf("休息日\n"); break; default: printf("输入错误\n"); break; } return 0; }

case后加入if语句:

int day=0; scanf("%d",&day); switch(day) { case 1: if(1==day) printf("hehe\n"); case 2: case 3: case 4: case 6: printf("工作日\n"); break;

语法结构

switch(整型表达式) //括号内一定要定义为整型() { 语句项; }

语句项为:

case 整型常量表达式: //整型 常量表达式 可以是:1 (常量)...、1+1(表达式),不能是1.0(小数)、n(变量)也不行

语句;

switch允许嵌套使用
特例:

#include <stdio.h> int main() { int n=1; int m=2; switch(n) { case 1:m++; //n=1,执行 m=3 case 2:n++; //由于没有break,n就需要执行 n=2 case 3: //n switch (n) { case 1:n++; //由于n=2,不执行 case 2:m++;n++;break; //由于n=2,执行 得 m=4,n=3 后break退出 } case 4:m++; //继续执行没有break,得 m=5 break; default: break; } printf("m=%d,n=%d\n",m,n); return 0; }

输出结果为:

m=5,n=3

2、循环语句

while

for

do while

while循环

eg:恶性循环会一直重复返回hehe

#include <stdio.h> int main() { while(1) printf("hehe\n"); return 0; }

while语法结构

while(表达式) 循环语句;

举例:

while嵌套if语句

break; //停止、跳出循环,直接终止循环

continue;//终止本次循环,就是continue后的代码不会再执行,直接跳转到while语句的判断部分,进行下一次循环

#include <stdio.h> int main() { int i=1; while(i<=10) { if(5==i) break; //停止、跳出循环 printf("%d ",i); i++; } return 0; }

#include <stdio.h> int main() { int i=1; while(i<=10) { if(5==i) continue; //等i=5时会一直在 6、7、8、9行执行无法跳出 printf("%d ",i); i++; } return 0; }


getchar :(输入)获取字符的含义

puchar:(输出) ,puchar打印字符相当于printf

#include <stdio.h> int main() { int ch=getchar();\\getchar 运行结果是需要等待输入后,才可以输出 putchar(ch); printf("%c\n",ch); return 0; }

输出结果为:

r //这个是getchar提示输出的 rr //这个是putchar printf输入的

eg:

EOF—end of file:文件结束标志 \0,

scanf、getchar:都是 输入函数——>输入缓冲区

#include <stdio.h> int main() { int ch=0; //按ctrl+z 就会停止 //EOF——end of file ->-1 while((ch=getchar())!=EOF) { purchar(ch); } return 0; }

scanf函数只读取到空格前面的字符

#include <stdio.h> int main() { int ret=0; char password[20]={0}; printf("请输入密码:>"); scanf("%s",password);//输入密码(当输入的密码为1234\n时适用),并存放在password数组中 //缓冲区还剩余一个'\n' //读取一下'\n' getchar(); printf("请确认(Y/N):>"); ret=getchar(); if(ret=='Y') { printf("确认成功\n"); } else { printf("放弃确认\n"); } return 0; }

输入密码为:1234 abc\n时适用

#include <stdio.h> int main() { int ret=0; char password[20]={0}; printf("请输入密码:>"); scanf("%s",password);//输入密码,并存放在password数组中 //缓冲区还剩余一个'\n' //读取一下'\n' while(ch=getchar())!='\n')//一直读取,等读取到'/n'才跳出 { ; } printf("请确认(Y/N):>"); ret=getchar(); if(ret=='Y') { printf("确认成功\n"); } else { printf("放弃确认\n"); } return 0; }

本文共计1967个文字,预计阅读时间需要8分钟。

C语言进阶中的分支和循环结构,如何巧妙改写为高效的长尾?

C语言是一种结构化程序设计语言,包含以下结构:1. 顺序结构;2. 选择结构;3. 循环结构。语句:C语言中,由一个分号隔开的即是语句;注释:以//开头的即是注释;分支语句:if、switch;循环语句:。

C语言是一门结构化的程序设计语言

1、顺序结构

2、选择结构

3、循环结构

一、语句

C语言中 由一个分号隔开的就是一条语句

;//该是语句——具体为空语句

分支语句:

if

switch

循环语句:

for

while

do while

goto语句:

1、分支语句(选择结构)

if语句的语法结构:
第一种:如表达式为真,if语句才可以执行

if(表达式) 语句;

第二种:如表达式为真执行语句1,为假执行语句2

if(表达式) 语句1; else 语句2;

第三种:按顺序

表达式1成立——执行语句1,不成立,——是否表达式2成立,成立——执行语句2 不成立——执行语句3

//多分支

C语言进阶中的分支和循环结构,如何巧妙改写为高效的长尾?

if(表达式1) 语句1; else if(表达式2) 语句2; else 语句3;

eg:结果为刚成年

#include <stdio.h> #include <string.h> int main() { int age=18; if(age<18) printf("未成年"); else if(age==18) printf("刚成年"); else printf("成年"); return 0; }

eg:使用了逻辑与&&

#include <stdio.h> #include <string.h> int main() { int age=18; if(age<18) printf("未成年"); else if(age>=18 && age<28) printf("青年"); else printf("成年"); return 0; }

如果条件成立,要执行多条语句,应使用代码块(一对{}就是一个代码块)

if(表达式) { 语句列表1; } else { 语句列表2; } return 0;

eg:

#include <stdio.h> #include <string.h> int main() { int age=17; if(age<18) { printf("未成年\n"); printf("需要管教"); } else if(age>=18 && age<28) printf("青年"); return 0; }

输出:

未成年

需要管教

if书写形式导致结果不同

悬空else(else和离它最近的if匹配)

#include <stdio.h> #include <string.h> int main() { int a=0; int b=2; if(a==1) if(b==2) printf("hehe\n"); else printf("haha\n"); return 0; }

输出结果为 空


对比上下两图,else是第2个if对应,与第一个if无关

1、下述语句就是相当于if...else...的语句

//遇到一个return就停了

if (condition){ return x; } return y;


2、

int main() { int num=4; if(num=5) //结果会输出 num=5是赋值(=), 所以不影响hehe输出;而==才是判断相等 { printf("hehe\n"); } return 0; }

那就写为:

涉及到判断变量是否等于常量,一般把常量写在前面 不容易出错

int num=4; if(5==num) //错写为5=num会报错,5是常量 { printf("hehe\n");

练习:

输出1-100之前的奇数:

使用了while嵌套if语句:

#include <stdio.h> #include <string.h> int main() { int b=0; while(b<100) { b++; if(1==b%2) printf("%d\n",b); } return 0; }

int b=0; while(b<=100) { if(1==b%2) printf("%d\n",b); b++; }

根据奇数的特性书写:

int b=1; while(b<=100) { printf("%d\n",b); b+=2; }

switch语句

switch语句是一种分支语句,多用于多分支的情况

简化书写编码:

#include <stdio.h> int main() { int day=0; scanf("%d",&day); //输入数据使用scanf函数 if(1==day) printf("星期一\n"); else if(2==day) printf("星期二\n"); else if(3==day) printf("星期三\n"); else if printf("星期四\n"); //... printf("星期天\n"); return 0; }

上述转化为switch语句:

case 1://指输入的常量为1时执行

break; //用于跳出 不一定全部的case后都需要加break,根据情况设置

#include <stdio.h> int main() { int day=0; scanf("%d",&day); switch(day) { case 1: printf("星期一\n"); break; //用于跳出 case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; //... case 7: printf("星期天\n"); break; } return 0; }

省略break的一些代码:

//default是当输入不符合规则时跳出,default可有可无

#include <stdio.h> int main() { int day=0; scanf("%d",&day); switch(day) { case 1: case 2: case 3: case 4: case 6: printf("工作日\n"); break; case 6: case 7: printf("休息日\n"); break; default: printf("输入错误\n"); break; } return 0; }

case后加入if语句:

int day=0; scanf("%d",&day); switch(day) { case 1: if(1==day) printf("hehe\n"); case 2: case 3: case 4: case 6: printf("工作日\n"); break;

语法结构

switch(整型表达式) //括号内一定要定义为整型() { 语句项; }

语句项为:

case 整型常量表达式: //整型 常量表达式 可以是:1 (常量)...、1+1(表达式),不能是1.0(小数)、n(变量)也不行

语句;

switch允许嵌套使用
特例:

#include <stdio.h> int main() { int n=1; int m=2; switch(n) { case 1:m++; //n=1,执行 m=3 case 2:n++; //由于没有break,n就需要执行 n=2 case 3: //n switch (n) { case 1:n++; //由于n=2,不执行 case 2:m++;n++;break; //由于n=2,执行 得 m=4,n=3 后break退出 } case 4:m++; //继续执行没有break,得 m=5 break; default: break; } printf("m=%d,n=%d\n",m,n); return 0; }

输出结果为:

m=5,n=3

2、循环语句

while

for

do while

while循环

eg:恶性循环会一直重复返回hehe

#include <stdio.h> int main() { while(1) printf("hehe\n"); return 0; }

while语法结构

while(表达式) 循环语句;

举例:

while嵌套if语句

break; //停止、跳出循环,直接终止循环

continue;//终止本次循环,就是continue后的代码不会再执行,直接跳转到while语句的判断部分,进行下一次循环

#include <stdio.h> int main() { int i=1; while(i<=10) { if(5==i) break; //停止、跳出循环 printf("%d ",i); i++; } return 0; }

#include <stdio.h> int main() { int i=1; while(i<=10) { if(5==i) continue; //等i=5时会一直在 6、7、8、9行执行无法跳出 printf("%d ",i); i++; } return 0; }


getchar :(输入)获取字符的含义

puchar:(输出) ,puchar打印字符相当于printf

#include <stdio.h> int main() { int ch=getchar();\\getchar 运行结果是需要等待输入后,才可以输出 putchar(ch); printf("%c\n",ch); return 0; }

输出结果为:

r //这个是getchar提示输出的 rr //这个是putchar printf输入的

eg:

EOF—end of file:文件结束标志 \0,

scanf、getchar:都是 输入函数——>输入缓冲区

#include <stdio.h> int main() { int ch=0; //按ctrl+z 就会停止 //EOF——end of file ->-1 while((ch=getchar())!=EOF) { purchar(ch); } return 0; }

scanf函数只读取到空格前面的字符

#include <stdio.h> int main() { int ret=0; char password[20]={0}; printf("请输入密码:>"); scanf("%s",password);//输入密码(当输入的密码为1234\n时适用),并存放在password数组中 //缓冲区还剩余一个'\n' //读取一下'\n' getchar(); printf("请确认(Y/N):>"); ret=getchar(); if(ret=='Y') { printf("确认成功\n"); } else { printf("放弃确认\n"); } return 0; }

输入密码为:1234 abc\n时适用

#include <stdio.h> int main() { int ret=0; char password[20]={0}; printf("请输入密码:>"); scanf("%s",password);//输入密码,并存放在password数组中 //缓冲区还剩余一个'\n' //读取一下'\n' while(ch=getchar())!='\n')//一直读取,等读取到'/n'才跳出 { ; } printf("请确认(Y/N):>"); ret=getchar(); if(ret=='Y') { printf("确认成功\n"); } else { printf("放弃确认\n"); } return 0; }