第8章 第5节:指针作为函数参数(练习)-《编程语言基础—C语言》(高教版第5版)同步精品课堂

2025-12-29
| 2份
| 31页
| 44人阅读
| 1人下载

内容正文:

8.5节:指针作为函数参数 一、单项选择题 1.以下程序的输出结果是( ) #include <stdio.h> void fun(int *p, int n) { int i; for(i = 0; i < n; i++) { p[i] = i * 2; } } main() { int a[5] = {0}; fun(a, 5); printf("%d", a[3]); } A. 0 B. 3 C. 6 D. 编译错误 2.以下程序的输出结果是() #include <stdio.h> void f(char *p) { while(*p) { if(*p >= 'a' && *p <= 'z') { *p -= 32; } p++; } } main() { char s[] = "Hello123"; f(s); printf("%s", s); } A. hello123 B. HELLO123 C. Hello123 D. 编译错误 3.以下程序的输出结果是() #include <stdio.h> void f(int *p, int n) { int i; for(i = 0; i < n / 2; i++) { int t = *(p + i); *(p + i) = *(p + n - 1 - i); *(p + n - 1 - i) = t; } } main() { int a[] = {1, 2, 3, 4, 5}; f(a, 5); printf("%d", a[1]); } A. 2 B. 4 C. 1 D. 5 4.以下程序的输出结果() #include <stdio.h> void f(int *p) { *p = 10; p++; *p = 20; } main() { int a[2] = {0}; f(a); printf("%d,%d", a[0], a[1]); } A. 0,0 B. 10,20 C. 10,0 D. 0,20 5.以下程序的输出结果是() #include <stdio.h> void f(char *p) { p[1] = 'A'; } main() { char s[10] = "hello"; f(s); printf("%s", s); } A. hello B. hAllo C. hAlo D. 编译错误 二、程序运行结果题 6.执行以下程序的输出结果是() #include <stdio.h> void fun(int *p, int n) { int sum = 0,i; for(i = 0; i < n; i++) { sum += *(p + i); } *p = sum; } main() { int a[5] = {1, 2, 3, 4, 5}; fun(a, 5); printf("%d", a[0]); } 7.执行以下程序的输出结果是() #include <stdio.h> void modify(char *s) { int i = 0; while(s[i] != '\0') { if(i % 2 == 0) { s[i] = s[i] + 1; } i++; } } main() { char str[] = "abcdef"; modify(str); printf("%s", str); } 8.执行以下程序的输出结果是() #include <stdio.h> void process(int arr[], int n) { int i; for(i = 0; i < n - 1; i++) { arr[i] = arr[i] + arr[i + 1]; } } main() { int a[5] = {1, 3, 5, 7, 9}; process(a, 5); printf("%d %d %d", a[0], a[1], a[2]); } 9.执行以下程序的输出结果是() #include <stdio.h> void change(int *p) { int i; for(i = 0; i < 3; i++) { *(p + i) = (i + 1) * 10; } } main() { int a[5] = {0}; change(a); printf("%d %d %d", a[0], a[2], a[4]); } 10.执行以下程序的输出结果是() #include <stdio.h> void transform(char *str) { while(*str) { if(*str >= '0' && *str <= '9') { *str = '*'; } str++; } } main() { char s[] = "a1b2c3d4"; transform(s); printf("%s", s); } 11.执行以下程序的输出结果是() #include <stdio.h> void reverse(int *p, int n) { int *q = p + n - 1; while(p < q) { int t = *p; *p = *q; *q = t; p++; q--; } } main() { int a[] = {10, 20, 30, 40, 50}; reverse(a, 5); printf("%d %d %d", a[0], a[2], a[4]); } 12.执行以下程序的输出结果是() #include <stdio.h> void func(int *x, int *y, int *z) { *x = *y + *z; *y = *x + *z; *z = *x + *y; } main() { int a = 1, b = 2, c = 3; func(&a, &b, &c); printf("%d %d %d", a, b, c); } 13.执行以下程序的输出结果是() #include <stdio.h> void edit(char *s) { int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == ' ') { s[i] = '_'; } } } main() { char str[] = "C programming language"; edit(str); printf("%s", str); } 14.执行以下程序的输出结果是() #include <stdio.h> void calc(int *arr, int n) { int i; for(i = 0; i < n; i++) { if(arr[i] > 0) { arr[i] = 1; } else if(arr[i] < 0) { arr[i] = -1; } } } main() { int a[] = {5, -2, 0, 8, -3}; calc(a, 5); printf("%d %d %d", a[0], a[1], a[2]); } 15.执行以下程序的输出结果是() #include <stdio.h> void rotate(int *p, int n) { int last = p[n - 1],i; for(i = n - 1; i > 0; i--) { p[i] = p[i - 1]; } p[0] = last; } main() { int b[] = {1, 2, 3, 4, 5}; rotate(b, 5); printf("%d %d", b[0], b[1]); } 16.执行以下程序的输出结果是() #include <stdio.h> void modify_str(char *p) { int count = 0; while(*p) { if(*p == 'e') { count++; if(count == 2) { *p = 'E'; break; } } p++; } } main() { char s[] = "complete example"; modify_str(s); printf("%s", s); } 17.执行以下程序的输出结果是() #include <stdio.h> void process(int *a, int *b, int n) { int i; for(i = 0; i < n; i++) { if(i % 2 == 0) { b[i] = a[i] * 2; } else { b[i] = a[i] + 10; } } } main() { int x[4] = {1, 2, 3, 4}; int y[4]; process(x, y, 4); printf("%d %d %d %d", y[0], y[1], y[2], y[3]); } 18.执行以下程序的输出结果是() #include <stdio.h> void update(int *ptr) { static int count = 0; *ptr = count; count++; } main() { int values[3],i; for(i = 0; i < 3; i++) { update(&values[i]); } printf("%d %d %d", values[0], values[1], values[2]); } 19.执行以下程序的输出结果是() #include <stdio.h> void transform(int *arr, int size) { int i; for(i = 0; i < size; i++) { arr[i] = (arr[i] % 2 == 0) ? arr[i] / 2 : arr[i] * 2; } } main() { int data[] = {2, 3, 4, 5}; transform(data, 4); printf("%d %d", data[1], data[3]); } 20.执行以下程序的输出结果是() #include <stdio.h> void manipulate(char *src, char *dest) { int i = 0, j = 0; while(src[i]) { if(src[i] != 'a' && src[i] != 'e' && src[i] != 'i' && src[i] != 'o' && src[i] != 'u') { dest[j] = src[i]; j++; } i++; } dest[j] = '\0'; } main() { char input[] = "hello world"; char output[20]; manipulate(input, output); printf("%s", output); } 三、编程题 1.编写一个函数swap_min_max,接收一个整型数组和数组长度,查找数组中的最小值和最大值,并交换它们的位置。在main函数中测试该函数。 2.编写一个函数remove_duplicates,接收一个整型数组和数组长度,删除数组中的重复元素(只保留第一次出现的元素),并返回新数组的长度。在main函数中测试。 3.编写一个函数matrix_transpose,接收一个3×3的整型矩阵,求其转置矩阵(行列互换)。在main函数中测试。 4.编写一个函数array_rotate,接收一个整型数组和数组长度n,将数组循环右移k个位置(k由参数指定)。在main函数中测试。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 8.5节:指针作为函数参数 一、单项选择题 1.以下程序的输出结果是( ) #include <stdio.h> void fun(int *p, int n) { int i; for(i = 0; i < n; i++) { p[i] = i * 2; } } main() { int a[5] = {0}; fun(a, 5); printf("%d", a[3]); } A. 0 B. 3 C. 6 D. 编译错误 【答案】C 2.以下程序的输出结果是( ) #include <stdio.h> void f(char *p) { while(*p) { if(*p >= 'a' && *p <= 'z') { *p -= 32; } p++; } } main() { char s[] = "Hello123"; f(s); printf("%s", s); } A. hello123 B. HELLO123 C. Hello123 D. 编译错误 【答案】 3.以下程序的输出结果是( ) #include <stdio.h> void f(int *p, int n) { int i; for(i = 0; i < n / 2; i++) { int t = *(p + i); *(p + i) = *(p + n - 1 - i); *(p + n - 1 - i) = t; } } main() { int a[] = {1, 2, 3, 4, 5}; f(a, 5); printf("%d", a[1]); } A. 2 B. 4 C. 1 D. 5 【答案】B 4.以下程序的输出结果( ) #include <stdio.h> void f(int *p) { *p = 10; p++; *p = 20; } main() { int a[2] = {0}; f(a); printf("%d,%d", a[0], a[1]); } A. 0,0 B. 10,20 C. 10,0 D. 0,20 【答案】B 5.以下程序的输出结果是( ) #include <stdio.h> void f(char *p) { p[1] = 'A'; } main() { char s[10] = "hello"; f(s); printf("%s", s); } A. hello B. hAllo C. hAlo D. 编译错误 【答案】B 二、程序运行结果题 6.执行以下程序的输出结果是( ) #include <stdio.h> void fun(int *p, int n) { int sum = 0,i; for(i = 0; i < n; i++) { sum += *(p + i); } *p = sum; } main() { int a[5] = {1, 2, 3, 4, 5}; fun(a, 5); printf("%d", a[0]); } 【答案】15 7.执行以下程序的输出结果是( ) #include <stdio.h> void modify(char *s) { int i = 0; while(s[i] != '\0') { if(i % 2 == 0) { s[i] = s[i] + 1; } i++; } } main() { char str[] = "abcdef"; modify(str); printf("%s", str); } 【答案】bbddff 8.执行以下程序的输出结果是( ) #include <stdio.h> void process(int arr[], int n) { int i; for(i = 0; i < n - 1; i++) { arr[i] = arr[i] + arr[i + 1]; } } main() { int a[5] = {1, 3, 5, 7, 9}; process(a, 5); printf("%d %d %d", a[0], a[1], a[2]); } 【答案】4 8 12 9.执行以下程序的输出结果是( ) #include <stdio.h> void change(int *p) { int i; for(i = 0; i < 3; i++) { *(p + i) = (i + 1) * 10; } } main() { int a[5] = {0}; change(a); printf("%d %d %d", a[0], a[2], a[4]); } 【答案】10 30 0 10.执行以下程序的输出结果是( ) #include <stdio.h> void transform(char *str) { while(*str) { if(*str >= '0' && *str <= '9') { *str = '*'; } str++; } } main() { char s[] = "a1b2c3d4"; transform(s); printf("%s", s); } 【答案】a*b*c*d* 11.执行以下程序的输出结果是( ) #include <stdio.h> void reverse(int *p, int n) { int *q = p + n - 1; while(p < q) { int t = *p; *p = *q; *q = t; p++; q--; } } main() { int a[] = {10, 20, 30, 40, 50}; reverse(a, 5); printf("%d %d %d", a[0], a[2], a[4]); } 【答案】50 30 10 12.执行以下程序的输出结果是( ) #include <stdio.h> void func(int *x, int *y, int *z) { *x = *y + *z; *y = *x + *z; *z = *x + *y; } main() { int a = 1, b = 2, c = 3; func(&a, &b, &c); printf("%d %d %d", a, b, c); } 【答案】5 8 13 13.执行以下程序的输出结果是( ) #include <stdio.h> void edit(char *s) { int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == ' ') { s[i] = '_'; } } } main() { char str[] = "C programming language"; edit(str); printf("%s", str); } 【答案】C_programming_language 14.执行以下程序的输出结果是( ) #include <stdio.h> void calc(int *arr, int n) { int i; for(i = 0; i < n; i++) { if(arr[i] > 0) { arr[i] = 1; } else if(arr[i] < 0) { arr[i] = -1; } } } main() { int a[] = {5, -2, 0, 8, -3}; calc(a, 5); printf("%d %d %d", a[0], a[1], a[2]); } 【答案】1 -1 0 15.执行以下程序的输出结果是( ) #include <stdio.h> void rotate(int *p, int n) { int last = p[n - 1],i; for(i = n - 1; i > 0; i--) { p[i] = p[i - 1]; } p[0] = last; } main() { int b[] = {1, 2, 3, 4, 5}; rotate(b, 5); printf("%d %d", b[0], b[1]); } 【答案】5 1 16.执行以下程序的输出结果是( ) #include <stdio.h> void modify_str(char *p) { int count = 0; while(*p) { if(*p == 'e') { count++; if(count == 2) { *p = 'E'; break; } } p++; } } main() { char s[] = "complete example"; modify_str(s); printf("%s", s); } 【答案】completE example 17.执行以下程序的输出结果是( ) #include <stdio.h> void process(int *a, int *b, int n) { int i; for(i = 0; i < n; i++) { if(i % 2 == 0) { b[i] = a[i] * 2; } else { b[i] = a[i] + 10; } } } main() { int x[4] = {1, 2, 3, 4}; int y[4]; process(x, y, 4); printf("%d %d %d %d", y[0], y[1], y[2], y[3]); } 【答案】2 12 6 14 18.执行以下程序的输出结果是( ) #include <stdio.h> void update(int *ptr) { static int count = 0; *ptr = count; count++; } main() { int values[3],i; for(i = 0; i < 3; i++) { update(&values[i]); } printf("%d %d %d", values[0], values[1], values[2]); } 【答案】0 1 2 19.执行以下程序的输出结果是( ) #include <stdio.h> void transform(int *arr, int size) { int i; for(i = 0; i < size; i++) { arr[i] = (arr[i] % 2 == 0) ? arr[i] / 2 : arr[i] * 2; } } main() { int data[] = {2, 3, 4, 5}; transform(data, 4); printf("%d %d", data[1], data[3]); } 【答案】6 10 20.执行以下程序的输出结果是( ) #include <stdio.h> void manipulate(char *src, char *dest) { int i = 0, j = 0; while(src[i]) { if(src[i] != 'a' && src[i] != 'e' && src[i] != 'i' && src[i] != 'o' && src[i] != 'u') { dest[j] = src[i]; j++; } i++; } dest[j] = '\0'; } main() { char input[] = "hello world"; char output[20]; manipulate(input, output); printf("%s", output); } 【答案】hll wrld 三、编程题 1.编写一个函数swap_min_max,接收一个整型数组和数组长度,查找数组中的最小值和最大值,并交换它们的位置。在main函数中测试该函数。 【答案】 #include <stdio.h> void swap_min_max(int arr[], int n) { int min_idx = 0, max_idx = 0,i,temp; if(n <= 0) return; // 查找最小值和最大值的下标 for(i = 1; i < n; i++) { if(arr[i] < arr[min_idx]) { min_idx = i; } if(arr[i] > arr[max_idx]) { max_idx = i; } } // 交换最小值和最大值 temp = arr[min_idx]; arr[min_idx] = arr[max_idx]; arr[max_idx] = temp; } int main() { int a[] = {5, 2, 9, 1, 7, 4}; int n = sizeof(a) / sizeof(a[0]),i; printf("原数组: "); for(i = 0; i < n; i++) { printf("%d ", a[i]); } swap_min_max(a, n); printf(" 交换后: "); for(i = 0; i < n; i++) { printf("%d ", a[i]); } } 2.编写一个函数remove_duplicates,接收一个整型数组和数组长度,删除数组中的重复元素(只保留第一次出现的元素),并返回新数组的长度。在main函数中测试。 【答案】 #include <stdio.h> int remove_duplicates(int arr[], int n) { int new_len = 1,i,j; if(n <= 1) return n; for(i = 1; i < n; i++) { int is_duplicate = 0; // 检查当前元素是否在前面出现过 for(j = 0; j < new_len; j++) { if(arr[i] == arr[j]) { is_duplicate = 1; break; } } // 如果不是重复元素,添加到新位置 if(!is_duplicate) { arr[new_len] = arr[i]; new_len++; } } return new_len; } int main() { int a[] = {1, 2, 3, 2, 4, 1, 5, 3}; int n = sizeof(a) / sizeof(a[0]),i,new_n; printf("原数组: "); for(i = 0; i < n; i++) { printf("%d ", a[i]); } new_n = remove_duplicates(a, n); printf(" 去重后: "); for(i = 0; i < new_n; i++) { printf("%d ", a[i]); } printf(" 新长度: %d", new_n); } 3.编写一个函数matrix_transpose,接收一个3×3的整型矩阵,求其转置矩阵(行列互换)。在main函数中测试。 【答案】 #include <stdio.h> void matrix_transpose(int mat[3][3]) { int temp,i,j; // 只交换上三角部分(不包括对角线) for(i = 0; i < 3; i++) { for(j = i + 1; j < 3; j++) { // 交换mat[i][j]和mat[j][i] temp = mat[i][j]; mat[i][j] = mat[j][i]; mat[j][i] = temp; } } } void print_matrix(int mat[3][3]) { int i,j; for(i = 0; i < 3; i++) { for(j = 0; j < 3; j++) { printf("%d\t", mat[i][j]); } printf(" "); } } main() { int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; printf("原矩阵: "); print_matrix(matrix); matrix_transpose(matrix); printf(" 转置后: "); print_matrix(matrix); } 4.编写一个函数array_rotate,接收一个整型数组和数组长度n,将数组循环右移k个位置(k由参数指定)。在main函数中测试。 【答案】 #include <stdio.h> // 辅助函数:反转数组的指定区间 void reverse(int arr[], int start, int end) { while(start < end) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } void array_rotate(int arr[], int n, int k) { if(n <= 1 || k % n == 0) return; k = k % n; // 处理k大于n的情况 // 方法:三次反转法 // 1. 反转整个数组 reverse(arr, 0, n - 1); // 2. 反转前k个元素 reverse(arr, 0, k - 1); // 3. 反转剩余元素 reverse(arr, k, n - 1); } main() { int a[] = {1, 2, 3, 4, 5, 6, 7}; int n = sizeof(a) / sizeof(a[0]); int k = 3,i; printf("原数组: "); for(i = 0; i < n; i++) { printf("%d ", a[i]); } array_rotate(a, n, k); printf(" 右移%d位后: ", k); for(i = 0; i < n; i++) { printf("%d ", a[i]); } } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

第8章 第5节:指针作为函数参数(练习)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
1
第8章 第5节:指针作为函数参数(练习)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
2
第8章 第5节:指针作为函数参数(练习)-《编程语言基础—C语言》(高教版第5版)同步精品课堂
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。