ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

分支和循环练习题

分支和循环练习题 打印九九乘法表#includestdio.hintmain(){inti0;//控制行数for(i1;i9;i){//打印每一行内容每行有i个表达式intj0;for(j1;ji;j){printf(%d*%d%2d ,i,j,i*j);}printf(\n);}return0;}运行结果统计数字 9 的个数遍历 1 到 100 的每个整数用n % 10取出当前最后一位判断是否为 9然后n / 10去掉最后一位直到数字为 0。#includestdio.hintmain(){intcount0;for(inti1;i100;i){intni;while(n0){if(n%109){count;}n/10;}}printf(%d\n,count);return0;}输出的结果为 20。打印 100~200 之间的素数思路先产生 100~200 之间的数外层循环判断 i 是否为素数拿 2~i-1 之间的数字去试除 i内层循环如果 2~i-1 之间有数字能整除 i则 i 不是素数#includestdio.hintmain(){// 循环产生100~200的数字for(inti100;i200;i){intflag1;// 假设i是素数for(intj2;ji;j){if(i%j0){flag0;break;}}if(flag1)printf(%d ,i);}return0;}101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199因为素数一定不为偶数所以i可以改为i 2让其只产生奇数。还可以进一步优化 内层循环范围for (int j 2; j i; j)会检查 2 到 i-1 的所有数。逻辑正确但效率不高。实际上只需要检查到 sqrt(i) 即可因为如果 i 有大于 sqrt(i) 的因子那么必然有一个小于 sqrt(i) 的因子。代码可写为#includestdio.hintmain(){for(inti101;i200;i2){intflag1;// 假设是素数for(intj2;j*ji;j){if(i%j0){flag0;break;}}if(flag)printf(%d ,i);}return0;}给定两个数求这两个数的最大公约数求两个数的最大公约数GCD常用欧几里得算法 / 辗转相除法迭代的方式c#include stdio.hlong long gcd(long long a, long long b) {if (a 0) a -a;if (b 0) b -b;while (b ! 0) { long long t a % b; a b; b t; } return a;}int main() {long long a, b;printf(请输入两个整数: ); scanf(%lld %lld, a, b); printf(最大公约数: %lld\n, gcd(a, b)); return 0;}如果会使用递归还可以这样写c long long gcd(long long a, long long b) { if (a 0) a -a; if (b 0) b -b; return b 0 ? a : gcd(b, a % b); }
返回列表