第8章 第1、2节:指针的概念及指向简单变量的指针(练习)-《编程语言基础—C语言》(高教版第5版)同步精品课堂

2025-12-29
| 2份
| 20页
| 60人阅读
| 1人下载

内容正文:

8.1与8.2节:指针的概念及指向简单变量的指针 一、单项选择题 1.若有int a = 7, *p = &a;,则*&a的值是( ) A. 7 B. a的地址 C. p的地址 D. 不确定 2.以下程序段的输出结果是() #include<stdio.h> main() { int a = 10, *p = &a; *p = *p + 5; printf("%d %d", a, *p); } A. 10 15 B. 15 15 C. 10 10 D. 15 10 3.若有int a = 3, *p = &a;,则&*p的含义是() A. p的地址 B. a的地址 C. 3 D. 不确定 4.若有int a = 10, *p = &a;,则(*p)++执行后a的值是() A. 10 B. 11 C. p的地址加1 D. 不确定 5.以下程序段的输出结果是() #include<stdio.h> main() { int a = 8, b = 6, *p = &a, *q = &b; *p = *q; printf("%d %d", a, b); } A. 8 6 B. 6 6 C. 8 8 D. 6 8 6.若有int a = 5, *p = &a;,则*p + 1的值是() A. 6 B. a的地址加1 C. 5 D. 不确定 7.以下程序段的输出结果是() #include<stdio.h> main() { int a = 10, *p = &a; *p = *p * 2; printf("%d", a); } A. 10 B. 20 C. p的地址 D. 不确定 8.若有int a = 7, *p = &a;,则p + 1的含义是() A. a的值加1 B. p指向的地址加sizeof(int)字节 C. p的值加1 D. 不确定 9.以下程序段的输出结果是() #include<stdio.h> main() { int a = 10, b = 20, *p = &a, *q = &b; *p = *q; *q = 30; printf("%d %d", a, b); } A. 10 20 B. 20 30 C. 10 30 D. 20 20 10.以下程序段的输出结果是() #include<stdio.h> main() { int a = 10, *p = &a; *p = 5; printf("%d %d", a, *p); } A. 10 5 B. 5 5 C. 10 10 D. 5 10 二、程序运行结果题 11.执行以下程序的输出结果是() #include <stdio.h> main() { int a = 10, b = 20; int *p1 = &a, *p2 = &b; int temp = *p1; *p1 = *p2; *p2 = temp; printf("%d %d", a, b); } 12.执行以下程序的输出结果是() #include <stdio.h> main() { int x = 5; int *px = &x; *px += 3; printf("%d %d", x, *px); } 13.执行以下程序的输出结果是() #include <stdio.h> main() { int a = 1, b = 2, c = 3; int *pa = &a, *pb = &b, *pc = &c; *pa = *pb + *pc; printf("%d %d %d", a, b, c); } 14.执行以下程序的输出结果是() #include <stdio.h> main() { int m = 8, n = 12; int *p = &m; *p = *p + n; p = &n; *p = m - *p; printf("%d %d", m, n); } 15.执行以下程序的输出结果是() #include <stdio.h> main() { int val = 20; int *p1 = &val; int *p2 = p1; *p2 -= 5; printf("%d %d", *p1, val); } 16.执行以下程序的输出结果是() #include <stdio.h> main() { int a = 3, b = 5; int *pa = &a, *pb = &b; if (*pa < *pb) { *pa = *pb; } else { *pb = *pa; } printf("%d %d", a, b); } 17.执行以下程序的输出结果是() #include <stdio.h> main() { int m = 100, n = 200; int *pm = &m, *pn = &n; *pm = *pm ^ *pn; *pn = *pm ^ *pn; *pm = *pm ^ *pn; printf("%d %d", m, n); } 18.执行以下程序的输出结果是() #include <stdio.h> main() { int num = 0,i; int *p = &num; for (i=1; i<=5; i++) { *p += i; } printf("%d", num); } 19.执行以下程序的输出结果是() #include <stdio.h> main() { int x = 3, y = 5; int *px = &x, *py = &y; *px = *px * *py; *py = *px / *py; *px = *px / *py; printf("%d %d", x, y); } 20.执行以下程序的输出结果是() #include <stdio.h> main() { int a = 7, b = 9; int *pa = &a, *pb = &b; int temp = *pa; *pa = *pb + (*pa % *pb); *pb = temp - (*pb % temp); printf("%d %d", *pa, *pb); } 三、编程题 1.编写程序,通过指针实现:输入 3 个整数,找出其中的最小值,输出最小值及对应的变量地址。 2.通过指针实现:输入一个整数,提取其各位数字中最大的数字,输出该数字及它在原数中的位置(从右数,从 1 开始)。如输入123,输出“最大数字:3,位置(从右数):1” 3.通过指针实现:输入一个正整数,判断其是否为回文数(如 121、1331),输出 “是回文数” 或 “不是回文数”。 4.通过指针实现:输入一个浮点数,将其拆分为整数部分和小数部分(保留 3 位小数),输出两部分内容。 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $ 8.1与8.2节:指针的概念及指向简单变量的指针 一、单项选择题 1.若有int a = 7, *p = &a;,则*&a的值是( ) A. 7 B. a的地址 C. p的地址 D. 不确定 【答案】A 2.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 10, *p = &a; *p = *p + 5; printf("%d %d", a, *p); } A. 10 15 B. 15 15 C. 10 10 D. 15 10 【答案】B 3.若有int a = 3, *p = &a;,则&*p的含义是( ) A. p的地址 B. a的地址 C. 3 D. 不确定 【答案】B *p是a,&*p就是&a,即a的地址。 4.若有int a = 10, *p = &a;,则(*p)++执行后a的值是( ) A. 10 B. 11 C. p的地址加1 D. 不确定 【答案】B (*p)++等价于a++,所以a变为11。 5.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 8, b = 6, *p = &a, *q = &b; *p = *q; printf("%d %d", a, b); } A. 8 6 B. 6 6 C. 8 8 D. 6 8 【答案】B *p = *q将b的值赋给a,所以a和b都是6。 6.若有int a = 5, *p = &a;,则*p + 1的值是( ) A. 6 B. a的地址加1 C. 5 D. 不确定 【答案】A 7.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 10, *p = &a; *p = *p * 2; printf("%d", a); } A. 10 B. 20 C. p的地址 D. 不确定 【答案】B 通过指针p将a的值乘以2,a变为20。 8.若有int a = 7, *p = &a;,则p + 1的含义是( ) A. a的值加1 B. p指向的地址加sizeof(int)字节 C. p的值加1 D. 不确定 【答案】B 指针加1是加上指向类型的大小,即sizeof(int)字节。 9.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 10, b = 20, *p = &a, *q = &b; *p = *q; *q = 30; printf("%d %d", a, b); } A. 10 20 B. 20 30 C. 10 30 D. 20 20 【答案】B *p = *q将b的值赋给a,然后*q = 30修改b的值。 10.以下程序段的输出结果是( ) #include<stdio.h> main() { int a = 10, *p = &a; *p = 5; printf("%d %d", a, *p); } A. 10 5 B. 5 5 C. 10 10 D. 5 10 【答案】B 二、程序运行结果题 11.执行以下程序的输出结果是( ) #include <stdio.h> main() { int a = 10, b = 20; int *p1 = &a, *p2 = &b; int temp = *p1; *p1 = *p2; *p2 = temp; printf("%d %d", a, b); } 【答案】20 10 12.执行以下程序的输出结果是( ) #include <stdio.h> main() { int x = 5; int *px = &x; *px += 3; printf("%d %d", x, *px); } 【答案】8 8 13.执行以下程序的输出结果是( ) #include <stdio.h> main() { int a = 1, b = 2, c = 3; int *pa = &a, *pb = &b, *pc = &c; *pa = *pb + *pc; printf("%d %d %d", a, b, c); } 【答案】5 2 3 14.执行以下程序的输出结果是( ) #include <stdio.h> main() { int m = 8, n = 12; int *p = &m; *p = *p + n; p = &n; *p = m - *p; printf("%d %d", m, n); } 【答案】20 8 15.执行以下程序的输出结果是( ) #include <stdio.h> main() { int val = 20; int *p1 = &val; int *p2 = p1; *p2 -= 5; printf("%d %d", *p1, val); } 【答案】15 15 16.执行以下程序的输出结果是( ) #include <stdio.h> main() { int a = 3, b = 5; int *pa = &a, *pb = &b; if (*pa < *pb) { *pa = *pb; } else { *pb = *pa; } printf("%d %d", a, b); } 【答案】5 5 17.执行以下程序的输出结果是( ) #include <stdio.h> main() { int m = 100, n = 200; int *pm = &m, *pn = &n; *pm = *pm ^ *pn; *pn = *pm ^ *pn; *pm = *pm ^ *pn; printf("%d %d", m, n); } 【答案】200 100 18.执行以下程序的输出结果是( ) #include <stdio.h> main() { int num = 0,i; int *p = &num; for (i=1; i<=5; i++) { *p += i; } printf("%d", num); } 【答案】15 19.执行以下程序的输出结果是( ) #include <stdio.h> main() { int x = 3, y = 5; int *px = &x, *py = &y; *px = *px * *py; *py = *px / *py; *px = *px / *py; printf("%d %d", x, y); } 【答案】5 3 20.执行以下程序的输出结果是( ) #include <stdio.h> main() { int a = 7, b = 9; int *pa = &a, *pb = &b; int temp = *pa; *pa = *pb + (*pa % *pb); *pb = temp - (*pb % temp); printf("%d %d", *pa, *pb); } 【答案】16 5 三、编程题 1.编写程序,通过指针实现:输入 3 个整数,找出其中的最小值,输出最小值及对应的变量地址。 【答案】 #include <stdio.h> main() { int a, b, c; int *pa = &a, *pb = &b, *pc = &c,*min_p; printf("输入3个整数:"); scanf("%d %d %d", pa, pb, pc); min_p = pa; if (*pb < *min_p) min_p = pb; if (*pc < *min_p) min_p = pc; printf("最小值:%d,地址:%p ", *min_p, min_p); } 2.通过指针实现:输入一个整数,提取其各位数字中最大的数字,输出该数字及它在原数中的位置(从右数,从 1 开始)。如输入123,输出“最大数字:3,位置(从右数):1” 【答案】 #include <stdio.h> main() { int num, temp, max_digit = 0, pos = 0, cur_pos = 1; int *p_num = &num, *p_max = &max_digit, *p_pos = &pos; printf("输入一个整数:"); scanf("%d", p_num); temp = *p_num; if (temp < 0) temp = -temp; // 处理负数 while (temp != 0) { int digit = temp % 10; if (digit > *p_max) { *p_max = digit; *p_pos = cur_pos; } temp /= 10; cur_pos++; } printf("最大数字:%d,位置(从右数):%d ", *p_max, *p_pos); } 3.通过指针实现:输入一个正整数,判断其是否为回文数(如 121、1331),输出 “是回文数” 或 “不是回文数”。 【答案】 #include <stdio.h> main() { int num, rev = 0,temp; int *p_num = &num, *p_rev = &rev; printf("输入一个正整数:"); scanf("%d", p_num); temp = *p_num; // 反转数字 while (temp != 0) { *p_rev = *p_rev * 10 + temp % 10; temp /= 10; } if (*p_rev == *p_num) { printf("%d是回文数 ", *p_num); } else { printf("%d不是回文数 ", *p_num); } } 4.通过指针实现:输入一个浮点数,将其拆分为整数部分和小数部分(保留 3 位小数),输出两部分内容。 【答案】 #include <stdio.h> main() { float num; float *p_num = &num; int int_part; float dec_part; int *p_int = &int_part; float *p_dec = &dec_part; printf("输入一个浮点数:"); scanf("%f", p_num); // 提取整数部分 *p_int = (int)*p_num; // 提取小数部分 *p_dec = *p_num - *p_int; // 保留3位小数 *p_dec = (int)(*p_dec * 1000 + 0.5) / 1000.0; printf("整数部分:%d,小数部分:%.3f ", *p_int, *p_dec); } 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $

资源预览图

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