第二次作业
6-7 删除字符串中数字字符
1、设计思路:
(1)算法描述:
第一步:定义一个新数组,把原来的数组复制到新数组里;
第二步:判断新的数组里的元素是不是数字,若不是数字,就用原来的数组存储这个元素;
(3)实验代码:
#include <string.h>
void delnum(char *s)
{
int i,x,j=0;
char a[100];
x=strlen(s);
strcpy(a,s);
for(i=0;i<x;i++)
{
if(a[i]<='9'&&a[i]>='0')
{;
}else
{
s[j]=a[i];
j++;
}
}
s[j]='\0';
}
6-8 统计子串在母串出现的次数
(1)、算法描述:
第一步:先遍历母数组;
第二步:从母数组的第一个元素开始判断,与子数组进行比较,直到母数组中的元素与子数组不相等;
第三步:若不相等,判断是否为子数组的最后一个元素;
(2)、实验代码:
int fun(char *str,char *substr)
{
int i,j,k,cnt=0;
for(i=0;str[i]!='\0';i++)
{
for(j=i,k=0;str[j]==substr[k];k++,j++)
{
if(substr[k+1]=='\0')
{
cnt++;
break;
}
}
}
return cnt;
}
6-9 字符串中除首尾字符外的其余字符按降序排列
(1)、算法描述:
第一步:先测出数组长度;
第二步:从第二个数开始直到倒数第二个数,将这些字符的ascii进行冒泡排序;
int fun(char *s,int num)
{
int x,i,j,t;
x=strlen(s);
for(j=1;j<num-1;j++)
{
for(i=1;i<num-1-j;i++)
{
if(s[i]<s[i+1])
{
t=s[i];
s[i]=s[i+1];
s[i+1]=t;
}
}
}
}
7-1 输出学生成绩
1、设计思路:
(1)算法描述:
第一步:定义一个指向数组的指针变量,将数组的第一个元素赋值给最大值和最小值;
第二步:并依次求出最大值和最小值和平均值;
(2)流程图:
(3)实验代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n,i;
double *p;
double a[100],sum=0;
double max,min;
scanf("%d",&n);
if((p=(double*)malloc(n*sizeof(double)))==NULL)
{
exit(1);
}
for(i=0;i<n;i++)
{
scanf("%lf",p+i);
}
max=*p;
min=*p;
for(i=0;i<n;i++)
{
if(max<*(p+i))
{
max=*(p+i);
}
if(min>*(p+i))
{
min=*(p+i);
}
sum=sum+*(p+i);
}
printf("average = %.2lf\n",sum/n);
printf("max = %.2lf\n",max);
printf("min = %.2lf\n",min);
free(p);
return 0;
}
7-1 计算职工工资
(1)、算法描述:
第一步:定义一个结构变量;
第二步:用for循环计算职工工资;
(2)实验代码:
#include <stdio.h>
int main()
{
struct salary
{
char name[1000];
float a;
float b;
float c;
float d;
}a[1000];
int i,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%s%f%f%f",a[i].name,&a[i].a,&a[i].b,&a[i].c);
a[i].d=a[i].a+a[i].b-a[i].c;
printf("%s %.2f\n",a[i].name,a[i].d);
}
return 0;
}
(3)流程图
(4)错误原因:
当数组长度较小时,答案显示段错误
7-2 计算平均成绩
(1)、算法描述:
第一步:定义一个结构变量;
第二步:对结构变量中的成员中的分数进行求和,再求平均值,再比较结构中的成员和平均值的大小,输出成绩在平均值以下的学生姓名和学号;
(2)、实验代码:
#include <stdio.h>
int main()
{
int n,i;
struct student
{
char a[1000];
char b[1000];
int num;
}s[1000];
float ave;
int sum=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s %s %d",s[i].a,s[i].b,&s[i].num);
sum=sum+s[i].num;
}
ave=sum/n*1.0;
printf("%.2f\n",ave);
for(i=0;i<n;i++)
{
if(s[i].num<ave)
{
printf("%s %s\n",s[i].b,s[i].a);
}
}
return 0;
}
6-1 按等级统计学生成绩
(1)、算法描述:
第一步:用for循环遍历整个数组,用指针变量指向结构中的分数;
第二步:判断等级,用指针变量指向等级,若等级为D,不及格人数加一;
(2)、实验代码:
int set_grade( struct student *p, int n )
{
int cnt=0,i;
for(i=0;i<n;i++,p++)
{
if((p->score)>=85)
{
p->grade='A';
}
if((p->score)<85&&(p->score)>=70)
{
p->grade='B';
}
if((p->score)<=69&&(p->score)>=60)
{
p->grade='C';
}
if((p->score)<60)
{
p->grade='D';
cnt++;
}
}
return cnt;
}
6-2 结构体数组按总分排序
(1)算法描述:
第一步:用指针变量指向结构中的sum,sum为每个同学每门成绩的和;
第二步:用选择排序法将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];
}
}
void sort(struct student *p,int n)
{
int i,j;
struct student t;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(p[i].sum<p[i+1].sum)
{
t=p[i].sum;
p[i].sum=p[i+1].sum;
p[i+1].sum=t;
}
}
}
}
(3)错误原因:
换的只是sum而姓名学号并没有改变
改正:
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(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(p[i].sum<p[i+1].sum)
{
t=p[i];
p[i]=p[i+1];
p[i+1]=t;
}
}
}
}
(4)、流程图
点评:
申怡苗:http://www.cnblogs.com/Vinecy/
张琪:www.cnblogs.com/zhang03/p/8735481.html
邓欣茹:http://www.cnblogs.com/dxfish/p/8747579.html
代码托管:https://gitee.com/myj98/The-homework-of-C/upload/master