第八周作业
第八周作业
Deadline:2019-04-19(周五)23:00
本周教学目标
掌握常用字符串函数以及使用指针操作字符串的方法,掌握动态内存分配。
本周作业头
一、本周完成的作业
题目1:函数实现字符串逆序
1).实验代码
#include <stdio.h>
#define MAXS 20
void f( char *p );
void ReadString( char *s ); /* 由裁判实现,略去不表 */
int main()
{
char s[MAXS];
ReadString(s);
f(s);
printf("%s\n", s);
return 0;
}
void f( char *p)
{
int i=0,q=0,h,t;
while(p[i]!='\0')
i++;
h=i-1;
while(q<=h)
{
t = p[q];
p[q] = p[h];
p[h] = t;
q++;
h--;
}
return ;
}
2) 设计思路
3).本题调试过程碰到问题及解决办法
问题1:当时一下子没有想出怎么计算字符串的长度
解决方法:利用i计数,然后h = i-1;
4).运行结果截图
题目2:字符串的连接
1).实验代码
#include <stdio.h>
#include <string.h>
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);
return 0;
}
char *str_cat( char *s, char *t ){
s=strcat(s,t);
return s;
}
2).设计思路
3).本题调试过程碰到问题及解决办法
问题:因为就使用了一个函数,没有问题
4).运行结果截图
题目3: 输出学生成绩
1).实验代码
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,i;
float *p,sum,max,min,avg;
scanf("%d",&n);
if((p=(float*)malloc(n*sizeof(float)))==NULL){
exit(1);
}
sum=0.0;
max=-1;
min=1000;
for(i=0;i<n;i++)
{
scanf("%f",p+i);
sum+=*(p+i);
if(min>*(p+i))
min=*(p+i);
if(max<*(p+i))
max=*(p+i);
}
avg=sum/n;
printf("average = %.2f\nmax = %.2f\nmin = %.2f",avg,max,min);
free(p);
return 0;
}
2).设计思路
3).本题调试过程碰到问题及解决办法
问题:指针运用还是不够熟练,有时候会搞错
解决方法:看C语言程序设计ii ,看例题
4).运行结果截图
题目4:
1).实验代码
#include<stdio.h>
#include<string.h>
int main(){
int i,j;
char s[5][80],a[80];
for(i=0;i<5;i++)
scanf("%s",s[i]);
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(strcmp(s[j],s[j+1])>0 )
{
strcpy(a,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],a);
}
printf("After sorted:\n");
for(i=0;i<5;i++)
printf("%s\n",s[i]);
return 0;
}
2).设计思路
3).本题调试过程碰到问题及解决办法
问题1:strcmp(s[j],s[j+1])>0
解决方法:刚开始不明白,后来仔细看书上的解释才明白是计算ASCII码的大小的。
4).运行结果截图
题目5: 计算平均成绩
1).实验代码
#include<stdio.h>
#include<string.h>
struct student{ /*学生信息结构定义*/
int num;
char id[10];
char name[10];
float cj;
};
int main()
{
struct student s[10];
int i,N;
float sum = 0,ave;
scanf("%d",&N);
for(i=0; i<N; i++ )
{
scanf("%s%s%f",&s[i].id,&s[i].name,&s[i].cj);
sum += s[i].cj;
}
ave = sum/N;
printf("%.2f\n",ave);
for(i=0; i<N; i++)
{
if(s[i].cj < ave)
printf("%s %s\n",s[i].name,s[i].id);
}
return 0;
}
2).设计思路
3).本题调试过程碰到问题及解决办法
问题:结构的具体使用方法
解决方法:预习书上的列题
4).运行结果截图
二、学习进度条
三、学习进度统计和学习感悟
学习感悟:题目难度适中,对我来说是一个很好的跷板,对自己知识的掌握程度愈来愈熟练!
四、结对编程
结对编程搭档很给力,我们互相讨论了许多问题,有许多新的收获。