C 语言 - 语句 (if,for,while,switch,goto,return,break,continue)
作者:DS小龙哥
- 2022 年 1 月 11 日
本文字数:4040 字
阅读完需:约 13 分钟
一、前言
这篇文章作为 C 语言基础知识点,介绍 C 语言常用的几个语句的用法、规则、使用案例。
介绍的语句如下:
if..else 判断语句for循环语句while循环语句do..while循环语句switch 语句goto 语句return 语句break 语句continue 语句
复制代码
第二章介绍语法使用规则、使用案例,第三章列出了一些练习题,用于结合第二章介绍的语句完成知识点巩固。
二、知识点与案例代码
2.1 if 语句语法规则、使用案例
if 语句语法:
//形式1if(<条件表达式>) //条件为真的时候执行{ ...执行的代码..}
//形式2if(<条件表达式>) //条件为真的时候执行{ ...执行的代码..}else //条件为假的时候执行 (else的语句块可以选择的,可以写也可以不写){ }
//形式3if(<条件表达式>) //条件为真的时候执行{ ...执行的代码..}else if(<条件表达式>) //条件为假的时候执行 (else的语句块可以选择的,可以写也可以不写){ ...执行的代码..}else if(<条件表达式>){ ...执行的代码..}........
<条件表达式> 里可以写什么代码? 写的语句执行完必须返回具体的结果。比如:12>34比如: if(printf("12345"))
复制代码
使用案例
#include <stdio.h>int main(int argc,char *argv[]){ int a=100; int b=20; int c=30; if(a>b) { printf("a>b\n"); }
if(a>b)printf("a>b\n");
//容易出错的地方 if(a==0) //if(a=0) { printf("a>b a>c\n"); }
//容易出错的地方 if(a&&b)//if(a&0) { printf("a>b a>c\n"); } return 0;}
/*逗号、分号逗号:间隔符号。 比如: int a,b,c,d;
! 逻辑非&& 逻辑与 -- 并且|| 逻辑或 --或者
& 按位与(3&1)、取地址(&a)* 乘号(a*b) 、指针(*a)、 *(块注释)*/
#include <stdio.h>int main(int argc,char *argv[]){ int year; printf("输入年份:"); scanf("%d",&year);
//判断平年和闰年 条件:能被4整除并且不能被100整除 条件2:能被400整除 if((year%4==0 && year%100!=0) || (year%400==0)) { printf("闰年\n"); } else { printf("平年\n"); }
//判断平年和闰年 条件:能被4整除并且不能被100整除 条件2:能被400整除 if(year%4==0 && year%100!=0) { printf("闰年\n"); } else if(year%400==0) { printf("闰年\n"); } else { printf("平年\n"); } return 0;}
复制代码
2.2 while、do..while 语句
//循环语句 while(<条件表达式>) { ...执行的代码.. }
do { ...执行的代码..}while(<条件表达式>);
#include <stdio.h>int main(int argc,char *argv[]){ int a=5; int b=5; //循环语句 a-- 、a=a-1、a-=1; while(a--) { printf("a=%d\n",a);//4\3\2\1\0 }
//循环语句 do { printf("a=%d\n",b);//\5\4\3\2\1\0 }while(b--); return 0;}
复制代码
2.3 for 语句
#include <stdio.h>int main(int argc,char *argv[]){ int a=0; //写法1 for(<初始化语句>;<条件表达式>;<自增/自减>) {
} 比如: for(a=0;a<10;a++) {
}
//写法2 for(;<条件表达式>;<自增/自减>) {
} 比如: for(;a<10;a++) {
} //写法3 for(;;) //条件永远为真 {
} 等价于 while(1)//条件永远为真 {
} return 0;}
#include <stdio.h>int main(int argc,char *argv[]){ //打印99乘法口诀表 int i,j; for(i=1;i<=9;i++) { for(j=1;j<=i;j++) { printf("%dx%d=%2d ",i,j,i*j); } printf("\n"); } return 0;}/*1x1=12x1=1 2x2=4....3x1=1 3x2=6 3x3=9 .....................*/
复制代码
2.4 break 语句
作用: 跳出当前的一层循环,或者跳出 switch 语句。
#include <stdio.h>int main(int argc,char *argv[]){ int i,j,cnt=1; for(i=0;i<5;i++) { for(j=0;j<10;j++) { if(j==5) { break; //跳出当前一层循环 } printf("cnt=%d\n",cnt++); //25 } } return 0;}
复制代码
2.5 goto 跳转语句
可以在函数内设置标签,任意跳转。
#include <stdio.h>int main(int argc,char *argv[]){ int i,j,cnt=1; for(i=0;i<5;i++) { for(j=0;j<10;j++) { if(j==5) { goto AA; //跳转语句 } printf("cnt=%d\n",cnt++); //5 } }AA: printf("程序执行完毕.\n"); return 0;}
复制代码
2.6 continue 语句
跳出本次循环,继续执行下一次新的循环。
#include <stdio.h>int main(int argc,char *argv[]){ int i,j,cnt=1; for(i=0;i<5;i++) { for(j=0;j<10;j++) { if(j==5) { continue; //跳出当前一次循环 } printf("cnt=%d\n",cnt++); // } } return 0;}
复制代码
2.7 switch 分支语句(C89 标准和 C99 标准)
#include <stdio.h>int main(int argc,char *argv[]){ int a; scanf("%d",&a); switch(a) { case 1: printf("选择1.\n"); break; case 2: printf("选择2.\n"); break; case 3: printf("选择3.\n"); break; case 4: case 5: case 6: printf("选择4,5,6\n"); break; default: printf("选择默认值.\n"); break; } return 0;}
复制代码
三、练习题
3.1 输入整数,然后使用二进制方式输出(数据传输)
0x23; ---8次 00100011#include<stdio.h>int main(){ unsigned int a,i; int flag=0; printf("输入整数:"); scanf("%d",&a); for(i=0;i<32;i++) { //if(a&0x1) //从低位开始判断 //if(a&0x80000000) //从高位开始判断 if(a&(1<<31)) //从高位开始判断 { flag=1; printf("%d",1); } else { if(flag) { printf("%d",0); } } a<<=1; //把a的左边移动 (高位溢出、低位补0) } printf("\n"); return 0;}
复制代码
3.2 打印所有水仙花数。
所谓水仙花是指一个三位数,其各位数字的立方和等于该数
#include <stdio.h>int main(){ int i; int a, b, c; for (i = 100; i <= 999; i++) { a = i / 100; b = i % 100 / 10; c = i % 10 / 1; if ((a*a*a + b*b*b + c*c*c) == i) { printf("%d ", i); } } return 0;}
复制代码
3.3 百元买百鸡
公鸡每只 5 元,母鸡每只 3 元,小鸡 3 只一元,问一百元买一百只鸡有几种买法。
#include<stdio.h>int main(){ int m, g, x; int m_max; int g_max; int x_max; int q, cnt; //cnt=数量 q:钱 printf("公鸡每只 5 元,母鸡每只 3 元,小鸡 3 只一元\n"); printf("请输入要买鸡的数量:\n"); scanf("%d", &cnt);// 100 100 printf("请输入要买鸡的钱:\n"); scanf("%d", &q);// 100 100 /*1. 判断输入的数据是否合理*/ if (q>0 && cnt>0) { m_max = cnt / 3; // 母鸡 100 /3 =33 g_max = cnt / 5; // 公鸡 100 /5 =20 x_max = (cnt / 1) * 3; // 小鸡 100 /1*3 =300 for (g = 0; g<g_max; g++) // 循环判断可能 { for (m = 0; m<m_max; m++) { x = cnt - g - m; //总数量-公鸡数量-母鸡数量 =小鸡的数量 if (x + g + m == cnt && x / 3 + g * 5 + m * 3 == q) //买鸡的总数等于总鸡数和总钱数等于买鸡的钱数就输出 { printf("公鸡=%d\t", g); printf("母鸡=%d\t", m); printf("小鸡=%d\t\n", x); } } } } else printf("输入有误\n"); return 0;}
复制代码
3.4 打印正三角形
#include<stdio.h>/* 1 121 123211234321*/int main(){ int i, j; int len; scanf("%d", &len); for (i = 1; i <= len; i++) //总行数 { /*1. 打印空格*/ for (j = 1; j <= len - i; j++) { printf(" "); } /*2. 打印前面一半*/ for (j = 1; j <= i; j++) { printf("%d", j); } /*3. 打印后面一半*/ for (j = i - 1; j >= 1; j--) { printf("%d", j); } printf("\n"); } return 0;}
复制代码
3.5 打印倒三角形
#include<stdio.h>int main(){ int i, j; int len; scanf("%d", &len); for (i = len; i >= 1; i--) //循环的总次数 { /*1. 打印空格*/ for (j = len; j>i; j--) { printf(" "); } /*2. 打印前面部分*/ for (j = 1; j <= i; j++) { printf("%d", j); } /*3. 打印后半部分*/ for (j = i - 1; j >= 1; j--) { printf("%d", j); } printf("\n"); } return 0;}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
版权声明: 本文为 InfoQ 作者【DS小龙哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/9de5f94ac52d2d6aae93df0eb】。文章转载请联系作者。
DS小龙哥
关注
之所以觉得累,是因为说的比做的多。 2022.01.06 加入
熟悉C/C++、51单片机、STM32、Linux应用开发、Linux驱动开发、音视频开发、QT开发. 目前已经完成的项目涉及音视频、物联网、智能家居、工业控制领域











评论