第2次作业
作业要求一
提交记录
1)C高级第二次PTA作业(1)
2)C高级第二次PTA作业(2)
3)C高级第二次PTA作业(3)
作业要求二
1)C高级第二次PTA作业(1)
6-7 删除字符串中数字字符
1.设计思路:
主要描述题目算法:
第一步:调用函数
第二步:定义两个变量构成两个字符串
第三步:利用循环判断该删除字节
第四步:该删除字节利用另一个字符串的下一个补上
第五步:返回主函数
2.实验代码:
`void delnum(char *s){
int i,j=0;
for(i=0;*(s+i)!='\0';i++)
{
if(*(s+i)<'0'||*(s+i)>'9')
{
*(s+j)=*(s+i);
j++;
}
}*(s+j)='\0';
return *(s+j);
}`
6-8 统计子串在母串出现的次数
1.设计思路:
主要描述题目算法:
第一步:调用函数
第二步:利用第一个循环实现字符串挨个查询
第三步:利用第二个循环确定是否有相同的字符
第四步:n返回主函数
2.实验代码:
`int fun(char *str,char *substr)
{
int i,j=0,n=0,a;
for(i=0;*(str+i)!='\0';i++)
{
for (a=0;a<3;a++)
{
if*(str+i+a)==*(substr+j+a);
else break;
}
n++;
}return n;
}`
6-9 字符串中除首尾字符外的其余字符按降序排列
1.设计思路:
主要描述题目算法:
第一步:调用主函数
第二步:第一个循环确定字符串挨个字符查询
第三步:利用判断排除第一个和最后一个
第四步:利用循环进行降序排列
第五步:返回主函数
2.实验代码:
`int fun(char *s,int num)
{
int i,j;
for(i=0;i<num-1;i++)
{
if(i!=0||i!=num-2)
{
for(i=1;*(s+i)!='\0';i++)
{
for(j = i+1;j < num-1;j++)
{
if(*(s+i)<*(s+j))
{
int temp;
temp = *(s+i);
*(s+i) = *(s+j);
*(s+j) = temp;
}
}
}
}
}return *(s+i);
}`
7-1 输出学生成绩
1.设计思路:
主要描述题目算法:
第一步:创立动态内存定义平均成绩、最高成绩和最低成绩
第二步:输入学生的成绩
第三步:找出最低成绩最高成绩并求出成绩之和
第四步:利用成绩之和求出平均成绩
第五步:输出平均成绩、最高成绩和最低成绩并清除动态内存
2.实验代码:
`#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int sum=0,*p,i,N;
double max,min;
double average;
scanf("%d",&N);
if((p=(int*)calloc(N,sizeof(int))) == NULL){
printf("Not able to allocate memory.\n");
exit(1);
}
for(i=0;i<N;i++){
scanf("%d",&*(p+i));
}
min = *p,max=*p;
for(i=0;i<N;i++){
sum = sum + *(p+i);
if(*(p+i)>max){
max = *(p+i);
}
if(*(p+i)<min){
min = *(p+i);
}
}
average = (double)sum / (double)N;
printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min);
free(p);
return 0;`
3.流程图:
错误信息
错误原因:第一次把`average = (double)sum / (double)N;`放在了` sum = sum + *(p+i);`下面,导致求了多个平均值。
2)C高级第二次PTA作业(2)
7-1 计算职工工资
1.设计思路:
主要描述题目算法:
第一步:建立结构包括姓名、基本工资、浮动工资、支出、实发工资
第二步:输入一共有几个职员
第三步:利用循环输入姓名、基本工资、浮动工资、支出
第四步:利用循环求出每个人的实发工资
第五步:输出姓名和实发工资
2.实验代码:
`#include<stdio.h>
struct nest_yuangong{
char name[10];
double jiben;
double fudong;
double zhichu;
double shifa;
};
int main(void)
{
int i,n;
struct nest_yuangong s[n];
scanf("%d",&n);
for (i=1;i<=n;i++){
scanf("%s%lf%lf%lf",&s[i].name,&s[i].jiben,&s[i].fudong,&s[i].zhichu);
s[i].shifa = s[i].jiben+s[i].fudong-s[i].zhichu;
}
for (i=1;i<=n;i++){
printf("%s %.2lf\n",s[i].name,s[i].shifa);
}
return 0;
}`
7-2 计算平均成绩
1.设计思路:
主要描述题目算法:
第一步:建立结构包括学生的学号、姓名和成绩
第二步:输入一共有几个学生
第三步:利用循环输入学生的学号、姓名和成绩
第四步:利用循环求出成绩总和
第五步:求出平均成绩并输出
第六步:挑选出平均成绩以下的学生并输出
2.实验代码:
`#include<stdio.h>
struct nest_student{
char name[10];
char number[5];
int grade;
};
int main(){
int i,n,sum=0;
float average;
scanf("%d\n",&n);
struct nest_student s[n];
for(i=1;i<=n;i++){
scanf("%s %s %d",s[i].number,s[i].name,s[i].grade);
sum = sum + s[i].grade;
}
average=(float)(sum*1.0/n*1.0);
printf("%.2f\n",average);
for(i=1;i<=n;i++){
if((float)(s[i].grade) < average){
printf("%s %s\n",s[i].name,s[i].number);
}
}
return 0;
}`
3.流程图:
错误信息
错误原因:输入的时候强制改变数字类型。
3)C高级第二次PTA作业(3)
6-1 按等级统计学生成绩
1.设计思路:
主要描述题目算法:
第一步:调用函数
第二步:利用循环求出不及格数目
第三步:利用循环决定每个学生等级
第四步:返回主函数
2.实验代码:
`int set_grade( struct student *p, int n )
{
int i,sum=0;
for(i=0;i<n;i++)
{
if((p+i)->score<60){
sum++;
}
}
for(i=0;i<n;i++)
{
if(((p+i)->score)>=85&&((p+i)->score)<=100){
((p+i)->grade)='A';
}
else if(((p+i)->score)>=70&&((p+i)->score)<=84){
((p+i)->grade)='B';
}
else if(((p+i)->score)>=60&&((p+i)->score)<=69){
((p+i)->grade)='C';
}
else if(((p+i)->score)>=0&&((p+i)->score)<=59){
((p+i)->grade)='D';
}
}
return sum;
}`
6-2 结构体数组按总分排序
1.设计思路:
主要描述题目算法:
第一步:调用主函数
第二步:利用循环求出每个学生总成绩
第三步:利用循环给每个学生的总分从高到低排序
第四步:返回主函数
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 swap;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if((p+i)->sum<(p+j)->sum)
{
swap=p[i];p[i]=p[j];p[j]=swap;
}
}
}
}`
3.流程图:
错误信息
错误原因:用指针的时候与用数组弄混,忘记了`(p)->`这种指示方式。
作业要求三
1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?
这两周主要学习了结构还有动态内存这两方面,我觉得掌握的还可以,但是对于结构中的函数掌握的还是不够熟练。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
git地址:https://git.coding.net/wuyaole/dayixiaxueqidiercizuoye.git
图片:
3、点评3个同学的本周作业
1.胡景文:http://www.cnblogs.com/wshjw/p/8710431.html
2.高立彬:http://www.cnblogs.com/gao628526/p/8665187.html
3.丰大为:http://www.cnblogs.com/DavidPark/p/8664273.html