程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx

上传人:b****5 文档编号:21446591 上传时间:2023-01-30 格式:DOCX 页数:13 大小:18.39KB
下载 相关 举报
程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx_第1页
第1页 / 共13页
程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx_第2页
第2页 / 共13页
程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx_第3页
第3页 / 共13页
程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx_第4页
第4页 / 共13页
程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx

《程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx》由会员分享,可在线阅读,更多相关《程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

程序设计基础c语言科学出版社第五章指针教材习题答案详解汇总Word格式.docx

str[i]<

Z'

{num_large++;

}

else

{if('

a'

z'

{num_small++;

}

else

{if('

0'

9'

{num_digit++;

}

else

{if('

'

==str[i])

{num_blank++;

}

else

{num_other++;

}//当前字符比较判断完成

i++;

}

大写字母共%d个\n"

num_large);

小写字母共%d个\n"

num_small);

数字字符共%d个\n"

num_digit);

空格字符共%d个\n"

num_blank);

其他字符共%d个\n"

num_other);

}

/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组charstr[101]存放字符串,

这样我们只有输入100个字符的时候,才能充分有效的使用charstr[101]使用的空间,但实际情况是有许多

情况下我们输入的字符串不正好是100个字符,当输入的字符个数小于100个时,则字符数组有多余的空间,浪费!

当输入的字符个数大于100个时,则字符数组空间又不够存放,不行!

所以数组大小只有在运行时才能定义,也就是动态定义

*/

//此处注意我的程序说明的两种方式

stdlib.h>

{char*str;

//定义char型指针

intcharnum;

//字符的个数

请输入你将输入的字符串的字符个数:

scanf("

%d"

&

charnum);

str=(char*)malloc(sizeof(char)*(charnum+1));

//思索sizeof(char)*(charnum+1)为什么是这样的

if(str==NULL)

{printf("

申请内存识别,程序无法执行,只好退出!

else

输入一个字符串,按Enter键结束:

//注意此处没有(最多100个字符)提示了

gets(str);

//如果此处只用一个gets(str)会是怎样效果,我们可讨论

for(i=0;

*(str+i)!

;

i++)//'

{//比较判断当前数组元素(即当前字符)是什么

if('

=*(str+i)&

*(str+i)<

{num_large++;

{num_small++;

{num_digit++;

{if('

==*(str+i))

{num_blank++;

}

else

{num_other++;

}//当前字符比较判断完成

printf("

if(str!

=NULL)

{free(str);

2题

{inti,j,k,*p1,*p2,*p3;

inttemp;

输入三个数据(用逗号分隔):

%d,%d,%d"

i,&

j,&

k);

p1=&

i;

p2=&

j;

p3=&

k;

temp=*p1;

*p1=*p2;

*p2=*p3;

*p3=temp;

i=%d,j=%d,k=%d\n"

i,j,k);

\n"

3题

#defineN10

#defineM3

{charstr[M][N]={"

abcdef"

"

123456789"

123456"

};

char*ss;

inti,maxrow,maxlen,curlen;

maxlen=-1;

maxrow=-1;

for(i=0;

i<

M;

i++)

{ss=str[i];

curlen=strlen(ss);

if(maxlen<

curlen)

{maxlen=curlen;

maxrow=i;

ss=str[maxrow];

最大字符串是:

%s,行号是:

ss,maxrow);

4题

{charstr[]={"

asdasasdfgasdaszx67asdmklo"

charsubstr1[]={"

as"

//根据题目定义的长度为2,即2个字符的字符数组

charsubstr2[]={"

//准备存放从str字符串数组中取2个字符

inti,j,num=0,slen;

intsubchars;

//定义子字符串的字符个数

slen=strlen(str);

//计算字符串的长度,即字符个数

subchars=strlen(substr1);

//计算子字符串的长度,本题目明知是2,但这样写是为了便于程序的通用,

=slen-subchars;

i++)//逐个字符开始,但直到倒数第slen-subchars开始

{for(j=0;

j<

subchars;

j++)

{substr2[j]=str[i+j];

//从第i个字符开始,取subchars个字符

substr2[subchars]='

//最后增加'

是为形成字符串数组

if(strcmp(substr1,substr2)==0)

{num++;

%s字符串中共有%d个%s子字符串。

str,num,substr1);

 

5题

{intabc[M][M]={{1,2,3},{4,5,6},{7,8,9}};

int*p,sum;

sum=0;

p=&

abc[0][0];

i++)

{sum=sum+*(p+i*M+i);

对角线的元素和是:

%d。

sum);

7题

#defineN5

{intabc[N][N]={{1,1,1,1,1},{0,2,3,4,5},{0,0,3,3,0},{0,0,0,4,6},{0,0,0,0,5}};

int*p;

inti,j,yesno;

//准备,即设置初始值

yesno=1;

//假定当前矩阵是上三角,只要在下三角区有一个元素不是0,就不是上三角矩阵,就不需再判断其余的了

//开始判断

N;

{if(*(p+i*N+j)!

=0)

{yesno=0;

break;

if(yesno==0)

{break;

//break只能终止所在的循环

//输出矩阵

{printf("

%5d"

*(p+i*N+j));

//输出结论

if(yesno==1)

该矩阵是上三角!

该矩阵不是上三角!

8题

#defineM4

#defineN6

{intabc[M][N]={{10,85,85,87,90,88},{11,70,40,55,90,90},{12,70,30,45,90,88},{13,90,100,87,99,100}};

//第0列是学号,其余列是成绩

inti,j,sum,students,kcs;

//students表示学生数,kcs表示课程数

//计算第5门功课的平均成绩

{sum=sum+*(p+i*N+N-1);

第5门功课的平均成绩是:

%.1f\n"

1.0*sum/4);

//找出2名学生至少有两门课不几个

students=0;

{kcs=0;

for(j=1;

j++)//

{if(*(p+i*N+j)<

60)

{kcs++;

if(kcs==2)

{break;

if(kcs==2)

{students++;

printf("

第%d位两门不及格的学生学号是%d\n"

students,*(p+i*N+0));

sum=0;

for(j=1;

{printf("

第%d门课程成绩:

%d\n"

j,*(p+i*N+j));

sum=sum+*(p+i*N+j);

平均成绩是:

(float)sum/(float)(N-1));

if(students==2)

//找到两个有两门以上课不及格就不再找了

//第3个问题

{kcs=1;

//kcs=1假定该生的每门课程成绩是85以上

sum=0;

j++)

85)//判断有没有1门课程成绩在85分一下

{kcs=0;

sum=sum+*(p+i*N+j);

if(sum>

=90*(N-1)&

kcs==1)

学号%d的同学的平均成绩在90分以上,且每门课程成绩在85分以上。

*(p+i*N+0));

{if(sum>

=90*(N-1))

学号%d的同学的平均成绩在90分以上。

{if(kcs==1)

{printf("

学号%d的同学的每门课程成绩在85分以上。

=90*N)//说明该生平均成绩在90分以上

平均成绩:

%.1f,\n"

1.0*sum/(N-1));

if(kcs==1)

{for(j=1;

9题

#defineM10

{intabc[M]={1,2,3,4,5,6,7,8,9,10};

//是10个人的编号

inti,j;

//数组下标

intpersons;

//人数

inttimes;

//计数,1、2、3

intcount;

//思路:

按题目要求每次数到3时,第3个单元删除,即后面元素前移一个位置,当剩下1个时,即persons=1,游戏结束,输出剩下的元素内容

//用指针方式解决

p=abc;

persons=M;

count=0;

times=0;

i=1;

//从第1个人开始数起

while(persons!

=1)

{times++;

//输出变化状态

count++;

第%3d次,数到%d的人的编号是%d,此时人的编号序列是:

count,times,*(p+i-1));

for(j=0;

persons;

%d"

*(p+j));

//输出完毕

if(times==3)//数到3了

{//第1步操作:

进行前移操作

for(j=i;

{*(p+j-1)=*(p+j);

//第2步操作:

调整剩余人数

persons--;

//第3步操作:

重新计数

times=0;

{//没有数到3,调整下一个人

i++;

if(i>

persons)//数过了最后一个人,需从第1个人再重新开始数

{i=1;

指针方式:

剩下的最后1个人是%d号\n"

*p);

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

当前位置:首页 > 总结汇报 > 学习总结

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

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