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
函数中,通过比较参数 a
和 b
的大小关系,确定累加的方向。如果 a
小于 b
,则从 a
开始循环累加,直到 b
;如果 a
大于等于 b
,则从 b
开始循环累加,直到 a
。
然后,使用一个变量 sum
来记录累加的结果,初始值为 0。进入循环后,每次循环将当前数字加到 sum
上,然后根据累加方向更新当前数字。最后,循环结束后返回累加的结果。
在 main
函数中,首先读取两个整数 a
和 b
,然后调用 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
。在每次循环中,将当前数字 i
与 number
相乘,并将结果赋值给 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 = # // 初始化指针ptr,使其指向num的地址
printf("Value: %d\n", *ptr);
return 0;
}
修复后的代码将指针ptr初始化为指向变量num的地址,然后通过指针ptr间接引用,输出变量num的值。这样就避免了野指针的错误。