第二次作业
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、最近学习的字符串和指针没弄太懂,