第二次作业
题目6-7 删除字符串中数字字符
设计思路
1、算法
第一步:定义i与j
第二步:运用for循环,如果字符为数字则 s[j]='\0',不为数字则 s[j]=s[i]。
2、流程图
代码
void delnum(char *s)
{
int i,j;
for(i=0,j=0;s[i]!='\0';i++)
{
if(s[i]<'0'||s[i]>'9')
{
s[j]=s[i];
j++;
}
}
s[j]='\0';
}
错误
未编写s[j]='\0'导致答案一直错误。
改正:问过同学加上了s[j]='\0'。
题目6-8 统计子串在母串出现的次数
设计思路
1、算法
第一步:定义fun函数,定义变量i。
第二步:运用for循环与if进行判断,查找到子串的首字符,若相等则验证第二个字符,后面一样运用四个。
第三步:若字符相等则数字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]){
if(str[i+1]==substr[1]){
if(str[i+2]==substr[2]){
n++;
}
}
}
}
return n;
}
错误
不知怎样运用字符串来查找相同,看了同学的博客才有此答案。
题目6-9 字符串中除首尾字符外的其余字符按降序排列
设计思路
1、算法
第一步:定义i与j与swap。
第二步:用双重for循环对字符进行降序排列。
代码
int fun(char *s,int num)
{
int i,j,swap;
for(i=1;i<num-1;i++)
for(j=1;j<num-1-i;j++)
{
if(s[j]<s[j+1])
{
swap=s[j];s[j]=s[j+1];s[j+1]=swap;
}
}
}
错误
忘记了不排序首尾。
题目7-1 输出学生成绩
设计思路
1、算法
第一步:定义学生人数n,平均值,最大值与最小值
第二步:运用for循环,算出总和,再算平均值,运用for循环,查找最大值与最小值
第三步:输出平均值,最大值与最小值
代码
#include<stdio.h>
int main()
{
int n,i;
double average,max,min,sum=0;
scanf("%d",&n);
double a[n];
for(i=0;i<n;i++)
{
scanf("%lf",&a[i]);
sum=sum+a[i];
}
average=sum/n;
max=a[0];
min=a[0];
for(i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
}
if(min>a[i])
{
min=a[i];
}
}
printf("average = %.2f\n",average);
printf("max = %.2f\n",max);
printf("min = %.2f",min);
return 0;
}
错误
无
题目7-1 计算职工工资
设计思路
1、算法
第一步:定义结构体gongzi,
第二步:用while输入职工的姓名,基本工资,浮动工资
第三步:算出实发工资
2、流程图
代码
#include<stdio.h>
struct gongzi{
char name[10];
float jbgz;
float fdgz;
float zc;
float sfgz;
};
int main()
{
int n;
scanf("%d",&n);
struct gongzi m1;
while(n--)
{
scanf("%s%f%f%f",m1.name,&m1.jbgz,&m1.fdgz,&m1.zc);
m1.sfgz=m1.jbgz+m1.fdgz-m1.zc;
printf("%s %.2f\n",m1.name,m1.sfgz);
}
return 0;
}
错误
出现段错误,输入的字符串用了&
改正:重新写输入。
题目7-2 计算平均成绩
设计思路
1、算法
第一步:定义结构体student,输入name,xuehao,chengji,
第二步:在for循环中算出sum,再算出平均值
第三步:用for循环输出成绩小于平均值的学生的名字与学号。
代码
#include<stdio.h>
struct student{
char xuehao[6];
char name[10];
int chengji;
};
int main()
{
int n,i;
struct student s[10];
scanf("%d",&n);
double sum=0,avg;
for(i=0;i<n;i++)
{
scanf("%s%s%d",s[i].xuehao,s[i].name,&s[i].chengji);
sum=sum+s[i].chengji;
}
avg=sum/n;
printf("%.2f\n",avg);
for(i=0;i<n;i++)
{
if(s[i].chengji<avg)
printf("%s %s\n",s[i].name,s[i].xuehao);
}
return 0;
}
错误
无
题目6-1 按等级统计学生成绩
设计思路
1、算法
第一步:定义i与x,并使x为0,运用for循环与if判断
第二步:根据分数分等级
第三步:运用循环查找等级是D的数字
第四步:返回到等级为x的值
代码
int set_grade( struct student *p, int n )
{
int i,x=0;
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
p[i].grade='D';
}
for(i=0;i<n;i++)
{
if(p[i].grade=='D')
x=x+1;
}
return x;
}
错误
无
题目6-2 结构体数组按总分排序
设计思路
1、算法
第一步:定义一个calc函数,用for循环算出sum。
第二步:定义一个sort函数,用类似于冒泡排序法对学生的sum进行排序,
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])*1.0;
}
}
void sort(struct student *p,int n)
{
int i,j;
struct student temp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if(p[j].sum<p[j+1].sum)
{
temp=p[j];p[j]=p[j+1];p[j+1]=temp;
}
}
}
}
错误
开始是只交换了总成绩导致答案错误,后来用int来定义swap导致不能正常进行交换而编译错误。
总结:对结构体的使用有了初步的了解,但深入使用时还是容易出错,要多练习关于此种题的各种综合运用。
希望大家多多点评,互帮互助。