c语言指针习题及答案
c语言指针的习题答案

指针练习题1.有以下程序main(){char a[]="programming",b[]="language";char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是A)gm B)rg C)or D)ga2.设有说明int(*ptr)[m];其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p4.若有语句int *point ,a=4;和point =&a;下面均代表地址的一组选项是A. a,point,*&aB. &*a,&a,*pointC. &point,*point,&aD. &a,&*point,point5.下面程序段的运行结果是char a[]=”language”,*p;p=a;while(*p!=’u’) {printf(“%c”, *p-32);p++;}A. LANGUAGEB. LANGuageNGngUAGE6.以下程序的运算结果是*p=1,m=3,n=5 。
#include<stdio.h>void main(){int a[5]={1,2,3,-4,5};int m,n,*p;p=&a[0];m=*(p+2);n=*(p+4);printf("*p=%d,m=%d,n=%d",*p,m,n);}7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。
C语言指针习题及答案

C语言指针习题及答案指针主要内容的习题及答案?选择题1.变量的指针,其含义是指该变量的A)值B)地址B 。
D )一个标志C)名2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2 均已指向变量k,下面不能正确执行的赋值语句是 B 。
A) k=*ptr1+*ptr2 B) ptr2=k C) ptr1=ptr2 D) k=*ptr1*(*ptr2)3. 若有说明:int *p,m=5,n;以下程序段正确的是 D _________ 。
A)p=&n ; B)p = &n ;seanf( %d”,&p);seanf( %d”,*p);C) seanf( %d”,&n);D)p = &n ;*p=n ; *p = m ;4. 已有变量定义和函数调用语句:int a=25;print_value(&a); 下面函数的输出结果是 D ___________ 。
void prin t_value(i nt *x){ printf( %d\n”,++*x); }A) 23 B) 24 C) 25 D) 265. 若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是____C _______ 。
A) p仁&m p2=&p1 ; B) p仁&m p2=&n *p1 =*p2 ;C) p仁&m p2=p1 ; D) p仁&m *卩仁*p2 ;6. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是__________D _____ 。
A) a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7. 下面判断正确的是__C __________ 。
A) char *a=”ch in a”;等价于char *a; *a=”ch in a”;B) char str[1O]={ china”};等价于char str[1O]; str[ ]={ china”;}C) char *s=”china”;等价于char *s; s=”china” ;D) char c[4]=”abc',d[4]= ”abc”;等价于char c[4]=d[4]= ”abc ;8. 下面程序段中,for循环的执行次数是 C _________ 。
c语言指针题目及答案

c语言指针题目及答案一选择题(7分,每小题0.5分)1.C语言源程序的基本单位是( )。
A 过程B 函数C 子程序D 标识符2.下列程序的输出结果是( )。
main( ){ int a=7,b=5;printf("%d",b=b/a);}A 5B 1C 0 D不确认值3.假设变量a,b均为整型,表达式(a=5,b=2,a>b?a++:b++,a+b)的值是( )。
A 7B 8C 9D 24.设a为int型变量,执行下列赋值语句后,a的取值分别是( )。
a=125.534; a=(int)125.521%4; a=5<<2;A 125,31,1B 125,1,20C 125,31,20D 125.534,2,205.建有如下程序段,下面叙述中恰当的就是 ( )。
int k=10; while(k=0) k=k-1;A 循环继续执行一次 B循环就是无穷循环 C循环体语句一次也不继续执行 D循环体语句继续执行一次6.以下程序的输出结果为( )。
int i;void prt( ){ for(i=5;i<8;i++) printf("%c",'*');printf(" ");}main( ){ for(i=5;i<=8;i++) prt( );}A ***B *** *** *** ***C *** ***D * * *7.在C语言程序中,以下说法正确的是( )。
A函数的定义可以嵌套,但函数的调用不可以嵌套B函数的定义不可以嵌套,但函数的调用可以嵌套C函数的定义和函数的调用都不可以嵌套D函数的定义和函数的调用都可以嵌套8.以下函数调用语句中所含( )个实参。
func((e1,e2),(e3,e4,e5));A 2B 3C 5D 语法错误9.以下程序的输出结果为( )。
#define ADD(x) x*xmain( ){ int a=4,b=6,c=7,d=ADD(a+b)*c;printf("d=%d",d);}A d=70B d=80C d=140D d=70010.未知职工记录叙述如下,在Turbo C中,系统为变量w分配( )字节的空间。
C语言指针精选习题和答案

C语言指针精选习题和答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb) {int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c); if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c); }二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0}; p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0; char *p,s[20];while((s[i]=getchar())!='\n')i++; p=s;while(*p!=10){if(*p>='A'&&*p<='Z') a++;else if(*p>='a'&&*p<='z') b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9') d++;else e++;p++;}printf("大写字母 %d 小写字母 %d\n",a,b); printf("空格 %d 数字 %d 非字符 %d\n",c,d,e); }9.5写一个函数,将3 3矩阵转置 #include "stdio.h"void Transpose(int (*matrix)[3]) {int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数 #include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
(完整word版)C语言指针练习+答案+讲解

第七章指针7.1 选择题1.若有说明:int a=2, *p=&a, *q=p;,则以下非法的赋值语句是(D)。
A. p=q; B. *p=*q; C. a=*q; D. q=a;a是整型数,int *p,*q定义了指针,p,q是指向整型的指针.p取得a的地址,而q取得p的地址p,q是指针(也就是一个地址),而*p和*q是这个指针指向的整型数值(存放在这个地址的值).A)把q的地址赋给p,则p和q完全一样了,都指向一个数2B)把q中数据个pC)把q中数据给aD)a中数据是2,不能够给一个地址。
除非*q=a2.若定义:int a=511, *b=&a;,则printf("%d\n”, *b);的输出结果为:D A.无确定值 B. a的地址 C. 512 D. 511int a=511,*b=&a;a 是整形变量b 是整形指针变量,指向 aprintf("%d\n",*b);就是输出指针变量 b,所指变量的值输出结果5113.已有定义int a=2, *p1=&a, *p2=&a; 下面不能正确执行的赋值语句是(B)。
A. a=*p1+*p2; B. p1=a; C. p1=p2; D. a=*p1*(*p2);47、已知在程序中定义了如下的语句:int *P1,*P2;int k;p1=&k;p2=&k;则下列语句中不能正确执行是( B )A、k=*P1+*P2;B、p2=k;C、P1=P2;D、K=*P1 * (*P2);P1 P2是指针,K是整型变量,变量怎么可以赋值给指针呢?A其实是执行了K=K+K(P1和P2都指向K,所以*P1 *P2其实都是指K)C是赋值语句D其实执行了K=K*K4.变量的指针,其含义是指该变量的(B)。
A.值 B.地址 C.名 D.一个标志5.若有说明语句:int a, b, c, *d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是(A)。
C语言指针精选习题和答案

一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <stdio.h>void swap(int *pa,int *pb){int temp;temp = *pa;*pa = *pb;*pb = temp;}void main(){int a,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a>b)swap(&a,&b);if(b>c)swap(&b,&c);if(a>c)swap(&a,&c);printf("%d,%d,%d",a,b,c);}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include "stdio.h"#include "string.h"int main(int argc, char* argv[]){char *t;char *p1=NULL,*p2=NULL,*p3=NULL;char ch1[20]={0},ch2[20]={0},ch3[20]={0};p1=ch1;p2=ch2;p3=ch3;printf("No1:");scanf("%s",p1);fflush(stdin);printf("No2:");scanf("%s",p2);fflush(stdin);printf("No3:");scanf("%s",p3);fflush(stdin);if(strcmp(p1,p2)>0){t=p1;p1=p2;p2=t;}if(strcmp(p1,p3)>0){t=p1;p1=p3;p3=t;}if(strcmp(p2,p3)>0){t=p2;p2=p3;p3=t;}printf("%s\n%s\n%s\n",p1,p2,p3);return 0;}9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<stdio.h>void main(){int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while((s[i]=getchar())!='\n')i++;p=s;while(*p!=10){if(*p>='A'&&*p<='Z')a++;else if(*p>='a'&&*p<='z')b++;else if(*p==' ')c++;else if(*p>='0'&&*p<='9')d++;else e++;p++;}printf("大写字母%d 小写字母%d\n",a,b);printf("空格 %d 数字 %d 非字符 %d\n",c,d,e);}9.5写一个函数,将3 3矩阵转置#include "stdio.h"void Transpose(int (*matrix)[3]){int temp;int i, j;for(i=1;i<3;i++)/*转置*/{for(j=0;j<i;j++){temp = *(*(matrix+j)+i);*(*(matrix+j)+i) = *(*(matrix+i)+j);*(*(matrix+i)+j) = temp;}}}void main(){int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};Transpose(a);for(int i = 0;i<3;i++){for(int j=0;j<3;j++){printf("%d ",a[i][j]);}printf("\n");}}}9.6用指向一维数组的指针做函数参数#include<stdio.h>#include<string.h>int main(){void sort(char (*s)[6]);//一维数组的指针做函数参数int i;char str[10][6];char (*p)[6];//定义一维数组的指针做函数参数printf("please input string:/n");for(i=0;i<10;i++)scanf("%s",&str[i]);p=str;//将str一维数组指针,赋值给p;sort(p);printf("the output sequence :/n");for(i=0;i<10;i++)printf("%s/n",str[i]);return 0;}void sort(char (*s)[6])//s指向一维数组的指针做函数参数;{int i,j;char temp[6], *t;t=temp;for(i=0;i<9;i++)//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for(j=0;j<9-i;j++)//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if(strcmp(s[j],s[j+1])>0){strcpy(t,s[j]);strcpy(s[j],s[j+1]);strcpy(s[j+1],t);}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
c语言指针的习题答案

c语言指针的习题答案指针练习题1.有以下程序main(){char a[]="programming",b[]="language";char *p1,*p2;int i;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));}输出结果是A)gm B)rg C)or D)ga2.设有说明int(*ptr)[m];其中的标识符ptr是A)M个指向整型变量的指针B)指向M个整型变量的函数指针C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量3.若已定义:int a[9],*p=a;并在以后的语句中未改变p的值,不能表示a[1] 地址的表达式是A) p+1 B) a+1 C) a++ D) ++p4.若有语句int *point ,a=4;和point =&a下面均代表地址的一组选项是A. a,point,*&aB. &*a,&a,*pointC. &point,*point,&aD. &a,&*point,point5.下面程序段的运行结果是char a[]=”language”,*p;p=a;while(*p!=’u’) {printf(“%c”, *p-32);p++;}A. LANGUAGEB. LANGuage/doc/2810874998.html,NG/doc/2810874998.html,ngUAGE6.以下程序的运算结果是*p=1,m=3,n=5 。
#includevoid main(){int a[5]={1,2,3,-4,5};int m,n,*p;p=&a[0];m=*(p+2);n=*(p+4);printf("*p=%d,m=%d,n=%d",*p,m,n);}7.写一通用函数slength,求出一个字符串的长度,并用main函数调用slength。
指针练习题及答案

指针练习题及答案1. 请编写一个程序,交换两个变量的值,并通过指针来实现。
```c#include<stdio.h>void swap(int *a, int *b){int temp = *a;*a = *b;*b = temp;}int main(){int num1 = 10, num2 = 20;printf("交换前的值:num1=%d, num2=%d\n", num1, num2);swap(&num1, &num2);printf("交换后的值:num1=%d, num2=%d\n", num1, num2);return 0;}```2. 编写一个函数,统计字符串中某个字符出现的次数,并通过指针返回结果。
```c#include<stdio.h>int countChar(const char *str, char target){int count = 0;while(*str != '\0'){if(*str == target)count++;str++;}return count;}int main(){char str[] = "hello world";char target = 'l';int count = countChar(str, target);printf("字符 %c 出现的次数为:%d\n", target, count); return 0;}```3. 编写一个函数,找到整型数组中的最大值,并通过指针返回结果。
```c#include<stdio.h>int findMax(const int *arr, int size){int max = *arr;for(int i = 1; i < size; i++){if(*(arr+i) > max)max = *(arr+i);}return max;}int main(){int arr[] = {10, 20, 30, 40, 50};int size = sizeof(arr) / sizeof(arr[0]);int max = findMax(arr, size);printf("数组中的最大值为:%d\n", max);return 0;}```4. 编写一个函数,将字符串反转,并通过指针返回结果。
C语言 指针 有答案

一、选择题1. 以下程序的运行结果是。
#include<stdio.h>void sub(int x, int y, int *z){*z=y-x;}int main(){int a,b,c;sub(10, 5, &a);sub(7, a, &b);sub(a, b, &c);printf("%4d,%4d,%4d\n",a,b,c);return 0;}A.5,2,3 B.-5,-12,-7C.-5,-12,-17 D.5,-2,-72. 执行以下程序后,a的值为,b的值为。
#include<stdio.h>int main(){int a,b,k=4,m=6, *p1=&k, *p2=&m;a= p1= =&m;b=(-*p1)/(*p2)+7;printf("a=%d\n",a);printf("b=%d\n",b);return 0;}A.-1 B.1 C.0 D.4A.5 B.6 C.7 D.103. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误的原因是。
int main(){int *p,*q,a,b,;p=&a;printf("intput a:");scanf("%d",*p);...}A .*p 表示的是指针变量p 的地址B .*p 表示的是变量a 的值,而不是变量a 的地址C .*p 表示的是指针变量p 的值D .*p 只能用来说明p 是一个指针变量4. 有如下语句int a=10,b=20,*p1,*p2; p1=&a; p2=&b; 如左图所示,若要实现右图所示的存储结构,可选用的赋值语句是 。
A .*p1=*p2B .p1=p2C .p1=*p2D .*p1=p25. 若需要建立如图所示的存储结构,且已有说明float *p, m=3.14; 正确的赋值语句是 。
c语言指针习题及答案

c语言指针习题及答案C语言指针习题及答案C语言作为一门广泛应用于软件开发和系统编程的编程语言,指针是其重要的特性之一。
掌握指针的使用对于理解和编写高效的C程序至关重要。
本文将介绍一些常见的C语言指针习题,并提供相应的答案,帮助读者更好地理解和掌握指针的概念和用法。
1. 习题一:交换两个变量的值请编写一个函数,接受两个整型指针作为参数,实现交换两个变量的值。
例如,如果输入a=10,b=20,函数执行后,a=20,b=10。
答案:```cvoid swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;}```2. 习题二:查找数组中的最大值和最小值请编写一个函数,接受一个整型数组和数组长度作为参数,返回数组中的最大值和最小值。
例如,对于数组[5, 2, 9, 1, 7],函数应该返回最大值9和最小值1。
答案:```cvoid findMinMax(int *arr, int length, int *max, int *min) {*max = *min = arr[0];for (int i = 1; i < length; i++) {if (arr[i] > *max) {*max = arr[i];}if (arr[i] < *min) {*min = arr[i];}}}```3. 习题三:计算字符串长度请编写一个函数,接受一个字符串作为参数,返回字符串的长度。
例如,对于字符串"Hello, World!",函数应该返回12。
答案:```cint stringLength(char *str) {int length = 0;while (*str != '\0') {length++;str++;}return length;}```4. 习题四:复制字符串请编写一个函数,接受两个字符串指针作为参数,将第一个字符串复制到第二个字符串中。
C语言指针习题及答案资料讲解

A)strcpy1(char *p1,char *p2)
{ while ((*p1++=*p2++)!=’\0’) ; }
B)strcpy2(char *p1,char *p2)
{ while ((*p1=*p2)!=’\0’) { p1++; p2++ } }
B)char str[10]={“china”};等价于char str[10]; str[ ]={“china”;}
C)char *s=”china”;等价于char *s; s=”china”;
D)char c[4]=”abc”,d[4]=”abc”;等价于char c[4]=d[4]=”abc”;
C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;
6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是D。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p
7.下面判断正确的是C。
A)char *a=”china”;等价于char *a; *a=”china”;
C)strcpy3(char *p1,char *p2)
{ while (*p1++=*p2++) ; }
D)strcpy4(char *p1,char *p2)
{ while (*p2) *p1++=*p2++ ; }
14.下面程序段的运行结果是C。
C语言指针习题及答案

指针习题及答案一.选择题1.变量的指针,其含义是指该变量的 B 。
A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2)3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。
A)p=&n ; B)p = &n ;scanf(“%d”,&p); scanf(“%d”,*p);C)scanf(“%d”,&n); D)p = &n ;*p=n ; *p = m ;4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是D 。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。
A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正确的是 C 。
A)char *a=”china”; 等价于char *a; *a=”china” ;B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}C)char *s=”china”; 等价于char *s; s=”china” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段中,for循环的执行次数是 C 。
C语言程序设计(指针)习题与答案

return 0;
}
正确答案:Porm
9、如有定义char y[4]="321",*py=&y[0],则表达式*(py+2)的值是____。
正确答案:1
10、如有定义char z[2][4]={"MAT", "LAB"},*pz=&z[1][0];则表达式*pz+1的值是_____。
strcat(s,t);
D.char s[20]=" ", *t="12345";
strcat(s, t);
正确答案:D
8、下面程序段的运行结果是()。
#include <stdio.h>
int main()
{
char s[]="example!", *t;
t=s;
while( *t!='p')
{
printf("%c", *t-32);
6、指向函数的指针变量的值是一个函数的入口地址。(√)
7、作为函数形式参数时,int x[ ][5]与int (*x)[5]两种写法等价。(√)
8、二维M*N数组的名字是一个指向N元数组的指针常量。(√)
9、如果一个变量的值是一级指针变量的地址,则称这个变量为二级指针变量。(√)
10、可以利用指针实现函数返回多个值。(√)
gets(s1);
p1=s1;
p2=s2;
while(*p2++=*p1++);
printf("s2=%s",________);
return 0;
C指针练习题带答案

C指针练习题带答案1、设有下列定义char s[ ]={“12345”},*p=s,则下列表达式中不正确的是()。
A、p+1B、*(s+2)C、P=“abcd”D、*S=”ABC”2、设有下列定义static int x,*p=&x,*q;q=p;scanf(“%d,%d”,p,q);若输入“3,4”,则x的值为()A、3 B、4 C、0 D、无法确定3、以下程序的运行结果是:A、6 B、6789 C、‘6’ D、789includemain(){char b[10]={'1','2','3','4','5','6','7','8','9','\0'},*p=b;int k;k=8;p=b+k;printf("%s\n",p-3);}4、有以下程序的输出结果是()main(){int v[]={1,3,5,7,2,4,6,8};int I,*p;p=v;for(i=0;i<8;i++) if(*(p+i)==i+1) printf((“%d”,*(p+i));A、1B、18C、35D、165、若有语句int* p,a=4;p=&a下面均代表地址的一组选项是A.a,p,*&aB.&*a,&a,*pC.*&p,*p,&aD.&a,&*p,p6.若有说明int* p,m=5,n;以下正确的程序段是A.p=&nscanf("%d",&p);B.p=&n scanf("%d",*p);C.scanf("%d",&n); *p=n;D.p=&n *p=m;7.下列程序的运行结果是:swap(int *pt1,int *pt2){int p;p=*pt1;*pt1=*pt2;*pt2=p;}main(){int a=5,b=7,*p1,*p2;p1=&ap2=&bswap(p1,p2);printf("*p1=%d,*p2=%d\n",*p1,*p2);printf("a=%d,b=%d\n",a,b);}A、*p1=7,*p2=5B、*p1=7,*p2=5C、*p1=7,*p2=7D、*p1=5,*p2=5 a=5,b=7 a=7,b=5 a=5,b=5 a=5,b=7 (7)下列程序的运行结果是:main(){void swap1();void swap2();int a=3,b=4;swap1(a,b);printf(“%d,%d\n”,a,b);a=3,b=4;swap2(&a,&b);printf(“%d,%d”,a,b);}void swap1(x,y)int x,y;{int t;t=x;x=y;y=t;}void swap2(x,y)int *x,*y;{int t;t=*x;*x=*y;*y=t;}A、3,4B、4,3C、3 4D、4 34,3 3,4 4 3 3 48.若有定义int a[]={2,4,5,8,10,12},*p=a;则*(p+1)的值是()*(a+5)的值是()*p+1的值是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指针习题及答案一.选择题1.变量的指针,其含义是指该变量的 B 。
A)值B)地址C)名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。
A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。
A)p=&n ; B)p = &n ;scanf(“%d”,&p); scanf(“%d”,*p);C)scanf(“%d”,&n); D)p = &n ;*p=n ; *p = m ;4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是D 。
void print_value(int *x){ printf(“%d\n”,++*x); }A)23 B)24 C)25 D)265.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。
A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ;C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ;6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。
A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p7.下面判断正确的是 C 。
A)char *a=”china”; 等价于char *a; *a=”china” ;B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;}C)char *s=”china”; 等价于char *s; s=”china” ;D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ;8.下面程序段中,for循环的执行次数是 C 。
char *s=”\ta\018bc” ;for ( ; *s!=’\0’ ; s++) printf(“*”) ;A)9 B)7 C)6 D)59.下面能正确进行字符串赋值操作的是 C 。
A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’};C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ;10.下面程序段的运行结果是 C 。
char *s=”abcde” ;s+=2 ; printf(“%d”,s);A)cde B)字符’c’C)字符’c’的地址D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。
A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是 D 。
A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等C)s数组长度和p所指向的字符串长度相等D)*p与s[0]相等13.以下与库函数strcpy(char *p1,char *p2)功能不相等的程序段是 D 。
A)strcpy1(char *p1,char *p2){ while ((*p1++=*p2++)!=’\0’) ; }B)strcpy2(char *p1,char *p2){ while ((*p1=*p2)!=’\0’) { p1++; p2++ } }C)strcpy3(char *p1,char *p2){ while (*p1++=*p2++) ; }D)strcpy4(char *p1,char *p2){ while (*p2) *p1++=*p2++ ; }14.下面程序段的运行结果是 C 。
char a[ ]=”language” , *p ;p=a ;while (*p!=’u’) { printf(“%c”,*p-32); p++ ; }A)LANGUAGE B)language C)LANG D)langUAGE 16.以下与库函数strcmp(char *s,char *t)功能相等的程序段是 C 。
A)strcmp1(char *s,char *t){ for ( ; *s++=*t++; )if (*s= =’\0’) return 0 ;return (*s-*t) ;}B)strcmp2(char *s,char *t){ for ( ; *s++=*t++; )if (!*s) return 0 ;return (*s-*t) ;}C)strcmp3(char *s,char *t){ for ( ; *t= =*s; ){ if (!*t) return 0 ; t++ ; s++ ; }return (*s-*t) ;}D)strcmp4(char *s,char *t){ for ( ; *s==*t; s++, t++ )if (!*s) return 0 ;return (*t-*s) ;}17.以下说明不正确的是 D 。
A)char a[10]=”china” ; B)char a[10],*p=a; p=”china”;C)char *a; a=”china” ; D)char a[10],*p; p=a=”china”;18.设有说明语句:char a[]=”It is mine”;char *p=”It is mine”;则以下不正确的叙述是 D 。
A)a+1表示的是字符t的地址B)p指向另外的字符串时,字符串的长度不受限制C)p变量中存放的地址值可以改变D)a中只能存放10个字符19.若已定义char s[10];则在下面表达式中不表示s[1]的地址是 B 。
A)s+1 B)s++ C)&s[0]+1 D)&s[1]20.若有定义:int a[5],*p=a;则对a数组元素的正确引用是 D 。
A)*&a[5] B)a+2 C)*(p+5) D)*(a+2)21.若有定义:int a[5],*p=a;则对a数组元素地址的正确引用是 D 。
A)p+5 B)*a+1 C)&a+1 D)&a[0]22.若有定义:int a[2][3];则对a数组的第i行第j列元素值的正确引用是 A 。
A)*(*(a+i)+j) B)(a+i)[j] C)*(a+i+j) D)*(a+i)+j23.若有定义:int a[2][3];则对a数组的第i行第j列元素地址的正确引用是 D 。
A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j24.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素地址的正确引用是。
A)*(p+2) B)p[2] C)p[1]+1 D)(p+1)+225.若有程序段:int a[2][3],(*p)[3]; p=a;则对a数组元素的正确引用是 C 。
A)(p+1)[0] B)*(*(p+2)+1) C)*(p[1]+1) D)p[1]+226.若有定义:int a[5];则a数组中首元素的地址可以表示为 C 。
A)&a B)a+1 C)a D)&a[1]27.若有定义:int (*p)[4];则标识符p C 。
A)是一个指向整型变量的指针B)是一个指针数组名C)是一个指针,它指向一个含有四个整型元素的一维数组D)定义不合法28.以下与int *q[5];等价的定义语句是 C 。
A)int q[5] B)int *q C)int *(q[5]) D)int (*q)[5] 29.以下正确的说明语句是 B 。
A)int *b[]={1,3,5,7,9} ;B)int a[5],*num[5]={&a[0],&a[1],&a[2],&a[3],&a[4]};C)int a[]={1,3,5,7,9}; int *num[5]={a[0],a[1],a[2],a[3],a[4]};D)int a[3][4],(*num)[4]; num[1]=&a[1][3];30.若有定义:int b[4][6],*p,*q[4];且0≤i<4,则不正确的赋值语句是 D 。
A)q[i]=b[i]; B)p=b; C)p=b[i]; D)q[i]=&b[0][0] 32.若要对a进行自减运算,则a应有下面说明 D 。
A)int p[3]; B)int k; C)char *a[3] D)int b[10];int *a=p; int *a=&k; int *a=b+1; 33.以下选项中,对指针变量p的正确操作是 B 。
A)int a[3], *p; B)int a[5], *p; C)int a[5]; D)int a[5] p=&a; p=a; int *p=a=100; int *p1,*p2=a;*p1=*p2; 34.若有定义:int x[10]={0,1,2,3,4,5,6,7,8,9},*p1;则数值不为3的表达式是 C 。
A)x[3] B)p1=x+3,*p1++C)p1=x+2,*(p1++) D)p1=x+2,*++p135.下面程序段的输出是 C 。
int a[ ]={2,4,6,8,10,12,14,16,18,20,22,24},*q[4],k;for (k=01; k<4; k++) q[k]=&a[k*3];printf(“%d\n”,q[3][0]);A)8 B)16 C)20 D)输出不合法36.若要对a进行自增运算,则a应具有下面说明 D 。
A)int a[3][2]; B)char *a[ ]={“12”,”ab”};C)char (*a) [3] D)int b[10], *a=b;37.若有定义int a[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围内)地址的表达式 A 。
A)&a[0][0]+6*i+j B)&a[0][0]+4*j+iC)&a[0][0]+4*i+j D)&a[0][0]+6*j+I38.下面程序的运行结果是 B 。