id:706 A.字符金字塔
题目描述
本题要求实现函数输出n行字符金字塔。
函数接口定义:
void CharPyramid( int n, char ch);
其中n和ch是用户传入的参数,n为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行由字符ch构成的字符金字塔。注意每个字符后有一个空格。
输入
整数n,字符ch
输出
见输出样例
输入样例
4 G
输出样例
G
G G
G G G
G G G G
题解
- 打印出三角形,说明函数不需要返回,则用void
- 在主函数中,输入n和ch
- 在自定义函数中,需要用到两重循环,三个循环,则为在第二重循环中,需要用到两个for循环
- 第一重循环控制输出的行数
- 在第二重循环中,第一个循环的作用是输出空格,每行需要n - 1个空格,第二个循环的作用的是输出字符,每行需要i个字符(i为表示第几行),在第二重循环结束后,即完成第一行输出后,需要一个换行符
代码
#include <stdio.h>
#include <stdlib.h>
void CharPyramid(int n, char ch);
int main(int argc, char *argv[])
{
int n;
char ch;
scanf("%d %c", &n, &ch);
CharPyramid(n, ch);
return 0;
}
void CharPyramid(int n, char ch)
{
int i, j;
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n - i; j++)
{
printf(" ");
}
for (j = 1; j <= i; j++)
{
printf("%c ", ch);
}
printf("\n");
}
}
id:388 B.空心的数字金字塔
题目描述
本题要求实现一个函数,输入一个正整数n(1<=n<=9),输出n行空心的数字金字塔。要求定义和调用函数hollow_pyramid(n)打印出n行空心的数字金字塔。
输入
正整数n(1<=n<=9)
输出
见输出样例
输出样例
5
输入样例
1
2 2
3 3
4 4
555555555
题解
- 自定义的函数也是不需要返回
- 在主函数中,输入n
- 在自定义函数中,需要用到一个三重循环,和一个一重循环,第一个循环只用于输出 n - 1行金字塔,第二个循环只用于输出第n行
- 在第一个三重循环中,第一重用来控制行数,第二重循环用来输出空格,空格输出完后,循环结束,并打印出第一个数字,此数字就是表示此行,然后进行条件判断,若此行时第一行,则直接打印出换行符,否则,进到第三重循环中,第三重循环的作用是,打印出空格,形成空心形状,打印完空格后,结束循环,并输出数字,此数字是代表此行的数字,注意,打印空格和数字都属于判断语句中
- 在第二个一重循环中,进入循环的条件是打印的个数小于此行数乘以二再减一,执行语句是只输出一个数字,此循环结束后打印输出一个换行符
代码
#include <stdio.h>
#include <stdlib.h>
void hollow_pyramid(int n);
int main(int argc, char *argv[])
{
int n;
scanf("%d", &n);
hollow_pyramid(n);
return 0;
}
void hollow_pyramid(int n)
{
int i, j, k;
for (i = 1; i < n; i++)
{
for (j = 1; j <= n - i; j++)
{
printf(" ");
}
printf("%d", i);
if (i > 1)
{
for (k = 1; k <= 2 * i - 3; k++)
{
printf(" ");
}
printf("%d", i);
}
printf("\n");
}
for (i = 1; i <= 2 * n - 1; i++)
{
printf("%d", n);
}
printf("\n");
}
id:377 C.使用函数输出水仙花数
题目描述
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。
输入两个正整数m和n(100≤m≤n≤10000),输出开区间(m,n)内所有的水仙花数。本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间内所有的水仙花数。
要求定义并调用函数narcissistic(number)判断number是否为水仙花数,是则返回1,否则返回0。定义并调用函数print_n(m,n)按从小到大的顺序输出区间(m,n)内所有的水仙花数。
输入
两个正整数m和n(100≤m≤n≤10000)
输出
见样例
输出样例
153 400
输入样例
370
371
题解
- 此题调用两个函数,一个函数需要返回值,一个函数不需要返回值
- 在主函数中,输入m和n,调用函数print_n(m, n),
- 在函数narcissistic(number)中,需要用到一个while循环和一个条件判断语句,循环的目的是分解传入的数,即判断其是三位数还是四位数,作为if语句的判断条件,在if else语句中进行返回1或0的动作
- 在函数print_n(m, n)中,需要用到一个for循环,此循环的作用是遍历从m + 1
到n - 1的所有数,因为主函数传入了m和n的值,并进行条件判断语句,在条件判断中,调用函数narcissistic(number),如果返回值为1,则输出并打印出换行符
代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int narcissistic(int number);
void print_n(int m, int n);
int main(int argc, char *argv[])
{
int m, n;
scanf("%d %d", &m, &n);
print_n(m, n);
return 0;
}
int narcissistic(int number)
{
int x, t;
t = number;
x = 1;
while (t > 9)
{
t /= 10;
x *= 10;
}
if (x == 100)
{
if (number == pow(number % 10, 3) + pow(number / 10 % 10, 3) + pow (number / 100, 3))
{
return 1;
}
else
{
return 0;
}
}
else
{
if (number == pow(number % 10, 4) + pow(number / 10 % 10, 4) + pow(number / 100 % 10, 4) + pow(number / 1000, 4))
{
return 1;
}
else
{
return 0;
}
}
}
void print_n(int m, int n)
{
int j;
for (j = m + 1; j < n; j++)
{
if (narcissistic(j))
{
printf("%d\n", j);
}
}
}
id:380 D.使用函数输出指定范围内的完数
题目描述
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
要求定义并调用函数factorsum(number),它的功能是返回 number的因子和;定义和调用函数print_pn(m,n)逐行输出给定范围[m,n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。
输入
两个正整数m和n(0<m<=n<=10000)
输出
见样例
输入样例
6 30
输出样例
6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
题解
- 此题需要调用用到两个函数,一个函数需要返回值,一个函数不需要返回值
- 在主函数中,输入m和n的值,并调用函数print_pn(m, n)
- 在自定义函数factorsum(int number)中,先是用一个for循环,找出此数的因数,即能被次数整除的数,找出后相加,返回加完后结果的值
- 在自定义函数print_pn(int m,int n)中,先是用for循环,遍历从m到n的所有数,并把他们传递到函数factorsum(int number)中,若返回值与传入值相等,则再进行一次循环,找出因数并相加
代码
#include <stdio.h>
#include <stdlib.h>
int factorsum(int number);
void print_pn(int m, int n);
int main(int argc, char *argv[])
{
int m, n;
scanf("%d %d", &m, &n);
print_pn(m, n);
return 0;
}
int factorsum(int number)
{
int j, x, s;
s = 0;
for (j = 1; j < number; j++)
{
x = number % j;
if (x == 0)
{
s += j;
}
}
return s;
}
void print_pn(int m, int n)
{
int k, z, i, x, y;
y = 0;
for (k = m; k <= n; k++)
{
z = factorsum(k);
if (k == z)
{
x = 0;
y = 1;
for (i = 1; i < k; i++)
{
if (k % i == 0 && x == 0)
{
printf("%d = %d", k, i);
}
else if (k % i == 0 && x == 1)
{
printf(" + %d", i);
}
x = 1;
}
printf("\n");
}
}
if (y == 0)
{
printf("No perfect number");
}
}
id:379 E.使用函数输出指定范围内的Fibonacci数
题目描述
本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如fib(7)返回值是13。定义并调用函数print_fn(m,n)输出给定范围[m,n]内的所有Fibonacci数,相邻数字间有一个空格。如果给定区间内没有Fibonacci数,则输出一行“No Fibonacci number”。
输入
两正整数m和n(0<m≤n≤10000)
输出
见样例
输入样例
20 100
输出样例
21 34 55 89
题解
- 此题用到一个需要返回值的函数,一个不需要返回值的函数
- 在主函数中,先输入m, n,并调用函数print_fn(m, n)
- 在自定义函数fib(int n)中,需要用到while循环,找出大于传入的数且与其最近的斐波那契数并传回
- 在自定义函数print_fn(int m, int n)中,需要定义一个变量,目的是用来判断返回的数是否与上一次返回的数相同,然后进行一个for循环,遍历从m到n的所有数,并将其传到函数fib(int n)进行寻找斐波那契数,如果传回的数小于n且不与上一次传回的数相等,则输出,并让其赋值给表示上一次传入的数的变量,如果此范围内没有斐波那契数,则输出No Fibonacci number,即表示上一次数的变量为赋初值,即没有改变此值的意思
代码
#include <stdio.h>
#include <stdlib.h>
int fib(int n);
void print_fn(int m, int n);
int main(int argc, char *argv[])
{
int m, n;
scanf("%d %d", &m, &n);
print_fn(m, n);
return 0;
}
int fib(int n)
{
int f, j, k;
j = 1;
k = 1;
f = 0;
while (f < n)
{
f = j + k;
j = k;
k = f;
}
return f;
}
void print_fn(int m, int n)
{
int i, result, last;
result = 0;
last = -1;
for (i = m; i <= n; i++)
{
result = fib(i);
if (result <= n && last != result)
{
printf("%d ", result);
last = result;
}
}
if (last == -1)
{
printf("No Fibonacci number");
}
}