内容正文:
举一反三考点练
《C语言程序设计》函数-课后自测
知识点一 形参和实参之间的关系
1. (简答题)请简要说明形参与实参之间的关系。
【答案】形参与实参之间的关系包括:传递方式(值传递)、内存分配(分别占用不同的内存空间)、作用域(实参在函数调用前,形参在函数内部)和参数类型(应保持一致或兼容)。
2. (编程题)编写一个函数,实现两个整数交换的功能。在主函数中调用该函数,并输出交换前后的结果。
【答案】
#include <stdio.h>
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
printf("交换后:a = %d, b = %d
", a, b);
}
int main() {
int x = 10, y = 20;
printf("交换前:x = %d, y = %d
", x, y);
swap(x, y); // 函数调用
printf("交换后:x = %d, y = %d
", x, y);
return 0;
}
输出结果:x = 10, y = 20
3. (编程题)编写一个函数,计算并返回两个整数的和。在主函数中调用该函数。
【答案】
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int x = 5, y = 8;
int sum = add(x, y);
printf("两数之和为:%d
", sum);
return 0;
}
4. (简答题)请解释为什么在C语言中,函数参数的传递方式是值传递。
【答案】在C语言中,函数参数的传递方式是值传递,因为这种方式可以保证函数内部的操作不会影响到函数外部的变量。这样可以提高程序的稳定性和可维护性。
5. (编程题)编写一个函数,实现计算一个整数数组中所有元素的和。在主函数中调用该函数。
【答案】
#include <stdio.h>
int sumArray(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int sum = sumArray(arr, size);
printf("数组元素之和为:%d
", sum);
return 0;
}
知识点二 函数的参数传递规则
1. 编写一个C语言函数,该函数接受一个整型参数,并在函数内部将这个参数的值增加10。在主函数中调用这个函数,并打印出调用前后的值。
【答案】
void increaseValue(int x) {
x += 10;
}
int main() {
int a = 5;
printf("Before: %d
", a);
increaseValue(a);
printf("After: %d
", a);
return 0;
}
Before: 5
After: 5
2. 编写一个C语言函数,该函数接受一个整型指针参数,并在函数内部将这个指针指向的值增加10。在主函数中调用这个函数,并打印出调用前后的值。
【答案】
void increaseValue(int *ptr) {
*ptr += 10;
}
int main() {
int a = 5;
printf("Before: %d
", a);
increaseValue(&a);
printf("After: %d
", a);
return 0;
}
Before: 5
After: 15
3. 解释C语言中传值调用和指针调用的区别,并分别给出一个示例。
【答案】
传值调用传递的是实参的副本,不会影响原始变量;指针调用传递的是实参的地址,可以修改原始变量的值。
传值调用示例:
void changeValue(int x) {
x = 100;
}
int main() {
int a = 10;
changeValue(a);
// a的值仍然是10
}
指针调用示例:
void changeValue(int *ptr) {
*ptr = 100;
}
int main() {
int a = 10;
changeValue(&a);
// a的值变为100
}
4. 编写一个C语言函数,该函数接受一个字符型数组作为参数,并在函数内部将数组中的所有小写字母转换为大写字母。在主函数中调用这个函数,并打印出转换前后的数组。
【答案】
void toUpperCase(char str[]) {
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] -= 32;
}
}
}
int main() {
char str[] = "Hello, World!";
printf("Before: %s
", str);
toUpperCase(str);
printf("After: %s
", str);
return 0;
}
Before: Hello, World!
After: HELLO, WORLD!
5. 解释为什么在C语言中,数组作为函数参数传递时,传递的是指向数组首元素的指针,而不是整个数组的副本。
【答案】
数组作为函数参数传递时,实际上传递的是数组的首地址,即第一个元素的地址。这是因为数组名在大多数情况下会被解析为数组首元素的地址。这样做有几个原因:
性能:如果传递整个数组的副本,对于大型数组来说,这将是非常低效的,因为它涉及到大量的内存复制操作。
内存使用:传递指针只需要额外的几个字节(取决于指针的大小),而传递数组的副本则需要与数组本身一样多的内存。
语法简化:使用指针可以简化函数调用的语法,不需要指定数组的大小,因为指针本身并不包含数组大小的信息。
知识点三 函数的返回值
1. 编写一个C语言函数,实现两个整数相加,并返回相加的结果。
【答案】
int add(int a, int b) {
return a + b;
}
2. 编写一个C语言函数,计算并返回一个整数的平方。
【答案】
int square(int a) {
return a * a;
}
3. 编写一个C语言函数,判断一个整数是否为偶数,如果是,返回1;否则,返回0。
【答案】
int is_even(int a) {
if (a % 2 == 0) {
return 1;
} else {
return 0;
}
}
4. 编写一个C语言函数,实现两个浮点数相乘,并返回相乘的结果。
【答案】
double multiply(double a, double b) {
return a * b;
}
5. 编写一个C语言函数,计算并返回一个字符串的长度。
【答案】
int str_length(char *str) {
int length = 0;
while (*str != '\0') {
length++;
str++;
}
return length;
}
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$
举一反三考点练
《C语言程序设计》函数-课后自测
知识点一 形参和实参之间的关系
1. (简答题)请简要说明形参与实参之间的关系。
2. (编程题)编写一个函数,实现两个整数交换的功能。在主函数中调用该函数,并输出交换前后的结果。
3. (编程题)编写一个函数,计算并返回两个整数的和。在主函数中调用该函数。
4. (简答题)请解释为什么在C语言中,函数参数的传递方式是值传递。
5. (编程题)编写一个函数,实现计算一个整数数组中所有元素的和。在主函数中调用该函数。
知识点二 函数的参数传递规则
1. 编写一个C语言函数,该函数接受一个整型参数,并在函数内部将这个参数的值增加10。在主函数中调用这个函数,并打印出调用前后的值。
2. 编写一个C语言函数,该函数接受一个整型指针参数,并在函数内部将这个指针指向的值增加10。在主函数中调用这个函数,并打印出调用前后的值。
3. 解释C语言中传值调用和指针调用的区别,并分别给出一个示例。
4. 编写一个C语言函数,该函数接受一个字符型数组作为参数,并在函数内部将数组中的所有小写字母转换为大写字母。在主函数中调用这个函数,并打印出转换前后的数组。
5. 解释为什么在C语言中,数组作为函数参数传递时,传递的是指向数组首元素的指针,而不是整个数组的副本。
知识点三 函数的返回值
1. 编写一个C语言函数,实现两个整数相加,并返回相加的结果。
2. 编写一个C语言函数,计算并返回一个整数的平方。
3. 编写一个C语言函数,判断一个整数是否为偶数,如果是,返回1;否则,返回0。
4. 编写一个C语言函数,实现两个浮点数相乘,并返回相乘的结果。
5. 编写一个C语言函数,计算并返回一个字符串的长度。
原创精品资源学科网独家享有版权,侵权必究!2
学科网(北京)股份有限公司
学科网(北京)股份有限公司
$$