第二次作业

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语言。
posted @ 2018-04-08 23:47  李春杨  阅读(151)  评论(0编辑  收藏  举报