2018上C语言程序设计(高级)作业- 第2次作业
第二次作业
2-1 删除字符串中数字字符
1.设计思路
第一步:遍历指针s所指的s数组。
第二步:把不在0到9之间的s[i]赋予s[j++]。
第三步:把'/0'赋给字符串最后一项。
2.实验代码
void delnum(char *s)
{
int i = 0,j = 0;
for(i = 0;s[i] != '\0';i++)
{
if(s[i]>'9'||s[i]<'0')
{
*(s+j++) = *(s+i);
}
}
*(s+j) = '\0';
}
3.本题调试过程碰到问题及解决办法
无
2-2 统计子串在母串出现的次数
1.设计思路
第一步:遍历数组,定义n=0。
第二步:如果str[i]中连续三个字符分别与substr[]中三个字符串相等,则n++。
第三步:返回n。
2.实验代码
int fun(char *str,char *substr)
{
int i,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;
}
3.本题调试过程碰到问题及解决办法
无
2-3字符串中除首尾字符外的其余字符按降序排列
1.设计思路
第一步:遍历数组,去掉首尾两项。
第二步:把中间的字符进行排序。
2.实验代码
int fun(char *s,int num)
{
char t;
int i,j;
for(i=1;i<num-2;i++)
{
for(j=i+1;j<num-1;j++)
{
if(s[i]<s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
}
3.本题调试过程碰到问题及解决办法
无
2-4输出学生成绩
1.设计思路
第一步:输入数字个数n。
第二步:建立for语句输入数据,计算和。
第三步:遍历所有数据,并在其中用两个if语句判断出最大值和最小值并记录,计算平均值。
第四步:输出最大最小值和平均数。
2.实验代码
#include<stdio.h>
float max_a(float x,float y);
float min_a(float x,float y);
int main()
{
int N,flag=1,D;
float average,max,min,sum=0.0;
scanf("%d",&N);
int i=0;
for(;i<N;i++){
scanf("%d",&D);
sum=sum+D;
if (flag==1)
{
max=D;
min=D;
flag--;
}
max=max_a(max,D);
min=min_a(min,D);
}
average=sum/N;
printf("average = %.2f\nmax = %.2f\nmin = %.2f",average,max,min);
}
float max_a(float x,float y)
{
float z;
if(x>y)
z=x;
else
z=y;
return(z);
}
float min_a(float x,float y)
{
float z;
if(x<y)
z=x;
else
z=y;
return(z);
}
3.本题调试过程碰到问题及解决办法
无
2-5计算职工工资
1.设计思路
第一步:定义职工的名字,基本工资,浮动工资和支出工资。
第二步:建立for语句计算出所对于的实际工资并输出。
2.实验代码
#include<stdio.h>
struct
{
char name[10];
double a;
double b;
double c;
}p;
int main()
{
int N,i;
float d;
scanf("%d",&N);
for(i = 0;i<N;i++)
{
scanf("%s %lf %lf %lf",&p.name,&p.a,&p.b,&p.c);
d = (p.a + p.b - p.c)*1.00;
printf("%s %.2f\n",p.name,d);
}
return 0;
}
3.本题调试过程碰到问题及解决办法
无
2-6计算平均成绩
1.设计思路
第一步:定义学生的学号姓名成绩。
第二步:输入学生个数N。
第三步:把每个学生的成绩进行求和操作。
第四步:求出平均值。
第五步:进行遍历操作,找出在平均值以下的学生,输出。
2.实验代码
#include <stdio.h>
struct information{
char num[5];
char name[10];
int grade;
}p;
int main()
{
int i,N,sum=0;
float average=0;
scanf("%d",&N);
if(N>0&&N<=10){
for(i=0;i<N;i++){
scanf("%s %s %d",&p.num,&p.name,&p.grade);
sum=sum+p.grade;
}
average=sum*1.0/N;
printf("%.2f\n",average);
for(i=0;i<N;i++){
if(average>p.grade){
printf("%s %s\n",p.name,p.num);
}
}
}
return 0;
}
3.本题调试过程碰到问题及解决办法
无
2-7按等级统计学生成绩
1.设计思路
第一步:建立for语句把每个人的分数所对应的等级赋给等级数组。
第二步:在不及格的if语句里计数。
第三步:输出。
2.实验代码
int set_grade( struct student *p, int n )
{
int i=0,j=0,count=0;
for(i=0;i<n;i++){
if (p[i].score<=100&&p[i].score>=85){
p[i].grade='A';
}
if (p[i].score<=84&&p[i].score>=70){
p[i].grade='B';
}
if (p[i].score<=69&&p[i].score>=60){
p[i].grade='C';
}
if (p[i].score<=59&&p[i].score>=0){
p[i].grade='D';
count++;
}
}
return count;
}
3.本题调试过程碰到问题及解决办法
无
2-8
1.设计思路
第一步:在定义的第一个函数里进行定义循环变量k,之后通过遍历数组来计算出总分;
第二步:根据总成绩进行排名。
2.实验代码
void calc(struct student *p,int n)
{
int k=0;
for(k=0;k<n;k++)
{
(p+k)->sum=(p+k)->score[0]+(p+k)->score[1]+(p+k)->score[2];
}
}
void sort(struct student *p,int n)
{
int k=0,l=0;
struct student swap;
for(k=0;k<n;k++)
{
for(l=k+1;l<n;l++)
{
if(p[k].sum<p[l].sum)
{
swap=p[k];p[k]=p[l];p[l]=swap;
}
}
}
}
3.本题调试过程碰到问题及解决办法
无
1、总结两周里所学的知识点有哪些学会了?(可记录每道作业题目所用的知识点)哪些还没有学会?
这两周我学习了关于字符串的应用,进行了指针方面的练习,还学了有关结构的定义。这两周的课上知识点自己感觉学的还可以,但有的时候还是不太会,我会在接下来的学习生活中多多努力的。
2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。
git地址
上传截图:
3、点评3个同学的本周作业(在作业中给出被点评同学博客的链接),并邀请3名同学点评你的作业。
http://www.cnblogs.com/kimhae/p/8659720.html
http://www.cnblogs.com/jz19990201/p/8747094.html
http://www.cnblogs.com/572453251asd/p/8746822.html