头歌实践教学平台—C语言程序设计(函数)

函数

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;
}
posted @ 2024-06-04 17:14  CYHMS  阅读(427)  评论(0)    收藏  举报