1. 每日一言
义城有三盲,真盲,假盲,心盲。
2. 题目(1)打印1-100之间的奇数
(这道题比较基础)
3. 解法思路
3.1 法一:
用循环语句,列出1-100的数并判断该数是否为奇数(能否被二整除)。
3.2 代码:
#include<stdio.h>
int main()
{
int i = 0;
for(i=1;i<=100;i++)
{
if(i%2==1)
{
printf("%d ",i);
}
}
return 0;
}
运行结果:
3.3 法二:
奇数+2=奇数,用循环语句,令i=1,让i加等2,直到i<=100时终止。
3.4 代码:
#include<stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 100; i+=2)
{
printf("%d ", i);
}
return 0;
}
运行结果:
4. 题目(2)打印9*9乘法口诀表
4.1 解法思路
使用双层循环,然后打印。
4.2 代码:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 1; i < 10; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", j, i, i * j);//%-2d的作用:让数字左对齐
}
printf("\n");//换行
}
return 0;
}
运行结果:
5. 题目:(3)打印100-200之间的素数
使用C语言写⼀个程序打印100~200之间的素数,数字中间使用空格分割。
先补充一下素数的概念:素数是指只能被1和它本身整除的正整数。
6. 解法思路:
6.1 法一:使用双层for循环,第一层用来穷举100-200之间的数,第二层用来判断它是不是素数
6.2 代码:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int flag = 0;
for (i = 100; i <= 200; i++)
{
flag = 1;//一个是否为素数的标志,1为是,0为不是。
for (j = 2; j < i; j++)//由素数概念:j从2开始
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag==1)
{
printf("%d ", i);
}
}
return 0;
}
运行结果:
6.3 法一优化:
众所周知,偶数肯定不是素数,所以我们可以在外层循环做一下优化,同理在内层也可以做优化。
外层穷举奇数,内层也穷举奇数,因为一个数能被2的倍数的数除尽,那么肯定能被2除尽。
6.4 代码:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int flag = 0;
for (i = 101; i <= 200; i+=2)//i从101开始
{
flag = 1;
for (j = 3; j < i; j+=2)//j从3开始
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag==1)
{
printf("%d ", i);
}
}
return 0;
}
运行结果:
6.5 法一再优化:
再补充一个数学知识点:从 2 到 x-1 中存在可以整除 x 的数,那么在 (根号x)+1 到 x 中也存在⼀个数 d 可以整除 x
6.6 代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
int flag = 0;
for (i = 101; i <= 200; i+=2)//i从101开始
{
flag = 1;
for (j = 3; j <= sqrt(i); j+=2)//j从3开始
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag==1)
{
printf("%d ", i);
}
}
return 0;
}
运行结果: