目录
一.c语言程序结构
1.1程序结构分类:
c语言中的程序结构分为以下几种:顺序结构,分支结构,循环结构
顺序结构:按照程序的顺序执行语句。分支结构,循环结构下面笔记会提起。
1.2 条件判断语句(分支结构)
1.2.1 if语句形式
注意:c语言中没有显示的布尔类型,若想使用则需要包含头文件 "stdbool.h",这里写bool类型
只是为了方便理解
if语句语法格式:
if (表达式){
代码块;
}
语句2;
if语句的表达式的值是bool类型的数据只有真假之分,若表达式的值为真,则执行代码块
里面的程序代码,若为假那么会跳过if分支结构而去执行语句2的代码。
例如:查找id为1234的学生是否存在
//例如:查找id为1234的学生是否存在
#include<stdio.h>
int main(){
int id=1234; //操作系统会给 类型为id的变量在栈区分配一块内存空间
int my_id; //定义一个变量存放查找学生的学号
printf("请输入学号: ");
scanf("%d",&my_id); //把输入的数据存放到变量my_id的内存空间里,初始化my_id
if(id==my_id){ //判断学生是否存在,存在则执行if代码块里面的语句,然后跳出main()函数
printf("id : %d 的学生存在\n",my_id);
return 0;
}
//不存在则跳过if语句代码块里面的语句,直接执行if代码块后面的语句
printf("id : %d 的学生不存在\n",my_id);
return 0; //跳出manin()函数
}
1.2.2 if --else语句形式
这里只举例四个分支
if -- else 形式:
语法结构:
if(表达式1){
代码块1;
}else if(表达式2){
代码块2;
}else if(表达式3){
代码块3;
}else{
代码块4;
}
说明:
当表达式1为真时则会执行代码块1,而后面三个分支语句不会执行(就是结束整个if分支)。
若是表达式1为假则会跳过第一个if分支,而后开始判断表达式2结果的真假,若是表达式2为真,
则会执行代码块2的内容,然后结束整个if分支。
若是表达式1,2,3都不满足则会执行代码块4,然后跳出整个if分支。
例:查看成绩学生成绩为优,良,中,差中的哪一种。100-90为优,89-70为良 ,69-60为中,0-59为差
//查看成绩学生成绩为优,良,中,差中的哪一种。100-90为优,89-70为良 ,69-60为中,0-59为差
#include<stdio.h>
int main(){
int score;
printf("请输入你要查询的成绩\n");
scanf("%d",&score);
if(score>=90 && score<100){
printf("成绩 %d 为优\n",score);
}else if(score>=70 && score<90){
printf("成绩 %d 为良\n",score);
}else if(score>=60 && score<70){
printf("成绩 %d 为中\n",score);
}else if(score<60 && score>=0){
printf("成绩 %d 为差\n",score);
}else{
printf("输入不合法");
}
return 0;
}
1.2.2 if 嵌套语句形式
嵌套if语句:运行规则与if和if--else没有区别不在赘述
if(外层表达式){
if(表达式2){
代码段1;
}else{
代码段2;
}
}else{
if(表达式3){
代码段3;
}else{
代码段4;
}
}
例:判断2000---2500年中的每一年是否为闰年,并将闰年的次数累计,最后将累计结果输出。
在这里为了演示嵌套循环把判断条件拆开写了,while()循环下面会详细说明。
//判断2000---2500年中的每一年是否为闰年,并将闰年的次数累计,最后将累计结果输出。
#include<stdio.h>
int main(){
//变量使用时要进行初始化
int year=2000;
int count=0;
while(year<=2500){
if((year%100)==0){
if((year%400)==0){
year++;
count++;
}else{
year++;
continue;
}
}else if((year%100)!=0){
if((year%4)==0){
year++;
count++;
}else{
year++;
continue;
}
}
}
printf("闰年有 %d 个",count);
return 0;
1.2.3 swicth语句
switch语句格式:
swicth(表达式){
case 常量表达式1:
代码块1;
break;
case 常量表达式2:
代码块2;
break;
case 常量表达式3:
代码块3;
break;
case 常量表达式4:
代码块4;
break;
.....
default:
代码块
}
switch语句执行方法:
Switch后面的表达式必须是整型或者字符型值,常量表达式是指在编译期间对表达式求得的值。
如果表达式的值等于 第二个常量表达式的值那么就执行第二条case语句里面的内容。通俗来说就是等于
哪个常量表达式就执行哪个case里面的语句,若是都不满足就执行默认代码块。
注意:若是case语句代码块中没有break关键字会出现case穿透现象。
case穿透现象:执行完某一个分支的代码块后,会继续执行下面分支的代码块(不判断),直到遇到break
或者整个switch..case语句结束----case击穿
1.3循环语句(循环结构)
1.3.1while循环
注:bool类型C语言中需要引入头文件才能使用,这里引入bool类型是为了方便理解。
while循环格式:
while(表达式){
代码块;
}
表达式的结果是bool类型的,只要表达式的结果为真那么while循环就一直执行,直到
表达式结果为false结束while()循环
例:求1--100所有元素的和
#include<stdio.h>
int main(){
int sum=0;
int i=1;
while(i<=100){
sum+=i;
i++;
}
printf("1到100的和为:%d\n ",sum);
return 0;
}
/*猴子吃桃问题
一只猴子第1天摘了若干个桃,当即就吃了一半数量的桃
没吃过瘾,又多吃了一个,
第2天在剩下的桃子里面又吃了一半数量的桃,没吃过瘾,又多吃了一个
以后的每天都按照这种方式去吃桃
直到第10天再想吃的时候,发现只剩下一个桃了。
问:猴子第一天摘了多少个桃。 要求:用while循环处理。*/
#include<stdio.h>
int main(){
int day=10; //天数
int peach_count=1; //剩余的桃子的数量
while(day>1){ //注意最后一天没有吃桃子
peach_count++;
peach_count*=2;
day--;
}
printf("peach_count=%d",peach_count);
return 0;
}
1.3.2 do ..while()循环
do ..while()循环语法格式:
do{
代码块
}while();
do ..while()使用说明:当使用do while()循环时会先执行里面的代码块块然后再进行判断条件,不论条
件是否满足do while循环至少执行一次。
例如:
#include<stdio.h>
int main(){
int i=1;
do{
printf("i=%d",i);
}while(i>1);
//i>1条件不满足,但是do while循环里面的代码还是运行了
return 0;
}
1.3.3 for循环
for循环格式:
for(表达式1;表达式2;表达式2){
代码块;
}
使用说明:通俗来说就是一下的作用。
表达式1:通常用来给循环变量赋初始值
表达式2:用来结束for循环的,它的结果是一个bool类型的。不是true就是false
表达式3:通常用来给表达式1的变量的值的
{}括号里面为循环体
for循环执行步骤:先执行初始表达式,而后执行Boolean表达式,再然后执行循环体
循环体执行完后执行更新表达式1。
下面语法中会介绍for循环表达式的几个用法
例:求1到100的和
#include<stdio.h>
int main(){
int i;
int sum=0;
for(i=0;i<=100;i++){
sum+=i;
}
printf("sum=%d\n",sum);
return 0;
}
1.4转向语句
1.4.1 break语句
break的作用:跳出循环体,执行循环体之后的语句
例如:写一个for循环实现1--50相加
#include<stdio.h>
#include<stdbool.h> //这里使用了bool类型,需要引入一个头文件
int main(){
int i=0;
int sum=0;
/*for循环里面的第一个表达式可以在外部定义。第二个表达式的结果是一个
bool类型的,用来结束for循环的。这里写了一个死循环,如果没有break语句的话*/
for(;true;i++){
sum+=i;
if(i>50){ //当i自增到51时会执行if判断语句里面的break语句,跳出for循环
break;
}
}
printf("sum=%d\n",sum);
return 0;
}
1.4.2 continue语句
continue语句的作用:结束本次循环开始下次循环
例如:有一个数列 1 2 3 4 5 6,需要在控制台上打印1,2,5,6
//例如:有一个数列 1 2 3 4 5 6,需要在控制台上打印1,2,5,6
#include<stdio.h>
int main(){
for(int i=1;i<=6;){
if(i==3||i==4){ //执行if分支的时候不要忘了i++,给for循环一个结束的条件
i++;
continue;
}
printf("%d ",i);
i++;
}
printf("\n");
return 0;
}
1.4.3goto的基本使用格式
代码块1; goto 标识符;
代码块2;
标识符: //标签
代码块3;
goto语句执行逻辑:先执行代码块1,然后遇到了goto,立即跳转到对应的标签继续向下执行代码块3
代码块2被跳过了,不会被执行。
上面的标识符要符合命名规范,一般goto语句中采用大写。
注意:goto不能跨函数使用,并且使用goto语句对代码的逻辑性和易读性有一定的影响,使用时要谨慎。
例:使用goto循环打印1到100的和
#include<stdio.h>
int main(){
int i=1;
int sum=0;
LOOP:
sum+=i;
i++;
if(i<=100){
goto LOOP;
}
printf("sum=%d\n",sum);
return 0;
}
1.4.4 return语句
return语句的作用:
作用一:用来结束函数的运行。
作用二:用来返回函数运行的结果。