C语言程序设计指针作业
c语言指针编程练习题
c语言指针编程练习题2. 从命令行输入两个实型数据,请比较大小并输出。
参考答案3. 输入3个数a,b,c,按大小顺序输出。
利用指针方法参考答案4. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
参考答案5. 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数参考答案6. 有n个人围成一圈,顺序排号。
从第一个人开始报数,凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
参考答案7. 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
参考答案8. 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n 参考答案9. 八进制转换为十进制参考答案10. 编一个函数fun,函数的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组中数据的个数:利用指针odd返回奇数之和,利用指针even返回偶数之和。
例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。
参考答案11. 复制字符串。
参考答案一、用指针方法编写一个程序,输入3个整数,将它们按由小到大的顺序输出 #includevoid swap{int temp;temp = *pa;*pa = *pb;*pb = temp;}void main{int a,b,c,temp;scanf;ifswap;ifswap;ifswap;printf;}二、C语言用指针方法输入3个字符串按由小到大顺序输出#include “stdio.h”#include “string.h”int main{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;scanf;fflush;printf;scanf;fflush;printf;scanf;}fflush; if>0) {t=p1;p1=p2;p2=t;} if>0) {t=p1;p1=p3;p3=t;} if>0) {t=p2;p2=p3;p3=t;} printf; return 0;9.4编程输入一行文字,找出其中的大写字母,小写字母,空格,数字,及其他字符的个数#includevoid main{int a=0,b=0,c=0,d=0,e=0,i=0;char *p,s[20];while)!=‘\n’)i++;p=s;while{ifa++;else ifb++;else ifc++;else ifd++;else e++;p++;}printf;printf;}9.5写一个函数,将3矩阵转置 #include “stdio.h”void Transpose[3]){int temp;int i, j;for/*转置*/{for{temp = *+i);*+i) = *+j);*+j) = temp;}}}void main{int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; Transpose;for{for{printf;}printf;}}}.6用指向一维数组的指针做函数参数#include#includeint main{void sort[6]);//一维数组的指针做函数参数int i;char str[10][6]; char [6];//定义一维数组的指针做函数参数printf;forscanf;p=str;//将str一维数组指针,赋值给p;sort;printf;forprintf;return 0;}void sort[6])//s指向一维数组的指针做函数参数; {int i,j;char temp[6], *t;t=temp;for//i应该小于9;如果小于10,那么就比较了9+1次;按照冒泡法则,for//第一次比较需要9次就是i=0到i=8共九次;第二次需要比较8次;依次类推;if>0){strcpy;strcpy;strcpy;}}9.7编一程序,用指针数组在主函数中输入十个等长的字符串。
C语言指针习题(共21张)
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语言指针作业
指针:1、通过指针变量实现变量值的交换。
#include<stdio.h>void main(){int a=10,b=50,temp;int*pa,*pb;pa=&a, pb=&b;printf("a = %d, b = %d\n", a, b);temp=*pa,*pa=*pb,*pb=temp; /*变量a与b的值交换*/printf("a = %d, b = %d\n", a, b);}2、通过指针变量求三个变量中的最大值和最小值。
(p155页)3、将一由数字组成的字符串转换为其对应的整型数。
main( ){char s[8],*p;long int n=0;gets(s);p=s;while(*p){ n=n*10+(*p-48);p++; }printf("%lu\n",n);}4、将一字符串反向。
main( ){char str[50],*p1,*p2,temp;printf("enter string:");gets(str);p1=p2=str;while(*p1)p1++;p1--;while(p2<p1){temp=*p2;*p2++=*p1;*p1--=temp;}puts(str);}5、将多个字符串按从小到大排序。
选择法和冒泡法都要掌握。
(书p183)6、使程序实现统计输入字符串中空格的个数。
main(){char ss[128]; int n=0; char*s=ss;clrscr();printf("Input a string: ");gets(ss);while(*s){if(*s==32)n++;s++;}printf("There are %d blanks.\n ",n);getch();}7、从字符数组str1中取出AscII码值为偶数且下标为偶数的字符依次存放到字符串t中。
C语言指针作业
第八章习题1.#include <stdio.h>int main(){void swap(int *p1,int *p2); //声明函数int n1,n2,n3;int *p1,*p2,*p3;printf("请输入三个整数n1,n2,n3:");scanf("%d,%d,%d",&n1,&n2,&n3);p1=&n1;p2=&n2;p3=&n3;if(n1>n2) swap(p1,p2);if(n1>n3) swap(p1,p3);if(n2>n3) swap(p2,p3);printf("由小到大的顺序为:%d,%d,%d\n",n1,n2,n3); return 0;}void swap(int *p1,int *p2) //定义函数{int p;p=*p1; *p1=*p2; *p2=p;}2.#include <stdio.h>int main(){ void input(int *);voidmax_min_value(int *);void output(int *);int number[10];input(number);max_min_value(number);output(number);return 0;}void input(int *number){int i;printf("请输入十个数:");for (i=0;i<10;i++)scanf("%d",&number[i]);}voidmax_min_value(int *number){ int *max,*min,*p,temp;max=min=number;for (p=number+1;p<number+10;p++)if (*p>*max) max=p;else if (*p<*min) min=p;temp=number[0];number[0]=*min;*min=temp; if(max==number) max=min;temp=number[9];number[9]=*max;*max=temp; }void output(int *number){int *p;printf("处理后在排序为: ");for (p=number;p<number+10;p++)printf("%d ",*p);printf("\n");}4.#include <stdio.h>int main(){void move(int [20],int,int);int number[20],n,m,i;printf("how many numbers?");scanf("%d",&n);printf("input %d numbers:\n",n);for (i=0;i<n;i++)scanf("%d",&number[i]);printf("how many place you want move?"); scanf("%d",&m);move(number,n,m);printf("Now,they are:\n");for (i=0;i<n;i++)printf("%d ",number[i]);printf("\n");return 0;}void move(int array[20],intn,int m){int *p,array_end;array_end=*(array+n-1);for (p=array+n-1;p>array;p--)*p=*(p-1);*array=array_end;m--;if (m>0) move(array,n,m);}5.#include <stdio.h>int main(){inti,k,m,n,num[50],*p;printf("\n请输入n的值:n=");scanf("%d",&n);p=num;for (i=0;i<n;i++)*(p+i)=i+1;i=0;k=0;m=0;while (m<n-1){if (*(p+i)!=0) k++;if (k==3){*(p+i)=0;k=0;m++;}i++;if (i==n) i=0;}while(*p==0) p++;printf("最后留下的是原来第%d个。
第7章指针习题(C语言程序设计)
3.已知p1和p2为指针变量,且已指向同一个 整型数组的元素,a是一个整型变量,则下 面无意义的语句是【 】。
*p1 *p2
p1:
p2:
a:
A . a=*p1; C. a=p1-p2;
B. a=*p1+*p2; D. p1=a-p2;
7. 若有以下定义语句 int a[]={1,2,3,4,5,6,7,8,9,0};*p=a; 则值为3的表达式是()
二、填空题
1.设有以下定义和语句:
*p *(p+1) *(p+2) 列指针(元素指针)
行指针变量
int a[3][2]={10,20,30,40,50,60}, (*p)[2];
行指针 p
p=a;
p+1 p+2
则*(*(p+2)+1)的值为___6_0_____
*(p[2]+1)
p[2][1]
*(p+2)[1]
a[0] a[1] a[2] a[3] a[4]
2.若有以下说明和语句,则在执行for语句后,
*(*(pt+1)+2) 表示的数组元素是____t[_1_]_[_2]
int t[3][3] ={1,2,3,4,5,6,7,8,9}, *pt[3] ,k;
for (k=0;k<3;k++) pt pt[0]
t 123
pt[k] = &t[k][0];
p
A. p+=2,*(++p) B. p+=2,*p++ C. p+=3, p++ D. p+=2, ++*p
C语言程序设计指针练习题
• • • • • • • • • • •
11.下列程序的输出结果是 int b=2; int func(int *a) {b+=*a;return(b);} main() {int a=2,res=2; res+=func(&a); printf("%d\n",res); } A) 4 B) 6 C) 8 D) 10
C
• 9.执行语句"char a[10]={"abcd"},*p=a;" 后,*(p+4)的值是 • A) "abcd" B) 'd' • C) '\0' D) 不能确定
C
• • • • • • • • •
10.下列程序执行后的输出结果是 void func(int *a,int b[ ]) {b[0]=*a+6;} main() {int a,b[5]; a=0;b[0]=3; func(&a,b);printf("%d\n",b[0]);} A) 6 B) 7 C) 8 D) 9
B
• 3. 下面程序运行时,如果从键盘上输入3,5<回车>, 程序输出的 • 结果是________。 • main( ) • { int a,b,*pa,*pb; • pa=&a; pb=&b; • scanf("%d,%d",pa,pb); • *pa=a+b; • *pb=a+b; • printf("a=%d,b=%d\n",a,b); • } • A) a=13,b=13 B) a=8,b=8 • C) a=8,b=13 D) 出错
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语言指针练习+答案+讲解.
第七章指针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语言——指针例题
一、课本例题例6-5测试数据:p=0 q=8预测结果:q-p=8运行结果:q-p=8例6-7测试数据:1 2 3 4 5预测结果:5 4 3 2 1 运行结果:5 4 3 2 1 例6-8测试数据:1 2 3 4 52 3 4 5 63 4 5 6 74 5 6 7 8预测结果:1 2 3 45 2 3 45 6 3 45 6 7 45 6 7 8运行结果:例6-9测试数据:无预测结果:运行结果:例6-10测试数据:无预测结果:运行结果:例6-11测试数据:the flowers is very beautiful预测结果:the flowers is very beautiful运行结果:例6-13测试数据:beautiful预测结果:b beautiful运行结果:例6-15测试数据:"the","campus","are","very", "beautiful" 预测结果:taeyt运行结果:二、课后题1、程序代码#include<stdio.h>#define N 4void main(){ int a[4],*p=a,m,i,j,t;printf("请输入10个整数:");for(i=0;i<N;i++)scanf("%d",p+i);printf("请输入循环移动的个数:");scanf("%d",&m);printf("移动前的数据:\n");for(i=0;i<m;i++){ t=p[N-1];for(j=N-1;j>=0;j--)p[j]=p[j-1];p[0]=t;}for(i=0;i<N;i++)printf("%d ",p[i]);printf("\n");}测试数据:58 63 25 14 1预测结果:14 58 63 25运行结果:3、程序代码#include<stdio.h>void main(){ char str[80],*s=str;int i,j;printf("输入含空格的字符串:\n");gets(s);for (i=j=0;s[i];i++)if(s[i]!=' ')s[j++]=s[i];s[j]='\0';printf("删除空格后的字符串:\n");puts(s);}测试数据:woshi yige zhongguo ren 预测结果:woshiyigezhongguoren运行结果:4、程序代码# include<stdio.h># include<string.h>void main(){char str[80], *s=str, ch;int i,j;printf("输入一个字符串;\n");gets(s);for (i=0,j=strlen(s)-1;i<j;i++,j--)ch=s[i],s[i]=s[j],s[j]=ch;printf("逆序后的字符串: \n");puts(s);}测试数据:woshiyigezhongguoren 预测结果:nerouggnohzegiyihsow运行结果:。
《C程序设计》单元练习(指针)
班级:学号:姓名:《C程序设计》单元练习(指针)一、选择题1、若有定义: int x,*pb;则以下正确的赋值表达式是。
(1)pb=&x (2)pb=x (3)*pb=&x (4)*pb=*x2、以下程序的输出结果是main(){ int k=2,m=4,n=6;int *pk=&k,*pm=&m,*p;*(p=&n)=*pk*(*pm);printf(“%d\n”,n);}(1)4 (2)6 (3)8 (4)103、已知指针P的指向如下图所示,则执行*P++;后*P的值是。
a[0] a[1] a[2] a[3] a[4](1)20 (2)30 (3)21 (4)314、以下程序的输出结果是。
void sub(int x,int y,int *z){ *z=y-x;}main(){ int a,b,c;sub(10,5,&a);sub(7,a,&b);sub(a,b,&c);printf(“%d,%d,%d\n”,a,b,c);}(1)5,2,3 (2)-5,-12,-7 (3)-5,-12,-17 (4)5,-2,-75、以下程序的输出结果是。
void prtv(int *x){ printf(“%d\n”,++*x);}main( ){ int k=25; prtv(&k):}(1)23 (2)24 (3)25 (4)266、以下程序的输出结果是。
void fun(float *a,float *b){ float w;*a=*a+*a; w=*a; *a=*b; *b=w;}main(){ float x=2.0,y=3.0;float *px=&x,*py=&y;fun(px,py);printf(“%2.0f,%2.0f\n”,x,y); }(1)4,3 (2)2,3 (3)3,4 (4)3,27、下程序的输出是。
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语言程序设计作业五1.对于类型相同的指针变量,不能进行哪种运算?(单选)A. +B. -C. =D. = =2. 若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?(单选)int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i;p=a;A. *(a+i)B. a[p-a]C. p+iD. *(&a[i])3. 若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示?(单选)int a[]={1,2,3,4,5,6,7,8,9,0}, *p,i;p=a;A. &(a+1)B. a++C. &pD. &p[i]4. 以下程序的输出结果是___。
#include <stdio.h>main(){int a[]={1,2,3,4,5,6},*p;p=a;*(p+3)+=2;printf("%d,%d\n",*p,*(p+3));}A. 0,5B. 1,5C. 0,6D. 1,65. 以下程序的输出结果是哪一项?(单选)#include <stdio.h>main(){int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i;for(i=0;i<4;i++)p[i]=&a[i*3];printf("%d\n",p[3][2]);}A. 输出项不合法B. 6C. 8D. 126. 如果有以下的定义:(多选)struct person{char name[20];int age;char sex;};struct person a={"xiao min",20,'m'},*p=&a;则对字符串"li ning"的引用方式可以是下面哪些?A. (*p).nameB. C. D. p->name7. 下面哪些定义的结构在内存分配是等价的。
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语言程序设计(指针)习题与答案
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语言指针练习题C语言是一门广泛应用于系统开发和嵌入式设备编程的高级编程语言。
它具有灵活性和效率高的特点,而指针是C语言中一个重要的概念。
本文将以练习题的形式介绍一些常见的C语言指针练习题,以帮助读者更好地理解和掌握指针的应用。
1. 编写一个程序,交换两个整数的值。
请使用指针而不是中间变量来实现交换。
```cvoid swap(int* a, int* b) {int temp = *a;*a = *b;*b = temp;}int main() {int x = 5;int y = 10;printf("交换前:x = %d, y = %d\n", x, y);swap(&x, &y);printf("交换后:x = %d, y = %d\n", x, y);return 0;}```2. 编写一个函数,将一个字符串反转。
请使用指针而不是中间变量来实现反转。
```cvoid reverseString(char* str) {int length = strlen(str);char* start = str;char* end = str + length - 1;while (start < end) {char temp = *start;*start = *end;*end = temp;start++;end--;}}int main() {char str[] = "Hello, World!";printf("反转前:%s\n", str);reverseString(str);printf("反转后:%s\n", str);return 0;}```3. 编写一个函数,统计一个字符串中某个字符出现的次数。
```cint countChar(char* str, char c) {int count = 0;while (*str != '\0') {if (*str == c) {count++;}str++;}return count;}int main() {char str[] = "Hello, World!";char c = 'l';int result = countChar(str, c);printf("%c在字符串中出现的次数:%d\n", c, result); return 0;}```4. 编写一个函数,将一个整型数组中的元素逆序排列。
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语言程序设计 指针
实验6 指针学号:姓名:实验日期:一、实验目的和要求(1)掌握指针的概念、指针变量定义和引用。
(2)掌握指针的运用方法。
(3)掌握数组的指针和指向数组的指针变量。
(4)掌握指针与函数的关系。
(5)能正确使用字符串的指针和指向字符串的指针变量。
(6)了解指向函数的指针。
(7)了解指向指针变量的指针的概念及其使用方法。
二、实验内容(注意:由于本实验报告模板中已经有题目内容,故源代码中无需再附上教材上的题目编号信息,只需有你的学号和姓名信息即可。
以下所有题目都要求代码与运行结果一起截图,只有在代码实在过多无法一起截图情况下,才能分开截图)1、【编写程序】请用指针编程实现:从键盘输入10个数,求出其中的最小值。
提示:定义函数lookup(int *str,int *a,int n)查找数组str中的最小值,将数组中的每一个数跟第一个数进行比较,最后得到最小的数。
2、【编写程序】请用指针编程实现:编写函数change(char *s,int *p),将字符串s 中的数字字符转换成数字存储到整型数组p中,函数返回转换后的数字的个数。
提示:先检测字符是否为数字,数字的ASCII码值为30H~39H,逐个判断s中的字符,如果是数字字符,则将其转换成数字存储到整型数组中。
3、【编写程序】请用指针编程实现:先读入10个整数,然后把它们按从大到小的次序排列起来,最后再读入一个整数k,并将k插入到该整数数列中,插入后的数列仍然按从大到小的顺序排列。
要求:编写一个函数实现排序功能。
4、【编写程序】请用指针编程实现:从键盘输入一个字符串,判断输入的字符串是否为回文。
(回文是指正序和反序字符排例方式相同的字符串,如abcdcba是回文)。
5、【编写程序】请用指针编程实现:写一个函数,实现两个字符串的比较。
即自己写一个strcmpa函数,函数原型为:int strcmpa(char *p1,char *p2),若两个字符串相等则返回0,否则返回这两个字符串第一个不同字符的ASCII码差值。
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 *point,a; 则point=&a;中运算符&的含义是_____
A)位与运算B)逻辑与运算
C)取指针内容D)取地址
【习题3】若x是整型变量,pb是整型的指针变量,则正确的赋值表达式是
A) pb=&x B) pb=x; C) *pb=&x; D) *pb=*x
【习题4】下面程序段的运行结果是_________
char *s="abcde";
s+=2;
printf("%d",s);
A)cde B)字符’c’C)字符’c’的地址D)无确定的输出结果【习题5】设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是______
A)c=*p1+*p2; B)p2=c C)p1=p2 D)c=*p1*(*p2);
【习题6】若有定义语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是________.
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
【习题7】若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为___
A)*(a[i]+j) B)(a+i) C)*(a+j) D)a[i]+j
【习题8】设有如下定义:int (*ptr)( );
则以下叙述中正确的是:
A)ptr是指向一维组数的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
【习题9】设有定义int (*ptr)[m];其中的标识符ptr是
A)m个指向整型变量的指针
B)指向m个整型变量的函数指针
C)一个指向具有m个整型元素的一维数组的指针
D)具有m个指针元素的一维指针数组,每个元素都只能指向整型量
【习题10】若要用下面的程序片段使指针变量p指向一个存储整型变量的动态
存储单元:int *p;
p=__________ malloc( sizeof(int));
则应填入
A) int B) int * C) (*int) D) (int *)
二、阅读下列程序,填空或给出程序运行结果。
【习题11】以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
#include "stdio.h"
main()
{
int *a,*b,*c,num,x,y,z;
a=&x; b=&y; c=&z;
printf("输入3个整数:");
scanf("%d%d%d",a,b,c);
printf("%d,%d,%d\n",*a,*b,*c);
num=*a;
if (*a>*b) _______;
if (num>*c) _______;
printf("输出最小整数:%d\n",num);
}
【习题12】下面程序的功能是将两个字符串s1和s2连接起来,将s2连接到s1后面。
请填空。
#include “stdio.h”
#include “string.h”
main()
{ char s1[80],s2[80];
gets(s1); gets(s2);
conn(s1,s2);
puts(s1);
}
conn(char *p1,char *p2)
{ while(*p1) ______;
while(*p2)
{ *p1=______;
p1++; p2++; }
*p1=’\0’;
}
【习题13】以下程序将数组a中的数据按逆序存放,请填空。
#define M 8
#include “stdio.h”
main()
{ int a[M],i,j,t;
for(i=0;i<M;i++)
scanf("%d",a+i);
i=0;j=M-1;
while(i<j)
{
t=*(a+i);
*(a+i)= _______;
*(______)=t;
i++; j--;
}
for(i=0;i<M;i++
printf("%3d",*(a+i));
}
【习题14】给出程序运行结果。
#include “stdio.h”
void f(int *x,int *y);
main()
{
int a[8]={1,2,3,4,5,6,7,8},i,*p,*q;
p=a;q=&a[7];
while(p<q)
{ f(p,q);
p++;q--;}
for(i=0;i<8;i++)
printf("%d,",a[i]);
}
void f(int *x,int *y)
{ int t;
t=*x;*x=*y;*y=t;
}
【习题15】给出以下程序的输出结果: #include “stdio.h”
void prt(int *m,int n);
main()
{
int a[]={1,2,3,4,5},i;
prt(a,5);
for(i=0;i<5;i++)
printf("%d,",a[i]);
void prt(int *m,int n)
{ int i;
for(i=0;i<n;i++)
m[i]++;
}
【习题16】给出下面程序的运行结果
#include “stdio.h”
#include “string.h”
void fun(char *w,int n);
main()
{ char *p;
p="1234567";
fun(p,strlen(p));
puts(p);
}
void fun(char *w,int n)
{ char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1<s2)
{t=*s1++;*s1=*s2--;*s2=t;}
}
【习题17】给出下面程序的运行结果
#include “stdio.h”
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));
}
三、程序设计题(本章所有习题要求使用指针方法处理)
【习题18】有n个整数,设计程序,将前面各个数按顺序向后移动k个位置,将最后k个数按顺序移动到最前面。
【习题19】编写程序判断是否是回文字符串。
回文是一种“从前向后读”和“从后向前读”都相同的字符串。
如:“rotor”。
【习题20】编制一个字符替换函数,实现已知字符串str中,所有属于ch中的字符都用ch2中对应字符代替。
函数原型:
void replace(char *str, char ch, char ch2)
【习题21】编写一个函数,删除一个字符串的指定字符,函数原型:
int delStr(char *str, char ch)
先判断字符是否出现在字符串中,如果未出现,则返回0,如果字
符出现一次或多次,则返回字符的个数。
【习题22】编写函数把参数字符串中的字符反序排列, 函数原型:
void reversestr(char * str)
使用指针,不要使用数组下标,也不要声明局部数组来临时存储。