C语言基础知识之循环与选择的结合应用

该博客展示了循环与选择结构在数值计算中的应用,包括求和、阶乘计算、分数求和以及各种数字模式的打印。通过C语言实现,涵盖了水仙花数、取余与整除问题以及各种图形打印(如倒三角、金字塔、菱形等)。同时,还涉及了不同步长的循环遍历技巧,如寻找能被3和5同时整除的数、奇数序列和的计算等。
摘要由CSDN通过智能技术生成

循环与选择的结合应用

  • 外循环描述的是行数,内循环描述的是列数

数值问题

求100以内能被3和5同时整除的数的和

#include <stdio.h>
int main() 
{
	int s = 0, i = 1;
	while (i <= 100){
		if (i % 3 == 0 && i % 5 == 0){
			s += i;
		}
		i++;
		printf("%4d", s);
	}
    return 0;
}

1!+2!+3!+4!+5! 阶乘

//0!=1
//x!=x(x-1)(x-2)...1;
//3!= 3*2*1;
#include <stdio.h>
int main() 
{
    int i = 0;
	int temp = 1;
	int iresult = 1;
	for (i = 1; i <= 5; i++)  //1 2 3 4 5 
	{
		//i!   1!=1  2!=1!*2  3!=2!*3
		temp *= i;   //temp=1   temp=1*2  temp =1*2*3
		printf("%d\t%d\n", temp, i);
		iresult *= i;
	}
	printf("iresult=%d\n", iresult);
	return 0;
}


1/2+2/3+3/4+4/5

//n/n+1   ---> n<5
//n-1/n;
#include <stdio.h>
int main() 
{
    double result = (double)1 / 2 + (double)2 / 3 + (double)3 / 4 + (double)4 / 5;
	printf("result=%.2lf\n", result);
	result = 0.0;
	for (int i = 1; i < 5; i++) 
	{
		result += (double)i / (i + 1.0);
	}
	//i = 3;  错误 ,i作用域只能在for循环{}中使用
	printf("result=%.2lf\n", result);
}

求1+1/3+1/5+1/7+…+1/n 的和

#include <stdio.h>
int main() {
	double s = 1.0;
	int n, i = 3;
	scanf("%d", &n);
	//第一种方法
	/*while (i <= n){
		s += 1.0 / i;
		i = i + 2;
	}*/

	//第二种方法
		for (i = 3; i <= n; i += 2)
			s += 1.0 / i;
	printf("s=%.2f", s);
	return 0;
}

求100以内能被3和5同时整除的数之和

int s = 0,i = 1;
    while (i <= 100){
        if (i % 3 == 0 && i % 5 == 0){
            s += i;
        }
        i++;
        printf("%d",s);
    }

求s = 1-3+5-7+9-…+101 的和

#include <stdio.h>
int main() {
	//第一种
	/*int s = 0, i = 1, flag = 1;
	while (i <= 101){
		s += flag * i;
		i += 2;
		flag = -flag;
	}
	printf("%d", s);*/
	//第二种
	/*int s = 0, s1 = 0, s2 = 0, i;
	for (i = 1; i <= 101; i += 4)
		s1 = s1 + i;
	for (i = -3; i >= -99; i -= 4)
		s2 += i;
	s = s1 + s2;
	printf("%d", s);*/
	//第三种
	int s = 0, a = 1, b = -3;
	while (a <= 97){     //a <= 101
		s += a + b;
		a = a + 4;
		b += -4;
	}
	s += 101;           // s += 103
	printf("%d", s);
}

三位不同的数组合新的数

#include <stdio.h>
int main(){
	int a, b, c;
	for (a = 1; a <= 9; a++) {
		for (b = 0; b <= 9; b++) {
			for (c = 0; c <= 9; c++) {
				if (a != b && b != c) {
					printf("%4d", a * 100 + b * 10 + c);
				}
			}
		}
	}
	return 0;
}

1000以内水仙花数

  • 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身。例如:1^3 + 5^3+ 3^3 = 153
#include <stdio.h>
int main() {
	int a, b, c, i;
	for (i = 100; i < 1000; i++) {
		a = i / 100;
		b = i % 100 / 10;
		c = i % 10;
		if ((a * a * a + b * b * b + c * c * c) == i)
			printf("%4d", i);
	}
	return 0;
}

取余与整除问题

1234 = 1000 + 200 + 30 + 4     -->4321
    4 = 1234 % 10              -->1234 %10
    3 = 1234 / 10 % 10         -->1234 % 100 / 10
    2 = 1234 / 100 % 10        -->1234 % 1000 / 100
    1 = 1234 /1000             -->1234 /1000

打印问题

打印倒直角三角形

在这里插入图片描述

#include <stdio.h>
int main() {
	int i, j;
	for (i = 10; i >= 1; i--) {
		for (j = 1; j <= i; j++)
			printf("*");
		printf("\n");
	}
}

打印正直角三角形

在这里插入图片描述

#include <stdio.h>
int main() {
	int i, j;
	for (i = 1; i <= 10; i++) {
		for (j = 1; j <= i; j++)
			printf("*");
		printf("\n");
	}
}

打印金字塔

在这里插入图片描述

#include <stdio.h>
int main() {
	int i, j, k;
	for (i = 1; i <= 10; i++) {
		for (k = 15; k >= i; k--)
			printf(" ");
		for (j = 1; j <= 2 * i - 1; j++)
			printf("*");
		    printf("\n");
	}
}

打印菱形

在这里插入图片描述

#include <stdio.h>
int main() {
	int i, j, k;
	for (i = 1; i <= 5; i++) {
		for (k = 10; k >= i; k--)
			printf(" ");
		for (j = 1; j <= 2 * i - 1; j++)
			printf("*");
		    printf("\n");
	}
	for (i = 4; i >= 1; i--) {
		for (k = 10; k >= i; k--)
			printf(" ");
		for (j = 2 * i - 1; j >= 1; j--)
			printf("*");
		printf("\n");
	}
}

正反相对两个直角三角形

在这里插入图片描述

#include <stdio.h>
int main() {
	int i = 1, n = 0;
	printf("请输入层数:");
	scanf_s("%d", &n);
	for (i = n; i >= 1; i--) {
		for (int j = 1; j <= i; j++) {
			printf("*");
		}
		printf("\n");
	}
	for (i = 2; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

正反对立的两个金字塔

在这里插入图片描述

#include <stdio.h>
int main() {
	int i, j, k;
	
	for (i = 4; i >= 1; i--) {
		for (k = 10; k >= i; k--)
			printf(" ");
		for (j = 2 * i - 1; j >= 1; j--)
			printf("*");
		printf("\n");
	}
	for (i = 1; i <= 5; i++) {
		for (k = 10; k >= i; k--)
			printf(" ");
		for (j = 1; j <= 2 * i - 1; j++)
			printf("*");
		printf("\n");
	}
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不想写代码的懒大王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值