C语言循环程序的一些初级编程题目

本文展示了C语言中循环结构的使用,包括for、while和do...while循环,通过实例演示了阶乘计算、奇偶数求和、字符计数、斐波那契数列、最大公约数和最小公倍数、水仙花数等经典算法的实现,旨在帮助读者掌握循环控制和基础算法技巧。
摘要由CSDN通过智能技术生成

写循环时,小心避免死循环,循环能够处理有规律的数据,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.用循环语句编写求2^{0}+2^{1}+2^{2}+2^{3}+\cdot \cdot \cdot +2^{10}的程序

#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.求\sum_{n=1}^{20}n!

#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);
				}
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木子斤欠木同

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值