第二次作业

C高级第二次PTA作业(1)

6-7 删除字符串中数字字符

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:遍历数组中的所有元素。

第四步:找到数组中小于0或大于9的元素,并重新输入到数组中。并将最后的元素定义为\0。

(2)流程图

2.实验代码

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

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

错误原因:

改正方法:将 j 初始化为0,将&&改为||,将数组中最后的元素定义为'\0'。

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

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:找到调用函数。

第三步:定义count,初始化为0.

第四步:遍历数组中的元素,将数组中元素与另一个字符串一一对比,如果相同,则count加1。

第五步:返回count。

(2)流程图

2.实验代码

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

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


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

1.设计思路

(1)描述算法

      第一步:阅读题目,明确目的。

      第二步:找到调用函数。

      第三步:遍历数组中从第二个至倒数第二个元素。

      第四步:将后一个元素与前一个元素比较,如果后一个大于前一个,则交换这两个元素。

2.实验代码

int fun(char *s,int num)
 {

 	
 	int i,n,j;
   for(i=1;i<num-1;i++)
   {
   	for(n=1;n<i;n++)
   	{
   		if(*(s+i)>*(s+n))
   		{
   			j=*(s+i);*(s+i)=*(s+n);*(s+n)=j;
		   }
	   }
   }	
 }

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

错误原因:

改正方法:将n<num-1改为n<i, 将i=0改为i=1。

7-1 输出学生成绩

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:定义sum=0,average=0,max,min;。

第三步:输入学生个数,利用for循环记录成绩,并算出总合。

第四步:将a[0]赋给max,min。

第五步:遍历数组中元素,并与max和min比较。如果max<a[i],则将a[i]赋给max;如果a[i]<min,则将a[i]赋给min。

第六步:计算平均数。

第七部:输出平均数,最高成绩,最低成绩。

2.实验代码

#include <stdio.h>
int main()
{
  int N,i;
  float sum=0,average=0,max,min;
  scanf("%d",&N);
  int  a[N];
  for(i=0;i<N;i++)
  {
    scanf("%d",&a[i]);
    sum=sum+a[i];
  }
   max=a[0],min=a[0];
  for(i=0;i<N;i++)
  {
    if(max<a[i])
    max=a[i];
  
    if(min>a[i])
    min=a[i];
  }
  average=sum/N;
  printf("average = %.2f\nmax = %.2f\nmin = %.2f\n",average,max,min);
  return 0;
}

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

错误原因:

改正方法:将sum,average由int类型改为float类,将average初始化为0,在%.2f后加\n换行。

C高级第二次PTA作业(2)

7-1 计算职工工资

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:定义结构体变量

第三步:输入信息,利用for循环记录。

第四步:利用for循环计算实资。

第五步:利用for循环输出名字和实资。

(2)流程图

2.实验代码

#include<stdio.h>
#include<stdlib.h>
struct xinxi
{
	char name[10];
	float jizi;
	float fuzi;
	float zhichu;
	float shizi;
};
int main()
{
	int N,i;
	scanf("%d",&N);
	struct xinxi a[N];
	for(i=0;i<N;i++)
	{
		scanf("%s%f%f%f",a[i].name,&a[i].jizi,&a[i].fuzi,&a[i].zhichu);
	
	}
	for(i=0;i<N;i++)
	{
			a[i].shizi=a[i].jizi+a[i].fuzi-a[i].zhichu;
	}
	for(i=0;i<N;i++)
	{
	printf("%s %.2f\n",a[i].name,a[i].shizi);
   }
	system("pause");
	return 0;
 } 

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

错误原因:

改正方法:删去a[i].name,前的&,将shizi由int类型改为float类型。

7-2 计算平均成绩

1.设计思路

(1)描述算法

第一步:阅读题目,明确目的。

第二步:定义结构体变量。定义sum,average,N,i.sum=0。

第三步:将元素输入至结构变量。

第四步:计算平均成绩。

第五步:遍历结构变量中的成绩,并与平均成绩比较。如果成绩小于平均成绩,则输出信息。

2.实验代码

#include<stdio.h>
#include<stdlib.h>
struct students
{
	char xuhao[6];
	char name[11];
	int chengji;
};

int main()
{
	int N,i;
	int sum;
	sum=0;
	float average;
	scanf("%d",&N);
	struct students s[N];
	for(i=0;i<N;i++){
		scanf("%s %s %d",s[i].xuhao,s[i].name,&s[i].chengji);
	}
	for(i=0;i<N;i++)
	{
		sum=sum+s[i].chengji;
	}
	average=sum/N;
	printf("%.2f\n",average);
	for(i=0;i<N;i++)
	{
		if(s[i].chengji<average)
		{
			printf("%s %s\n",s[i].name,s[i].xuhao);
		}
	}
	system("pause");
	return 0;
}

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

错误原因:

改正方法:将 printf("%.2f\n",average);放到for循环之上。

C高级第二次作业(3)

6-1 按等级统计学生成绩

1.设计思路

(1)描述算法

      第一步:阅读题目,明确目的。

      第二步:找到调用函数。

      第三步:定义count,i,并初始化为0;

      第四步:遍历数组中所有元素。

      第五步:如果分数在85-100为A,70-84为B,60-69为C,0-59为D。

      第六步:返回count。

(2)流程图

2.实验代码

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

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

错误原因:

改正方法:ABCD分别加上单引号。

                for循环后加return。

6-2 结构体数组按总分排序

1.设计思路

(1)描述算法

      第一步:阅读题目,明确目的。

      第二步:找到调用函数。

      第三步:遍历数组中所有元素,计算总成绩。

      第四步:利用for循环,用冒泡排序法按从大到小排列。

2.实验代码

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

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

错误原因:

改正方法:j<n-1改为 j<n-1-i。

学习总结和进度

1.知识总结

最近两周学习了结构体变量的定义和引用,目前对结构体变量的应用掌握的还算可以。

代码托管

点评

李春杨
李洪海
林昊

图表

posted @ 2018-04-03 23:53  2班-陆文奇  阅读(167)  评论(4编辑  收藏  举报