1.求1~100之间所有整数内出现多少个数字9
思路:
1.遍历循环1~99个数字
2.个位数字上的9用%10的余数计算,然后让计数器count统计
3.十位数字上的9用/10的商计算,然后让计算器count统计
#include<stdio.h>
#include<math.h>
int main()
{
int num=0;
int count=0;
for (num = 1; num <= 99; num++)
{
if (num % 10 == 9)
count++;
if (num / 10 == 9)
count++;
}
printf("%d\n", count);
return 0;
}
2.分数求和
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
1.该题我们要使用双精度计算
2.设置flag赋值为1来控制正数和负数的变化
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int flag = 1;
double sum = 0.0;//注意双精度使用,后面初始化的数字要加.0
for (i = 1; i <= 100; i++)
{
//因为i和flag都是整型,我们要算出双精度,则需要在除数或被除数上乘上1.0
sum += flag * 1.0 / i;
flag = -flag;//控制flag让符号变成负号或正号
}
printf("%lf\n",sum);//注意占位符使用
return 0;
}
3.打印100~200之间的素数
思路:
1.素数是只能被1和本身整除的数字。因为偶数中只有2是素数,所以素数是奇素数和偶素数2组成。
2.循环101~200的数字i
3.我们要找到有没有其他数字 j 整除 i ,所以要循环2~多少个数字呢?难道只能是i吗?不是,更优解是循环2 ~ sqrt(i) ,为什么呢?
(sqrt是开平方根,记得引用math.h头文件)
举例:假如我们想知道16是不是素数,就要举例数字看能不能整除,如果我们能找到 [2,sqrt[i]] 整除它,就不用再举例其他数字,优化代码。16=28 16=44,则找[2,sqrt[16]]之间的数字
如果i能够被[2, sqrt(i)]之间的任意数据整除,则i不是素数
原因:如果 m 能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于sqrt(m),另一个大于或等于 sqrt(m)。
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
for (i = 101; i <= 200; i++)
{
int flag = 1;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
flag = 0;//不是素数则flag被赋值0
break;//跳出循环
}
}
if (flag == 1)//flag仍然为1,则i是素数
{
printf("%d ", i);
}
}
return 0;
}
4.打印九九乘法表
思路:
1.先循环打出行数,再循环打出每行表达式和表达式的内容
2.使用水平制表符让每个表达式对齐
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
int num = 0;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
num = j * i;
printf("%d*%d=%d\t", j, i, num);
}
printf("\n");
}
}
5.求最大值
求10 个整数中最大值
思路:
1.循环输入10个整数
2.数组arr[10]有存10个整数的空间
3.设第一个数字为最大值max,循环比较大小,若循环比较到有更大的值,则将值又赋给max,若没有则再循环直到跳出
#include<stdio.h>
#include<math.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
int max = 0;
for (i = 0; i <10; i++)
{
scanf("%d", &arr[i]);//注意数组要有取地址符&
}
max = arr[0];
for (i = 1; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("max = %d\n", max);
return 0;
}
若有不足地方,望各位指正,谢谢。