写循环时,小心避免死循环,循环能够处理有规律的数据,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);
}
}
}
}
}