学C第三次作业

      1.编写一个函数,接受一个整数作为参数,判断它是否为偶数,如果是偶数返回1 ,否则返回0
#include <stdio.h>

// 定义一个函数,接受一个整数作为参数,判断它是否为偶数,如果是偶数返回1 ,否则返回0
int isEven(int a)
{
    // 使用模运算判断整数a是否为偶数
    if (a % 2 == 0)
    {
        // 如果是偶数,返回1
        return 1;
    }
    else
    {
        // 如果不是偶数,返回0
        return 0;
    }
}

int main()
{
    int a;
    printf("输入一个整数:");
    scanf("%d", &a);
    
    // 调用 isEven 函数判断整数是否为偶数
    int result = isEven(a);
    
    // 根据 isEven 函数的返回值输出结果
    if (result == 1)
    {
        printf("%d 是偶数\n", a);
    }
    else
    {
        printf("%d 是基数\n", a);
    }
    
    return 0;
}

思路:

        这段代码定义了一个函数 isEven,接受一个整数作为参数,使用模运算判断整数是否为偶数,如果是偶数返回1,否则返回0。

main 函数中,首先读取一个整数 a,然后调用 isEven 函数判断 a 是否为偶数,并将结果存储在 result 变量中。

最后根据 result 的值输出结果,如果为1,则说明 a 为偶数,否则说明 a 为基数。

运行结果为:

        2.编写一个函数,接受2个int参数作为参数,计算第一个参数~第二个参数范围的累加和,并返回累加的结果
#include <stdio.h>

// 定义一个函数,接受两个 int 参数作为范围的起始和结束,计算起始和结束范围内的累加和,并返回结果
int calculateSum(int a, int b)
{
    int sum = 0;
    
    // 判断 a 和 b 的大小关系,以便确定循环的方向
    if (a < b)
    {
        // a 小于 b,从 a 开始循环累加,直到 b
        for (int i = a; i <= b; i++)
        {
            sum += i;
        }
    }
    else
    {
        // a 大于等于 b,从 b 开始循环累加,直到 a
        for (int i = b; i <= a; i++)
        {
            sum += i;
        }
    }
    
    return sum;
}

int main()
{
    int a;
    int b;
    printf("输入两个数字:");
    scanf("%d%d", &a, &b);
    
    // 调用 calculateSum 函数计算累加和,并将结果输出
    int result = calculateSum(a, b);
    printf("累加和为:%d\n", result);
    
    return 0;
}
 

 思路:

        首先,在 calculateSum 函数中,通过比较参数 ab 的大小关系,确定累加的方向。如果 a 小于 b,则从 a 开始循环累加,直到 b;如果 a 大于等于 b,则从 b 开始循环累加,直到 a

然后,使用一个变量 sum 来记录累加的结果,初始值为 0。进入循环后,每次循环将当前数字加到 sum 上,然后根据累加方向更新当前数字。最后,循环结束后返回累加的结果。

main 函数中,首先读取两个整数 ab,然后调用 calculateSum 函数计算累加和,并将结果输出。

运行结果:

3.编写一个函数,接受一个整数作为参数,计算并返回它的阶乘值5阶乘值:54321 n阶乘值:n(n-1)(n-2)……2*1
#include <stdio.h>

// 编写一个函数,接受一个整数作为参数,计算并返回它的阶乘值
// 5阶乘值:5*4*3*2*1,n阶乘值:n*(n-1)*(n-2)……2*1
int num(int a)
{
    int number = 1;  // 初始化阶乘结果为1
    for (int i = 1; i <= a; i++)  // 循环从1到给定整数
    {
        number *= i;  // 将当前数字与阶乘结果相乘
    }
    return number;  // 返回阶乘结果
}

int main()
{
    int count;
    printf("输入值:\n");
    scanf("%d", &count);  // 读取一个整数
    printf("阶乘是:%d\n", num(count));  // 调用num函数计算阶乘并输出结果

    return 0;
}

思路:

        这段代码的思路是通过一个循环来计算给定整数的阶乘。

首先,定义一个变量 number 并初始化为 1,用于保存阶乘的结果。

然后,使用一个循环从 1 开始递增,直到达到给定整数 a。在每次循环中,将当前数字 inumber 相乘,并将结果赋值给 number

最后,循环结束后,返回 number 作为阶乘的结果。

main 函数中,首先读取一个整数 count,然后调用 num 函数计算该整数的阶乘,并将结果输出。

运行结果:

        4.编写一个程序,定义一个整型变量和一个指向该变量的指针,并将指针指向变量的地址,通过2种方式打印整型变量的内容
#include <stdio.h>

// 编写一个程序,定义一个整型变量和一个指向该变量的指针,并将指针指向变量的地址,通过2种方式打印整型变量的内容

int main()
{
    int a = 1;    // 定义一个整型变量a,并赋值为1
    int *p1 = &a; // 定义一个指向整型变量的指针p1,并将其指向变量a的地址

    printf("%d\n", *p1);  // 通过解引用指针p1,打印整型变量的内容

    int **p2 = &p1;  // 定义一个指向指针p1的指针p2,并将其指向指针p1的地址
    printf("%d\n", **p2);  // 通过连续解引用指针p2和p1,打印整型变量的内容

    return 0;
}

运行结果:

        

5.编写一个程序,定义一个整型变量,初始值为100,通过某个函数修改改变量的内容为123
#include <stdio.h>

int main() {
    int a = 100; // 定义一个整型变量,初始值为100
    int* p1 = &a; // 定义一个整型指针变量p1,指向变量a的地址

    *p1 = 123; // 通过指针修改变量a的内容为123

    printf("%d\n", a); // 输出变量a的值,预期结果为123
    printf("%0#x\n", &a); // 输出变量a的地址,预期结果为十六进制表示的地址
    printf("%0#x\n", p1); // 输出指针p1的值,即变量a的地址,预期结果为十六进制表示的地址

    return 0;
}
 

 运行结果:

        

6.代码分析题

        ● 下面的代码中,出现了野指针的情况,请指出并修复错误

#include <stdio.h>

int main() {
    int *ptr;
    int num = 10;

    *ptr = num;

    printf("Value: %d\n", *ptr);

    return 0;
}



//修复后:
   
#include <stdio.h>

int main() {
    int *ptr;
    int num = 10;

    ptr = &num; // 初始化指针ptr,使其指向num的地址

    printf("Value: %d\n", *ptr);

    return 0;
}

修复后的代码将指针ptr初始化为指向变量num的地址,然后通过指针ptr间接引用,输出变量num的值。这样就避免了野指针的错误。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值