C语言程序设计习题6.docx
- 文档编号:30201123
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:14
- 大小:17.82KB
C语言程序设计习题6.docx
《C语言程序设计习题6.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题6.docx(14页珍藏版)》请在冰豆网上搜索。
C语言程序设计习题6
习题6参考解答
1.请解释以下术语得含义:
地址指针指针变量直接访问间接访问
解:
(1)地址:
内存单元得编号叫做地址。
(2)指针:
内存单元得编号叫做地址,通常也叫做指针。
(3)指针变量:
在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。
(4)直接访问:
通过变量名称引用变量内存单元得方式称为直接访问。
(5)间接访问:
利用了指针变量,通过变量得指针(即变量得内存地址)来引用内存单元得值,这种方式称为间接访问。
2.指针能参与哪几种运算?
举例说明。
解:
(1)指针变量与整数可以进行加/减运算:
p++、p--、p+i、p-i、p+=i、p-=i
(2)指针变量可进行赋值运算:
p=&a;变量a得地址赋给p,即指针p指向a
p=array;数组array首地址赋给p
p=&array[i];数组元素array[i]得地址赋给p
p=max;函数max得入口地址赋给p
p1=p2;指针p2得值赋给指针p1,即p1、p2所指得数据相同
(3)同类指针变量在一定得条件下可以作相减运算:
p-q
(4)同类指针变量在一定得条件下可以作比较运算:
p 3.判断下面两个程序得正误,若错误指出原因。 (1)#include intmain() { char*p; p="DATA"; printf("%s\n",*p); return0; } 解: 该程序错。 应为: printf("%s\n",p); (2)#include intmain() { int*p; *p=25; printf("%d",*p); return0; } 解: 该程序错。 指针变量没有赋初值。 4.输入3个整数,输出其中最大数。 要求用指针变量实现。 解: #include"stdio、h" intmain() { inta=0,b=0,c=0; int*aa=NULL,*bb=NULL,*cc=NULL,*p=NULL; aa=&a,bb=&b,cc=&c; printf("input3number: "); scanf("%d%d%d",&a,&b,&c); printf("a=%db=%dc=%d\n",a,b,c); p=aa; if(*p<*bb)p=bb; if(*p<*cc)p=cc; printf("%d\n",*p); return0; } 程序运行情况如下: input3number: 459↙ a=4b=5c=9 9 5.有3个整型变量i,j,k。 请编写一个程序,设置3个指针变量p1,p2,p3,分别指向i,j,k,然后通过指针变量使i,j,k3个变量得值顺序交换,即原来i得值赋给j,把j得原值赋给k,把k得原值赋给i。 i,j,k得原值由键盘输入,要求输出i,j,k得原值与新值。 解: #include intmain() { inti,j,k,tmp; int*p1,*p2,*p3; scanf("%d%d%d",&i,&j,&k); printf("Beforechange: %d\t%d\t%d\n",i,j,k); p1=&i; p2=&j; p3=&k; tmp=*p3; *p3=*p2; *p2=*p1; *p1=tmp; printf("Afterchange: %d\t%d\t%d\n",i,j,k); return0; } 程序运行情况如下: 123↙ Beforechange: 123 Afterchange: 312 6.输入一个10个元素得一维数组,在主函数中用scanf函数输入。 用指针方式编程找出最大与最小数,并指出最大数与最小数得位置。 解: inty_max(int*p,intn) { intmax=*p,i,k=0; for(i=0;i { if(max<*(p+i)) { k=i; max=*(p+i);/*记得要在这里更新一下max得记录*/ } } returnk; } #defineN10 #include intmain() { inta[N]; inti,m,max; for(i=0;i scanf("%d",&a[i]); for(i=0;i printf("%d",a[i]); m=y_max(a,N); printf("\nmax=a[%d]=%d",m,a[m]); return0; } 程序运行情况如下: 15678964723↙ 15678964723 max=a[3]=78 7.输入一段文字,统计其中所包含得数字字符与字母字符个数。 解: #include #include #include #defineN80 intcnum=0,dnum=0;/*全局变量用于在两个函数之间传递数据*/ intmain() { charch[N]; voidcount(charc); inti,n; gets(ch); n=strlen(ch); for(i=0;i count(ch[i]);/*数组元素作为函数得实参*/ printf("%d,%d\n",cnum,dnum); } voidcount(charc) { if(c>='0'&&c<='9') dnum++; if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) cnum++; return0; } 程序运行情况如下: hello12345↙ 5,5 8.请写出下列程序段得输出结果。 (1)#include intmain() { inta[]={1,2,3,4,5,6},*p; p=a; *(p+3)+=2; printf("%d,%d",*p,*(p+3)); return0; } 解: 1,6 (2)#include intmain() { inta[]={1,2,3,4,5,6}; int*p; p=a; printf("%5d%5d%5d%5d\n",*p,*(++p),*++p,*(p--)); printf("%5d%5d\n",*p,*(a+2)); return0; } 解: 3321 23 (3)#include #include intmain() { char*s1="AbDeG"; char*s2="AbdEg"; s1+=2;s2+=2; printf("%d\n",strcmp(s1,s2)); return0; } 解: -1 (4)#include #include fun(char*w,intn) { chart,*s1,*s2; s1=w;s2=w+n-1; while(s1 { t=*s1; *s1=*s2; *s2=t; s1++; s2--; } } intmain() { charp[]="1234567"; fun(p,strlen(p)); puts(p); return0; } 解: 7654321 (5)#include intmain() { char*a[]={"Pascal","Clanguage","dBase","Coble"}; char(**p)[]; intj; p=a+3; for(j=3;j>=0;j--) printf("%s\n",*(p--)); return0; } 解: Coble dBase Clanguage Pascal 9.用一个函数实现两个字符串得比较,即自己写一个strcmp函数: strcmp(s1,s2) 如果s1==s2,则函数返回值为0;如果s1! =s2,返回它们两者第一个不同字符得ASCII码差值(如“BOY”与“BAD”,第二个字符不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值,如果s1 两个字符串s1,s2由main函数输入,strcmp函数得返回值也在main函数中输出。 解: #include intstrcmp(char*s1,char*s2) { for(;*s1==*s2&&*s1&&*s2;s1++,s2++);/*找不同得字符*/ return(*s1-*s2); } voidmain() { chara[10],b[10]; gets(a); gets(b); printf("%d\n",strcmp(a,b)); } 程序运行结果如下: hello↙ world↙ -15 10.设计一个程序,管理一个班得计算机成绩,要求采用一维数组来存储学生得成绩。 解: #include intmain(void) { floata[10]; inti=0; doublesum=0、0; floatavg=0、0; for(i=0;i<10;i++) { printf("请输入第%d个同学得成绩: ",i+1); scanf("%f",&a[i]); printf("\n"); sum+=a[i]; } avg=sum/10、0; printf("%f\n",avg); return0; } 程序运行结果如下: 请输入第1个同学得成绩: 85↙ 请输入第2个同学得成绩: 89↙ 请输入第3个同学得成绩: 90↙ 请输入第4个同学得成绩: 78↙ 请输入第5个同学得成绩: 69↙ 请输入第6个同学得成绩: 58↙ 请输入第7个同学得成绩: 78↙ 请输入第8个同学得成绩: 95↙ 请输入第9个同学得成绩: 100↙ 请输入第10个同学得成绩: 89↙ 83、100000 11.输入10个整数,将其中最小得数与第一个数对换,把最大得数与最后一个数对换,用指针来实现。 解: #include voidaa(int*array) { inti; for(i=0;i<10;i++) scanf("%d,",&array[i]); } voidbb(int*array) { int*max,*min,t; int*p; max=min=array; for(p=array;p<=array+9;p++) { if(*max<*p)max=p; if(*min>*p)min=p; } t=*max;*max=array[9];array[9]=t; t=*min;*min=array[0];array[0]=t; } voidcc(int*array) { int*p; for(p=array;p<=array+9;p++) printf("%d,",*p); } voidmain() { intnumber[10]; aa(number); bb(number); cc(number); } 程序运行结果如下: 0-91020304050607066↙ -9,0,10,20,30,40,50,60,66,70 12.分析下列程序得运行结果。 #include intf1(intx) { returnx+1; } intf2(intx) { returnx-1; } intsum_square(int(*f)(),intm,intn) { intk,sum=0; for(k=m;k<=n;k++) sum+=(*f)(k)*(*f)(k); returnsum; } intmain() { printf("result=%d\n",sum_square(f1,1,2)+sum_square(f2,1,2)); return0; } 解: result=14
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 习题