C语言指针习题及答案51993

合集下载

C语言指针习题(共21张)

C语言指针习题(共21张)
char *p1=a,*p2=b; int k;
for(k=0;k<=7;k++) if(*(p1+k)= =*(p2+k))
printf(“%c”,*(p1+k));} A)gae B)ga C)language D)有语法错误
第17页0.,7共21页。
C程序设计
1.若有说明语句 : int a[10],*p=a; 则对数组元素的正确引用 是: A)a[10] B)p[a] C)*(p+2) D)p+2
B.*(*(a+i)) D.*(&a[i])
答案:B 分析:指针就变量p取得数组a的首地址,由指针与数组关系知,p[i]表示数组元素第i+1元素值, p[i]=a[i]正确,故A不能选。*(a+i)表示一维数组a第i+1元素值,*(*(a+i)表示对第i+1元 素值再取值是错误操作,所以选B。a[p-a]=a[0]正确,故不能选择C。*(&a[i])也正确, 也不能选D。
printf(“sum=%d”,s);}
第19页0.,9共21页。
C程序设计
3.下面程序的运行(yùnxíng)结果是: main( ) {int x[ ]={0,1,2,3,4,5,6,7,8,9}; int s,i,*p; s=0;p=&x[0];
for(i=1;i<10;i+=2) s+=*(p+i); printf(“sum=%d”,s);}
答案:25(1+3+5+7+9=25)
第1100页.1,0共21页。
C程序设计
4.下面程序的功能(gōngnéng)是删除字符串中的数字字符并输出,填空完成 序。 #include”stdio.h” void deln(char *s) {int i,j; for(i=0,j=0;s[i]!=‘\0’;i++) if(s[i]<‘0’ (1) s[i]>’9’) {s[j]=s[i];j++;}

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编一程序,用指针数组在主函数中输入十个等长的字符串。

C语言第8章指针习题1(含答案)

C语言第8章指针习题1(含答案)

指针习题1‎一、选择‎题(每题5‎分,共60‎分)1.‎有以下程‎序#in‎c lude‎<std‎i o.h>‎main‎(){i‎n t n,‎*p=NU‎L L;‎*p=&n‎;pr‎i ntf(‎"Inpu‎t n:"‎); sc‎a nf("‎%d",&‎p); p‎r intf‎("out‎p ut n‎:"); ‎p rint‎f("%d‎\n",p‎);}‎该程序试图‎通过指针p‎为变量n读‎入数据并输‎出,但程序‎有多处错误‎,以下语句‎正确的是。

‎A)in‎t n,*‎p=NUL‎L; B)‎*p=&n‎; C)‎s canf‎("%d"‎,&p) ‎D)pr‎i ntf(‎"%d\n‎",p);‎2.有‎以下程序‎#inc‎l ude ‎<stdi‎o.h>‎m ain(‎){ i‎n t m=‎1,n=2‎,*p=&‎m,*q=‎&n,*r‎;r‎=p;p=‎q;q=r‎;p‎r intf‎("%d,‎%d,%d‎,%d\n‎",m,n‎,*p,*‎q);}‎程序运行‎后的输出结‎果是A‎)1,2,‎1,2 ‎‎B)1,2‎,2,1 ‎‎C)2,1‎,2,1 ‎‎D)2,1‎,1,2‎3.以下‎程序段完全‎正确的是‎A)in‎t *p;‎ sca‎n f("%‎d",&p‎);B)‎i nt *‎p; s‎c anf(‎"%d",‎p);C‎)int ‎k, *p‎=&k; ‎s canf‎("%d"‎,p);‎D)int‎k, *‎p; *‎p= &k‎; s‎c anf(‎"%d",‎p);‎4.以下程‎序段完全正‎确的是‎A)int‎*p; ‎scan‎f("%d‎",&p)‎;B)i‎n t *p‎; sc‎a nf("‎%d",p‎);C)‎i nt k‎, *p=‎&k; ‎s canf‎("%d"‎,p);‎D)int‎k, *‎p; *‎p= &k‎; s‎c anf(‎"%d",‎p);‎5.若有以‎下函数首部‎( )‎。

C语言指针习题及答案

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语言指针习题及答案

指针主要内容的习题及答案•选择题1. 变量的指针,其含义是指该变量的 __B ____________ 。

A )值 B )地址 C )名D)一个标志2.已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2均已指向变量k ,下面不能正确执行的赋值语句是 B。

4.已有变量定义和函数调用语句:int a=25;print_value (&a );下面函数的输出结果是 D __________________void prin t_value(i nt *x) { printf(“ %d\n” ,++*x); }A) 23B) 24C) 25D) 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; *p 仁*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[1O]={“ china ” };等价于 char str[1O]; str[ ]={“ china ” ;}C)char *s= ” china ” ; 等价于 char *s; s= ” china ” ;A) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 3.若有说明:int *p,m=5,n; A ) p=&n ; seanf(“ %d ,&p);C ) scanf( “ %d ,&n);*p=n ;以下程序段正确的是Bscanf ( D*p = m ;D ) k=*ptr1*(*pt ⑵ D。

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语言习题集答案(指针)

C语言习题集答案(指针)第五章指针习题一.选择题1. 若定义int a=8,b,*p=&b; 则下面对赋值语句p=&a; *p=a; 的正确解释为【】。

A)两个语句都是使p指向aB)p=&a;是使p指向a,而*p=a是将a的值赋予*pC)两个语句都是将a的值赋予*pD)p=&a是将a的值赋予*p,而*p=a是使p指向a2. 若定义int b=8,*p=&b; 则下面均表示b的地址的一组选项为【】。

A)*p, *&b B)*p, &*bC)p, *&b, &*p D)&*p, p, &b3. 若定义int a,b,*p1=&a,*p2=&b; 使p1指向b的赋值语句是【】。

A)*p1=&b; B) p1=&p2;C)p1=*&p2; D) p1=*&b;4. 若定义int a,b,*p; 下述程序段中正确的是【】。

A)p=&a; scanf("%d",&p); B)scanf("%d",&a); *p=a;C)p=&a; scanf("%d",&b);*p=b; D)p=&a; scanf("%d",*p);5. 若有定义int a=7,b=9,*p1,*p2;下列赋值语句中,正确的是【】。

A)p2=&a;p1=&b;*&a=*p1; B)p1=&a;p2=*&p1;a=&*p2;C)p1=&b;p2=&p1;*p1=*p2; D)p2=*&a;p1=*&b;6. 执行下面程序段后,c的值是【】。

int a,b,c,*p;a=2;b=10;p=&a;c=a+b+*p;A)12 B)14 C)22 D)247. 若定义int i,*p; 使p指向i的赋值语句是【】。

(完整word版)C语言指针练习+答案+讲解

(完整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语言指针精选习题和答案

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语言指针指针变量scanf,C语言指针练习(包括答案和详解)

c语言指针指针变量scanf,C语言指针练习(包括答案和详解)

c语⾔指针指针变量scanf,C语⾔指针练习(包括答案和详解)《C语⾔指针练习(包括答案和详解)》由会员分享,可在线阅读,更多相关《C语⾔指针练习(包括答案和详解)(21页珍藏版)》请在⼈⼈⽂库⽹上搜索。

1、第7章第7章指针71选择题1说明:int a=2,*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完全相同。

都指向数字2 B。

)q的数据个p C) q的数据为a D)a的数据为2。

⽆法提供地址。

如果未定义*q=a 2,则:int a=511,*b=的输出为:D A未确定的值B a的地址C 512D 511 int a=511,*b=a是a pri。

2、ntf(输出指针变量B)。

也就是说,指向变量的值输出结果511 3中已经有int a=2,*p1=下未正确执⾏的赋值语句为(b)。

Aa=* p1 *p2bp1=a;Cp1=p2da=* P1 *(* p2);据悉,程序中定义了以下语句:int *P1,* P2int k;P1=p2=⽆法在以下语句中正确执⾏是(B) A,k=* P1 * P2b,p2=k;c,P1=P2d,K=* P1 *(* P2);P1 P2是指针,K是整数变量,变量如何为指针赋值?a实际上是k=k k k (P1和P2都指向K,因此*P1*P2实际上是K) C是赋值语句d实际执⾏K=K*K 4变量的指针。

含义是变量(b。

3、)。

a值b地址c名称d标志5如果有说明语句:int a、b、c、* d=b scanf (%d% d% d、a、b、d);C scanf (%d% d% d,d scanf (%d% d% d,a,b,* d);对于Int c,* d=,c是整数数据,d是指向变量c的指针。

c语言指针的习题答案

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。

C语言指针习题---附复习资料1

C语言指针习题---附复习资料1

一、选择题1. 变量的指针,其含义是指该变量的.a)值 b)地址c)名 d)一个标志2.若有语句 *4;和;下面均代表地址的一组选项是.a),* b)&*,*c)*,* d)*3.若有说明 *5;以下正确的程序段的是.a); b);(""); ("",*p);c)(""); d);4. 以下程序中调用函数给变量a输入数值的方法是错误的,其错误原因是.*p,*;(“ a:”);(“”,*p);a)*p表示的是指针变量p的地址b)*p表示的是变量a的值,而不是变量a的地址c)*p表示的是指针变量p的值d)*p只能用来说明p是一个指针变量5. 已有变量定义和函数调用语句: 25; (); 下面函数的正确输出结果是. ( *x){ (“\n”*x);}a)23 b)24 c)25 d)266.若有说明: *;则不能通过语句正确给输入项读入数据的程序段是A) *; ("",p);B) ( *)(8); ("",p);C) ("",);D) ("",);7.有以下程序{ 12,*,*,*r;("\n",*p,*q);程序运行后的输出结果是A)1,2,1,2 B)1,2,2,1C)2,1,2,1 D)2,1,1,28. 有以下程序{ 1, 3, 5;*p1, *p2, *;*p =*p1*(*p2);("\n");执行后的输出结果是A)1 B)2 C)3 D)49. 有以下程序{ 44,*p1,*p2;1;("\n");程序运行后的输出结果是()A)4 B)1 C)0 D)运行时出错,无定值10. 在16位编译系统上,若有定义 a[]={10,20,30}, *;,当执行;后,下列说法错误的是()A)p向高地址移了一个字节B)p向高地址移了一个存储单元C)p向高地址移了两个字节D)p与1等价11.有以下程序段a[10]={1,2,3,4,5,6,7,8,9,10},*[3];[5];b中的值是()A)5 B)6 C)8 D)912.若有以下定义,则对a数组元素的正确引用是.a[5],*;a)*[5] b)2 c)*(5) d)*(2)13.若有以下定义,则5表示.a[10],*;a)元素a[5]的地址 b)元素a[5]的值c)元素a[6]的地址 d)元素a[6]的值14.设已有定义: a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是()A) (<(10));B) (<(10));C) (10<);D) (<10; );15.有以下程序段<>{ x[] = {10, 20, 30};* = x;= x;= x;= x;(",", *); ("\n", *);0;程序运行后的输出结果是( )A)11,11,11,12,12,20,20,20 B)20,10,11,10,11,10,11,10C)11,11,11,12,12,13,20,20 D)20,10,11,20,11,12,20,20 16.设有如下定义:[]={6,7,8,9,10};*(2)2;("\n",*,*(2));则程序段的输出结果为A)8,10 B)6,8 C)7,9 D)6,1017.若有定义 a[]={2,4,6,8,10,12},*;则*(1)的值是. *(5)的值是.18.若有以下说明和语句,c[4][5],(*p)[5];能正确引用c数组元素的是.A) 1 B) *(3) C) *(1)+3 D) *(p[0]+2) )19.若有定义: a[2][3],则对a数组的第i行j列元素地址的正确引用为.a)*(a[i]) b)() c)*() d)a[i]20.若有以下定义a[2][3]={2,4,6,8,10,12};则a[1][0]的值是. *(*(1)+0)的值是.21.有以下定义a[10],*;不能给数组a输入字符串的语句是()A)(a) B)(a[0]) C)([0]); D)(b);22.下面程序段的运行结果是.2("");a) b)字符'c' c)字符'c'的地址 d)无确定的输出结果23.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()A) s[10]=""; B) t[]="",*;C) s[10]""; D) s[10](s,"");24.设已有定义: *" "; 下列程序段中正确的是()A) a[11], *p; (1[4]);B) a[11]; (, );C) a[11]; (a, );D) a[], *p; ([1]2);25.有以下程序a[]=""[]="";*p1,*p2;i;p12;(0<7)(*(p1)*(p2))("",*(p1));输出结果是()A) B) C) D)26.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是.a)*p1+*p2; b)p2 c)p12 d)*p1*(*p2);27.以下正确的程序段是.a) [20]; b) *p;c) [20]; d) [20],*;(""[2]); (""[2]);28.若有说明语句a[]=" ";则以下不正确的叙述是.a)1表示的是字符t的地址b)p指向另外的字符串时,字符串的长度不受限制c)p变量中存放的地址值可以改变d)a中只能存放10个字符29.下面程序的运行结果是.{ *s1="";*s2="";s1222;("\n"(s12));a)正数 b)负数 c)零 d)不确定的值30.有以下程序f( * *y)t;*x;**y;*;a[8]={1,2,3,4,5,6,7,8},*p,*q;[7];(**q){f();}(0<8) (","[i]);程序运行后的输出结果是。

C语言指针经典练习题 及答案

C语言指针经典练习题 及答案

C语言指针经典练习题及答案c语言指针经典练习题-及答案C语言指针练习和答案一、选择题1.指向变量的指针,表示变量a)值b)地址C)名称d)标志2.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是___.a)a,point,*&ab)&*a,&a,*pointc)*&point,*point,&ad)&a,&*point,point3.如有;int*p,m=5,n;下面正确的部分是____;a)p=&n;b) p=&n;scanf(\scanf(\c)scanf(\d)p=&n;*p=n;*p=m;4.在下面的过程中,调用scanf函数向变量a输入数值是错误的。

main(){int*p,*q,a,b;p=&a;printf(“输入:”);scanf(“%d”,*p);…}a)*p表示的是指针变量p的地址b) *P代表变量a的值,而不是变量a.C的地址)*P代表指针变量P的值d)*p只能用来说明p是一个指针变量5.现有变量定义和函数调用语句:inta=25;打印值(&a);以下函数的输出为_voidprint_value(int*x){printf(“%d\\n”,++*x);}a) 23b)24c)25d)266.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是a)*p=&a;scanf(\,p);b) p=(长*)malloc(8);scanf(\,p);c)scanf(\,p=&a);d)scanf(\,&a);7。

有以下程序:#includemain(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(\}程序运行后的输出结果是a) 1,2,1,2b)1,2,2,1c)2,1,2,1d)2,1,1,28。

c语言指针习题及答案

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指针类练习题及答案

c指针类练习题及答案

c指针类练习题及答案1、利用指针,编写用于交换两个整型变量值的函数。

程序运行结果如下:输入:56输出:65#includeuingnamepacetd;voidwap(int某某p,int某yp){inttmp;tmp=某某p;某某p=某yp;某yp=tmp;}intmain(){inta,b;cin>>a>>b;wap(&a,&b);cout<2、编写主程序,将输入字符串反序输出。

程序运行结果如下:输入:ABCDEFGHIJK输出:KJIHGFEDCBA#include#includeuingnamepacetd;intmain(){chartr[100];cin>>tr;intlen;len=trlen(tr);char某p=&tr[len-1];while(p>=tr){cout<cout<}3、使用指针编写一个用于对整型序列进行排序的函数,排序方法使用简单选择排序法。

程序的运行结果如下所示:输入(第一个数是序列的长度):6272231输出:122237#includeuingnamepacetd;voidelectort(int某lit,intcount){for(inti=0;iintk=i;for(intj=i+1;jif(某(lit+j)inttmp=某(lit+i);某(lit+i)=某(lit+k);某(lit+k)=tmp;}}}intmain(){intn;cin>>n;intarray[20];for(intj=0;j>array[j];electort(array,n);for(inti=0;icout<4、用指针编写一个对整型数组进行冒泡排序函数。

冒泡排序是指将相邻的元素进行比较,如果不符合所要求的顺序,则交换这两个元素;对整个数列中所有的元素反复运用上法,直到所有的元素都排好序为止。

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语言指针习题及答案资料讲解

C语言指针习题及答案资料讲解
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++ } }
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语言指针练习+答案+讲解.

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语言指针习题及答案

C语言指针习题及答案

C语言指针习题及答案1.变量的指针,其含义是指该变量的地址。

2.已有定义int k=2.int *ptr1.*ptr2.且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是ptr2=k。

3.若有说明:int *p。

m=5.n。

以下程序段正确的是p=*p=m。

4.已有变量定义和函数调用语句:int a=25.print_value(&a)。

下面函数的输出结果是26.void print_value(int *x){ printf("%d\n"。

++*x)。

}5.若有说明:int *p1.*p2.m=5.n。

以下均是正确赋值语句的选项是p1= p2=p1.6.若有语句:int *p。

a=4.和p=&a;下面均代表地址的一组选项是&*p。

&a。

p。

7.下面判断正确的是char *s="china"。

等价于char *s。

s="china";8.下面程序段中,for循环的执行次数是6.char*s="\ta\018bc"。

for (。

*s!='\0'。

s++) printf("*");9.下面能正确进行字符串赋值操作的是charstr[10]="china"。

1.strcmp1(char *s,char *t)改写为:int strcmp1(char *s。

char *t) { while (*s == *t) {if (*s == '\0') {return 0;s++;t++;return (*s - *t);2.strcmp2(char *s,char *t)改写为:int strcmp2(char *s。

char *t) {while (*s++ = *t++) {if (!*s) {return 0;return (*s - *t);3.strcmp3(char *s,char *t)改写为:int strcmp3(char *s。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 。

相关文档
最新文档