c语言一些例题及答案.docx
- 文档编号:4084205
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:8
- 大小:16.82KB
c语言一些例题及答案.docx
《c语言一些例题及答案.docx》由会员分享,可在线阅读,更多相关《c语言一些例题及答案.docx(8页珍藏版)》请在冰豆网上搜索。
c语言一些例题及答案
指针变量的引用:
相关运算符:
&:
取地址运算符。
*:
指针运算符。
练习1:
intx=7,*p=&x;
则:
&x对应p,*&x对应*p,x
x++对应(*p)++
练习2:
输入a,b(int型)。
按从小到大输出。
解法1:
main()
{inta,b;
int*p1=&a,*p2=&b,*p;
scanf("%d,%d",p1,p2);
if(*p1>*p2){p=p1;p1=p2;p2=p;}/*指针变量p1和p2的值交换*/
printf("\n%d,%d",*p1,*p2);
printf("\n%d,%d",a,b);}
解法2:
main()
{inta,b,p,*p1=&a,*p2=&b;
scanf("%d,%d",p1,p2);
if(*p1>*p2){p=*p1;*p1=*p2;*p2=p;}/**p1和*p2交换*/
printf("\n%d,%d",*p1,*p2);printf(“\n%d,%d”,a,b);}
解法3:
(指针变量做函数的参数)
swap(int*p1,int*p2)
{intc;
c=*p1;*p1=*p2;*p2=c;}
main()
{inta,b;
int*p3=&a,*p4=&b;
scanf("%d,%d",p3,p4);
if(*p3>*p4)swap(p3,p4);
printf("\n%d,%d",*p3,*p4);
printf("\n%d,%d",a,b);}
解法4:
swap(int*p1,int*p2)
{int*p;
p=p1;p1=p2;p2=p;}
main()
{inta,b;
int*p3=&a,*p4=&b;
scanf("%d,%d",p3,p4);
if(*p3>*p4)swap(p3,p4);
printf("\n%d,%d",*p3,*p4);printf("\n%d,%d",a,b);}
注意:
1)指针变量作函数参数是将一个变量的地址传送到另一个函数中,但仍采用“值”传递。
2)调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
如上例解法3。
所以运用指针变量作参数,可以得到多个变化了的值。
练习3:
输入两个正整数m和n,求其最大公约数。
main()
{intm,n,*p1=&m,*p2=&n,r;
scanf("%d,%d",p1,p2);
if(*p1<*p2){r=*p1;*p1=*p2;*p2=r;}
r=(*p1)%(*p2);
while(r!
=0)
{m=n;n=r;r=m%n;}
printf("\n%d",*p2);}
上机1:
对于任何一个大于3的正整数m,请用指针变量编程,判断其是否是素数。
练习4:
阅读下列源程序
main()
{inta[10],*p,i;
p=a;
for(i=0;i<=9;i++)/*完成对a数组的赋值,且p值不变*/
scanf("%d",p+i);
printf("\n");
for(;p<(a+10);p++)/*完成对a数组的输出,且p值改变*/
printf("%8d",*p);}
练习5:
排序问题(升序):
(指向数组的指针变量做参数)
voidsort(int*p,intn)
{inti,j,k,c;
for(i=0;i {k=i; for(j=i+1;j if(p[k]>p[j])k=j;/或: if(*(p+k)>*(p+j))k=j; if(k! =i){c=p[k];p[k]=p[i];p[i]=c;}}} main() {intx[100],m,i1,*p=x; scanf("%d",&m); for(i1=0;i1 scanf("%d",&x[i1]); sort(p,m);/*调用排序函数*/ printf("\n"); for(i1=0;i1 printf("%8d",x[i1]);} 注意: 1)形参和实参都用数组名;传地址 2)实参用数组名,形参用指针变量;数组名代表的地址-形参 3)实参、形参都用指针变量: 传值(地址) 4)实参为指针变量,形参为数组名: 实参的值-形参数组名 例6: 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能,在主函数中输入n个整数和输出调用后的n个数。 main() {intx[20],i,n,m; scanf("%d,%d",&n,&m); for(i=0;i<=n-1;i++) scanf("%d",&x[i]); f(x,n,m);printf("\n"); for(i=0;i printf("%8d",x[i]);} f(inty[],intn,intm) {intc,j1,j2; for(j1=1;j1<=m;j1++) {c=y[n-1]; for(j2=n-1;j2>=1;j2--) y[j2]=y[j2-1]; y[0]=c;}} 思考: 将其改为用指针变量编程(上机2) 1.指向多维数组的指针和指针变量: 思考题: intx[3][4]; 则: &x[0][0]对应x[0]及*(x+0) &x[0][1]对应x[0]+1及*(x+0)+1 &x[0][i]对应x[0]+i及*(x+0)+i &x[i][j]对应x[i]+j及*(x+i)+j x[i][j]对应*(*(x+i)+j)及*(x[i]+j) 例7: 阅读下列源程序, main() {inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},*p,i,j;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 一些 例题 答案