一、前言
这篇文章作为C语言基础知识点,介绍C语言常用的几个语句的用法、规则、使用案例。
介绍的语句如下:
if..else 判断语句 for循环语句 while循环语句 do..while循环语句 switch 语句 goto 语句 return 语句 break 语句 continue 语句
第二章介绍语法使用规则、使用案例,第三章列出了一些练习题,用于结合第二章介绍的语句完成知识点巩固。
if语句语法:
//形式1 if(<条件表达式>) //条件为真的时候执行 { ...执行的代码.. } //形式2 if(<条件表达式>) //条件为真的时候执行 { ...执行的代码.. } else //条件为假的时候执行 (else的语句块可以选择的,可以写也可以不写) { } //形式3 if(<条件表达式>) //条件为真的时候执行 { ...执行的代码.. } 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=1 2x1=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; }
三、练习题
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 12321 1234321 */ 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; }