文章目录
第六章.模块化程序设计
1.计算面积:输入r1、r2,求出圆形垫片的面积。
float p = 3.14;
float js(float r1, float r2) {
float A = p * r1 * r1, a = p * r2 * r2;
return A - a;
}
int main() {
float r1 = 0, r2 = 0;
printf("输入外半径r1,内半径r2:\n");
scanf("%f %f", &r1, &r2);
printf("其面积为:%.2f", js(r1, r2));
return 0;
}
2.找到10000以内的所有完数,其中判断完数的功能用函数实现。
一个数恰好等于它的真因子之和,则称该数为“完全数”。
第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。
//计算真因子
int A(int i) {
int count = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0)
count += j;
}
return count;
}
//判断
void B(int i,int m) {
if (i == m)
printf("%d ", i);
}
int main() {
int count = 0, m = 0;
printf("完数有:");
for (int i = 3; i <= 10000; i++) {
m = A(i);
B(i,m);
}
return 0;
}
3.输入两个正整数m和n,求其最大公约数和最小公倍数。
//最大公约数
void A(int n,int m) {
int count = 1;
for (int i = 1; i <= sqrt(m * n); i++) {
if (n % i == 0 && m % i == 0) {
count = i;
}
}
printf("%d", count);
}
//最小公倍数
void B(int n,int m) {
int count = 1;
for (int i = sqrt(m * n);; i++) {
if (i % n == 0 && i % m == 0) {
count = i;
break;
}
}
printf("%d", count);
}
int main() {
int m = 0, n = 0;
printf("输入两个正整数:");
scanf("%d %d", &m, &n);
printf("其最大公约数:");
A(n,m);
printf("其最小公倍数:");
B(n,m);
return 0;
}
4.一个5位数,判断它是不是回文数。例如,12321是回文数。
//判断回文数
int A() {
int n = 0;
scanf("%d", &n);
if ((n / 10000 == n % 10))
if((n % 10000) / 1000 == (n % 100) / 10)
return 1;
else
return -1;
}
int main() {
int count = 0;
printf("输入一个五位数:");
count = A();
if (count == 1)
printf("是回文数");
else
printf("不是回文数");
return 0;
}
5.从键盘输入任意一个正整数,输出该数的逆序数。
int A(int n) {
//递归
while (n >= 10) {
A(n % 10);
n = n / 10;
}
printf("%d", n);
return 0;
//循环
//int b=0, c=0;
//while (a) {
// b = a % 10;
// a = a / 10;
// c = c * 10 + b;
//}
//printf("逆序后的数: %d", c);
//return 0;
}
int main() {
int n = 0;
printf("输入一个正整数:");
scanf("%d", &n);
A(n);
return 0;
}
6.分析下面程序的运行结果。
(1)
void varfunc() {
int var = 0;
static int static_var = 0;
printf("\40:var equal %d\n", var);//每次调用会被重新置为0,输出恒为0
printf("\40:static var equal %d\n", static_var);
//static只在第一次赋值,往后其他赋值失效,即只赋值一次
//用static定义,每次调用不会重新赋值,且每次函数调用完仍然存在,第n次调用输出n-1.
printf("\n");
var++;
static_var++;
}
int main() {
int i;
for (i = 0; i < 3; i++) {
varfunc();
}
return 0;
}
(2)
int main() {
int i, num;
num = 2;
for (i = 0; i < 3; i++) {
printf("\40:the num equal %d\n", num);
num++;
{
//允许在不同的作用域使用相同的变量名
//内层作用域的变量在使用是会屏蔽外层作用域的同名变量
//static类型
static int num = 1;
printf("\40:the internal block num equal %d\n", num);
num++;
}
}
return 0;
}