#4439. 指针课堂练习
指针课堂练习
指针课堂练习题
1.下列语句的输出结果是______。
int **pp,*p,a=5,b=8;
pp=&p;p=&a;p=&b;printf("%d,%d",*p,**pp);
{{ select(1) }}
- 5,8
- 8,5
- 8,8
- 5,5
2.如下程序的输出结果是______。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void fun(char *p) {
int i, k;
char s[30];
for (i = 0, k = 0; p[i] != '\0'; i += 2)
if (!isspace(*p + i) && (*(p + i) != 'a'))
s[k++] = p[i];
s[k] = '\0';
strcpy(p, s);
}
int main() {
char s[30] = "p r o g ra m e";
fun(s);
puts(s);
return 0;
}
{{ select(2) }}
- programe
- progr
- ame
- emargorp
3.以下语句的输出结果是______。
char s[]="one",*p=s;
printf("%d\n",*(p+3));
{{ select(3) }}
- 字符e的地址
- 0
- 12
- 20
4.以下函数的功能是比较两个字符串s和t的大小,函数中应填入______。
int comp(char *s, char *t) {
for (; *s == *t; ______)
if (*s == '\0')
return 0;
return (*s - *t);
}
{{ select(4) }}
- s++
- t++
- s++;t++
- s++,t++
5.以下程序段的结果为______。
static char s[]="language";
char *p;
for(p=s;p<s+8;p+=2)
putchar(*p);
{{ select(5) }}
- language
- lnug
- agae
- 语法错误
6.以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。
#include <stdio.h>
int main(){
int *p,a;
p=&a;
printf("input a:");
scanf("%d",*p);
… }
{{ select(6) }}
*p表示的是指针变量p的地址。*p表示的是变量a的值,而不是变量a的地址。*p表示的是指针变量p的值。*p只能用来说明p是一个指针变量。
7.在int (*p)[3]; 定义中,标识符p ______。
{{ select(7) }}
- 定义非法。
- 是一个指针数组,每个元素是一个指向整型变量的指针。
- 是一个指针,指向一个具有三个元素的一维数组。
- 是一个指向整型变量的指针。
8.如下程序的执行结果是______。
#include <stdio.h>
int main() {
int a[3][4] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};
int (*p)[4] = a, i, j, k = 0;
for (i = 0; i < 3; i++)
for (j = 0; j < 2; j++)
k += *(*(p + i) + j);
printf("%d\n", k);
return 0;
}
{{ select(8) }}
- 27
- 68
- 99
- 108
9.能正确执行x和y交换且返回结果的函数是______。
//第一个函数
fun(int *x, int *y)
{
int p;
p = *x;
*x = *y;
*y = p;
}
//第二个函数
fun(int x, int y)
{
int t;
t = x;
x = y;
y = t;
}
//第三个函数
fun(int *x, int *y)
{
*x = *y;
*y = *x;
}
//第四个函数
fun(int *x, int *y)
{
*x = *x - *y;
}
{{ select(9) }}
- 第一个函数
- 第二个函素
- 第三个函数
- 第四个函数
10.有以下程序:
#include <stdio.h>
void fun( int *a, int i, int j) {
int t;
if (i < j) {
t = a[i];
a[i] = a[j];
a[j] = t;
fun(a, ++i, --j);
}
}
int main() {
int a[] = {1, 2, 3, 4, 5, 6}, i;
fun(a, 0, 5);
for (i = 0; i < 6; i++)
printf("%d ", a[i]);
return 0;
}
执行后输出结果是______。
{{ select(10) }}
- 6 5 4 3 2 1
- 4 3 2 1 5 6
- 4 5 6 1 2 3
- 1 2 3 4 5 6
11.以下语句的输出结果是______。
char s[]="\t\ \chinese\ \girl\n";
printf("%d",strlen(s));
{{ select(11) }}
- 12
- 15
- 13
- 14
12.有以下程序:
#include <stdio.h>
int main() {
char *s[] = {"one", "two", "three"},*p;
p = s[1];
printf("%c,%s\n", *(p + 1), s[0]);
return 0;
}
执行后输出结果是______。
{{ select(12) }}
- n, two
- t, one
- w, one
- o, two
13.若已知说明语句:int a, s[3][3]; 则不能将s[2][1]的值赋给变量a的语句是______。
{{ select(13) }}
a=s[2][1];a=*(*(s+2)+1);a=*(s[2]+1);a=*(*(s+2));
14.以下程序的执行结果是______。
#include <stdio.h>
int main() {
int i,*p;
p = &i;
*p = 8;
printf("i=%d ", i);
return 0;
}
{{ select(14) }}
i为不定值i=0i=8- 程序有错误
15.以下程序:
#include <iostream>
using namespace std;
char fun(char *p) {
if (*p >= 'A' && *p <= 'Z')
*p -= 'A' - 'a';
return *p;
}
int main() {
char s[80], *p = s;
fgets(s, sizeof(s), stdin);
while (*p) {
*p = fun(p);
putchar(*p);
p++;
}
return 0;
}
当输入BIG BIG WORLD回车,则输出结果是______。
{{ select(15) }}
big big WORLDBIG BIG worldbig big worldBIG BIG WORLD
16.以下程序的运行结果是______。
#include <stdio.h>
void abc(char *p) {
int i, j;
for (i = j = 0; * (p + i) != '\0'; i++)
if (*(p + i) < 'n') {
*(p + j) = *(p + i);
j++;
}
*(p + j) = '\0';
}
int main() {
char str[] = "morning";
abc(str);
puts(str);
return 0;
}
{{ select(16) }}
- morig
- morning
- mig
- or
17.设int x []={4,2,3,1},q,*p=&x[1];则执行语句q=(*--p)++后,变量q的值为 ______。
{{ select(17) }}
- 4
- 3
- 2
- 1
18.有以下程序:
#include <stdio.h>
#include <string.h>
int main() {
char str[][20] = {"Hello", "Beijing"},(*p)[20] = str;
printf("%d\n", strlen(*(p+1)));
return 0;
}
程序运行后的输出结果是______。
{{ select(18) }}
- 0
- 5
- 7
- 4