一、在屏幕上打印以下图形
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
(一)、代码
#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的时候有一个文件在后台进程中仍然运行,如下图:
解决方案:
打开任务管理器,关闭即可。