c语言一些例题及答案Word文档格式.docx
- 文档编号:17000235
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:8
- 大小:16.82KB
c语言一些例题及答案Word文档格式.docx
《c语言一些例题及答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《c语言一些例题及答案Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
p2=p;
}/*指针变量p1和p2的值交换*/
printf("
\n%d,%d"
*p1,*p2);
a,b);
}
解法2:
{inta,b,p,*p1=&
b;
*p2){p=*p1;
*p1=*p2;
*p2=p;
}/**p1和*p2交换*/
printf(“\n%d,%d”,a,b);
解法3:
(指针变量做函数的参数)
swap(int*p1,int*p2)
{intc;
c=*p1;
*p2=c;
int*p3=&
a,*p4=&
p3,p4);
if(*p3>
*p4)swap(p3,p4);
*p3,*p4);
解法4:
{int*p;
p=p1;
注意:
1)指针变量作函数参数是将一个变量的地址传送到另一个函数中,但仍采用“值”传递。
2)调用函数不能改变实参指针变量的值,但可以改变实参指针变量所指变量的值。
如上例解法3。
所以运用指针变量作参数,可以得到多个变化了的值。
练习3:
输入两个正整数m和n,求其最大公约数。
{intm,n,*p1=&
m,*p2=&
n,r;
if(*p1<
*p2){r=*p1;
*p2=r;
r=(*p1)%(*p2);
while(r!
=0)
{m=n;
n=r;
r=m%n;
\n%d"
*p2);
上机1:
对于任何一个大于3的正整数m,请用指针变量编程,判断其是否是素数。
练习4:
阅读下列源程序
{inta[10],*p,i;
p=a;
for(i=0;
i<
=9;
i++)/*完成对a数组的赋值,且p值不变*/
scanf("
%d"
p+i);
\n"
);
for(;
p<
(a+10);
p++)/*完成对a数组的输出,且p值改变*/
printf("
%8d"
*p);
练习5:
排序问题(升序):
(指向数组的指针变量做参数)
voidsort(int*p,intn)
{inti,j,k,c;
for(i=0;
n-1;
i++)/*选择法完成排序*/
{k=i;
for(j=i+1;
j<
n;
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;
}}}
{intx[100],m,i1,*p=x;
&
m);
for(i1=0;
i1<
m;
i1++)/*完成m个原始数据的输入*/
x[i1]);
sort(p,m);
/*调用排序函数*/
i1++)
x[i1]);
注意:
1)形参和实参都用数组名;
传地址
2)实参用数组名,形参用指针变量;
数组名代表的地址-形参
3)实参、形参都用指针变量:
传值(地址)
4)实参为指针变量,形参为数组名:
实参的值-形参数组名
例6:
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一个函数实现以上功能,在主函数中输入n个整数和输出调用后的n个数。
{intx[20],i,n,m;
n,&
=n-1;
i++)
x[i]);
f(x,n,m);
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:
阅读下列源程序,
{inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},*p,i,j;
for(p=a[0];
a[0]+12;
p++)
{if((p-a[0])%4==0)printf("
%6d"
/*p=a[0];
i,&
j);
printf(“\n%d”,*(p+i*4+j));
*/
例8:
阅读下列源程序,体会p的作用。
{inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23},i,j;
int(*p)[4];
/*定义行指针变量*/
%d\n"
*(*(p+i)+j));
行指针变量的定义格式:
类型标识符(*指针变量名)[列数];
行指针变量:
指向由m个数组成的一维数组的指针变量。
阅读下列源程序,写出运行结果。
1:
{intarr[]={6,7,8,9,10};
int*ptr=arr;
*(ptr+2)+=2;
%d,%d\n"
*ptr,*(ptr+2));
2.
intfun(intx,inty,int*cp,int*dp)
{*cp=x+y;
*dp=x-y;
{inta,b,c,d;
a=30;
b=50;
fun(a,b,&
c,&
d);
c,d);
3.
inta[]={2,4,6,8};
{int*p=a,i;
4;
i++)a[i]=*p++;
a[2]);
二.字符串的指针和指向字符串的指针变量
1.字符串的表示形式:
1)用字符数组
2)用字符指针实现
如:
{char*string=”abcdfeghktjre”;
printf(“%s\n”,string);
例9.完成字符串的复制
#include<
stdio.h>
{charc[20],b[20],*p1=c,*p2=b;
inti;
gets(p1);
*(p1+i)!
='
\0'
;
*p2++=*(p1+i);
*p2='
p2=b;
\nstring1=%s,string2=%s"
用字符数组做参数
voidf(charc1[],charb1[])
{inti;
c1[i]!
b1[i]=c1[i];
b1[i]='
{charc[20],b[20];
gets(c);
f(c,b);
c,b);
用字符指针变量做形参
voidf(char*p1,char*p2)
{for(;
*p1!
p1++)
*p2++=*p1;
*p2='
习题7。
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
{charc;
intn1=0,n2=0,n3=0,n4=0;
while((c=getchar())!
\n'
)
if(c>
A'
c<
Z'
||c>
a'
c<
z'
)n1++;
elseif(c=='
'
)n2++;
elseif(c>
0'
9'
)n3++;
elsen4++;
\nn1=%d,n2=%d,n3=%d,n4=%d\n"
n1,n2,n3,n4);
习题8:
请编程输出一数列,已知第一,第二个数都是1,从第三个数开始,每个数都是与其相邻的前两个数之和,求这一数列,直到其数不小于105
{longa=1,b=1,c;
\n%8ld"
a);
while(b<
=1e+5)
{printf("
%8ld"
b);
a=a+b;
c=a;
a=b;
b=c;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 一些 例题 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)