C语言中程序在执行的过程中存在三种情况:
第一种程序从开头到结束依次执行每一条语句 — 程序执行的顺序性
第二种程序在执行的过程中,会根据条件的不同转变执行的语句
第三种程序在执行的过程中会进入某一个始终满足条件的状态,此时会进入循环体
C语言中有三大结构,分别是顺序结构、选择结构和循环结构
C语言程序的基本单位:
顺序结构:
在C语言中,函数是程序的基本组成单位,在函数中存在一个main函数为主函数,是程序执行的入口,之后依次执行main函数中的各个语句,当存在函数调用的时候跳转到函数体内部
分支结构:
分支结构:指的是程序在执行过程中会受到条件值的影响而转变程序执行的模块
分类:
单分支结构:
格式:
if(condition)
{
statement;
}
执行方式:当condition值为真的时候执行statement语句; condition:可以为正数、整型表达式或者关系表达式等 statement:可以是单条语句,也可以是多条语句,当为单条语句的时候可以省略{},多条语句必须包含{}
#include <stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age<14)
{
printf("儿童节快乐\n");
}
return 0;
}
双分支结构:
格式:
if(condition)
{
statement1;
}
else
{
statement2;
}
执行方式:当condition值为真的时候执行statement1语句,否则执行statement2;; condition:可以为正数、整型表达式或者关系表达式等 statement:可以是单条语句,也可以是多条语句,当为单条语句的时候可以省略{},多条语句必须包含{}
#include <stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age<14)
{
printf("儿童节快乐\n");
}
else
{
printf("自己多大心里没点数吗?\n");
}
return 0;
}
多分支结构:
格式:
if(condition1)
{
statement 1;
}
else if(condition2)
{
statement 2;
}
else if(condition3)
{
statement 3;
}
… esle{ statement n; } 执行方式: 当condition值为真的时候执行对应statement语句,否则执行else中statement n; condition:可以为正数、整型表达式或者关系表达式等 statement:可以是单条语句,也可以是多条语句,当为单条语句的时候可以省略{} 多条语句必须包含{} 提示:多分支结构中同时只能存在一个condition值为真
#include <stdio.h>
int main()
{
int score=0;
printf("请输入0-100的成绩值:\n");
scanf("%d",&score);
if(score >=90 && score <=100)
{
printf("优秀\n");
}
else if(score >=80 && score <90)
{
printf("良好\n");
}
else if(score >=70 && score <80)
{
printf("一般\n");
}
else if(score >=60 && score <70)
{
printf("及格\n");
}
else if(score >=0 && score <60)
{
printf("不及格啊小伙子\n");
}
else
{
printf("你眼瞎啊,看不到0-100吗\n");
}
return 0;
}
switch多分支:
格式:
switch(整型表达式)
{
case result 1: statement 1;
break;
case result 2: statement 2;
break;
case result 3: statement 3;
break;
..................................
default : statement n;
break;
}
执行方式: 当整型表达式的结果与case语句中的result结果对应的时候会执行case后的statement 否则会执行default后的statement statement:可以为单条语句,也可是功能络 break:结束case语句,若未加break,程序会逐句执行;
#include <stdio.h>
int main()
{
int score=0;
char grade=' ';
printf("请输入0-100的成绩值:\n");
scanf("%d",&score);
if(score >=90 && score <=100) { grade='A'; }
else if(score >=80 && score <90) { grade='B'; }
else if(score >=70 && score <80) { grade='C'; }
else if(score >=60 && score <70) { grade='D'; }
else if(score >=0 && score <60) { grade='E'; }
else{ grade='X'; }
switch(grade)
{
case 'A':printf("优秀,继续保持\n");break;
case 'B':printf("良好,再接再厉\n");break;
case 'C':printf("一般,just so so\n");break;
case 'D':printf("及格,你在玩火\n");break;
case 'E':printf("不及格啊小伙子,明天叫家长\n");break;
default :printf("你眼瞎啊,看不到0-100吗\n");break;
}
return 0;
}
对比if多分支和switch多分支区别:
if多分支的条件值可以是任意类型的表达式
switch多分支的条件智能是整型表达式
分支嵌套:
#include <stdio.h>
int main()
{
int year=0;
printf("请输入一个年份:\n");
scanf("%d",&year);
if(year%4==0)
{
if(year % 100 !=0)
{
printf("普通润年\n");
}
else
{ printf("世纪润年\n"); }
else { printf("平年\n"); }
return 0;
}
循环结构:
分类:
for循环:
格式:
for(起始条件;结束条件;修正条件) { 循环体; } 执行:首先进行起始条件赋值,再判断条件值是否在结束条件以内,当在条件内的时候执行 循环体,最后再进行条件修正 起始条件:可以省略,但是需要在循环之前初始化起始条件 结束条件:结束条件可以省略,但是循环会变为死循环(一直执行) 修正条件:可以省,但是需要在循环体内进行条件修正
提示在C语言中,一般将接收累计求和的变量初始化为0,接收累计乘积的变量初始化为1
累计求和:
1+2+3+4+5+6+…+100=5050
#include <stdio.h>
int main()
{
int sum=0,i=0; /* sum=0+1; sum=1+2; sum=3+3; sum=6+4; sum=10+5; */
for(i=0;i<=100;i++)
{
sum+=i;
}
printf("sum=%d\n",sum);
return 0;
}
求 100 之内自然数中最大的能被 17 整除的数。
#include <stdio.h>
int main()
{
int i=0;
for(i=100;i>=0;i--)
{
if(i%17==0)
{
printf("%d\n",i);
break; //结束循环
}
}
return 0;
}
循环嵌套:
当出现循环嵌套的时候,外部循环循环一次,内部循环循环条件范围内的一整次
#include <stdio.h>
int main()
{
int i=0,j=0;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf(" %d * %d = %d\t",i,j,i*j);
}
printf("\n");
}
return 0;
}
while循环:
格式:
while(循环条件)
{
循环体;
}
当条件在循环条件内的时候执行循环体 先判断条件是否满足,再执行循环体
include <stdio.h>
int main()
{
int i=100;
for(i=100;i>=0;i--)
while(i>=0)
{
if(i%17==0) {
printf("%d\n",i);
break; //结束循环
}
i--;
}
return 0;
}
do while循环:
格式:
do
{
循环体;
}
while(循环条件); //先执行一次循环体,再判断条件是否满足
#include <stdio.h>
int main()
{
int i=100;
do //for(i=100;i>=0;i--)
{
if(i%17==0)
{
printf("%d\n",i);
break; //结束循环
}
// i--;
//}
while(i>=0);
return 0;
}
控制语句:
return:
结束函数和返回函数的输出结果
break:
结束break所在的循环
在满足条件的情况下结束循环操作
break
使用 break 显示一个 4 之后函数就不再打印 i。
#include <stdio.h>
int main()
{
int i=0;
for(i=0;i<=10;i++)
{
if(i>4)
break;
printf("i=%d\n",i);
}
return 0;
}
结束case语句
continue:
结束本次循环,继续下一次循环
#include <stdio.h>
int main()
{
int i=0;
for(i=0;i<=10;i++)
{
//printf("****************\n");
if(i>4)
continue;
printf("i=%d\n",i);
}
return 0;
}
goto:
语句的跳转
格式:
在程序中的任意位置设置一个标签(合法标识符),当遇到goto的时候会跳转 到指定的标签位置goto 标签;
使用goto实现累加求和
#include <stdio.h>
int main()
{
int i=0,sum=0;
p:
sum+=i;
i++;
if(i<=100)
goto p;
printf("sum=%d\n",sum);
return 0;
}
标志位法:
求 1/1-1/2+1/3-1/4+……+1/99-1/100 的值
#include <stdio.h>
int main()
{ int i=0;
float sum=0,
flag=1; for(i=1;i<=100;i++)
{
sum+=flag/i;
flag=-flag;
}
printf("sum=%lf\n",sum);
return 0;
}