/*
编写一程序P233.C实现以下功能
从键盘读入一个整数Num,按从小到大的顺序依次输出所有满足条件的3位数:
“该数各位数字之积”加上“该数十位数的平方”加上“该数个位数的立方”之和等于Num。
编程可用素材:
printf("Please Input a number: ");
printf("\nResult: ");
printf("%4d"…、);
printf("not Find!\n");
程序的运行效果应类似地如图1和图2所示,图1中的216和图2中的218是从键盘输入的内容。
Please Input a number: 216
Result: 106 206 306 406 493 506 606 706 806 906 982
图1 程序运行效果示例
Please Input a number: 218
Result: not Find!
图2 程序运行效果示例
*/
#include <stdio.h>
int main(void)
{
int i;
int data;
int gw, sw, bw;
int mul; //该数各位数字之积
int shi2; //该数十位数的平方
int ge3; //该数个位数的立方
int flag = 0; // 标志位,有无满足的数,甚至可以当成计数器用,初始没有,即为0
printf("Please Input a number: ");
scanf("%d", &data);
printf("\nResult: ");
// 满足条件的3位数的解空间,暴力求解
for (i = 100; i < 1000; i++)
{
gw = i % 10;
sw = i / 10 % 10;
bw = i / 100;
mul = gw * sw * bw; //该数各位数字之积
shi2 = sw * sw; //该数十位数的平方
ge3 = gw * gw * gw; //该数个位数的立方
// “该数各位数字之积”加上“该数十位数的平方”加上“该数个位数的立方”之和等于Num
if (data == mul + shi2 + ge3)
{
printf("%4d", i);
flag = 1; // 可以置标志,也可以置计数
}
}
if (flag == 0)
{
printf("not Find!\n");
}
return 0;
}
P714
/*
编写一程序P714.C实现以下功能
用scanf输入10个整数(采用int数据类型),计算所有正数的和、负数的和以及10个数的和。
编程可用素材:
printf("Input 10 integers: ");
printf("\nzhengshu=…,fushu=…,all=);
程序的运行效果应类似地如图1所示,图1中的4 6 20 -45 35 56 -23 -4 9 70是从键盘输入的内容。
Input 10 integers: 4 6 20 -45 35 56 -23 -4 9 70
zhengshu=200,fushu=-72,all=128
图1 程序运行效果示例
*/
#include <stdio.h>
#define N 10
int main(void)
{
int data;
int i;
double zhengshu = 0;
double fushu = 0;
double all = 0;
printf("Input 10 integers: ");
for (i = 0; i < N; i++)
{
scanf("%d", &data);
// 核心业务:判断并求和,要特别注意和的精确性,万一数据很大呢
all += (double)data;
if (data>0)
{
zhengshu += (double)data;
}
if (data<0)
{
fushu += (double)data;
}
}
// 拿浮点数当整数形式来输出,注意小数点后无位数
printf("\nzhengshu=%0.lf,fushu=%0.lf,all=%0.lf", zhengshu, fushu, all);
return 0;
}
P212
/*
编写一程序P212.C实现以下功能
根据输入的n(约定n>1)在屏幕上显示对应的图案。编程可用素材:
printf("Please input n: ");
程序的运行效果应类似地如图1和图2所示,图1中的2和图2中的5是从键盘输入的内容。
Please input n: 2
a
b b
a
图1 程序运行效果示例(n=2时)
Please input n: 5
a
b b
c c
d d // 分析这一行:空格+字母+空格+字母+回车
e e
d d
c c
b b
a
图2 程序运行效果示例(n=5时)
*/
#include <stdio.h>
void printBlank(int n);
void printSign(char ch);
int main(void)
{
int i;
int n;
printf("Please input n: ");
scanf("%d", &n);
// 上三角
for (i = 0; i < n;i++) // 控制行
{
printBlank(n - 1 -i); // 首部空格
printSign((char)('a' + i)); // 字母
printBlank(2 * i - 1); // 中间空格
if(i==0) // 尾部字母
{}
else
{
printSign((char)('a' + i));
}
printf("\n"); // 回车换行
}
// 下三角
for (i = n - 2; i >= 0; i--) // 控制行
{
printBlank(n - i - 1);
printSign((char)('a' + i));
printBlank(2 * i - 1);
if(i==0)
{}
else
{
printSign((char)('a' + i));
}
printf("\n");
}
return 0;
}
/*
打印n个空格
*/
void printBlank(int n)
{
int i;
for (i = 0; i < n;i++)
printf(" ");
}
/*
打印任意字符ch
*/
void printSign(char ch)
{
printf("%c", ch);
}
P724
/*
编写一程序P724.C实现以下功能
从键盘输入1~9之间的一个数,根据输入的数,输出对应的下三角乘法口诀表。
要求积的输出占3个宽度,且左对齐。
编程可用素材:
printf("input a number(1~9): ");
程序的运行效果应类似地如图1和图2所示,图1中的3和图2中的7是从键盘输入的内容。
input a number(1~9): 3
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
图1 程序运行效果示例
input a number(1~9): 7
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
图2 程序运行效果示例
*/
#include <stdio.h>
int main(void)
{
int i, j;
int n;
printf("input a number(1~9): ");
scanf("%d", &n);
for (i = 1; i <= n; i++) // 行控制
{
for (j = 1; j <= i; j++) // 列控制
{
/*
注意这里的 %md格式
1. %md 即占m宽度,不足则补空格在高位【左】,超出则原样输出
2. %-md 即占m宽度,不足则补空格在底位【右】,超出则原样输出
3. %0md 即占m宽度,不足则补0在高位,超出则原样输出
4. %-0md 整数没有这样的搞法,无意义,0会被忽略,并给出警告
*/
printf("%d*%d=%-3d", i, j, i * j);
}
printf("\n");
}
return 0;
}