写循环时,小心避免死循环,循环能够处理有规律的数据,while循环、do while 循环、 for循环。
1.计算n的阶乘
#include<stdio.h> void main() { int n, sum = 1,i; printf("please input n of value:"); scanf("%d", &n); for (i = 1;i <= n;i++) { sum *= i; } printf("%d的阶乘为%d",n,sum); }
2.求1到100之间的奇数之和、偶数之和
#include<stdio.h> void main() { int even = 0, odd = 0; int i; for (i = 1;i <= 100;i++) { if (i % 2 == 0) { even += i; } else { odd += i; } } printf("奇数之和为%d,偶数之和为%d", odd, even); }
3.输入一行字符,统计其中的英文字母、数字、空格和其他字符个数
#include<stdio.h> void main() { int count = 1; printf("please input string:"); char c; c = getchar(); while ((c = getchar()) != '\n') { count++; } printf("输入的字符个数为:%d", count); }
4.用循环语句编写求的程序
#include<math.h> #include<stdio.h> void main() { int i, sum = 0; for (i = 0;i <= 10;i++) { sum += pow(2, i); } printf("2^0+……+2^10 = %d", sum); }
5.求
#include<stdio.h> void main() { //sum = 1省略了1! int i, j, sum = 1, value = 1; for (i = 2;i < 10;i++) { for (j = 1;j <= i;j++) { value *= j; } sum += value; value = 1; } printf("值为:%d", sum); }
#include<stdio.h> void main() { int count = 1; float sum = 0; float i = 2, j = 1,tmp = 0; while (1) { if (count == 20) { break; } count++; sum += i / j; tmp = i; i += j; j = tmp; } printf("第20个数的分子为:%0.1f,分母为:%0.1f\n", i, j); printf("sum值为:%0.2f", sum); }
7. 任意一个数,打印出它们中的最大数、最小数。测试数据:
①1.-12.20,30,-5,-23,33,125,200,-100
②0,10,3,1,5,6,-10,90,9,-4
③3 12,13,14,15,10,- 10,-11,-12,-9,9
#include<stdio.h> void main() {//用冒泡排序解决问题 int a[10], s; printf("请输入10个整数:\n"); for (s = 0;s < 10;s++) { scanf("%d", &a[s]); } int i, j, arrIntLength = sizeof(a) / sizeof(a[0]); //lastExchangeIndex记录最后一次交换的位置 int lastExchangeIndex = 0; //sortBorder无序数列的边界,每次比较只需要比到这里为止 //作用:减少一趟中的次数 int sortBorder = arrIntLength - 1; for (i = 0;i < arrIntLength - 1;i++) { int isSorted = 1;//有序标记,每一轮的初始都是true也就是1 for (j = 0;j < sortBorder;j++) { if (a[j + 1] < a[j]) { isSorted = 0; int t = a[j]; a[j] = a[j + 1]; a[j + 1] = t; lastExchangeIndex = j; } } sortBorder = lastExchangeIndex; //作用:减少总趟数 if (isSorted) { break; } } printf("最小值为:%d,最大值为:%d", a[0], a[9]); }
#include<stdio.h> void main() { int x; printf("please input x of int:"); scanf("%d", &x); int j; for (j = 2;j <= x / 2;j++) { if (x % j == 0) { printf("该%d不是素数!", x); break; } } if (x == 1) { printf("1不是素数!"); } //例如x=13,x/2 == 6 ,j == 7 //例如x=2,x/2 == 1,j == 2 else if (x != 1 && j > x / 2){ printf("该数%d为素数", x); } }
#include<stdio.h> void main() { int j, i, sum = 2; int isTrue = 1; printf("%d\n", sum); for (i = 3;i <= 100;i++) { isTrue = 1; for (j = 2;j < i;j++) { if (i % j == 0) { isTrue = 0; break; } } if (isTrue) { printf("%d\n", i); } } }
#include<stdio.h> void main() { int j, i, sum = 1;//1不是素数 int isTrue = 0; for (i = 3;i <= 100;i++) { isTrue = 0; for (j = 2;j < i;j++) { if (i % j == 0) { isTrue = 1; break; } } if (isTrue) { sum += i; } } printf("1-100之间所有非素数的和:%d", sum); }
11. 输入两个正整数 m和 n,求其最大公约数和最小公倍数。
提示:求 m,n的最大公约数:首先将m除以 n(m>n)得余数 R,再用余数R 去除原来的除数,得新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。求 m和 n的最小公倍数:m和n的积除以 m和 n的最大公约数。
测试数据:m=12,n=24 ; m=100,n=300
#include<stdio.h> void main() { //greatest为最大公约数,Least为最小公倍数 int m, n, r, greatest, least; printf("please input n and m:"); scanf("%d,%d", &n, &m); r = m % n; while (1) { r %= n; if (r == 0) { greatest = n; break; } } least = m * n / greatest; printf("%d和%d的最大公约数是:%d\n", m, n, greatest); printf("%d和%d的最小公倍数是:%d", m, n, least); }
12 .打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3(要求分别用一重循环和三重循环实现)
一重循环 #include<stdio.h> #include<math.h> //一重循环:那么就一个数转为位 void main() { //a,b,c分别代表了百位,十位和个位 int a, b, c, i, count = 0; for (i = 100; i <= 999;i++) { a = i / 100; b = i / 10 % 10; c = i % 10; if ((pow(a, 3) + pow(b, 3) + pow(c, 3)) == i) { count++; printf("第%d朵水仙花为:%d\n", count, i); } } } 三重循环 #include<stdio.h> #include<math.h> //三重循环:那么就从位往一个数去组合 void main() { int a, b, c, count = 0, value = 0; for (a = 1;a <= 9;a++) { for (b = 0;b <= 9;b++) { for (c = 0;c <= 9;c++) { value = a * 100 + b * 10 + c; if ((pow(a, 3) + pow(b, 3) + pow(c, 3)) == value) { count++; printf("第%d朵水仙花为:%d\n", count,value); } } } } }