第二次作业

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

(1)算法

定义字符数组item,输入字符串给字符数组item。调用delnum函数,在delnum函数中定义循环变量i和j,使i和j等于0,用for循环表达式(s+i)!='\0',若(s+i)不是数字那就执行(s+j)=(s+i)j++,否则都不执行,最后i++,*(s+j)='\0'最后输出字符串item。

(2)流程图:

实验代码:

[复制代码](javascript:void(0)😉

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

[复制代码](javascript:void(0)😉

碰到问题及解决办法:

错误:编译出错

原因:if语句判断条件中字符没有加单引号

改正:数字字符一定要加单引号。

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

(1)算法:

定义字符数组str[81]=asdasasdfgasdaszx67asdmklo,substr[4]=asd,定义整型n的值为函数fun,在fun函数中定义变量i和count,领i和count等于零,for循环判断条件(str+i)!='\0',如果(str+i)*(substr)成立,而且(str+i+1)(substr+1),(str+i+2)==*(substr+2)都成立,count++;否则都不执行,i++输出n;

实验代码:

[复制代码](javascript:void(0)😉

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

[复制代码](javascript:void(0)😉

3.没有问题:

img

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

(1)算法:

定义字符数组s[10],输入字符串给s[10],调用fun函数,在fun函数中对数组除了首尾元素外进行选择排序,并且从大到小排序,输出s字符串,

实验代码:

[复制代码](javascript:void(0)😉

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

[复制代码](javascript:void(0)😉

3.3.没碰到问题:

img

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

7-1 计算职工工资

(1)算法:

定义结构变量,结构体名为wage,结构体中成员为指针数组name[10]和浮点型数字base_pay,floating_wage,expend,net_payroll,主函数中定义整型变量N,i,读入一个数字给N。声明结构体变量名,结构体变量名是salary[N];领i=0,用for循环对结构体变量进行赋值,并求出结构体变量中的salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend领i=0,用for循环输出每一位职员姓名和实发工资并且输出salary[i].name,salary[i].net_payroll。

(2)流程图

2.实验代码:

[复制代码](javascript:void(0)😉


#include <stdio.h>
struct salary{
	char name[10];
	float basic;
	float change;
	float disbursement;
	float real;
};
int main()
{
	int n,i;
	scanf("%d",&n);
	struct salary a[n];
	for(i=0;i<n;i++){
		scanf("%s %f %f %f",a[i].name,&a[i].basic,&a[i].change,&a[i].disbursement);
	}
	for(i=0;i<n;i++){
		a[i].real = a[i].basic + a[i].change - a[i].disbursement; 
	}
for(i=0;i<n;i++){
printf("%s %.2f\n",a[i].name,a[i].real);}
}

[复制代码](javascript:void(0)😉

3.碰到问题及解决办法:

错误:img

原因:循环变量i的初值为1,条件为i<=N;使结构体变量数组越界

改正方法:i的初值为0,条件为i<N;

img

7-2 计算平均成绩

(1)算法:

定义体结构体名称information,在结构体变量中有字符数组num[6]和name[11],还有整型变量grade,主函数定义变量i和n,定义浮点型数average,整型数sum,average和sum初始值为0,读入一个给n。声明结构体变量名为数组information massage[n]。领i=0,用for循环条件为i<n,对结构体变量名information massage[i]赋值。求sum=sum+massage[i].grade,求average=um*1.0/n,最后输出average。领i=0,用for循环,判断条件是i<n,最后输出

2.实验代码:

[复制代码](javascript:void(0)😉

#include <stdio.h>
struct student{
	 char num[6];
	 char name[11];
	 int grade;
};
int main(){
	int n, i,sum=0;
	float average;
	scanf("%d",&n);
	struct student a[n];
	for(i=0;i<n;i++){
		scanf("%s %s %d",a[i].num,a[i].name,&a[i].grade);
	}
	for(i=0;i<n;i++){
		sum+=a[i].grade;
		}
		average = sum/n;
		printf("%.2f\n",average);
	for(i=0;i<n;i++){
		if(a[i].grade<average){
			printf("%s %s\n",a[i].name,a[i].num);
		}
	}
}

[复制代码](javascript:void(0)😉

没有错误

img

C高级PTA作业(3)

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

(1)算法:

定义结构体类型变量,名为student的结构体,结构体中包括整型num,字符数组name[20],字符型grade,整型score。定义结构体变量名是stu[10],*ptr。定义整型n,i,count,ptr=stu,读入一个数赋给n。另i=0,借助for循环对stu[i]进行赋值,条件是i<n。调用函数set_grade,将函数返回值赋给count。

在set_grade函数中,定义变量i,q,i,另q和i等于零,借助for循环p->score是否< 60,成立q++,否则都不执行,for循环判断p->score是什么等级,将等级赋给p->grade,返回q值,输出分数小于六十的人个数,输出每个人的学号,姓名和等级。

2实验代码:

[复制代码](javascript:void(0)😉

 int set_grade( struct student *p, int n )
{
    int cnt=0,i;
    for(i=0;i<n;i++,p++)
    {
        if((p->score)>=85)
        {
            p->grade='A';
        }
        if((p->score)<85&&(p->score)>=70)
        {
            p->grade='B';
        }
        if((p->score)<=69&&(p->score)>=60)
        {
            p->grade='C';

        }
        if((p->score)<60)
        {
            p->grade='D';
            cnt++;
        }
    }
    return cnt;
}

[复制代码](javascript:void(0)😉

3.没有碰到问题:

img

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

(1)算法:

定义结构体变量,名为的student结构体,结构体包括整型num,,浮点型数组score[3],字符数组name[15],,浮点型sum。在主函数上定义结构体变量stu[5],整型变量i,j,浮点型数字f,另i=0,借助for循环给结构体变量stu[5]赋值,调用函数calc,在函数calc中定义整型i=0,借助for循环求(p+i)->sum值,(p+i)->sum=(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2],调用函数sort,在sort函数中定义整型i,t,j,定义结构体变量temp,用选择排序法按总分从高到低进行排序,输出所有成员的学号,姓名,各科的分数,总分。

2.实验代码:

[复制代码](javascript:void(0)😉

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

}

[复制代码](javascript:void(0)😉

3.碰到问题及解决办法:

1,停止运行

原因:在交换的时候由于马虎将代码打错了

img

修改方法:将temp=(p+i);(p+i)=(p+j);(p+j)=temp;改成temp=(p+i);(p+i)=(p+t);(p+t)=temp;

img

posted @ 2018-04-07 22:23  刘传海  阅读(209)  评论(3编辑  收藏  举报