题目6-7删除字符串中数字字符
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义调用函数delnum,定义整形变量i,j
第三步:定义指针s,通过s,在函数for和函数if中的应用
第四步:通过(s+j)=‘\\0’,返回值
(2)流程图
2.实验代码
{
int i,j=0;
for(i=0;*(s+i)!=\'\\0\';i++)
{
if(*(s+i)>=\'0\'&&*(s+i)<=\'9\')
{
}else
{
*(s+j)=*(s+i);
j++;
}
}
*(s+j)=\'\\0\';
}```
3.调试过程碰到问题及解决办法
错误信息1:*s出错
错误原因:调用函数指针使用出错
改正方法:多次编译
错误信息2:‘\\0’
错误原因:*(s+j)=\'\\0\',\'\\0\'没加‘’
改正方法:观看错误提示后改正
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234902994-1868603066.png)
题目6-8统计子串在母串出现的次数
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义函数fun(),在fun()中*star,*substr,i,count
第三步:使用for函数和函数if,在*(str+i)!=\'\\0\'的范围内,如果*(str+i)==*(substr),*(str+i+1)==*(substr+1),*(str+i+2)==*(substr+2),所以count++
第四步:回归count
(2)流程图
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083156288-998874975.png)
2.实验代码
```int fun(char *str,char *substr)
{
int i,count=0;
for(i=0;*(str+i)!=\'\\0\';i++)
{
if(*(str+i)==*(substr))
{
if(*(str+i+1)==*(substr+1))
{
if(*(str+i+2)==*(substr+2))
{
count++;
}
}
}
}
return count;
}```
3.调试过程碰到问题及解决办法
错误信息1:count出错
错误原因:count返回的值出错,编译出现问题
改正方法:将{}括号重新梳理对齐,编译成功
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234936669-2056473653.png)
题目6-9字符串中除首尾字符外的其余字符按降序排列
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义调用函数fun(),定义*s,整形变量sum,I,j,k,temp
第三步:在for循环中,在i<num-2范围内循环j<num-1,int)(*(s+k))<(int)(*(s+j))得k=j,如果k!=i,则temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp来互换改变顺序
第四步:输出排列好的字符串
(2)流程图
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083223939-199648699.png)
2.实验代码
```int fun(char *s,int num)
{
int i,j,k,temp;
for(i=1;i<num-2;i++)
{
k=i;
for(j=i+1;j<num-1;j++)
{
if((int)(*(s+k))<(int)(*(s+j)))
{
k=j;
}
}
if(k!=i)
{
temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;
}
}
return 0;
}```
3.调试过程碰到问题及解决办法
错误信息1:代码错误
错误原因:排序的代码打印错误
改正方法:temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp,深刻理解排序代码后,改正
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234948568-847437345.png)
题目7-1输出学生成绩
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义整形变量i,n,定义单精度浮点型变量sum=0,average,max,min,输入n,对*p使用malloc函数
第三步:使用for函数,输入n个数据,得到sum,使用for与if函数找出最大数据和最小数据
第四步:输出平均值,最高成绩,最低成绩
(2)流程图
2.实验代码
```#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,n;
float sum=0,average,max,min;
scanf("%d",&n);
float *p=(float *)malloc(n);
for(i=0;i<n;i++)
{
scanf("%f",(p+i));
sum+=*(p+i);
}
min=*(p+0);max=*(p+0);
for(i=0;i<n;i++)
{
if(min>*(p+i))
{
min=*(p+i);
}
if(max<*(p+i))
{
max=*(p+i);
}
}
printf("average = %.2f\\n",sum/n*1.0);
printf("max = %.2f\\n",max);
printf("min = %.2f\\n",min);
return 0;
}```
3.调试过程碰到问题及解决办法
错误信息1:无
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234959353-1112028153.png)
题目7-1计算职工工资
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义一个结构体变量wage,在其中定义name,actual_wage,basic_wage,floating_wage,expenditure,
第三步:在主函数中定义整形变量N,i,利用for函数,引用结构体,计算
第四步:输出
(2)流程图
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083352746-442209476.png)
2.实验代码
```#include<stdio.h>
#include<stdlib.h>
struct wage
{
int num;
char name[10];
float actual_wage;
float basic_wage;
float floating_wage;
float expenditure;
};
int main()
{
int N,i;
scanf("%d",&N);
struct wage wage[N];
for(i=0;i<N;i++)
{
scanf("%s %f %f %f",wage[i].name,&wage[i].basic_wage,&wage[i].floating_wage,&wage[i].expenditure);
wage[i].actual_wage=wage[i].basic_wage+wage[i].floating_wage-wage[i].expenditure*1.0;
}
for(i=0;i<N;i++)
{
printf("%s %.2f\\n",wage[i].name,wage[i].actual_wage);
}
return 0;
}```
3.调试过程碰到问题及解决办法
错误信息1:for函数
错误原因:for(i=1;i<=N;i++)
改正方法:for(i=0;i<N;i++)
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408235008808-928874077.png)
题目7-2 计算平均成绩
1.设计思路
(1)本次题目的算法
第一步:阅读题目 理解主函数与函数声明
第二步:定义一个结构体变量student,在其中定义student_id,name,grade
第三步:在主函数中定义整形变量N,i,sum,浮点型变量average,多次利用for和if函数,引用结构体student,计算
第四步:输出
(2)流程图
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083434681-1233859386.png)
2.实验代码
```#include<stdio.h>
#include<stdlib.h>
struct student
{
int num;
char student_id[6];
char name[11];
int grade;
};
int main()
{
int N,i,sum=0;
float average=0;
scanf("%d",&N);
struct student student[N];
if(N>0&&N<=10)
{
for(i=0;i<N;i++)
{
scanf("%s %s %d",student[i].student_id,student[i].name,&student[i].grade);
sum=sum+student[i].grade;
}
average=sum*1.0/N;
printf("%.2f\\n",average);
for(i=0;i<N;i++)
{
if(average>student[i].grade)
{
printf("%s %s\\n",student[i].name,student[i].student_id);
}
}
}
return 0;
}```
3.调试过程碰到问题及解决办法
错误信息1:数组
错误原因:student_id[5],name[10]
改正方法:student_id[6],name[11]
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408235018093-1985472171.png)
学习总结和进度
1.学会的知识点
指针和排序方法
for函数的使用
结构体的应用
2.未完全掌握的知识点
结构体的使用还是不太明确
3.学习进度表格和折线图
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180409001239331-65015124.png)
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180409001245376-683786166.png)