C语言程序设计指针答案
C语言程序设计指针答案
C语言程序设计上机指针注:本次上机无需上交上机报告。
一、选择题1. 变量的指针,其含义是指该变量的()。
A. 值B. 地址C. 名D. 一个标志2. 已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。
A. k=*ptr1+*ptr2B. ptr2=kC. ptr1=ptr2D. k=*ptr1*(*ptr2)3. 若有说明:int *p,m=5,n; 以下程序段正确的是()。
A. p=&n; scanf(“%d”,&p);B. p = &n ; scanf(“%d”,*p);C. scanf(“%d”,&n); *p=n ;D. p = &n ; *p = m ;4. 若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是()。
A. p1=&m; p2=&p1 ;B. p1=&m; p2=&n; *p1=*p2 ;C. p1=&m; p2=p1 ;D. p1=&m; *p1=*p2 ;5. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是()。
A. a, p, *&aB. &*a,&a,*pC. *&p,*p,&aD. &a,&*p,p6. 下面程序段中,for循环的执行次数是()。
A. 9B. 7C. 6D. 5char *s=”\ta\018bc” ;for ( ; *s!=’\0’ ; s++) printf(“*”) ;7. 下面不能正确进行字符串赋值操作的是()。
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) ;s无初值。
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语言程序设计(指针)期末单元测试与答案
一、单选题1、若有说明:int n = 2,*p = &n,*q = p;则以下非法的赋值语句是()A.p = q;B.p = n;C.n = *q;D.*q = 3;正确答案:B解析:B、p为指针类型,即“地址箱”,要保存地址,而n为整型数,类型不匹配。
2、若有以下定义:int x, *pb;则正确的赋值表达式是()A.*pb = *x;B.pb = x;C.pb = &x;D.*pb = &x;正确答案:C解析:A、x是整型变量,普通变量前面加*,这是错误的,没有该语法D、运行时错误。
正确的是pb = &x; x的地址应放到“地址箱”即指针变量pb中,一定要注意“地址箱”即指针变量为pb,而非*pb。
如果写成*pb = &x;会出现什么问题呢?pb为随机指向的“野指针”,即随机指向一个空间,该语句试图吧&x 放入到该随机空间中,报运行时错误3、若定义:int a =511,*b = &a; 则printf("%d\n",*b); 的输出结果为()A.511B.无确定值C.512D.a的地址正确答案:A解析:A、b是指针变量,保存a的地址,那么*b就是a4、下面能正确进行字符串赋值操作的是()A.char *s;s ="abcde";B.char *s;scanf("%s",s);C.char s[5] ={'a','b','c','d','e'};D.char s[5] = {"abcde"};正确答案:A解析:B、编译不报错,运行时错误。
原因s指针随机指向一个空间,即野指针,不能试图把一个字符串输入到该随机空间中,运行时报错C、语法正确,但数组s中由于缺少字符串结束符'\0',故村的不是字符串,而是5个独立的字符。
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语言指针问题及答案
}
static void foo2(int *p, int *q){
int *tmp = p;p = q;q = tmp;
}
static void test5()
{
int a = 3;int b = 5;
void (*p[2])(int*, int*);
void(*p[2])(int *, int);
定义了一个函数指针的数组p, p有两个指针元素.元素是函数的指针,函数指针指向的函数是一个带2个参数,不返回任何类型值的函数,所带的两个参数分别是指向整型的指针,和整型
p[0] = f1; p[1] = f2 contain address of function .function name without parenthesis represent address of function Value and address of variable is passed to function only argument that is effected is a (address is passed). Because of call by value f1, f2 can not effect b
int (*p)[3] = a;
printf("%d %d\n", (*p)[1], (*p)[2]);
//*(*p + 1) //2 3
p++;
printf("%d %d\n", (*p)[1], (*p)[2]); //5 6
}
//==============================
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语言指针练习+答案+讲解
第七章指针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语言指针的习题答案指针练习题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语言_科学出版社_第五章指针_教材习题答案详解
程序设计基础,(科学出版社)。
c语言第五章指针,教材答案解析.1.0#include<stdio.h>#include<string.h>void main(){ char str[101]; //存放字符串int i;//字符串数组的下标int num_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;printf("输入一个字符串(最多100个字符),按Enter键结束:");gets(str);//此处不能用scanf("%s",str);,scanf在接受字符串时,在空格处会结束字符串输入,这样空格后的字符就不会进入程序i=0;while(str[i]!='\0') //'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的{ //比较判断当前数组元素(即当前字符)是什么if('A'<=str[i] && str[i]<='Z'){ num_large++;}else{ if('a'<=str[i] && str[i]<='z'){ num_small++;}else{ if('0'<=str[i] && str[i]<='9'){ num_digit++;}else{ if(' '==str[i]){ num_blank++;}else{ num_other++;}}}}//当前字符比较判断完成i++;}printf("大写字母共%d 个\n",num_large);printf("小写字母共%d 个\n",num_small);printf("数字字符共%d 个\n",num_digit);printf("空格字符共%d 个\n",num_blank);printf("其他字符共%d 个\n",num_other);}/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组char str[101]存放字符串,这样我们只有输入100个字符的时候,才能充分有效的使用char str[101]使用的空间,但实际情况是有许多情况下我们输入的字符串不正好是100个字符,当输入的字符个数小于100个时,则字符数组有多余的空间,浪费!当输入的字符个数大于100个时,则字符数组空间又不够存放,不行!所以数组大小只有在运行时才能定义,也就是动态定义*///此处注意我的程序说明的两种方式#include<stdio.h>#include<string.h>#include<stdlib.h>void main(){ char *str; //定义char型指针int i;//字符串数组的下标int charnum;//字符的个数int num_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;printf("请输入你将输入的字符串的字符个数:");scanf("%d",&charnum);str=(char *)malloc(sizeof(char)*(charnum+1));//思索sizeof(char)*(charnum+1)为什么是这样的if(str==NULL){ printf("申请内存识别,程序无法执行,只好退出!");}else{ printf("输入一个字符串,按Enter键结束:");//注意此处没有(最多100个字符)提示了gets(str);//如果此处只用一个gets(str)会是怎样效果,我们可讨论gets(str);for(i=0;*(str+i)!='\0';i++) //'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的{ //比较判断当前数组元素(即当前字符)是什么if('A'<=*(str+i) && *(str+i)<='Z'){ num_large++;}else{ if('a'<=*(str+i) && *(str+i)<='z'){ num_small++;}else{ if('0'<=*(str+i) && *(str+i)<='9'){ num_digit++;}else{ if(' '==*(str+i)){ num_blank++;}else{ num_other++;}}}}//当前字符比较判断完成}printf("大写字母共%d 个\n",num_large);printf("小写字母共%d 个\n",num_small);printf("数字字符共%d 个\n",num_digit);printf("空格字符共%d 个\n",num_blank);printf("其他字符共%d 个\n",num_other);}if(str!=NULL){ free(str);}}2题#include<stdio.h>void main(){ int i,j,k,*p1,*p2,*p3;int temp;printf("输入三个数据(用逗号分隔):");scanf("%d,%d,%d",&i,&j,&k);p1=&i;p2=&j;p3=&k;temp=*p1;*p1=*p2;*p2=*p3;*p3=temp;printf("i=%d,j=%d,k=%d\n",i,j,k);printf("\n");}3题#include<stdio.h>#include<string.h>#define N 10#define M 3void main(){ char str[M][N]={"abcdef","123456789","123456"};char *ss;int i,maxrow,maxlen,curlen;maxlen=-1;maxrow=-1;for(i=0;i<M;i++){ ss=str[i];curlen=strlen(ss);if(maxlen<curlen){ maxlen=curlen;maxrow=i;}}ss=str[maxrow];printf("最大字符串是:%s,行号是:%d",ss,maxrow);printf("\n");}4题#include<stdio.h>#include<string.h>void main(){ char str[]={"asd asasdfg asd as zx67 asd mklo"};char substr1[]={"as"};//根据题目定义的长度为2,即2个字符的字符数组char substr2[]={"as"};//准备存放从str字符串数组中取2个字符int i,j,num=0,slen;int subchars; //定义子字符串的字符个数slen=strlen(str);//计算字符串的长度,即字符个数subchars=strlen(substr1);//计算子字符串的长度,本题目明知是2,但这样写是为了便于程序的通用,for(i=0;i<=slen-subchars;i++) //逐个字符开始,但直到倒数第slen-subchars开始{ for(j=0;j<subchars;j++){ substr2[j]=str[i+j];//从第i个字符开始,取subchars个字符}substr2[subchars]='\0'; //最后增加'\0'是为形成字符串数组if(strcmp(substr1,substr2)==0){ num++;}}printf("%s字符串中共有%d个%s子字符串。
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语言_科学出版社_第五章指针_教材习题答案详解汇总
printf("其他字符共%d个\n",num_other);
}
/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组char str[101]存放字符串,
这样我们只有输入100个字符的时候,才能充分有效的使用char str[101]使用的空间,但实际情况是有许多
{//比较判断当前数组元素(即当前字符)是什么
if('A'<=*(str+i) && *(str+i)<='Z')
{num_large++;
}
else
{if('a'<=*(str+i) && *(str+i)<='z')
{num_small++;
}
else
{if('0'<=*(str+i) && *(str+i)<='9')
}
3题
#include<stdio.h>
#include<string.h>
#define N 10
#define M 3
void main()
{char str[M][N]={"abcdef","123456789","123456"};
char *ss;
int i,maxrow,maxlen,curlen;
printf("请输入你将输入的字符串的字符个数:");
指针练习题及答案
指针练习题及答案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语言程序设计(指针)习题与答案
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语言指针精选习题和答案
一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出#include <>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 ""#include ""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;}编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#include<>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);}写一个函数,将3 3矩阵转置#include ""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");}}}用指向一维数组的指针做函数参数#include<>#include<>int main(){void sort(char (*s)[6]);3”n",*(month_name+n));elseprintf("It is wrong.\n");}运行结果:① Input month: 2↙It is February.② Input month: 8↙It is August.③ Input month: 13↙It is wrong.9.11c语言:将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计上机指针
注:本次上机无需上交上机报告。
一、选择题
1. 变量的指针,其含义是指该变量的()。
A. 值
B. 地址
C. 名
D. 一个标志
2. 已有定义int k=2,*ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是()。
A. k=*ptr1+*ptr2
B. ptr2=k
C. ptr1=ptr2
D. k=*ptr1*(*ptr2)
3. 若有说明:int *p,m=5,n; 以下程序段正确的是()。
A. p=&n; scanf(“%d”,&p);
B. p = &n ; scanf(“%d”,*p);
C. scanf(“%d”,&n); *p=n ;
D. p = &n ; *p = m ;
4. 若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是()。
A. p1=&m; p2=&p1 ;
B. p1=&m; p2=&n; *p1=*p2 ;
C. p1=&m; p2=p1 ;
D. p1=&m; *p1=*p2 ;
5. 若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是()。
A. a, p, *&a
B. &*a,&a,*p
C. *&p,*p,&a
D. &a,&*p,p
6. 下面程序段中,for循环的执行次数是()。
A. 9
B. 7
C. 6
D. 5
char *s=”\ta\018bc” ;
for ( ; *s!=’\0’ ; s++) printf(“*”) ;
7. 下面不能正确进行字符串赋值操作的是()。
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) ;s无初值。
8. 下面程序段的运行结果是()。
char *s=”abcde” ; s+=2 ; printf(“%s”,s);
A. cde
B. 字符’c’
C. 字符’c’的地址
D. 不确定
9. p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是()。
A. c=*p1+*p2
B. p2=c
C. p1=p2
D. c=*p1*(*p2)
10. 以下说明不正确的是()。
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”;
11. 若有定义:int a[5];则a数组中首元素的地址可以表示为()。
A. &a
B. a+1
C. a
D. &a[1]
12. 已有函数max(a,b),为了让函数指针变量p指向max,正确的方法是()。
A. p=max;
B. p=max(a,b);
C. *p=max;
D.
*p=max(a,b);
13. 对于类型相同的指针变量,不能进行哪种运算?
A. +
B. -
C. %
D. ==
14. 若有以下说明和语句,则p1-p2的值为多少?
int a[10], *p1, *p2; p1=a; p2=&a[5];
A. -5
B. 6
C. -10
D. 非法
15. main()函数可以带两个形参,一般分为argc和argv,其中argv可以定义为()。
A. int argv;
B. char * argv[];
C. char argv[];
D. char ** argv[];
16. 若有定义:int (*p)[4];则标识符p()。
A. 是一个指向整型变量的指针
B. 是一个指针数组名
C. 是一个指针,它指向一个含有四个整型元素的一维数组
D. 定义不合法
17. 以下与int *q[5];等价的定义语句是()。
A. int q[5]
B. int *q
C. int *(q[5])
D. int (*q)[5]
18. 已有定义int (*p)( );指针p可以()。
A. 代表函数的返回值
B. 指向函数的入口地址
C. 表示函数的类型
D. 表示函数返回值的类型
二. 填空题
1. 设int a[10]={1,2,3}; 则*(a+3)的值是_______0_________。
2. 设TC2.0中,int a[3][4] = {{2},{3}}; 若数组a的起始地址为2000,则a+1的地址值是_____2008________________。
3. 设int a[2][4],(*p)[4]=a; 用指针变量p表示数组元素a[1][2]为_____________。
4. 对于数据定义及说明:“ int *p, *q[10], (*r)(), *s(); ”,其中p,q,r,s的含义分别:
p指针变量,
q数组名,此数组中的所有元素都是指针变量,
r指向函数的指针,
s函数名,函数的返回值是指针。
5. 若有定义:int a[2][3]={2,4,6, 8,10,12};则*(&a[0][0]+2*2+1)的值是12 ,*(a[1]+2)的值是12 。
三. 程序分析题,写出以下程序的执行结果,先分析,再上机验证。
1. void del (char *s,char c )
{ int i,j;
for (i=j=0; s[i]!='\0'; i++)
if ( s[i] == c) s[j++]=s[i];
s[j]='\0';
}
main()
{ char s[]="the c language";
del(s,'g'); puts(s);
}
2. #include <stdio.h>
#include <string.h>
void fun(char *p,int n)
{ char *i,*j,t;
for (i=p,j=p+n-1; i<j; i++,j--)
{ t=*i; *i=*j; *j=t; }
}
main()
{ char s[]="1234567890";
fun(s,strlen(s)); puts(s);
}
3. #include "stdio.h"
main ( )
{ char *a[]={"Pascal","C Language","dBase","Java"};
char **p ;
int j ;
p = a+3;
for (j=3; j>=0; j--)
printf("%s\n",*(p--)) ;
}。