程序设计基础c语言科学出版社第五章指针教材习题答案详解.docx
- 文档编号:5643639
- 上传时间:2022-12-30
- 格式:DOCX
- 页数:13
- 大小:18.37KB
程序设计基础c语言科学出版社第五章指针教材习题答案详解.docx
《程序设计基础c语言科学出版社第五章指针教材习题答案详解.docx》由会员分享,可在线阅读,更多相关《程序设计基础c语言科学出版社第五章指针教材习题答案详解.docx(13页珍藏版)》请在冰豆网上搜索。
程序设计基础c语言科学出版社第五章指针教材习题答案详解
程序设计基础,(科学出版社)。
c语言
第五章指针,教材答案解析
.1.0
#include
#include
voidmain()
{charstr[101];//存放字符串
inti;//字符串数组的下标
intnum_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;
printf("输入一个字符串(最多100个字符),按Enter键结束:
");
gets(str);//此处不能用scanf("%s",str);,scanf在接受字符串时,在空格处会结束字符串输入,这样空格后的字符就不会进入程序
i=0;
while(str[i]!
='\0')//'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的
{//比较判断当前数组元素(即当前字符)是什么
if('A'<=str[i]&&str[i]<='Z')
{num_large++;
}
else
{if('a'<=str[i]&&str[i]<='z')
{num_small++;
}
else
{if('0'<=str[i]&&str[i]<='9')
{num_digit++;
}
else
{if(''==str[i])
{num_blank++;
}
else
{num_other++;
}
}
}
}//当前字符比较判断完成
i++;
}
printf("大写字母共%d个\n",num_large);
printf("小写字母共%d个\n",num_small);
printf("数字字符共%d个\n",num_digit);
printf("空格字符共%d个\n",num_blank);
printf("其他字符共%d个\n",num_other);
}
/*5-1,5-1_for方式1,5-1_for方式2解决的固定数组方式,这样定义一个数组charstr[101]存放字符串,
这样我们只有输入100个字符的时候,才能充分有效的使用charstr[101]使用的空间,但实际情况是有许多
情况下我们输入的字符串不正好是100个字符,当输入的字符个数小于100个时,则字符数组有多余的空间,浪费!
当输入的字符个数大于100个时,则字符数组空间又不够存放,不行!
所以数组大小只有在运行时才能定义,也就是动态定义
*/
//此处注意我的程序说明的两种方式
#include
#include
#include
voidmain()
{char*str;//定义char型指针
inti;//字符串数组的下标
intcharnum;//字符的个数
intnum_large=0,num_small=0,num_digit=0,num_blank=0,num_other=0;
printf("请输入你将输入的字符串的字符个数:
");
scanf("%d",&charnum);
str=(char*)malloc(sizeof(char)*(charnum+1));//思索sizeof(char)*(charnum+1)为什么是这样的
if(str==NULL)
{printf("申请内存识别,程序无法执行,只好退出!
");
}
else
{printf("输入一个字符串,按Enter键结束:
");//注意此处没有(最多100个字符)提示了
gets(str);//如果此处只用一个gets(str)会是怎样效果,我们可讨论
gets(str);
for(i=0;*(str+i)!
='\0';i++)//'\0'是字符串的结束标志,在字符串输入时,按Enter键回自动转换,按其它键是不会的
{//比较判断当前数组元素(即当前字符)是什么
if('A'<=*(str+i)&&*(str+i)<='Z')
{num_large++;
}
else
{if('a'<=*(str+i)&&*(str+i)<='z')
{num_small++;
}
else
{if('0'<=*(str+i)&&*(str+i)<='9')
{num_digit++;
}
else
{if(''==*(str+i))
{num_blank++;
}
else
{num_other++;
}
}
}
}//当前字符比较判断完成
}
printf("大写字母共%d个\n",num_large);
printf("小写字母共%d个\n",num_small);
printf("数字字符共%d个\n",num_digit);
printf("空格字符共%d个\n",num_blank);
printf("其他字符共%d个\n",num_other);
}
if(str!
=NULL)
{free(str);
}
}
2题
#include
voidmain()
{inti,j,k,*p1,*p2,*p3;
inttemp;
printf("输入三个数据(用逗号分隔):
");
scanf("%d,%d,%d",&i,&j,&k);
p1=&i;
p2=&j;
p3=&k;
temp=*p1;
*p1=*p2;
*p2=*p3;
*p3=temp;
printf("i=%d,j=%d,k=%d\n",i,j,k);
printf("\n");
}
3题
#include
#include
#defineN10
#defineM3
voidmain()
{charstr[M][N]={"abcdef","123456789","123456"};
char*ss;
inti,maxrow,maxlen,curlen;
maxlen=-1;
maxrow=-1;
for(i=0;i {ss=str[i]; curlen=strlen(ss); if(maxlen {maxlen=curlen; maxrow=i; } } ss=str[maxrow]; printf("最大字符串是: %s,行号是: %d",ss,maxrow); printf("\n"); } 4题 #include #include voidmain() {charstr[]={"asdasasdfgasdaszx67asdmklo"}; charsubstr1[]={"as"};//根据题目定义的长度为2,即2个字符的字符数组 charsubstr2[]={"as"};//准备存放从str字符串数组中取2个字符 inti,j,num=0,slen; intsubchars;//定义子字符串的字符个数 slen=strlen(str);//计算字符串的长度,即字符个数 subchars=strlen(substr1);//计算子字符串的长度,本题目明知是2,但这样写是为了便于程序的通用, for(i=0;i<=slen-subchars;i++)//逐个字符开始,但直到倒数第slen-subchars开始 {for(j=0;j {substr2[j]=str[i+j];//从第i个字符开始,取subchars个字符 } substr2[subchars]='\0';//最后增加'\0'是为形成字符串数组 if(strcmp(substr1,substr2)==0) {num++; } } printf("%s字符串中共有%d个%s子字符串。 ",str,num,substr1); printf("\n"); } 5题 #include #include #defineM3 voidmain() {intabc[M][M]={{1,2,3},{4,5,6},{7,8,9}}; int*p,sum; inti; sum=0; p=&abc[0][0]; for(i=0;i {sum=sum+*(p+i*M+i); } printf("对角线的元素和是: %d。 ",sum); printf("\n"); } 7题 #include #include #defineN5 voidmain() {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,就不是上三角矩阵,就不需再判断其余的了 p=&abc[0][0]; //开始判断 for(i=0;i {for(j=0;j {if(*(p+i*N+j)! =0) {yesno=0; break; } } if(yesno==0) {break;//break只能终止所在的循环 } } //输出矩阵 for(i=0;i {for(j=0;j {printf("%5d",*(p+i*N+j)); } printf("\n"); } //输出结论 if(yesno==1) {printf("该矩阵是上三角! "); } else {printf("该矩阵不是上三角! "); } printf("\n"); } 8题 #include #defineM4 #defineN6 voidmain() {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列是学号,其余列是成绩 int*p; inti,j,sum,students,kcs;//students表示学生数,kcs表示课程数 p=&abc[0][0]; //计算第5门功课的平均成绩 sum=0; for(i=0;i {sum=sum+*(p+i*N+N-1); } printf("第5门功课的平均成绩是: %.1f\n",1.0*sum/4); //找出2名学生至少有两门课不几个 printf("\n"); students=0; for(i=0;i {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;j {printf("第%d门课程成绩: %d\n",j,*(p+i*N+j)); sum=sum+*(p+i*N+j); } printf("平均成绩是: %.1f\n",(float)sum/(float)(N-1)); } if(students==2) {break;//找到两个有两门以上课不及格就不再找了 } } printf("\n"); //第3个问题 for(i=0;i {kcs=1;//kcs=1假定该生的每门课程成绩是85以上 sum=0; for(j=1;j {if(*(p+i*N+j)<85)//判断有没有1门课程成绩在85分一下 {kcs=0; } sum=sum+*(p+i*N+j); } if(sum>=90*(N-1)&&kcs==1) {printf("学号%d的同学的平均成绩在90分以上,且每门课程成绩在85分以上。 \n",*(p+i*N+0)); } else {if(sum>=90*(N-1)) {printf("学号%d的同学的平均成绩在90分以上。 \n",*(p+i*N+0)); } else {if(kcs==1) {printf("学号%d的同学的每门课程成绩在85分以上。 \n",*(p+i*N+0)); } } } if(sum>=90*N)//说明该生平均成绩在90分以上 {printf("平均成绩: %.1f,\n",1.0*sum/(N-1)); } if(kcs==1) {for(j=1;j {printf("第%d门课程成绩: %d\n",j,*(p+i*N+j)); } } } printf("\n"); } 9题 #include #defineM10 voidmain() {intabc[M]={1,2,3,4,5,6,7,8,9,10};//是10个人的编号 int*p; 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++; printf("第%3d次,数到%d的人的编号是%d,此时人的编号序列是: ",count,times,*(p+i-1)); for(j=0;j {printf("%d",*(p+j)); } printf("\n"); //输出完毕 if(times==3)//数到3了 {//第1步操作: 进行前移操作 for(j=i;j {*(p+j-1)=*(p+j); } //第2步操作: 调整剩余人数 persons--; //第3步操作: 重新计数 times=0; } else {//没有数到3,调整下一个人 i++; if(i>persons)//数过了最后一个人,需从第1个人再重新开始数 {i=1; } } } printf("指针方式: 剩下的最后1个人是%d号\n",*p); printf("\n"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 语言 科学出版社 第五 指针 教材 习题 答案 详解