C语言函数与宏定义实验报告

C语言函数与宏定义实验报告


姓名:胡熙国 实验地点:一教524 实验时间:2021-5-18


一、实验目的与要求

  1. 掌握函数的定义方法和调用规则。
  2. 掌握在C语言程序中主调函数和被调函数之间进行数据传递的规则。
  3. 了解函数的返回值及其类型,并正确使用。
  4. 了解局部变量和全局变量的作用城及它们与存做分类的关系,理解变量的存在性和可见性的概念

二、实验内容

实验一

1.问题描述

  • 求两个数的最大公约数

2.试验代码

#include <stdio.h>
int gcd(int a, int b)
{
    int temp;
    int remainder;
    if (a < b)
    {
        temp = a;
        a = b;
        b = temp;
    }
    remainder = a % b;
    while (remainder != 0)
    {
        a = b;
        b = remainder;
        remainder = a % b;
    }
    return b;
}
int main(void)
{
    int x, y;
    int fac;
    printf("请输入两个整数\n");
    scanf("%d,%d", &x, &y);
    fac = gcd(x, y);
    printf("最大公约数为%d\n", fac);
}

3.效果截图

image

4.问题分析

解决该问题的关键是如何将辗转相除法转化为相应的代码。


实验二

1.问题描述

  • 输入n,输出高度为n的正三角形

2.试验代码

#include <stdio.h>
void trangle(int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n - i; j++)
        {
            printf(" ");
        }

        for (j = 0; j <= 2 * i; j++)
        {
            printf("*");
        }

        putchar('\n');
    }
}
int main(void)
{
    int n;
    printf("请输入三角形的高度\n");
    scanf("%d", &n);
    printf("\n");
    trangle(n);
}

3.效果截图

image

4.问题分析

该问题的关键点在于输出的高度是变化的,要用到合适的变量去将高度的变化表示出来,这个问题还可以将前一章的for循环复习。


实验三

1.问题描述

  • 求500以内的所有亲密数对

2.试验代码

#include <stdio.h>
int func(int m)
{
    int sum = 1, f = 2;
    while (f <= m / 2)
    {
        if (m % f == 0)
        {
            sum = sum + f;
        }
        f++;
    }
    return sum;
}
int main(void)
{
    int m = 3, n, k;
    while (m <= 500)
    {
        n = func(m);
        k = func(n);
        if (m == k && m <= n)
        {
            printf("%d,%d\n", m, n);
        }
        m++;
    }
}

3.效果截图

image

4.问题分析

解决问题的关键点在于先把一个数的因子累加,再把求出来的因子作为返回值,看返回后的第二个因子是否和之前的因子相等。


实验四

1.问题描述

  • 计算Ackerman函数

2.试验代码

#include <stdio.h>
int Ack(int n, int x, int y)
{
    int a;
    if (n == 0)
    {
        a = x + 1;
    }
    else if (n == 1 && y == 0)
    {
        a = x;
    }
    else if (n == 2 && y == 0)
    {
        a = 0;
    }
    else if (n == 3 && y == 0)
    {
        a = 1;
    }
    else if (n >= 4 && y == 0)
    {
        a = 2;
    }
    else
    {
        a = Ack(n - 1, Ack(n, x, y - 1), x);
    }
    return a;
}
int main()
{
    int n, x, y, jj;
    printf("请输入三个数n,x,y:");
    scanf("%d,%d,%d", &n, &x, &y);
    jj = Ack(n, x, y);
    printf("Ack(%d,%d,%d)=%d\n", n, x, y, jj);
}

3.效果截图

image

4.问题分析

解决问题的关键点在于用多重的if-else循环去判断循环的条件。


posted @ 2021-05-31 21:59  huxiguo  阅读(163)  评论(1编辑  收藏  举报
https://blog-static.cnblogs.com/files/xiaokang01/js.js 这是添加的文件的链接 color="2, 215, 215" 粒子的颜色设置 opacity="10" 粒子的透明度 count="17500" 粒子的个数