一、求10 个整数中最大值
思路: 1. 采用循环的方式输入一个数组 2. 使用max标记数组中的最大值,采用循环的方式依次获取数组中的每个元素,与max进行比较,如果arr[i]大于 max,更新max标记的最大值,数组遍历结束后,max中保存的即为数组中的最大值。
#include <stdio.h>
int main()
{
int arr[10] = { 0 };
int i = 0;
for(i = 0;i < 10;i++)
{
scanf("%d",&arr[i]);//输入十个数
}
int max = arr[0];//假设最大值max是数组中的第一个数
for(i = 1;i<10;i++)
{
if(max < arr[i])//如果第一个数小于第二个数,
max = arr[i];//就将第二个数赋给最大值max,,如果依然是大于则跳出循环
}
printf("%d\n",max);
return 0;
}
我出现了两个问题导致没有运行结果
1、 for(int i = 0;i < 10;i++)//没有单独初始化i
{
scanf("%d",&arr[i]);
}
2、for(int i = 0;i<10;i++)
{
scanf("%d ",&arr[i]); //在%d后面加了一个空格
}
第一个for循环也能用while代替:
while(i<10)
{
scanf("%d",&arr[i]);
i++;
}
二、分数求和
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
我们可以先观察这串数字的特点,分母在1~100之间依次增加,说明肯定得有循环,其次还有正负号的交替,分子不变。那么要怎样实现正负号交替就是我们要思考的了。
思路: 1. 从上述表达式可以分析出 a. 该表达式主要由100项,基数项为正,偶数项为负 2. 设置一个循环从1~100,给出表达式中的每一项:1.0/i, 注意此处不能使用1,否则结果全部为0 然后使用flag标记控制奇偶项,奇数项为正,偶数项为负 然后将所有的项相加即可
#include <stdio.h>
int main()
{
double sum = 0.0;
int flg = 1;
int i = 0;
for(i = 1;i<=100;i++)
{
sum += 1.0/i*flg;
flg = -flg;
}
printf("%lf\n",sum);
return 0;
}
此代码的注意事项:
分数求和,要看结果是整数还是小数,这个式子明显是小数,所以初始化sum时要用double类型。
打印时也要注意不是打印整数%d,而是浮点数%lf。
这里的正负号变换我们是定义了一个flg,赋值为1,再通过循环中的flg = -flg就能实现正负号变换。
三、编写程序数一下 1到 100 的所有整数中出现多少个数字9
看到这个问题,我们可以先写出1~100出现了数字9的数字,有:
9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99
观察可以发现:9,无非是出现十位或者个位上,个位上有9的数除以10,取余数都是9;十位上有9的数除10都为9。
思路: 1. 给一个循环从1遍历到100,拿到每个数据后进行一下操作 2. a. 通过%(取余)的方式取当前数据的个位,检测个位数据是否为9 如果是,给计数器加1 b. 通过/的方式取当前数据的十位,检测十位数据是否是9, 如果是,给计数器加1 循环一直继续,直到所有的数据检测完,所有9的个数已经统计在count计数中。
#include <stdio.h>
int main()
{
int count =0;
int i = 0;
for(i=1;i<100;i++)
{
if(i % 10 ==9)//检测个位
count++;
if(i / 10 == 9)//检测十位
count++;
}
printf("%d\n",count);
return 0;
}
3.1、编写程序数一下 1到 100 的所有整数中有多少个数字出现数字9
小小拓展一下
这个问题我们需要怎么修改一下代码呢?因为99中是有两个9出现的,总不能把99算两次噻。
很简单:只需将第二个if改成else if,这样就有了选择性,第一个执行时就不会执行第二个了
#include <stdio.h>
int main()
{
int count =0;
int i = 0;
for(i=1;i<100;i++)
{
if(i % 10 == 9)//检测个位,,注意是双等号,一个等号是赋值
count++;
else if(i / 10 == 9)//检测十位
count++;
}
printf("%d\n",count);
return 0;
}
四、 打印1000年到2000年之间的闰年
这个问题其实很简单,只需了解了闰年的含义,就能解决
能被4整除并且不能被100整除或能被400整除的年份就是闰年。
一定要注意标红的关键词。
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1000;i < 2000;i++)
{
if(i % 4 == 0 && i % 100 !=0 || i % 400 == 0)//&&是且,||是或
printf("%d ",i);
}
return 0;
}
五、 最大公约数
给定两个数,求这两个数的最大公约数
例如:
输入:20 40
输出:20
最大公约数:即两个数据中公共约数的最大者。
求解的方式比较多,暴力穷举、辗转相除法、更相减损法、Stein算法算法
此处主要介绍:辗转相除法
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d",&a,&b);
while(c = a % b)
{
a = b;
b = c;
}
printf("%d\n",b);
return 0;
}
思路: 例子:18和24的最大公约数 第一次:a = 18 b = 24 c = a%b = 18%24 = 18 循环中:a = 24 b=18 第二次:a = 24 b = 18 c = a%b = 24%18 = 6 循环中:a = 18 b = 6 第三次:a = 18 b = 6 c=a%b = 18%6 = 0 循环结束 此时b中的内容即为两个数中的最大公约数。
OK,此次分析就到此结束咯,代码有很多种写法,我只是列出了一种,有问题欢迎指出哦!