2018上C语言程序设计(高级)作业- 第2次作业

第二次作业

2-1 删除字符串中数字字符

1.设计思路

第一步:遍历指针s所指的s数组。
第二步:把不在0到9之间的s[i]赋予s[j++]。
第三步:把'/0'赋给字符串最后一项。

2.实验代码

void delnum(char *s)
{
  int i = 0,j = 0;
  for(i = 0;s[i] != '';i++)
  {
    if(s[i]>'9'||s[i]<'0')
    {
      *(s+j++) = *(s+i);
    }
  }
  *(s+j) = '';
}

3.本题调试过程碰到问题及解决办法

2-2 统计子串在母串出现的次数

1.设计思路

第一步:遍历数组,定义n=0。
第二步:如果str[i]中连续三个字符分别与substr[]中三个字符串相等,则n++。
第三步:返回n。

2.实验代码

int fun(char *str,char *substr)
{
  int i,n = 0;
  for(i = 0;str[i]!= '';i++)
  {
    if(str[i] == substr[0]&&str[i+1] == substr[1]&&str[i+2] == substr[2])
    {
      n++;
    }
  }
  return n;
}

3.本题调试过程碰到问题及解决办法

2-3字符串中除首尾字符外的其余字符按降序排列

1.设计思路

第一步:遍历数组,去掉首尾两项。
第二步:把中间的字符进行排序。

2.实验代码

int fun(char *s,int num)
{
  char t;
  int i,j;
  for(i=1;i<num-2;i++)
  {
    for(j=i+1;j<num-1;j++)
    {
      if(s[i]<s[j])
      {
	      t=s[i];
        s[i]=s[j];
        s[j]=t;
	    }
    }
	}
}

3.本题调试过程碰到问题及解决办法

2-4输出学生成绩

1.设计思路

第一步:输入数字个数n。
第二步:建立for语句输入数据,计算和。
第三步:遍历所有数据,并在其中用两个if语句判断出最大值和最小值并记录,计算平均值。
第四步:输出最大最小值和平均数。

2.实验代码

#include<stdio.h>
float max_a(float x,float y);
float min_a(float x,float y);
int main()
{
	int N,flag=1,D;
	float average,max,min,sum=0.0;
	scanf("%d",&N);
	int i=0;
	for(;i<N;i++){
		scanf("%d",&D);
		sum=sum+D;
	if (flag==1)
   { 
    max=D;
    min=D;
    flag--;
   }
    max=max_a(max,D);
    min=min_a(min,D);
   }
    average=sum/N;
    printf("average = %.2f
max = %.2f
min = %.2f",average,max,min);
    
}

float max_a(float x,float y)
{
 float z;
 if(x>y)
 z=x;
 else
 z=y;
 return(z);
}
float min_a(float x,float y)
{
 float z;
 if(x<y)
 z=x;
 else
 z=y;
 return(z);
}

3.本题调试过程碰到问题及解决办法

2-5计算职工工资

1.设计思路

第一步:定义职工的名字,基本工资,浮动工资和支出工资。
第二步:建立for语句计算出所对于的实际工资并输出。

2.实验代码

#include<stdio.h>
struct
{
	char name[10];
	double a;
	double b;
	double c;
}p; 
int main()
{
	int N,i;
	float d;
	scanf("%d",&N);
	for(i = 0;i<N;i++)
	{
		scanf("%s %lf %lf %lf",&p.name,&p.a,&p.b,&p.c);
		d = (p.a + p.b - p.c)*1.00;
		printf("%s %.2f
",p.name,d);
	}
	return 0;
}

3.本题调试过程碰到问题及解决办法

2-6计算平均成绩

1.设计思路

第一步:定义学生的学号姓名成绩。
第二步:输入学生个数N。
第三步:把每个学生的成绩进行求和操作。
第四步:求出平均值。
第五步:进行遍历操作,找出在平均值以下的学生,输出。

2.实验代码

#include <stdio.h>
struct information{
    char num[5];
    char name[10];
    int grade;
}p; 
int main()
{
    int i,N,sum=0;
    float average=0;
    scanf("%d",&N);
    if(N>0&&N<=10){
    for(i=0;i<N;i++){
        scanf("%s %s %d",&p.num,&p.name,&p.grade);
        sum=sum+p.grade;
    }
    average=sum*1.0/N;
    printf("%.2f
",average);
    for(i=0;i<N;i++){
        if(average>p.grade){
            printf("%s %s
",p.name,p.num);
        }
    }
    }
    return 0;
}

3.本题调试过程碰到问题及解决办法

2-7按等级统计学生成绩

1.设计思路

第一步:建立for语句把每个人的分数所对应的等级赋给等级数组。
第二步:在不及格的if语句里计数。
第三步:输出。

2.实验代码

int set_grade( struct student *p, int n )
{
	int i=0,j=0,count=0;
	for(i=0;i<n;i++){
	if (p[i].score<=100&&p[i].score>=85){
		p[i].grade='A';
	}
	if (p[i].score<=84&&p[i].score>=70){
		p[i].grade='B';
    }
	if (p[i].score<=69&&p[i].score>=60){
		p[i].grade='C';
    }
	if (p[i].score<=59&&p[i].score>=0){
		p[i].grade='D';
		count++;
    }	
  }
	return count;
}

3.本题调试过程碰到问题及解决办法

2-8

1.设计思路

第一步:在定义的第一个函数里进行定义循环变量k,之后通过遍历数组来计算出总分;
第二步:根据总成绩进行排名。

2.实验代码

void calc(struct student *p,int n)
{
    int k=0;
    for(k=0;k<n;k++)
    {
        (p+k)->sum=(p+k)->score[0]+(p+k)->score[1]+(p+k)->score[2];
    }   
}
void sort(struct student *p,int n)
{
    int k=0,l=0;
    struct student swap;
    for(k=0;k<n;k++)
    {
        for(l=k+1;l<n;l++)
        {
            if(p[k].sum<p[l].sum)
            {
                swap=p[k];p[k]=p[l];p[l]=swap;
            }
        }
    }
    
}

3.本题调试过程碰到问题及解决办法

1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?

这两周我学习了关于字符串的应用,进行了指针方面的练习,还学了有关结构的定义。这两周的课上知识点自己感觉学的还可以,但有的时候还是不太会,我会在接下来的学习生活中多多努力的。

2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。

git地址
上传截图:

3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业。

http://www.cnblogs.com/kimhae/p/8659720.html
http://www.cnblogs.com/jz19990201/p/8747094.html
http://www.cnblogs.com/572453251asd/p/8746822.html

原文地址:https://www.cnblogs.com/hgr123/p/8747239.html