第二次作业

PTA第二次作业
C高级第二次作业(1)
第一题:删除字符串中数字字符
1 设计思路
(1)主要描述题目算法
第一步:读清题目,看清楚要求
第二步:看出函数中的实参和形参
第三步:定义一个指针变量p,对s中的字符进行遍历。
第四步:若s[]中的字符不在‘0’到‘9’中,则将字符储存在p[]中。

(2)流程图

(3)代码

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

(4)本题调试过程碰到问题及解决办法

无错误

第二题:统计子串在母串出现的次数

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义
第二步:找到对应函数中的实参和形参并写出函数接口。
第三步:遍历一次母串,把母串的遍历的每一个字符都与子串的第一个字符比较,假如一样的话这时候母串和字串开始同时遍历。
第四步:当字符串遍历到‘0'的时候,进行num++;

(2)流程图

(3)代码

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



(4)本题调试过程碰到问题及解决办法
答案错误
原因是字符串结束时需要加上'\0'

**第三题:字符串中除首尾字符外的其余字符按降序排列 **

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义。

第二步:找到字符串中首尾字符串的位置

第三步:然后把中间的字符降序排列

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

(3)本题调试过程碰到问题及解决办法
循环时条件设定错误
把num-1改成num-2

第四题:输出学生成绩

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义。

第二步:先定义数组和浮点型的sum,average,max,min

第三步:然后使用for循环算出sum然后输出average,最后找出max,min

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



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

C高级第二次作业(2)
第一题:计算职工工资

(1). 主要描述题目算法

第一步:定义结构体salary,里面的元素分别为real name basic change disbursement real
第二步:然后把定义结构体a[n]使用for循环输入
第三步:用for循环计算并输出代码

#include <stdio.h>
#include <stdlib.h>
struct wage{
	char name[10];
	float base_pay;
	float floating_wage;
	float expend;
	float net_payroll;
}; 
int main()
{
	int N,i;
	scanf("%d",&N);
	struct wage 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*1.0;
	}
	for(i=0;i<N;i++){
		printf("%s %.2f\n",salary[i].name,salary[i].net_payroll);
	}
	return 0;
}

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

第二题:计算平均成绩

(1). 主要描述题目算法

第一步:阅读题目并了解函数及其定义。

第二步:找到对应函数中的实参和形参。

第三步:

(2)流程图

(3)代码

#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;
}

(4)本题调试过程碰到问题及解决办法

C高级第二次作业(3)
第一题:按等级统计学生成绩

(1). 主要描述题目算法

第一步:阅读题目并了解调用函数函数及其定义。

第二步:把count,i初始为0

第三步:然后设置分数在85-100之内为A,70-84之内为B,60-69之内为C,0-59之内为D。

(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;
 } 

(4)本题调试过程碰到问题及解决办法

a,b,c,d缺少单引号加上单引号

第二题:结构体数组按总分排序

(1). 主要描述题目算法

第一步:定义一个函数,然后求出三个成绩的和。
第二步:定义一个结构t
第三步:用选择排序比出相邻两个数的大小然后调换位置,用函数t执行

(2)代码

void calc(struct student *p,int n)
{
    int i;
    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;
    struct student t;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            if(p[j].sum<p[j+1].sum)
            {
                t=p[j];
                p[j]=p[j+1];
                p[j+1]=t;
            }
        }
    }
}

(3)本题调试过程碰到问题及解决办法
循环时条件设置错误
j<n-1等于j<=n

学习进度和总结
1、最近学习的字符串和指针没弄太懂,

posted @ 2018-03-28 22:36  马卿辉  阅读(147)  评论(4编辑  收藏  举报