20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises10
P125
/*
编写一程序P125.C实现以下功能
从键盘读入两个字符cBegin和cEnd,要求输出≤cBegin且≥cEnd的所有字符。
编程可用素材:
printf("Please Input two char: ");
printf("\nResult: ");
程序的运行效果应类似地如图1所示,图1中的MA是从键盘输入的内容。
Please Input two char: MA
Result: MLKJIHGFEDCBA
知识点:
1. 循环起点cBegin
2. 循环终点cEnd
3. 循环趋势:越来越小
*/
#include <stdio.h>
int main(void)
{
char cBegin, cEnd;
int i;
printf("Please Input two char: ");
scanf("%c%c", &cBegin, &cEnd);
printf("\nResult: ");
for (i = (int)cBegin; i >= (int)cEnd; i--)
{
printf("%c", (char)i);
}
return 0;
}
P127
/*
编写一程序P127.C实现以下功能
从键盘读入一个字符cBegin和一个数iCount,要求输出≤cBegin的iCount个字符。
编程可用素材:
printf("Please Input a char and a number: ");
printf("\nResult: ");
程序的运行效果应类似地如图1所示,图1中的M 9是从键盘输入的内容。
Please Input a char and a number: M 9
Result: MLKJIHGFE
*/
#include <stdio.h>
int main(void)
{
char cBegin;
int iCount, i;
printf("Please Input a char and a number: ");
scanf("%c %i", &cBegin, &iCount);
printf("\nResult: ");
// 要特别注意这里的循环
/*
起点:cBegin,包括端点
终点:用输入的计数来计算终点iCount个
步长:1
char类型本质上就是int型,也可以不用强转,可以自动转化的
*/
for (i = (int)cBegin; i > (int)cBegin - iCount; i--)
{
printf("%c", (char)i);
}
return 0;
}
P232
/*
编写一程序P232.C实现以下功能
从键盘读入一个整数Num,按从小到大的顺序依次输出所有满足条件的3位数:“该数各位数字的平方和”再加上“该数/2”等于Num。
编程可用素材:
printf("Please Input a number: ");
printf("\nResult: ");
printf("%5d"…);
printf("not Find!\n");
程序的运行效果应类似地如图1和图2所示,图1中的293和图2中的199是从键盘输入的内容。
Please Input a number: 293
Result: 289 368 455 504
图1 程序运行效果示例
Please Input a number: 199
Result: not Find!
*/
#include <stdio.h>
int main(void)
{
int data, gw, sw, bw;
int i, count = 0;
printf("Please Input a number: ");
scanf("%d", &data);
printf("\nResult: ");
for (i = 100; i <= 999; i++)
{
/*
分离出各位上的数字
使用整数的除法和求余算法
*/
gw = i % 10;
sw = i / 10 % 10;
bw = i / 100;
// “该数各位数字的平方和”再加上“该数/2”等于Num
if (i / 2 + gw * gw + sw * sw + bw * bw == data)
{
count++;
printf(" %5d", i); // 注意输出格式宽度控制
}
}
if (count == 0)
{
printf("not Find!\n");
}
return 0;
}
P753
/*
编写一程序P753.C实现以下功能
计算X的Y次方,其中Y为整数(可以是负整数或0),X为实型。
注意,程序中不能使用库函数pow或使用同名的变量、函数、单词。
编程可用素材:
printf("Input x, y: ");
printf("\nResult: …^…=…);
程序的运行效果应类似地如图1和图2所示,图1中的3.7,5和图2中的4,-2是从键盘输入的内容。
Input x, y: 3.7,5
Result: 3.700000^5=693.439570
图1 程序运行效果示例
Input x, y: 4,-2
Result: 4.000000^-2=0.062500
看注释部分,可以看出,重构一下程序,程序看起来更简单,符合代码重用思想
*/
#include <stdio.h>
int main(void)
{
double datax, result = 1.0;
int datay, i;
printf("Input x, y: ");
scanf("%lf,%d", &datax, &datay);
if (datay == 0)
{
// 不考虑datax也为0的情况
;
}
else if (datay > 0)
{
for (i = 0; i < datay; i++)
result = result * datax;
// printf("\nResult: %lf^%d=%lf", datax, datay, result);
}
else
{
for (i = 0; i < (-1)*datay; i++)
result = result / datax;
// printf("\nResult: %lf^%d=%lf", datax, datay, result);
}
printf("\nResult: %lf^%d=%lf", datax, datay, result);
return 0;
}
P716
/*
编写一程序P716.C实现以下功能
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字(可取1~9之间的一个值)。
例如2+22+222+2222+22222(此时共有5个数相加),其中a值和有几个数相加由键盘输入控制。
注意s的值有可能超出int的范围,
编程可用素材:
printf("Please input a,n: ");
printf("\na+aa+...=…);
程序的运行效果应类似地如图1所示,图1中的2,3是从键盘输入的内容。
Please input a,n: 2,3
a+aa+...=246
提示:
1. 这样的题,自己做完后测试,一定要主动测试一下自己创造的数据,看结果符不符合预期
2. 首先题提供的测试数据要能通过
3. 变化后的数据,可以检验算法的通用性
*/
#include <stdio.h>
int main(void)
{
int dataa, count, i;
double aaa;
double result = 0;
printf("Please input a,n: ");
scanf("%d,%d", &dataa, &count);
aaa = dataa;
/*
注意循环的范围 ,特别是终点
*/
for (i = 0; i < count; i++)
{
result = result + aaa; // 累加还有一种常用的写法 result += aaa;
aaa = aaa * 10 + dataa; // 构造a aa aaa ... 数据
}
printf("\na+aa+...=%.0lf", result);
return 0;
}
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
提示
1. 首先要弄清楚行的控制
2. 再弄清楚列的控制
3. 常用的双重循环的行列的控制,特别是里面一层循环的起点和终点
*/
#include <stdio.h>
int main(void)
{
int i, j, data;
printf("input a number(1~9): ");
scanf("%d", &data);
for (i = 1; i <= data; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-3d", i, j, i * j);
}
printf("\n");
}
return 0;
}