内容正文:
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 = #
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 = #
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 = #
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);
}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$