10道C语言循环练习题目,看看循环你掌握了多少
题目1屏幕上打印1到10在屏幕上打印1~10的值如果我们要打印1到10的值我们就先要造出来1到10其实在学编程时我发现了一个思想如果要表示很多的数我们不用真的去创建很多的变量其实一个变量就可以了我们创建一个变量并不断地给这个变量赋值去改变这个变量内存放的数据怎么能去不断地给变量赋值你可以手动赋值但是太麻烦我们可以利用循环让它帮我们做一些需要重复做的事情要打印1到10的值这个条件就可以去限制我们的循环while循环版int n 0; while (n 10) //当n10的时候就跳出循环 { n; //进行多次的赋值 printf(%d , n); //循环11次 }其实这个程序运行起来有点问题最后打印出了1到11这就涉及到边界问题分析一下最后当n10还是可以进入循环n,之后就变成了11进行打印n11就进入不了循环在上面的程序中我们将变量初始化为0进入循环肯定要n,打印出1但是为了避免打印出11我们就要改变循环条件变成n10当n10时就无法进入循环就不会发生n,打印程序改一下int n 0; while (n 10) //最后一次循环n,但打印出10 { n; printf(%d , n); //循环10次 }所以我们就要对这些边界一定要敏感写完之后即使检查一下如果把变量初始化成1呢循环体中的内容就又要改变了int n 1; while (n 10) { printf(%d ,n); n; //循环10次 }分析一下边界当n10的时候进入循环打印出10nn11再判断n11n10跳出循环其实如果仔细观察如果我们要打印10个数字就要循环10次for循环版int n 0; for (n1; n11; n) //循环10次 { printf(%d , n); }n10时打印nn11n11跳出循环for循环的n,这个执行是在循环体结束后执行如果我们把初始值定为0呢for(n0;n10;n) { n; printf(%d , n); }这样是不行的相当于让n加了2次改一下for(n0;n10;n) { printf(%d , n1); }如果不加n1打印出来的就是0到9我们现在要求在打印每个数时都加上1就变成了1到10do while但其实没有必要不能突出do while的特性int n 1; do { printf(%d , n); n; } while (n10);int n 0; do { n; printf(%d , n); } while (n10);综合来看我觉得for循环从1开始就是最简单明了的题目2逆序打印一个正整数的每一位打印一个正整数逆序打印每一位打印每一位就需要我们进行取余得到最后一位再除10再进行取余得到倒数第二位然后再除10…创建一个变量n我们再取余之后就开始打印打印之后就除10把上一位去掉最后的边界是什么呢比如98取余之后得到8打印n除10n变成9再取余打印n再除10得到0如果等于0就不需要再次取余了那么我们就可以用n值本身最为条件n最后等于0条件为假就直接跳出循环int n 0; int i 0; scanf(%d, n); while (n) { i n % 10; printf(%d , i); n/10; }for循环可以用吗 我感觉不是太适合因为我们不知道到底要循环多少次do while也可以题目3输入一个正整数打印所有小于等于的正偶数输入一个正整数打印所有小于等于这个数的正偶数这种题目有两种思路我们首先创建一个叫做n的变量代表这个正整数然后再进行输入第一种思路就是我们创建出所有小于等于n的数然后进行判断找到所有偶数第二种思路就是我创造出所有的偶数偶数的范围是小于等于n思路1int n 0; int i 1; scanf(%d, n); while(i n) //创造出1到n的所有数 { if(i%20) printf(%d , i); i; }int n 0; int i 0; for(i1; in; i) { if(i%20) printf(%d , i); }思路2int n 0; int i 2;//最小的偶数是2 scanf(%d, n); while(in) { printf(%d , i); i2; }int n 0; int i 2; for(i2;in;i2) { printf(%d , i); }for循环较while循环更加集中一些题目31到100中3的倍数之和计算1到100之间3的倍数的数字之和3的倍数之和的数字一定能被3整除我们这里依然有两种思路第一种造出1到100之间的所有数字然后一个一个去判断谁是3的倍数如果是就相加第二种就是造出所有是3的倍数的数字确保这些数字的范围在1到100并且相加思路一int n 0; int sum 0; for(n1;n100;n) { if(n%30) sumn; } printf(%d\n, sum);while也是可以写的int n1; int sum0; while(n100) { if(n%30) sumn; n; } printf(%d\n,sum);;第二种思路int n3; int sum0; for(n3;n100;n3) { sumn; } printf(%d\n,sum);如果要用第一种就要找到判断条件如何判断一个数是不是3的倍数如果要用第二种就要想怎么才能造出3的倍数题目4计算一个整数是几位数输入一个正整数计算这个整数是几位数我们创建一个count 0234/1023 123/102 22/100 3我们让这个数不断地除10除一次10让cout什么时候停止除10就是当除的结果的0的时候我们输入一个数得先出以下如果这个数一除就变成了0就直接跳出循环我们这个需要用的是do whileint n 0; int count 0; scanf(%d, n); do { n/10 count; } while(n) printf(%d,count);这里我们用的是do while其实也可以用whileint n 0; int count 0; scanf(%d, n); while(1) { n / 10; count; if (n0) break; } printf(%d\n,count);我们可以把whie写成一个死循环来遇到符合条件的就直接break题目5100到200之间的素数打印出100到200之间的素数其实在做题的时候一定要先进行分析而不是有一种先入为主的想法比如说我就觉得这道题用循环然后直接上手你要先去分析一下这道题目的流程再去动手写根据题目去选择适合的函数打印100到200之间的素数我们可以直接根据一个表达式造出素数吗肯定是不可以的素数的规律很难找所以我们就只能去造出100到200之间的数字来一个一个去判断是不是素数素数的特征就是如果这个数只能被1和自身整除就是素数所以这个就可以成为我们筛选出素数的条件如果这个数能被1和自身之间的数整除那么就不是素数1到自身之间的数需要我们造出来只要被第一个数整除了就可以直接跳出不需要再进行下去了int main()//素数 { int n 0; int i 0; for (n 100; n 200; n) //创造出100到200之间的数 { int flag 1;//设置一个状态量,每次循环都刷新成1 //进行筛选 for (i 2; i n; i)//找到2到n之间的数 { if (n % i 0) //如果被整除跳出循环 { flag 0; break; } } //跳出循环的有两种情况一种是素数一种是被整除了跳出 if (flag) printf(%d是素数\n, n); } }我们在这里设置了状态量为什么要设置状态量就是因为在跳出这个内层的循环时你不知道这个数时素数还是别的因为素数经过了一圈的计算找不到能整除的数就出来了如果非素数遇到能整除的遇到break就直接出来了所以我们就要设置状态我们在for循环中设置令flag1,如果被整除就变成0我们就可以根据flag的值来进行判断还有别的方法在内层for循环中如果找不到任何一个数整除i的最终值就是n我么可以根据n值来进行判断int main()//素数 { int n 0; int i 0; int count 0; for (n 100; n 200; n) //创造出100到200之间的数 { //进行筛选 for (i 2; i n; i)//找到2到n之间的数最终跳出in { if (n % i 0) //如果被整除跳出循环 break; } //跳出循环的有两种情况一种是素数一种是被整除了跳出 if (i n) { printf(%d是素数\n, n); count; } } printf(%d\n, count); }我们仍然可以进行一些优化我们在第一层循环时1就可以把偶数跳过偶数不可能是素数nt main()//素数 { int n 0; int i 0; int count 0; for (n 101; n 200; n2) //从101开始跳过所有的偶数每次都加2 { //进行筛选 for (i 2; i n; i)//找到2到n之间的数最终跳出in { if (n % i 0) //如果被整除跳出循环 break; } //跳出循环的有两种情况一种是素数一种是被整除了跳出 if (i n) { printf(%d是素数\n, n); count; } } printf(%d\n, count); }还有比如开平方之类的题目6从大到小输出三个数字从大到小输出三个数字的比如1 2 3输出3 2 1这道题同样有两种思路第一种就是我们输入三个数字分别是变量a,b,c我们先找出最大的abc都有可能是最大的我们就来进行判断如果a是最大的再找到第二大的剩下的就是最小的bc都有可能是第二大的还需要进行判断其实这样就算是我们去算好了所有可能的情况然后输出。这一种方法其实时对变量的比较int main() { int a 0; int b 0; int c 0; //输入 scanf(%d%d%d, a, b, c); //判断 if (a b a c) //a为最大 { if (b c)//b为第二大 printf(%d %d %d\n, a, b, c); else//c为第二大 printf(%d %d %d\n, a, c, b); } else if (b a b c)//b为最大的情况 { if (a c)//a为第二大 printf(%d %d %d\n, b, a, c); else//c为第二大 printf(%d %d %d\n, b, c, a); } else//c为最大 { if (a b)//a为第二大 printf(%d %d %d\n, c, a, b); else//b为第二大 printf(%d %d %d\n, c, b, a); } return 0; }就是这样其实就是把所有的情况都全部列出来了但其实我们可以不这样我们上面的思路相当于是把数据与变量绑定在一起了但数据和变量并不是绑定的关系我们可以更换变量中的数据如果我们可以把变量a中的数据存放最大的数据b种存放第二大的数据c中是最小的数的输出时只固定输出a,b,c就可以。这种其实是对数据的比较int main() { int a 0; int b 0; int c 0; int tmp 0; //输入 scanf(%d%d%d, a, b, c); //判断 if (a b) { tmp a;//将a的值赋给中间变量防止a中的数据被b中的数据覆盖而消失 a b; b tmp; } if (a c) { tmp a; a c; c tmp; } if (b c) { tmp b; b c; c tmp; } printf(%d %d %d\n, a, b, c); return 0; }我们把最大的数放在a中判断a中的值是不是大于b是不是大于c如果不大于就要运用一个中间变量把它们的值赋给aa中的值是最大时就要把第二大的数据放在b中如果b中的数据小于c就把c中的数据放到b中然后直接输出a,b,c就可以我们可以把if改成elseif吗肯定是不可以的如果ab这个条件为真elseif就不会再去判断这样就会漏掉判断a中的值是不是大于c必须去一个一个进行判断题目710个整数中的最大值求10个整数中的最大值想要求是个整数中的最大值我们让a中的数据存放最大值我们让a先和b进行比较如果ab将b中的数据赋值给a再比较a和c这里可以使用数组也可以不使用数组如果不使用数组就要输入10次先输入a再输入9次别的数字输入别的数字然后再进行比较判断再进行输入比较判断输入…,一共循环9次当这9次都进行完再去输出a的值确保不漏int main() { int a 0; int b 0; //输入a scanf(%d, a); //输入9次别的数字进行比较判断 for (int i 1; i 10; i) { scanf(%d, b); if (a b) { a b; } } printf(%d\n, a); }我们可以使用数组。我们创建一个数组数组中存放10个整数我们需要向数组中输入10个数找到最大的值我们固定下标为0元素是最大的数据将这个数据和下标为1的元素进行比较如果小于就将值赋给下标为0的然年再和下标为2的进行这样的过程每一次下标加1直到最后一个元素最最后输出int main() { int arr[10] { 0 }; int right sizeof(arr) / sizeof(0); //向数组中输入数据 for (int i 0; i 10; i) { scanf(%d, arr[i]); } for (int n 1; n right; n) { if (arr[0] arr[n]) { arr[0] arr[n]; } } printf(最大值是%d\n, arr[0]); }在这种问题中我们经常固定于个最大值的变量将这个变量依次和其他的变量比较大小题目81到100中所有的整数中出现了多少次数字9数一数1到100这些整数中出现了多少次数字9我们可以创造出1到100之间所有的数字8989%10得到个位判断个位数字是不是9再除10将个位数去掉得到88%10得到8判断是不是98/10等于0这个数字就判断到这里然后下一个数字这也是一个循环当除10的结果等于0就不再判断了然后就90如果有数字9就countcount最后输出int main() { int n 0; int count 0; //创造出1到100之间的数字 for (n 1; n 100; n) { int tmp n; //数一数有几个数字9 while (tmp)//n为0时条件为假就跳出循环 { if (tmp % 10 9) count; tmp / 10; } } printf(count%d\n, count); }但是在这里我写出了一个有bug的程序int main() { int n 0; int count 0; //创造出1到100之间的数字 for (n 1; n 100; n) { //数一数有几个数字9 while (n)//n为0时条件为假就跳出循环 { if (n % 10 9) count; n / 10; } } printf(count%d\n, count); }这样的程序运行不出来结果因为两个循环中的循环变量是一样的子循环的循环变量和父循环的循环变量一样的话就会子循环就会修改父循环的循环变量for和while的循环变量都是n,当n1时进入while循环1与10取余不等于91再和10相除等到0n又变成了0那么for循环本来是从1开始现在又变成了0n,又变成了1然后继续就又成了一个死循环所以这里我们可以找一个中间变量int tmp这个把n的值赋给tmp这样将tmp作为while的循环变量这样就不会改变n的值所以在以后写代码的时候一定要注意父循环的循环变量一定不能和子循环一样其实这道题我们还可以这样写就是1到100之间其实不用循环中间都这个数先和10取余得到末位再和10相除得到首位100就得到10所有的数都可以这样那我们就可以这样写int main() { int n 0; int count 0; //创造出1到100之间的数字 for (n 1; n 100; n) { if (n % 10 9)//末尾 count; if (n / 10 9)//首位 count; } printf(count%d\n, count); }第一种写法比较灵活题目9最终打印的值是多少这个程序输出的结果是什么这道题我算错了我们要分清进入循环前和进入循环后的变量的值不能模模糊糊地去计算我们列一个表格循环次数a的值循环前b的值循环前a的值循环后b的值循环后111242243733741044105135513616661671977198218821b的值大于20跳出循环最后a的值为8打印8顺便再提一道题这个程序最后输出的结果是hellothirdx和2进行取余后等于1执行case1case1中嵌套了一个switchy3执行default但是注意default后面没有break继续向下所以就执行外层的case2打印third题目10求两个数之间的最大公约数求两个数之间的最大公约数什么是最大公约数约数是什么约数就是能整除这个数的数比如12的约数就是12341216的约数是12481612和16的公约数就是124最大公约是就是4所以最大公约数就是最大能同时整除这两个数的数那这道题应该怎么做我们找到其中一个数的约数如果这个数能整除另一个数这个数就是公约数怎么找到最大的呢我们设置一个变量表示最大约数先初始化为0然后将这个数与公约数进行比较如果公约数大于最大公约数就将值赋给最大公约数这个变量然后我们再找到再进行比较最后输出我们先找到a的约数再找a,b的公约数然后max与约数进行比较int main() { int a 0; int b 0; int max 0;//表示最大公约数 int n 0; //输入 scanf(%d%d, a, b); //找到a的约束 for (n 1; n a; n)//找到a的约数 { if (a % n 0 b % n 0 )//找到公约数 { if (max n)//进行比较 max n; } } printf(最大公约数是%d\n, max); }程序就是这样这道题和第7道题第6道题目都用到了一个这样的思想初始化表示极值的变量然后遍历所有候选数据进行比较更新