[C.C++] C语言基本语句

1031 0
Honkers 2025-4-30 20:48:42 | 显示全部楼层 |阅读模式

前言

关于自己的第一篇文章:

记录自己C语言语句的学习成果,着重控制语句

提示:以下是本篇文章正文内容,下面案例可供参考

C语言基本语句

C语言语句被分为以下五类:

  • 1.表达式语句
  • 2.函数调用语句
  • 3.控制语句
  • 4.复合语句
  • 5.空语句

3)控制语句用于控制程序的走向

一、表达式语句

表达式语句一般由分号结尾,其形式表示为:表达式;

表达式语句中最常用的是函数调用和赋值,其中变量名本身就是一个表达式,

代码如下(示例):

  1. int a=1,b=2,c;
  2. c=a+b; //赋值语句的左值须是可修改的变量
  3. printf("%d",c);
复制代码

如果c用const修饰则会报错。


二、函数调用语句

函数调用语句一般由函数名和实参组成,以分号结尾。

代码如下(示例):

  1. int a;
  2. scanf("%d",&a);
  3. printf("%d",a); //输入采用%d格式则输出也为%d
复制代码
  1. //函数调用
  2. int sum(int x, int y);
  3. int main()
  4. {
  5. int a = 1, b = 2,c;
  6. c=sum(a, b);
  7. printf("%d", c);
  8. return 0;
  9. }
  10. int sum(int x, int y)
  11. {
  12. int z;
  13. z = x + y;
  14. return z;
  15. }
复制代码

输出:3

注意:若自定义函数在主函数后,则应在开头函数声明,编译器默认返回类型 int


三、控制语句

控制语句用于控制程序的流程走向,已达到自己想要的结果,一般控制语句可以分为:
1.分支语句 如if else ,switch
2.循环语句 如for,while,do while
3.转向语句 如continue,break,goto,return

1)分支语句(选择语句)

日常生活中大多数事情都可以用选择语句完成,如今天中午吃什么,吃米饭或者吃土,早上七点醒来选择继续睡觉或者起床(我自己估计是起不来)

if语句使用方法:

  1. int a=10;
  2. //单分支
  3. if (a==10){
  4. printf("true");
  5. }
  6. else{
  7. printf("false");
  8. }
复制代码

其中表达式的内容返回的是bool值,即真与假
在C语言中0为假,非0为真。
如果为真,则执行其对应的语句块内容,否则执行else语句块内容,若没有else语句则什么也不输出

上述结果打印true

若有不小于一个if else则使用多分支:

  1. //多分支 判断季节
  2. int month; //定义月份
  3. scanf("%d", &month);
  4. if (month >= 1 && month <= 12) { //判断在1到12之间合法
  5. if (month >= 3 && month <= 5) {
  6. printf("春季");
  7. }
  8. else if(month>=6 && month<=8){
  9. printf("夏季");
  10. }
  11. else if(month>=9 && month<=11){
  12. printf("秋季");
  13. }
  14. else
  15. printf("冬季");
  16. }
  17. else
  18. printf("不合法");
  19. }
复制代码

输入:12,返回 冬季

再如下边一个例子:

  1. int a=2;
  2. int b=0,c=0;
  3. if(a=1)
  4. {
  5. printf("%d",a);
  6. }
  7. else
  8. {
  9. printf("%d",a);
  10. }
复制代码

a 返回结果 1

那么为什么会造成这种结果
原因在于误将数学中的 “=” 带入到C语言中,而在这里 “=” 属于赋值运算符,将运算符右边的值赋给左边。
只要结果不为0,都会执行其对应的语句块

  1. int a=2;
  2. int b=0,c=0;
  3. if(a=0) //若为0,则执行else对应的语句块
  4. {
  5. printf("true");
  6. }
  7. else
  8. {
  9. printf("false");
  10. }
复制代码

结果为 :false

再来一个例子:

  1. int a=2,b=3;
  2. if(a==1)
  3. if(b==3)
  4. printf("true");
  5. else
  6. printf("false")
复制代码

执行结果 :

结果为空,上面代码的情况容易使人误解
实则else是跟第二个if匹配的,若不加大括号,则默认执行判断后的第一条语句
所以要注意书写风格,养成良好的代码风格十分重要。

switch语句使用方法:
switc语句用于处理多个分支的情况,在判断多种条件下比if else语句要好

例子:

输出周几

  1. int main()
  2. {
  3. int day = 0;
  4. scanf("%d", &day);
  5. switch (day)
  6. {
  7. case 1:
  8. printf("周一");
  9. case 2:
  10. printf("周二");
  11. case 3:
  12. printf("周三");
  13. case 4:
  14. printf("周四");
  15. case 5:
  16. printf("周五");
  17. case 6:
  18. printf("周六");
  19. case 7:
  20. printf("周日");
  21. }
  22. return 0;
  23. }
复制代码

输入6 输出周六周日

为什么会造成这种情况,只想输出周六但是周日也被输出了,当执行判断语句后程序并未跳出switch,而是继续执行switch语句直到完毕

在 C语言中switch语句一般配合break语句使用,以实现单独的执行语句:

  1. int main()
  2. {
  3. int day = 0;
  4. scanf("%d", &day);
  5. switch (day)
  6. {
  7. case 1:
  8. printf("周一");
  9. break;
  10. case 2:
  11. printf("周二");
  12. break;
  13. case 3:
  14. printf("周三");
  15. break;
  16. case 4:
  17. printf("周四");
  18. break;
  19. case 5:
  20. printf("周五");
  21. break;
  22. case 6:
  23. printf("周六");
  24. break;
  25. case 7:
  26. printf("周日");
  27. break;
  28. }
  29. return 0;
  30. }
复制代码

输入:1
输出:周一

同时switch语句可以将多个case组成一个分支

如:周一到周五打PC游戏,周六周日打手机游戏该怎么做?

  1. int main()
  2. {
  3. int day = 0;
  4. scanf("%d", &day);
  5. switch (day)
  6. {
  7. case 1:
  8. case 2:
  9. case 3:
  10. case 4:
  11. case 5:
  12. printf("打PC游戏");
  13. break;
  14. case 6:
  15. case 7:
  16. printf("玩手机游戏");
  17. break;
  18. }
  19. return 0;
  20. }
复制代码

输入:1~5
输出:打PC游戏

如果删掉一部分break语句,程序会按条件顺序贯穿switch语句,直到遇到break停止

default:一般用来处理错误信息,也常出现在语句尾部

作用为:若条件均不满足,则执行default语句 如:

  1. int main()
  2. {
  3. int num = 0;
  4. scanf("%d", &num);
  5. switch (num)
  6. {
  7. case 1:
  8. case 2:
  9. printf("正确");
  10. break;
  11. default:
  12. printf("错误");
  13. break;
  14. }
  15. return 0;
  16. }
复制代码

输入:3
输出 :错误

需要注意的是:switch()里的值只能为字符或整形,同时 case后也只能跟字符或整形

switch语句中仅允许出现一个default。

switch中的嵌套:

  1. int main()
  2. {
  3. int a=1,b=2;
  4. switch (a)
  5. {
  6. case 1:
  7. a++; //a变为2
  8. b++; //b变为3
  9. switch (b)
  10. {
  11. case 3:
  12. a++; //a变为3,此时case后边无break,继续贯穿语句
  13. case 4:
  14. b++; //b变为4
  15. break; //跳出
  16. default:
  17. break;
  18. } //无break继续贯穿
  19. case 2:
  20. a++; //a变为4
  21. break;
  22. default:
  23. break;
  24. }
  25. printf("a的值为:%d\nb的值为:%d", a, b);
  26. return 0;
  27. }
复制代码

输出:
a的值为:4
b的值为:4

总结:break只能跳出当前语句,switch语句很好的改善了分支语句过多的情况

2)循环语句

当想让程序一直重复做某件事时,可以使用循环语句
C语言提供了三种循环:

  • for
  • while
  • do while

for循环的结构:

for(初始化部分;判断循环部分;调整变量部分)
{
循环体;
}

其中for循环三个部分任意部分都可省略,但不建议

for循环流程图:

for循环的使用:

打印1到10的整数

  1. int main()
  2. {
  3. for (int i = 1; i <= 10; i++)
  4. {
  5. printf("%d ", i);
  6. }
  7. return 0;
  8. }
复制代码

输出: 1 2 3 4 5 6 7 8 9 10

那么再来看下面一种情况:

  1. int main()
  2. {
  3. int i= 1;
  4. for ( i = 1; i <= 10; i++)
  5. {
  6. printf("%d ", i);
  7. }
  8. printf("%d", i);
  9. return 0;
  10. }
复制代码

输出:1 2 3 4 5 6 7 8 9 10 11

注意:即使i最后不满足条件执行循环体,但是i++依然会自增

continue在for循环的使用:

  1. int main()
  2. {
  3. for (int i = 1; i <= 10; i++)
  4. {
  5. if (i==5)
  6. {
  7. continue; //当i=5时,跳过本次循环,不执行后续代码
  8. }
  9. printf("%d ", i);
  10. }
  11. return 0;
  12. }
复制代码

输出:1 2 3 4 6 7 8 9 10

总结:continue用于终止当前循环,跳过continue后的语句,继续执行下一次循环,调整变量部分仍能执行

break在for循环中的使用:

  1. int main()
  2. {
  3. for (int i = 1; i <= 10; i++)
  4. {
  5. if (i==5)
  6. {
  7. break;
  8. }
  9. printf("%d ", i);
  10. }
  11. return 0;
  12. }
复制代码

输出:1 2 3 4

总结:break用于永久跳出当前循环,且不再执行下一次循环

例子:

计算1!+2!..+5!

  1. int main()
  2. {
  3. int num,sum=1;
  4. for (int i = 2; i <=5; i++) //外层循环控制阶乘相加
  5. {
  6. num = 1; //求完一个数的阶乘后初始化为1
  7. for (int j = i; j >1; j--) //内层控制计算每个数的阶乘
  8. {
  9. num *= j;
  10. }
  11. sum += num;
  12. }
  13. printf("%d", sum);
  14. return 0;
  15. }
复制代码

输出:153

同时还可以将上述方法简化为:

  1. int main()
  2. {
  3. int num=1,sum=0;
  4. for (int i = 1; i <=5; i++)
  5. {
  6. num *= i; //每次i与i-1的阶乘相乘
  7. sum += num;
  8. }
  9. printf("%d ", sum);
  10. return 0;
  11. }
复制代码

for循环省略条件:

  1. //例一
  2. int main()
  3. {
  4. for(;;) //无条件默认为true
  5. {
  6. printf("hello world!");
  7. }
  8. return 0;
  9. }
  10. //例二
  11. int main()
  12. {
  13. for(int i=1;i<=10;) //省略了调整变量部分 i始终为1
  14. {
  15. printf("hello world!");
  16. }
  17. return 0;
  18. }
  19. //例三
  20. int main()
  21. {
  22. int i = 0;
  23. for (; i<10; i++) //当省略初始化部分,内循环i增到10之后回到外循环,但并没有初始化,所以条件为假跳出循环
  24. {
  25. for (; i < 10; i++)
  26. {
  27. printf("hello world!\n");
  28. }
  29. }
  30. return 0;
  31. }
复制代码

输出:
例一例二 :死循环打印 hello world!
例三:只打印10次hello world!

结论:不要随意省略for循环的表达式条件,可能会发生不可意料的错误

那么当在循环体内控制变量调整呢?

  1. int main()
  2. {
  3. for(int i=1;i<=10;i++)
  4. {
  5. i++;
  6. printf("hello world!");
  7. }
  8. return 0;
  9. }
复制代码

输出五次hello world!

结论:不要在循环内部随意更改循环变量的值,防止程序运行错误

while循环的结构:

while(表达式条件)
{
循环体;
}

while循环流程图:

while循环的使用:

打印1到10的数字

  1. int main()
  2. {
  3. int i=1;
  4. while(i<=10)
  5. {
  6. printf("%d",i);
  7. i++;
  8. }
  9. return 0;
  10. }
复制代码

break在while循环的使用:

  1. int main()
  2. {
  3. int i=1;
  4. while(i<=10)
  5. {
  6. if(i==5)
  7. {
  8. break;
  9. }
  10. printf("%d",i);
  11. i++;
  12. }
  13. return 0;
  14. }
复制代码

输出:1 2 3 4

这样看来break在while循环中是跟for一样的,那么再来看continue:

  1. int main()
  2. {
  3. int i = 1;
  4. while (i <= 10)
  5. {
  6. if (i == 5)
  7. {
  8. continue;
  9. }
  10. printf("%d", i);
  11. i++;
  12. }
  13. return 0;
  14. }
复制代码

输出:1 2 3 4 之后陷入死循环

结果似乎和for循环的continue输出不一样,这是为什么呢?
原因在while循环中i++的语句放在了continue之后,导致了当i=5时,continue后的语句不再执行,跳过了循环变量的调整部分,导致i始终是5,造成死循环

do while循环的结构:

do{
循环体;
}
while(条件表达式)

do while循环流程图:


do while循环的使用:

  1. int main()
  2. {
  3. int i= 1;
  4. do
  5. {
  6. printf("%d ", i);
  7. i++;
  8. } while (i<=10);
  9. return 0;
  10. }
复制代码

输出:1 2 3 4 5 6 7 8 9 10

那么更改循环条件:

  1. int main()
  2. {
  3. int i= 1;
  4. do
  5. {
  6. printf("%d ", i);
  7. i++;
  8. } while (i<1);
  9. return 0;
  10. }
复制代码

输出:1

结论:do while循环可以保证循环体至少被执行一次

break在do while循环的使用:

  1. int main()
  2. {
  3. int i = 1;
  4. do
  5. {
  6. if (i==5)
  7. {
  8. break;
  9. }
  10. printf("%d ", i);
  11. i++;
  12. } while (i <=10);
  13. return 0;
  14. }
复制代码

输出:1 2 3 4

continue:

  1. int main()
  2. {
  3. int i = 1;
  4. do
  5. {
  6. if (i==5)
  7. {
  8. continue;
  9. }
  10. printf("%d ", i);
  11. i++;
  12. } while (i <=10);
  13. return 0;
  14. }
复制代码

输出:1 2 3 4 后死循环

结论:break和continue在do while循环中跟while循环类似

goto语句

在C语言中不建议使用goto语句,但还是要懂得goto语句的用法

goto语句又称为无条件转移语句,且看下面例子:

  1. int main()
  2. {
  3. int a = 1, b = 2;
  4. if (a<b)
  5. {
  6. printf("a<b\n");
  7. //执行goto语句
  8. goto a;
  9. }
  10. else
  11. {
  12. a:
  13. printf("goto跳转");
  14. }
  15. return 0;
  16. }
复制代码

输出:
a goto跳转

可以看到goto语句跳转到了本该不执行的else语句里
其中 a: 为标记行,冒号不可省略

更改条件:

  1. int main()
  2. {
  3. int a = 1, b = 2;
  4. if (a>b)
  5. {
  6. printf("执行goto语句:\n");
  7. goto a;
  8. }
  9. else
  10. {
  11. printf("a>b\n");
  12. a:printf("跳转");
  13. }
  14. return 0;
  15. }
复制代码

输出:
a>b
跳转

此时 goto语句无意义

goto语句更多应用在多重循环当中

break只能跳出当前循环,而goto可以跳出全部循环

  1. int main()
  2. {
  3. int a = 1, b = 2;
  4. for (int i = 0; i < 10; i++)
  5. {
  6. for (int j = 0; j < 10; j++)
  7. {
  8. goto a;
  9. printf("%d", j);
  10. }
  11. }
  12. a: printf("跳出多重循环");
  13. return 0;
  14. }
复制代码

输出:跳出多重循环

总结:
1.循环中若知道循环次数应尽量使用for循环,反之while循环

2.若想让程序至少被执行一次可以使用do while循环

3.尽量不用goto


四、复合语句

复合语句(compound statement),又称为语句块

它把多条语句用一组大括号包起来,形成单条语句

{
表达式1;
表达式2;
表达式3;
}

语句块跟普通语句的区别是:不用分号结尾,其实语句块已经在上面代码中多次出现,一般应用在分支语句和循环语句当中

  1. int a=1;
  2. if (a!=0)
  3. { // 语句块
  4. int i = 0;
  5. while ( status == 0 && i < limit )
  6. {
  7. ; //空语句
  8. } // 另一个语句块
  9. }
  10. else
  11. {
  12. ;
  13. } // 第三个语句块
  14. }
复制代码

在语句块内声明的变量具有语句块作用域,即变量只能在该语句块内使用

生命周期从语句块开始,直到语句块结尾结束。

同时,在语句块内生成的变量的存储周期也将被限制,若没有static、extern修饰,那么该变量在语句块执行完毕后将被释放。

加static后:

  1. void Static();
  2. int main()
  3. {
  4. printf("第一次调用-----\n");
  5. Static();
  6. printf("第二次调用-----\n");
  7. Static();
  8. return 0;
  9. }
  10. void Static()
  11. {
  12. static int i=10;
  13. printf("%d\n", i);
  14. i++;
  15. printf("%d\n", i);
  16. }
复制代码

输出:
第一次调用-----
10
11
第二次调用-----
11
12


五、空语句

空语句仅用一个分号表示,代表不执行

  1. int main()
  2. {
  3. for (int i = 0; i <=10; i++)
  4. {
  5. ; //空语句
  6. }
  7. return 0;
  8. }
复制代码

空语句的作用:

  • 空语句一般用在循环当中,当做空循环体
  • 可用于编译器中设置断点
  • 可以使程序可读性更好,或为以后插入新语句而使用

新人发帖,以上内容可能有误,还请多多指教

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行