C语言复习二(2025.11.7)
C语言复习二(2025.11.7)
位运算
<<:左移,按位左移
说明:原操作数所有二进制位数向左整体移动指定位。(小端模式:低补)
. >>:右移,按位右移
说明:原操作数所有二进制位数据整体向右移动指定位,移除的数据舍弃(高舍低补)
程序的三种基本结构
程序基本的三种结构:顺序结构,分支结构(条件结构、选择结构),循环结构(重复结构)
顺序结构
特点:各操作都是按顺序执行,这个结构是程序默认的。

分支结构
特点:根据是否满足条件而从一组、两组、多组操作中选择一种去执行。

P条件成立,则会去执行A操作,否则跳出结构。
分支结构分为:单分支结构、双分支结构、多分支结构。
循环结构
特点:当满足一定条件下,反复执行某一操作,有两种类型:
当型循环

说明:当P条件成立时,执行S操作,然后再去判断P条件是否成立,如果依然成立,再执行S操作,然后…,如此往复,直到P条件不成立此时不再执行S,结束循环。
举例:
while 、for()
特点:
先判断,后执行。循环体S有可能一次也不执行。
直到型循环

说明:首先先执行操作,再去执行P条件是否成立,如果成立再去执行S操作,然后再去判断…,如此反复,如果P条件不成立,结束循环。
举例:
do…while
特点:
先执行,后判断,循环体S至少执行一次。
用if实现分支结构
单分支:if…
语法:
if(条件表达式)
{语句;
}
如果是单语句可以省略{}
代码:
#include <stdio.h>int main(int argc, char *argv[])
{int x,y =-2;printf("请输入一个数字:");scanf("%d",&x);if(x >= 0){y = 2;}printf("x=%d,y=%d",x,y);return 0;
}
案例:
需求:有a,b,c三个数,要求从控制台输入,并求出它们中最大数和最小数。
#include <stdio.h>int main(int argc, char *argv[]) {int max, min, a, b, c;printf("请输入三个数:\n");scanf("%d%d%d", &a, &b, &c);max = a;min = a;if (max < b)max = b;if (max < c)max = c;if (min > b)min = b;if (c < min)min = c;printf("最大值是:%d,最小值是:%d", max, min);return 0;
}
双分支:if…else…
if (条件表达式)
{
语句1;
}
else
{
语句2;
}
// 如果是单语句,可以省略{},以下两种写法等价
if (条件表达式) 语句1;
else 语句2;
if (条件表达式)
语句1;
else
语句2
注意:else语句不能单独存在,必须和最近的未配对的if配对
代码:
#include <stdio.h>int main(int argc, char *argv[])
{int x,y;printf("请输入一个数:");scanf("%d",&x);if(x < 0){y = -2;}else{y = 2;}printf("x=%d,y=%d",x,y);return 0;}
案例
需求:输入一个年份,判断这个年份是闰年还是平年
#include <stdio.h>int main(int argc, char *argv[])
{int x;printf("请输入一个年份:\n");scanf("%d",&x);if(x % 4 ==0 && x%100 !=0 ||x%400 ==0){printf("%d是闰年",x);}else{printf("%d是平年",x);}return 0;
}
双分支:三目运算符
语法:
表达式1 ?表达式2:表达式3;
说明:
如果表达式1的值为真,就执行表达式2,否则执行表达式3。
案例:
通过控制台输入a,b,c三个数,求出最大值
#include <stdio.h>int main(int argc, char *argv[])
{int a,b,c,min,max;printf("请输入三个数字\n");scanf("%d%d%d",&a,&b,&c);max =(a > b)?(a > c ? a : c):(b > c ? b : c);min =(a < b)?(a < c ? a : c):(b < c ? b : c);printf("最大值是%d,最小值是%d",max,min);return 0;
}
循环结构
分类:
无限循环:死循环
有限循环:循环限定循环次数(for)或者终止循环的条件(while,do…while)
循环的构成
循环条件:循环次数或者循环的出口
循环体:需要重复执行的代码
当型循环的实现
特点:先判断,后执行,如果条件不满足一次也不执行。
代表:while、for
while循环
语法:
【1】循环变量
while(【2】循环条件)
{【3】循环语句;【4】更新循环变量;
}
// 注意:如果循环语句是单语句,可以省略{}
while (循环条件) 循环单语句;
while (循环条件)
循环单语句;
// 注意:有些特殊场景下,循环体语句糅合到了循环条件中,所以省略掉循环体
while (循环条件); // int i = 1; while(i++ <= 5); printf("%d\n",i);
案例
需求:求1~100的累加和(例如:1+2+3+4+…+100)
#include <stdio.h>int main(int argc, char *argv[])
{int i=1,sum=0;while(i <= 100){sum += i;i++;}printf("1~100的累加和是%d",sum);return 0;
}
案例
需求:求1~100以内的偶数和
#include <stdio.h>int main(int argc, char *argv[])
{int i = 2,sum = 0;while(i <= 100){if(i % 2 == 0){sum += i;}i++;}printf("1~100偶数累加和是:%d",sum);return 0;
}
案例
需求:通过键盘录入一个整数,判断这个整数是否是水仙花数。
比如一个三位数:
个位的3次幂 + 十位的3次幂 + 百位的3次幂 = 这个数本身
#include <stdio.h>
#include <math.h>int main(int argc, char *argv[])
{int num,n = 0,sum = 0;printf("请输入一个数:");scanf("%d",&num);int originalnum = num;while(num != 0){num /=10;n++;}num = originalnum;while(num != 0){int digit=num % 10;sum += pow(digit,n);num /=10;}if(sum ==originalnum){printf("%d是水仙花数",originalnum);}else{printf("%d不是水仙花数",originalnum);}return 0;
}
for循环
for循环结构清晰,非常适合直到循环次数的循环。
语法:
for (【1】循环变量; 【2】循环条件; 【4】更新循环变量)
{【3】循环语句;
}
// 如果循环体语句是单语句,也是可以省略{}
for (【1】循环变量; 【2】循环条件; 【4】更新循环变量)【3】循环语句;
for (【1】循环变量; 【2】循环条件; 【4】更新循环变量)【3】循环语句;
特点:先判断后执行,有可能一次都不执行。
案例
需求:计算1~100以内的偶数和
#include <stdio.h>int main(int argc, char *argv[])
{int sum = 0;for(int i = 1;i <= 100;i++){if( i % 2 ==0){sum += i;}}printf("1~100以内的偶数和是%d",sum);return 0;
}
案例
需求:用户通过键盘输入一个整数n,求n的阶乘。例如:n = 4,n的阶乘 1 * 2 * 3 * 4
#include <stdio.h>int main(int argc, char *argv[])
{int num,sum = 1;printf("请输入一个数\n");scanf("%d",&num);for(int i = 1;i <= num;i++){sum *= i;}printf("%d的阶乘是%d",num,sum);return 0;
}
案例
需求:求斐波拉契数列前20个
分析:
斐波拉契数列指的是是符合一定规则的数列,举例:1,1,2,3,5,8…
斐波拉契数列的特点:第3个数等于前两个数之和,最开始的第1,2个数是固定
的,都是1
#include <stdio.h>int main(int argc, char *argv[])
{ int a,b;a = 1;b = 1;int i = 1;for(;i <= 10;i++){printf("%d,%d\n",a,b);a += b;b += a;}return 0;
}
直到型循环的实现
特点:先执行,后判断,至少执行一次。
代表:do…while
do…while循环
语法:
【1】循环变量;
do
{
【2】循环体语句;
【3】更新循环变量;
} while(【4】循环条件);
案例
需求:求1~100 以内的偶数和
#include <stdio.h>int main(int argc, char *argv[])
{int sum = 0,i = 1;do{if(i % 2 == 0)sum += i;i++ ;}while(i <= 100);printf("1~100偶数和是:%d",sum);return 0;
}
案例
需求:九九乘法表
#include <stdio.h>int main(int argc, char *argv[])
{printf("-------九九乘法表----------\n");for(int i =1; i <= 9;i++){for(int j = 1; j <= i;j++ ){printf("%d * %d = %d ",j,i,i*j);}printf("\n");}printf("\n");return 0;
}
案例
需求:求100~200之间的所有的素数(素数又被称作质数)
#include <stdio.h>int main(int argc, char *argv[])
{int num = 100;int i ;int flag;for(;num <= 200;num++){flag =1;for(int i = 2;i <num / 2;i++){if(num % i ==0){flag = 0;break;}}if(flag){printf("%d ",num);}}printf("\n");return 0;
}
