理论知识点
内容包括 操作符、if、switch、while、for、do while、break和continue语句、循环的嵌套、goto语句等。
练习代码:有关C语言分支循环的练习
1.操作符:
- 1 关系操作符
> ⼤于运算符 < ⼩于运算符 >= ⼤于等于运算符 <= ⼩于等于运算符 == 相等运算符 != 不相等运算符
- 2 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:1 exp1 ? exp2 : exp3
- 3 逻辑操作符
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符:
! 逻辑取反运算符(改变单个表达式的真假)&& 与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)|| 或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
代码题目练习
练习1:打印100~200之间的素数
思路:素数,即质数,除了1和自己之外,再没有其他的约数,则该数据为素数
方法一:试除法
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
// 外层循环用来获取100~200之间的所有数据,100肯定不是素数,因此i从101开始
for(i=101; i<=200; i++)
{
//判断i是否为素数:用[2, i)之间的每个数据去被i除,只要有一个可以被整除,则不是素数
int j = 0;
for(j=2; j<i; j++)
{
if(i%j == 0)
{
break;
}
}
// 上述循环结束之后,如果j和i相等,说明[2, i)之间的所有数据都不能被i整除,则i为素数
if(j==i)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
方法二 :一半
思路:
对于一个数i而言,超过i一半的数据,肯定不是i的倍数,因此方法一进行了许多没有意义的运算
所以每当我们拿到一个数据的时候,只需要检测区间[2, i/2]内是否有元素能整除i即可
#include<stdio.h>
int main()
{
int i = 0;//
int count = 0;
for(i=101; i<=200; i++)
{
//判断i是否为素数
//2->i-1
int j = 0;
for(j=2; j<=i/2; j++)
{
if(i%j == 0)
{
break;
}
}
//...
if(j>i/2)
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
方法三: 根号
再次思考素数,如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for(i=101; i<=200; i++)
{
//判断i是否为素数
//2->i-1
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
//...
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
方法四: 省略一些数
相邻的数必然一个为偶数一个为奇数,除了2和3以外的任一对相邻数字中偶数必然不是素数,因此循环可以改成“i+=2”
#include<stdio.h>
int main()
{
int i = 0;
int count = 0;
for(i=101; i<=200; i+=2)
{
//判断i是否为素数
//2->i-1
int j = 0;
for(j=2; j<=sqrt(i); j++)
{
if(i%j == 0)
{
break;
}
}
//...
if(j>sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
return 0;
}
同一道题目,从数学角度上精简思路会带来更有效的代码。