一、PTA实验作业
题目1:按等级统计学生成绩
1. 本题PTA提交列表
2. 设计思路
定义循环变量i,count统计不及格人数
for i=0 to n
如果 (p+i)>score大于等于85
(p+i)->grade 等于A
如果 (p+i)>score大于等于70
(p+i)->grade 等于B
如果 (p+i)>score大于等于60
(p+i)->grade 等于C
否则
(p+i)->grade 等于D
count++
返回count
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
不会用(p+i)->score和(p+i)->grade,导致编译错误,分等级的时候就是单纯的set_grade=A这样,后来参考了别人的代码才改正过来
题目2:7-1 计算职工工资
1. 本题PTA提交列表
2. 设计思路
struct worker{
char name[10];
double jbgz;
double fdgz;
double zc;
double sfgz;
};该结构体表示职工的名字,基本工资,浮动工资,支出和实发工资
定义循环变量i,N为职工人数
输入N
定义结构数组worker workers[N]
for i=0 to N
输入workers[i].name,&workers[i].jbgz,&workers[i].fdgz,&workers[i].zc
for i=0 to N
计算实发工资workers[i].sfg
输出职工名字workers[i].name和实发工资workers[i].sfg
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
多种错误是因为我没有定义结构数组struct worker workers[N],也没有计算实发工资,而是直接在输出里面计算实发工资,编译结果是0.00
题目3:7-2 时间换算
1. 本题PTA提交列表
2. 设计思路
定义变量 h为小时,m为分钟,s为秒,n为第二行增加的秒数
输入h,m,s
输入n
换算s 换算m 换算h
s对60取余 m对60 取余 h对24取余
输出h,m,s
3.代码截图
4.本题调试过程碰到问题及PTA提交列表情况说明
如上图所示,输出的分钟格式没有正确,后把%d改为%2d也没有正确,最后改为%02d就正确了
二、截图本周题目集的PTA最后排名
三、阅读代码
1.查找书籍
给定n本书的名称和定价,查找并输出其中定价最高和最低的书的名称和定价
#include<stdio.h>
#include<stdlib.h>
typedef struct {
char bName[30];
double price;
}bInfo;
int main()
{
int i, n;
int max, min;
bInfo *data;
scanf("%d", &n);
getchar();
data = (bInfo*)malloc(sizeof(bInfo) * n);
for (i = 0; i < n; i++) {
gets(data[i].bName);
scanf("%lf", &data[i].price);
getchar();
}
max = min = 0;
for (i = 0; i < n; i++) {
if (data[max].price < data[i].price) {
max = i;
}
if (data[min].price > data[i].price) {
min = i;
}
}
printf("\n%.2f, %s\n", data[max].price, data[max].bName);
printf("%.2f, %s\n", data[min].price, data[min].bName);
system("pause");
return 0;
}
2.通讯录的录入与显示
四、本周学习总结
1.总结本周学习内容
指针字符串
字符串的复制,连接,比较及计算字符串长度的函数,在系统头文件string.h中定义
字符串复制函数 char *strcpy(char *s1,char *s2)
字符串连接函数 strcat(s1,s2)
字符串比较函数 strcmp(s1,s2)
字符串长度函数 strlen(s1)
结构
结构的定义:
struct 结构名{
类型名 结构成员名
};
或
struct 结构名{
类型名 结构成员名
}结构变量名表;
结构变量成员的引用:结构变量名.结构成员名 例如 s1.num
对嵌套成员的引用:struct nest_student nest_s1; nest_s1.addr.zip;
结构变量的整体赋值:以下语句等效(只有相同结构类型的变量之间才可以直接赋值)
s1=s2;s2.num=s1.num;strcpy(s2.name,s1.name);
结构数组操作
结构数组的定义:struct student students[50];
在定义结构素组时可以同时对其进行初始化,格式与二维数组的初始化类似:
struct student students[50]={101,'zhang',76,86,78},{102,'wang',83,92,84}};
对于结构数组students,既可以引用数组的元素,如:students[i],也可以引用结构数组元素的成员,如:students[i].num
结构指针 即:指向结构类型变量的指针 例如,编写以下语句: struct students s1={101,'zhang',78.87.97},*p; p=&s1;
用*p访问结构成员:(*p).num=101;
用指向运算符->访问指针指向的结构成员:p->num=101;
当p指向结构变量s1 时,s1.num=101;(*p).num=101;p->num=101;效果一样
递归
递归函数原理:递归就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法
递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决
递归方法的两个要点:
递归出口,即递归的结束条件,到何时不再递归调用下去
递归式子,递归的表达式,如fact(n)=n*fact(n-1)
结构体:结构体是构造型数据类型,可以处理不同类型的数据,每一位成员都用来表示一种具体事务的属性,结构体总空间大小,等于各成员总长度
共用体:共用体是一种多变量共享存储空间的构造类型,共用体成员可以表示多种属性,共用体空间等于最大成员占据的空间,共用体不能赋初值
枚举:枚举类型是一种基本类型,是指变量的值可以全部列出,定义一个枚举变量后,变量的值确定在定义之中,枚举元素是常量,只能在定义阶段赋值
2.罗列本周一些错题
5、简答题
分值15.0
得分: 5.0
程序改错题:
输入一个正整数n(3<=n<=10),再输入n个雇员的信息(如下表所示),输出每人的姓名和实发工资(基本工资+浮动工资-支出)。
格式:
改正代码//错误代码
#include<stdio.h>
int main()
{
struct emp
{
char name[10];
float jbg;
float fdg;
float zc;
};
int i,n;
printf(“n=”);
scanf(“%d”,&n);
for(i=0;i<n;i++)
scanf(“%s%d%d%d”,emp[i].name,emp[i].&jbg,emp[i].&fdg,emp[i],&zc);
for(i=0;i<n;i++)
printf(“%5s实发工资:%d\n”, emp[i].name,emp[i].zc);
return 0;
}
参考答案
#include<stdio.h>
int main()
{
struct
{
char name[10];
float jbg;
float fdg;
float zc;
}emp[10]; //1
int i,n;
printf("n=");
scanf("%d",&n);
getchar(); //2
for(i=0;i<n;i++)
{
scanf("%s%f%f%f",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc); //3
getchar();} //4
for(i=0;i<n;i++)
printf("%5s实发工资:%7.2f\n", emp[i].name,emp[i]. jbg+emp[i]. fdg-emp[i].zc);//5
return 0;
}
我的作答
double jbg/fdg/zc // float jbg/fdg/zc
scanf("%s%lf%lf%lf",emp[i].name,&emp[i].jbg,&emp[i].fdg,&emp[i].zc) //
printf("%s实发工资:%.2f\n",emp[i].name,emp[i].zc)
3、填空题
分值20.0
得分: 0.0
程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。
函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。
例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:
10001、" ZhangSan "、95、80、88,
修改后输出t中的数据应为:10002、"LiSi "、96、81、89。
注意:按照顺序填代码,不要带编号1,2,3,4。空格或回车隔开。
#include <stdio.h>
#include <string.h>
struct student {
long sno;
char name[10];
float score[3];
};
______2__________ Modif(struct student *p)
{
int i;
p->sno = 10002;
strcpy(p->name, "LiSi");
for (i=0; i<3; i++)
______3_______++;
return _____4________;
}
void main()
{
struct student s={10001,"ZhangSan", 95, 80, 88}, *t;
int i;
printf("\n\nThe original data :\n");
printf("\nNo: %ld Name: %s\nScores: ",s.sno, s.name);
for (i=0; i<3; i++)
printf("%6.2f ", ___1____);
printf("\n");
t = Modif(&s);
printf("\nThe data after modified :\n");
printf("\nNo: %ld Name: %s\nScores: ",t->sno, t->name);
for (i=0; i<3; i++)
printf("%6.2f ", t->score[i]);
return 0;
}
参考答案
s.score[i]
struct student *
p->score[i]
p
我的作答
int
*p
score
s.score
2、简答题
分值20.0
得分: 0.0
线性表用顺序实现。请填空写一个求线性表L 中所有奇数之和的算法。
例如:
L=(1,2,3,4,5) 其和为 9(本题结构体定义很不错。)
#include <stdio.h>
#define N 10
typedef struct sqlist
{
int data[N];
int last;
}LIST;
int Total(List list)
{
return sum;
}
void Show(LIST list)
{
int i;
for(i=0;i<=list.last;i++)
printf("%3d", list.data[i]);
printf("\n");
}
int main()
{
LIST list;
int i,sum;
for(i=0;i<=5;i++)
list.data[i]=i;
list.last=5;
Show(list);
sum=Total(list);
printf("sum=%3d\n",sum);
return 0;
}
参考答案
int sum=0;
for(int i=0;i<=list.last;i++)
if(list.data[i]%2)
sum+=list.data[i];