打印倍数
int main() { int x = 0;//倍数目标 int y = 0;//倍数范围 int i = 1; scanf("%d %d", &x,&y); for (; x <= y; x = i * x) { printf("%d ", x); i++; }; return 0; }
三数排序
int main() { int a;//最大值 int b;//中间值 int c;//最小值 scanf("%d %d %d", &a, &b,&c);//随机输入数值(无序) if (a < b) { int tmp; tmp = a; a = b; b = tmp; } if (a < c) { int tmp; tmp = a; a = c; c = tmp; } if (b < c) { int tmp; tmp = b; b = c; c = tmp; } printf("%d %d %d", a, b, c); return 0; }
求两数间最大公约数(辗转相除法)
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
{ int a;//数字a int b;//数字b int ret; scanf("%d %d", &a, &b); while (ret=a % b)//a%b=0时跳出循环 { a = b; b = ret; } printf("%d", b); return 0; }
判断某个范围内各个自然数的个位或十位是否为九
int main() { int a;//判断目标 int b;//范围 int count=0;//计数 scanf("%d %d",&a,&b); for (a = 1; a <= b; a++) { if (a % 10 == 9) { printf(" %d", a); count++; } //若使用else if会缺少99(个位和十位都是9,必须重复计数) if (a / 10 == 9) { printf(" %d", a); count++; } }; printf("\ncount=%d", count); return 0; }
打印素数
素数是除一及其本身外无其他公约数的自然数2。
判断方法:
试除法(将小于指定数的自然数一一试除,皆无法整除者为素数)
int main() { int i = 0; int k = 0;//起始数 int p = 0;//结束数 int j = 0; int count = 0;//计数范围内素数个数 scanf("%d %d ",&k,&p) for (i = k; i <= p; i++)//给出范围内各个数 { //素数的判断 for (j = 2; j <= i - 1; j++) { if (i % j == 0) break; } if (j == i) { count++; printf("%d ", i); } } printf("\ncount=%d", count); return 0; }
优化:
{ int i = 0; int k = 0;//起始数 int p = 0;//结束数 int count = 0; for (i = k; i <=p; i += 2)//跳过所有偶数,减少计算量。 { int j = 0; //素数的判断:无法被2到指定数的开方数整除的自然数 for (j = 2; j <= sqrt(i); j++) { if (i % j == 0) break; } if (j > sqrt(i)) { count++; printf("%d ", i); } } printf("\ncount=%d", count); return 0; }
求某个范围的闰年
- 非整百年份:能被4整除的是闰年。(如2004年就是闰年,2001年不是闰年)
- 整百年份:能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
int main() { int a; int b; int count = 0; scanf("%d %d", &a, &b); for (; a < b; a++) { if (((a % 4 == 0) && (a % 100 != 0)) || (a % 400 == 0)) { printf("%d ", a); count++; } } printf("\ncount=%d", count); return 0; }
计算阶乘(计算数学上的n!)
int main() { long x=0;//目标n int y=0; int ret = 1; scanf("%d/n", &x); for (y = 1; y <= x; y++)//给出计算所需值 { ret = ret * y;//进行累乘 }; printf("%d\n", ret); return 0; }
加大难度:计算阶乘相加
int main() { long x = 1; int y = 0; int ret = 1;//累乘媒介 int sum = 0;//相加结果 int n = 0;//阶乘范围 scanf("%d/n", &n); while(x<=n) { ret = 1; for (y = 1; y <= x; y++) { ret = ret * y; }; sum += ret; x++; } printf("%d", sum); return 0; }
打印1 / 2 + 1 / 3 – 1 / 4…. – 1 / 100结果
int main() { int a = 1; int f = 1; double sum = 0; //由于计算结果为小数,只能使用浮点数 double b = 0.0; for (b=1; b <= 100; b++) { sum +=( f * 1 / b); f = -f;//交替出现加号与减号 } printf("%lf", sum);//浮点数对应%lf return 0; }
二分查找
注:只能在有序数组中才能使用。
int main() { int left = 0;//左下标 int right = 0;//右下标 int k = 0;//查找值 int n = 0;//数组长度 int z = 0;//中间值 char arr[] = { 1,2,3,4,5,6,8,9 };//查找范围 scanf("%d", &k); right = n - 1; n = sizeof(arr) / sizeof(arr[0]);//计算数组大小 while (left <= right)//易错:等于号不可省略 { z = (left + right) / 2; if (arr[z] < k) { left = z + 1; } else if (arr[z] > k) { right = z - 1; } else { printf("找到了,下标是%d", z); break; } } if (left > right) printf("找不到"); return 0; }
打印乘法口诀表
右下角
int main() { int a;//行数 int b;//列数 for (a= 1; a <= 9; a++) { for (b = 1; b <= a; b++) { printf("%d*%d=%d\t", b, a, a * b);//\t一个制表符距离 } printf("\n"); } return 0; }
正方形
int main() { int a;//行数 int b;//列数 for (a = 1; a <= 9; a++) { for (b = 1; b <=9; b++) { //%-2d为向左对齐两个字符 printf(" %d*%d=%-2d", a, b, a * b); } printf("\n"); } return 0; }
总结
或许,以上只是常见的c语言编程题,但在这其中我领会了一些简单算法的应用,直至懂得了分支与循环语句的基础使用逻辑。相信我将会慢慢进步,在这条道路上。
注意:本文来自网友投稿。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!
CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。