第二次作业
6-7 删除字符串中数字字符
1.设计思路:
ij初始化,遍历数组s[i],若是数字则覆盖它,最后的元素设为\0
源代码:void delnum(char *s) { int i,j; for(i=0,j=0;s[i]!='\0' ;i++) if(s[i]<'0' || s[i]>'9') { s[j]=s[i]; j++; } s[j]='\0'; }
流程图:
6-8 统计子串在母串出现的次数
1.设计思路:
初始化ij,for循环比较且满足str[i]substr[0]&&str[i+1]substr[1]&&str[i+2]==substr[2],一次次比较数组中所对应的字符,若是,计数器counter加一,返回counter到主函数
源代码:
{
int counter=0;
for(int i=0;str[i+1]!='\0';i++)
{
if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
counter++;
}
return counter;
}```
流程图:![](https://images2018.cnblogs.com/blog/1345909/201804/1345909-20180408233415544-865114996.png)
6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路
找到首尾两个元素,对中间的降序排列(交换数值)
源代码:
```{
int i,k,j;
char t;
for(i=1;i<num-1;i++)
{
for(j=i+1;j<num-1;j++)
if(s[k]<s[j])
k=j;
t=s[k];
s[k]=s[i];
s[i]=t;
}
}```
流程图:![](https://images2018.cnblogs.com/blog/1345909/201804/1345909-20180408233756551-266326672.png)
7-1 计算职工工资
1.设计思路:
1.定义变量N,i;
2.输入一个数赋值给N;
3.使用循环给名字,基本工资,浮动工资,支出,赋值;
4.使用循环输出姓名 工资;
源代码:```#include <stdio.h>
#include <stdlib.h>
struct money{
char name[10];
float base_pay;
float floating_wage;
float expend;a
float net_payroll;
};
int main()
{
int N,i;
scanf("%d",&N);
struct money salary[N];
for(i=0;i<N;i++){
scanf("%s %f %f %f",salary[i].name,&salary[i].base_pay,&salary[i].floating_wage,&salary[i].expend);
salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend;
}
for(i=0;i<N;i++){
printf("%s %.2f\n",salary[i].name,salary[i].net_payroll);
}
return 0;
}```
7-2 计算平均成绩
1.设计思路:
1.定义变量i,N,average,sum;
2.输入一个数给N;
3.使用循环将名字,学号,成绩分别赋值;
4.sum=sum+grade;
5.average=sum*1.0;
6.使用循环输出姓名和学号;
源代码:
```#include <stdio.h>
#include <stdlib.h>
struct information{
char num[6];
char name[11];
int grade;
};
int main()
{
int i,N;
float average=0;
int sum=0;
scanf("%d",&N);
struct information massage[N];
if(N>0&&N<=10){
for(i=0;i<N;i++){
scanf("%s %s %d",massage[i].num,massage[i].name,&massage[i].grade);
sum=sum+massage[i].grade;
}
average=sum*1.0/N;
printf("%.2f\n",average);
for(i=0;i<N;i++){
if(average>massage[i].grade){
printf("%s %s\n",massage[i].name,massage[i].num);
}
}
}
return 0;
}```
6-1 按等级统计学生成绩
1.设计思路:
1.定义整形变量i,count;
2.使用循环令i=0,i<n,i++,p++;
3.判断score大于等于0且score小于等于59;
4.p指向grade=D,count++;
5.再判断score大于等于70且score小于等于84;
6.grade=B;
7.score大于等于85且score小于等于100;
8.grade=A
9.score大于等于60且score小于等于69;
10.grade=C;
返回给count;
源代码:```int set_grade( struct student *p, int n )
{
int i=0;
int count = 0;
for(i=0; i<n; i++,p++)
{
if(p->score>=0 && p->score<=59)
{
p->grade = 'D';
count ++;
}
else if(p->score>=85 && p->score<=100)
p->grade = 'A';
else if(p->score>=70 && p->score<=84)
p->grade = 'B';
else if(p->score>=60 && p->score<=69)
p->grade = 'C';
}
return count;
}```
错误:将return count 放在for循环中,
改正;放在外面。
![](https://images2018.cnblogs.com/blog/1345909/201804/1345909-20180408234549144-2139269484.png)
6-2 结构体数组按总分排序
1.设计思路:
第一个函数:
1.定义整形变量i;
2.使用循环令i=0,i<n,i++,p++;
3.psum=pscore[0]+pscore[1]+pscre[2];
第二个函数:
1.定义结构体变量temp;
2.定义整形变量i,t,j;
3。使用循环i=0,i<n-1,i++;
4.将i赋值给t;
5.使用循环令j=i,i<n-1,j++;
6.判断p+tsum小于p+jsum,j赋值给t;
7判断如果t不等于i,temp=*(p+i);*(p+i)=*(p+t);*(p+t)=temp;
源代码:```void calc(struct student *p,int n)
{
int i=0;
for(i=0;i<n;i++,p++)
{
p->sum=p->score[0]+p->score[1]+p->score[2];
}
}
void sort(struct student *p,int n)
{
struct student temp;
int i=0,t,j=0;
for(i=0;i<n-1;i++)
{
t=i;
for(j=i;j<n;j++)
{
if((p+t)->sum<(p+j)->sum){
t=j;
}
}
if(t!=i)
{
temp=*(p+i);*(p+i)=*(p+t);*(p+t)=temp;
}
}
}```
错误:忘记定义临时变量;
![](https://images2018.cnblogs.com/blog/1345909/201804/1345909-20180408234628089-1858739540.png)
总结:学习了结构体,了解了更深的c语言。