C语言程序设计习题6.docx

上传人:b****5 文档编号:5754439 上传时间:2022-12-31 格式:DOCX 页数:12 大小:17.83KB
下载 相关 举报
C语言程序设计习题6.docx_第1页
第1页 / 共12页
C语言程序设计习题6.docx_第2页
第2页 / 共12页
C语言程序设计习题6.docx_第3页
第3页 / 共12页
C语言程序设计习题6.docx_第4页
第4页 / 共12页
C语言程序设计习题6.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言程序设计习题6.docx

《C语言程序设计习题6.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题6.docx(12页珍藏版)》请在冰豆网上搜索。

C语言程序设计习题6.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1