重学C语言(四)

一、在屏幕上打印以下图形

		*
		***
		*****
		*******
		*********
		***********
		*************
		***********
		*********
		*******
		*****
		***
		*

(一)、代码

#include<stdio.h>
#include<stdlib.h>
/*
	此三角形分为上下两个三角形
	先打印上部三角形
	再打印下部三角形
*/
int main(){
	//用来记录上三角打印完之后j的大小,即一行有多少个“*”
	int cnt = 0;
	//外层循环控制循环轮数,即打印行数
	for (int i = 1; i < 13; i++){
		//内层循环控制每一行打印的‘*’多少
		if (i < 7){
			//打印上三角
			for (int j = 1; j <= 2 * i - 1; j++){
				printf("*");
				cnt = j;
			}
			putchar('\n');
		}
		else{
			for (int j = cnt-2; j > 0; j--){
				printf("*");
			}
			putchar('\n');
			cnt -= 2;
		}
	}	
	putchar('\n');
	system("pause");
	return 0;
}

(二)、结果
在这里插入图片描述
(三),总结
要打印这种三角形,只需要找到其中的规律,将大的图形转化为小的图形可以很方便的想到解决方法。

二、求出100~999之间的所有“水仙花数”并输出。

“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。

/*
在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。
例如153、370、371及407就是三位数的水仙花数,其各个数之立方和等于该数:
153 = 1^3 + 5^3 + 3^3。
370 = 3^3 + 7^3 + 0^3。
371 = 3^3 + 7^3 + 1^3。
407 = 4^3 + 0^3 + 7^3。
*/

(一)、代码

#include<stdio.h>
#include<stdlib.h>
/*
	求出100~999之间的所有“水仙花数”并输出。
*/
//求该数字的立方
int cube(int n){
	return n*n*n;
}

int main(){
	for (int i = 123; i < 1000; i++){
		int hunderds = i / 100;//百位
		int ten = i / 10 % 10;//十位
		int unit = i % 10;//个位
		if (cube(hunderds) + cube(ten) + cube(unit) == i)
			printf("%d\t", i);
	}

	system("pause");
	return 0;
}

(二)、结果
在这里插入图片描述
(三),总结
打印水仙花数字的关键在于数字的拆,最简单的方法莫过于,使用%,/运算了

三、求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

例如:2+22+222+2222+22222

(一)、代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和
/*
	用来求第i项的值
	输入的值为:数字a和第i项
	返回的值:第i项的结果
*/
int func(int a,int i){
	//返回的结果
	int result = 0;
	for (int cnt = 0; cnt < i; cnt++){
		result += a * (int)pow(10,cnt);
	}
	return result;
}
int main(){
	//数学式子中的a
	int a = 0;
	//结果
	int sn = 0;
	printf("请输入a的值:\n");
	scanf("%d", &a);
	for (int i = 1; i <= 5; i ++){
		printf("a(%d) = %d\n", i, func(a, i));
		sn += func(a, i);
		printf("Sn=%d\n", sn);
	}
	//printf("%d",sn);
	system("pause");
	return 0;
}

(二)、结果
在这里插入图片描述
(三),总结
    要求这样一个数学式子,可以充分使用函数来简化代码的复杂度,将单一的某一功能提取出去,使得同一时间集中精力只需要处理其中的一小块问题。
(四),问题及解决方案
使用vs2013重新编译的时候发生了一个错误:

fatal error LNK1168: 无法打开 xxx.exe 进行写入

    经过查找是之前DeBug的时候有一个文件在后台进程中仍然运行,如下图:
在这里插入图片描述
解决方案:
    打开任务管理器,关闭即可。

发布了65 篇原创文章 · 获赞 39 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44002167/article/details/103126276
今日推荐