您的位置:首页 > 编程语言 > C语言/C++

第8天学C语言(一点练习,例如打印1~100之间所有3的倍数的数字)

he12118 2020-09-12 21:41 197 查看 https://blog.51cto.com/1492122

(2020.9.12)

练习1:从大到小输出三个值

算法实现

a中放最大值

b次之

c最小

int a = 0;

int b = 0;

int c = 0;

scanf_s("%d%d%d", &a, &b, &c);(%d%d%d之间如果需要加逗号的话,

那你在屏幕上输出的时候也要加上逗号,否则会存在问题。%d%d%d之间如

果需要加#的话,那你在屏幕上输出的时候也要加上#,否则会存在问题)

if (a < b)

{

int tmp = a;

a = b;

b = tmp;

}

if (a < c)

{

int tmp = a;

a = c;

c = tmp;

}

if (b < c)

{

int tmp = b;

b = c;

c = tmp;

}

printf("%d%d%d\n", a, b, c);(printf不用取地址)

练习2:

打印1~100之间所有3的倍数的数字:

int i = 0;

for (i = 1; i <= 100; i++)

{

if (i % 3 == 0)

{

printf("%d\n", i);

}

练习3:

给定两个数,求这两个数的最大公约数

(辗转相除法):

假设有两个数24,18:将24%18,结果余6,再将18%6,结果为0

,则此时6即为两者最大公约数

int m = 24;

int n = 18;

int r = 0;

scanf_s("%d%d", &m, &n);

while (m % n )

{

r = m % n;

m = n;

n = r;

}

printf("最大公约数为:%d\n", n);

练习4:打印1000~2000的闰年,并且打印共有多少个闰年

判断闰年:

1.能被4整除并且不能被100整除是闰年

2.能被400整除是闰年(这两个条件的都是闰年哦!!!)

int year = 0;

int count = 0;

for (year = 1000; year <= 2000; year++)

{

if (year%400==0)

{

printf("%d\n", year);

count++;

}

else if (year % 4 == 0 && year % 100 != 0)

{

printf("%d  ", year);

count++;

}

}

printf("闰年总共有:%d 个", count);

或者直接一句话搞定鸭:

if(((year%4==0)&&(year%100!=0))||(year%400=0))

练习5:打印100~200之间的素数,并且统计一共有多少个

素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以

外不再有其他因数的自然数。

素数判断规则:

1.试除法

产生2~i-1的数字

int i = 0;

int n = 100;

int count = 0;

for (i = 1; i <= 200; i++)

{

int j = 0;

for (j = 2; j < i; j++)

{

if(i% j==0)

{

break;

}

}

if (j == i)

{

count++;

printf("%d ", i);

}

}

printf("一共有:%d个", count);

将上面的代码更加优化!!!:

如果i不是素数,i可以写成i=a*b,a\b中至少有一个数字<=开平方i

我只要在开平方i之前找到一个数字能够整除i,就证明它不是素数

sqrt--开平方的数学库函数,需要引用数学头文件#include<math.h>

int j = 2;

int i = 0;

int count = 0;

for (i = 101; i <= 200; i+=2)(因为偶数不可能)

{

for (j = 2; j <=sqrt(i); j++)(sqrt(i)代表将i开平方)

{

if (i % j == 0)

{

break;

}

}

if (j>sqrt(i))

{

printf("%d ", i);

count++;

}

}

printf("一共有%d 个", count);

以上优化过程都还是试除法,不过缩小了范围

《素数求法的n种境界》

练习6:数9的个数

数一下1~100的所有整数中出现多少个数字9:9,19,29,39,49,59,

69,79,89,90,99,91,92,93,94,95,96,97,98

思路:

如果个位为9的话模上10结果为9

如果数字十位是9的话,那么这个数字除上10商为9

int i = 1;

int count = 0;

for (i = 1; i <= 100; i++)

{

if (i/10==9)

{

printf("%d ", i);

count++;

}

else if (i % 10 == 9)

{

printf("%d ", i);

count++;

}

}

printf("一共有:%d个 ", count);

练习7:分数求和

计算1/1-1/2+1/3-1/4+1/5-...+1/99-1/100的值

1.先把-号全部改成+号

int i = 0;

double sum = 0.0;(那我们加起来的和就也为浮点数了)

for (i = 1; i <= 100; i++)

{

sum += 1 / i;

}

printf("%lf\n", sum);

(这样为错误因为结果只是为1,因为1/2的结果为0,而我们得到的结果想为小数,

要得到小数必须保证除号两端必须得有一个数是浮点数,i已经是整型了,就把分子1

改成浮点型1.0,用1.0/i得到的结果就为小数了)

最终结果:

int i = 0;

double sum = 0.0;

for (i = 1; i <= 100; i++)

{

sum += 1.0 / i;

}

printf("%lf\n", sum);

2.计算1/1-1/2+1/3-1/4+1/5-...+1/99-1/100的值

方法一:(比较简单)int i = 0;

double sum = 0.0;

int flag = 1;

for (i = 1; i <= 100; i++)

{

sum += flag*1.0 / i;

flag = -flag;(很巧妙就做到了,也可以利用奇数偶数来写成代码)

}

printf("%lf", sum);

也可以利用奇数偶数来写成代码:

方法二:

int i = 0;

double sum = 0.0;

int count = 1;

for (i = 1; i <= 100; i++)

{

if (count % 2 != 0)

{

sum += 1.0 / i;

count++;

}

else

{

sum -= 1.0 / i;

count++;

}

}

printf("%lf", sum);


标签: 
相关文章推荐