函数
6-1学习-定义和调用求x的n次幂的函数
(一)
#include <stdio.h>
// 函数原型声明
double power(double x, int n);
int main() {
double x;
int n;
scanf("%lf %d", &x, &n);// 从用户获取输入
double result = power(x, n);// 调用函数并打印结果
printf("%.0f\n", result);
return 0;
}
// 定义求x的n次幂的函数
double power(double x, int n) {
double result = 1.0;
for (int i = 0; i < n; i++) {
result *= x;
}
return result;
}
(二)
#include <stdio.h>
// 计算x的n次幂的函数
int power(int x, int n) {
int t = 1;
int i;
for (i = 0; i < n; i++) {
t = t * x;
}
return t;
}
int main() {
int a, b, s;
scanf("%d%d", &a, &b);
/* 调用power()函数,计算并输出a的b次幂 */
/********** Begin **********/
s = power(a, b);
printf("%d\n", s);
/********** End **********/
/* 调用power()函数,计算并输出a的3次幂 */
/********** Begin **********/
s = power(a, 3);
printf("%d\n", s);
/********** End **********/
/* 调用power()函数,计算并输出2的a+b次幂 */
/********** Begin **********/
s = power(2, a + b);
printf("%d\n", s);
/********** End **********/
/* 调用power()函数,求a的3次幂的b+2次幂 */
/********** Begin **********/
s = power(power(a, 3), b + 2);
printf("%d\n", s);
/********** End **********/
return 0;
}
6-2练习-定义和调用求最大公约数和最小公倍数的函数
#include <stdio.h>
// 根据相减法定义求最大公约数
int gcd(int a, int b) {
// 确保a是较大的数
if (b > a) {
int temp = a;
a = b;
b = temp;
}
// 相减法求最大公约数
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 定义求最小公倍数
int lcm(int a, int b) {
// 最小公倍数等于两数之积除以它们的最大公约数
return (a * b) / gcd(a, b);
}
int main() {
int a, b;
scanf("%d %d", &a, &b);
int resultGcd = gcd(a, b);
int resultLcm = lcm(a, b);
printf("最大公约数为:%d\n", resultGcd);
printf("最小公倍数为:%d", resultLcm);
return 0;
}
6-3学习-编写判断一个正整数是否为素数的函数
#include <stdio.h>
void prime(int m); // prime()函数声明
int main() {
int a[10], i;
for (i = 0; i < 10; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < 10; i++) {
prime(a[i]); // 调用无返回值函数,判断a[i]是否是素数
}
return 0;
}
/***** 定义void prime(int m) *****/
/********** Begin **********/
void prime(int m) {
int isPrime = 1; // 假设m是素数
if (m <= 1) { // 素数定义:大于1的自然数
isPrime = 0;
} else {
int i;
for (i = 2; i * i <= m; i++) { // 只需要检查到sqrt(m)
if (m % i == 0) {
isPrime = 0; // 如果能被其他数整除,则不是素数
break;
}
}
}
// 输出结果
if (isPrime) {
printf("%d 是素数.\n", m);
} else {
printf("%d 不是素数.\n", m);
}
}
/********** End **********/
6-4练习-编写函数计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和
#include<stdio.h>
/*****定义fun()函数*****/
/********** Begin **********/
double fun(int n) {
double sum = 0.0;
for (int i = 1; i <= n; i++) {
if (i % 5 == 0 || i % 9 == 0) {
sum += 1.0 / i;
}
}
return sum;
}
/********** End **********/
/*****定义main()函数*****/
/********** Begin **********/
int main() {
int n;
scanf("%d", &n);
double result = fun(n);
printf("%.2f\n", result);
return 0;
}
/********** End **********/
6-5练习-编写函数计算多项式的值
#include<stdio.h>
#include<math.h>
float fun(int m)
{
int q,p=0;
float w;
for(q=1;q<=m;q++)
{
p+=q;
}
w=1.0/p;
return w;
}
int main()
{
float s=0;
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
float x=fun(i);
s=s+x;
}
printf("s=%f\n",s);
return 0;
}
6-6练习-编写函数将两个两位数的正整数合并形成一个整数
#include <stdio.h>
main()
{
int a,b;
scanf("%d%d",&a,&b);
int c=fun(a,b);
printf("c=%d",c);
return 0;
}
int fun(int a,int b)
{
int c1,c2,c3,c4;
c1=b%10;
c2=a/10;
c3=b/10;
c4=a%10;
return(c1*1000+c2*100+c3*10+c4);
}
6-7练习-编写求阶乘函数
(一)
#include <stdio.h>
#include <stdlib.h>
int Factor(int n) //计算1-n的阶乘
{
int result = 1; //从1开始
for (int i = 1; i <= n; i += 1)
{
result *=i; //阶乘公式
}
return result; //返回结果
}
int Factorsum(int n) //计算所有阶乘的和
{
int sum = 0; //定义和为0
for (int i = 0; i <= n; i += 1)
{
sum += Factor(i); //从第一个数开始循环,每次加一个数
}
return sum; //返回和
}
int main()
{
int n;
scanf("%d",&n);
int result = Factorsum(n); //n
{
printf("sum=%d", result-1); //输出
}
system("pause");
return 0;
}
(二)
#include<stdio.h>
double app(double d)
{
double i,sum=1;
for(i=1;i<=d;i++)
{
sum=sum*i;
}
return(sum);
}
int main()
{
double m,n,a,b,c;
while(scanf("%lf %lf",&m,&n)!=EOF)
{
a=app(m);
b=app(n);
c=app(m-n);
}
printf("%.6f",a/(b*c));
}
6-8学习-编写函数交换两个变量的值
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//交换两个整型变量的内容
void Swap(int x, int y)
{
int z = x;
x = y;
y = z;
}
int main()
{
int a, b;
scanf("%d %d", &a, &b);
Swap(a, b);
printf("%d %d\n",b,a);
return 0;
}
6-9练习-编写函数求主调函数中两个变量的和与积,要求函数返回值类型为void
#include <stdio.h>
void func(int x,int y,int *p1,int *p2);
/*****定义main()函数*****/
/********** Begin **********/
main()
{
int a,b,s,p;
scanf("%d%d",&a,&b);
func(a,b,&s,&p);
printf("%d+%d=%d\n%d*%d=%d",a,b,s,a,b,p);
}
/********** End **********/
/*****定义func ()函数*****/
/********** Begin **********/
void func(int a,int b,int *p1,int *p2)
{
*p1=a+b;
*p2=a*b;
}
/********** End **********/
6-10学习-编写函数进行一维数组输入输出和求平均值
#include <stdio.h>
#define N 100 // 假设数组的最大长度为100
// 输入数组的函数
void inputarr(int array[], int n) {
for (int i = 0; i < n; i++) {
scanf("%d", &array[i]);
}
}
// 计算平均值的函数
float average(int array[], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += array[i];
}
return (float)sum / n;
}
// 输出数组的函数
void outputarr(int array[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
int main() {
int score[N], n;
float aver;
scanf("%d", &n);
inputarr(score, n);
outputarr(score, n);
aver = average(score, n);
printf("Average score is %.6f\n", aver);
return 0;
}