C语言实验报告6 函数

实验6 函数


一、实验目的

1、熟悉定义函数、声明函数的方法;

2、熟悉调用函数时,实参与形参的对应关系,以及“值传递”方式;

3、掌握函数调用的几种形式;

4、熟悉函数的嵌套调用和递归调用及其使用方法;

5、熟悉全局变量和局部变量的概念和用法;

6、熟悉对多文件的程序的编译和运行。

二、实验内容与实验结果

编程题1:

写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。

#include <math.h>
#include <stdio.h>

/*素数又叫质数。素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”*/
int prime(int n);
int prime(int n) {
    int i;
    for (i = 2; i < n; i++)
        if (n % i == 0)
            return 0;
    return 1;
}

int main() {
    int n;
    printf("please enter an integer:>>");
    scanf("%d", &n);
    if (prime(n))
        printf("%d is a prime.\n", n);
    else
        printf("%d is not a prime.\n", n);
    return 0;
}

编程题2:

编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。在主函数中输入字符串以及输出上述结果。

/*编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。
在主函数中输入字符串以及输出上述结果。*/
#include<stdio.h>
int letter,digit,space,others;//定义全局变量

void count(char str[]);
void count(char str[]){
        int i;
        for (i=0;str[i]!='\0';i++)
                if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
                        letter++;
                else if (str[i]>='0'&&str[i]<='9')
                        digit++;
                else if(str[i]==32)//空格个数
                        space++;
                else
                        others++;
}

int main(){
        char string[100];
        printf("please enter a string:>>");
        fgets(string,100,stdin);
        letter=0,digit=0,space=0,others=0;
        count(string);
        printf("\nletter=%d\ndigit=%d\nspace=%d\nothers=%d\n",letter,digit,space,others);
        return 0;
}

编程题3:

写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列。

#include <stdio.h>
#include <string.h>
#define N 10
char str[N];

//起泡排序
void sort(char str[]);
void sort(char str[]) {
    int i, j, flag = 1;
    char t;
    for (j = 1; j < N; j++) {
        if (!flag)
            break;
        flag = 0;
        for (i = 0; (i < N - j) && (str[i] != '\0'); i++)
            if (str[i] > str[i + 1]) {
                t = str[i];
                str[i] = str[i + 1];
                str[i + 1] = t;
                flag = 1;
            }
    }
}

int main() {
    int i, flag;
    printf("please input ten chars:>>");
    for (i = 0; i <= 10; i++)
        scanf("%c", &str[i]);
    sort(str);
    printf("sorted string:>>");
    for (i = 0; i < N; i++)
        printf("%c", str[i]);
    printf("\n");
    return 0;
}

编程题4:

用递归方法求n阶勒让德多项式的值,递归公式为:
P n ( x ) = { 1 n = 0 x n = 1 ( ( 2 n − 1 ) × x − P n − 1 ( x ) − ( n − 1 ) × P n − 2 ( x ) ) / n n ≥ 1 P_{n}(x)=\left\{\begin{array}{cc} 1 & n=0 \\ x & n=1 \\ \left((2 n-1) \times x-P_{n-1}(x)-(n-1) \times P_{n-2}(x)\right) / n & n \geq 1 \end{array}\right. Pn(x)=1x((2n1)×xPn1(x)(n1)×Pn2(x))/nn=0n=1n1

#include <math.h>
#include <stdio.h>

float formula(int n, float x);
float formula(int n, float x) {
    if (n == 0)
        return 1;
    else if (n == 1)
        return x;
    else
        return ((2 * n - 1) * x - formula((n - 1), x) - (n - 1) * formula((n - 2), x)) / n;
}

int main(){
        int n;
        float x;
        printf("please input n and x:>>");
        scanf("%d%f", &n, &x);
        printf("value is %5.2f\n", formula(n,x));
        return 0;
}

编程题5:

输入10个学生5门课的成绩,分别用函数实现下列功能:

1、计算每个学生平均分;

2、计算每门课程的平均分;

3、找出所有50个分数中最高的分数所对应的学生和课程

#include <stdio.h>
#define A 10
#define B 5
float score[A][B];
float stu[A], cour[B];
int r, c;


//输入学生成绩信息
void info();
void info() {
    int i, j;
    for (i = 0; i < A; i++) {
        printf("\nplease input the score of student %d:>>", i + 1);
        for (j = 0; j < B; j++)
            scanf("%f", &score[i][j]);
    }
}

//计算每个学生平均分
void aver_score();
void aver_score() {
    int i, j;
    float sum;

    for (i = 0; i < A; i++) {
        for (j = 0, sum = 0; j < B; j++)
            sum += score[i][j];
        stu[i] = sum / B;
    }
}

//计算每门课程的平均分
void aver_course();
void aver_course() {
    int i, j;
    float sum;

    for (j = 0; j < B; j++) {
        for (i = 0, sum = 0; i < A; i++)
            sum += score[i][j];
        cour[j] = sum / A;
    }
}

//所有50个分数中最高的分数所对应的学生和课程
float highest();
float highest() {
    float high = score[0][0];
    int i, j;

    for (i = 0; i < A; i++)
        for (j = 0; j < B; j++)
            if (score[i][j] > high) {
                high = score[i][j];
                r = i + 1;
                c = j + 1;
            }
    return high;
}

int main() {
    int i, j;
    float h;
    info();
    aver_score();
    aver_course();

    printf("\nNO.\tcourse1\tcourse2\tcourse3\tcourse4\tcourse5\taver\n");
    for (i = 0; i < A; i++) {
        printf("\nNO%2d", i + 1);
        for (j = 0; j < B; j++)
            printf("%8.2f", score[i][j]);
        printf("%8.2f\n", stu[i]);
    }

    printf("\naverage:");
    for (j = 0; j < B; j++)
        printf("%8.2f", cour[j]);

    h = highest();
    printf("\nhighest:%8.2f\tNO.%2d\tcourse%2d\n", h, r, c);
    return 0;
}

三、调试分析及经验总结

第一题

可以将for (i = 2; i < n; i++)

改成 for (i = 2; i < n/2; i++) 或者 for (i = 2; i <=sqrt(n); i++)

来提高计算机运算效率

############################################################################

函数的形参属于局部变量,仅在定义的函数内有效,函数返回后失效。

全局变量:在整个工程文件内都有效;“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值