打印倍数
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语言编程题,但在这其中我体会了一些简略算法的利用,直至懂得了分支与循环语句的根底应用逻辑。置信我将会缓缓提高,在这条路线上。