第二次作业
一 .

6-7.
1.设计思路:
(1)第一步:定义数组初值,用for语句在数组中找出出大于0小于9的数字字符。
第二步:出现数字数组就将其后一项前移,代替数字数组,最终完成数字数组的删除。
(2)流程图

2.实验代码
void delnum(char *s)
{
int i,k=0;
for(i=0;s[i]!='\0';)
{
if(s[i]>='0'&&s[i]<='9')
{
for(k=i;s[k]!=0;k++)
s[k]=s[k+1];
}
else
i++;
}
}3.错误提示

6-8
1.设计思路
(1)第一步:用for循环找出substr数组的字符串长度,并记作一个字符串。
第二步:再运用for循环在str数组中寻找substr数组出现的次数。
2.实验代码
int fun(char *str,char *substr)
{
int n=,i=,k=,flag=;
for(i=;str[i]!='\0';i++)
{
for(k=;substr[k]!='\0';k++)
{
if(substr[k]==str[i+k])
flag=;
else
flag=;
}
if(flag==)
{
n++;
flag=;
}
}
return n;
}3.
错误信息1:
错误原因:在if语句中忽略了flag==1没法继续执行这一点。
改正方法:捋顺了一下,尝试了flag==0或1的结果,最终flag=1才能继续向下执行,并正确。
错误信息2:
错误原因:无意在i的旁边加了两个点...
改正方法:对着正确的图看了几遍才发现这个问题。
6-9
1.设计思路
(1)第一步:先定义几个数,并将min初始化(去掉首位)。
第二步:运用for循环将余下的字符进行比较,并将小的字符向后移动。
第三步:将每一个字符都与后面的进行比较并移动,最终输出正确的排序。
2.
int fun(char *s,int num)
{
int i,min=(num-),k;
for(i=;i<=min;i++)
{
if(s[min]>s[i])
{
k=s[min];
s[min]=s[i];
s[i]=k;
}
}
if(num>)
{
num--;
fun(s,num);
}
}3.
错误信息
错误原因:将排序的代码打成了取值的。
改正方法:检查一遍发现执行后的结果是取值的,并改了过来。
7-1
1.设计思路
(1)第一步:使用if语句来实行动态内存分配。
第二步:运用for语句将每一项进行比较并求出最大最小值
第三步:用总数求出平均值,最后输出这三项。
2
#include<stdio.h>
#include<stdlib.h>
int main()
{
double avg=,max=,min=;
int i=,*s,n;
scanf("%d",&n);
if((s=(int *)malloc(n*sizeof(int)))==NULL)
exit();
for(i=;i<n;i++)
{
scanf("%d",s+i);
if(s[i]>max)
max=s[i];
if(s[i]<min)
min=s[i];
avg+=s[i];
}
avg/=n;
free(s);
printf("average = %.2lf\n,max = %.2lf\n,min = %.2lf",avg,max,min);
}3.错误信息

错误原因:最小值的取值不能从0开始,否则无法循环查找真正的最小值。
改正方法:重复几次尝试发现最小值要递减,所以要赋一个较大的数。
二.

7-1
1.设计思路
(1)第一步:定义结构变量,定义职工信息,运用结构变量并输入员工信息。
第二步:运用for循环及给定公式输出他们的姓名及实发工资。
(2)流程图

2.实验代码
#include<stdio.h>
struct people
{
char name[];
float jbgz,fdgz,zc;
float sfgz;
};
int main()
{
int i=,n;
scanf("%d",&n);
struct people s[n];
for(i=;i<n;i++)
{
scanf("%s %f %f %f",&s[i].name,&s[i].jbgz,&s[i].fdgz,&s[i].zc);
s[i].sfgz=(s[i].jbgz+s[i].fdgz-s[i].zc);
}
for(i=;i<n;i++)
{
printf("%s %.2f\n",s[i].name,s[i].sfgz);
}
}3.错误信息
错误原因:没有注意要在每位职员的姓名和实发工资中间隔一个空格。
改正方法:检查几次,试了几次,最终询问同学才知道问题,并将其改正。
7-2
1.设计思路
(1)第一步:定义结构变量,定义数组,定义学生信息。
第二步:使用结构变量,运用for循环输入其信息,算出成绩的和。
第三步:算出平均成绩并输出。再使用for循环找出低于平均线以下的名单并输出。
2.实验代码
#include<stdio.h>
struct student
{
char num[6],name[10];
int s;
};
int main()
{
int i=0,n;
double avg=0;
scanf("%d",&n);
struct student s[n];
for(i=0;i<n;i++)
{
scanf("%s %s %d",&s[i].num,&s[i].name,&s[i].s);
avg+=s[i].s;
}
avg/=n;
printf("%.2lf\n",avg);
for(i=0;i<n;i++)
{
if(s[i].s<avg)
printf("%s %s\n",s[i].name,s[i].num);
}
}3.

三.

6-1
1.设计思路
(1)第一步:定义结构变量。
第二步:在for语句中使用结构变量,再用if、else语句将各个分段区分评级。
(2)流程图
2.实验代码
int set_grade( struct student *p, int n )
{
int count = 0, i;
for(i = 0;i<n;i++,p++)
{
if((p->score>=85)&&(p->score<=100))
{
p->grade = 'A';
}
else if((p->score<85)&&(p->score>=70))
{
p->grade = 'B';
}
else if((p->score<70)&&(p->score>=60))
{
p->grade = 'C';
}
else
{
p->grade = 'D';
count++;
}
}
return count;
}3.错误信息
错误原因:if、else的使用有些混乱,导致顺序不正确。无意间还落下了两个括号
改正方法:仔细读题分析,回想if、else的使用方法,调整用的顺序。加上括号。
6-2
1.设计思路
(1)第一步:定义结构变量,运用for语句将每个人的总分成绩计算出来。
第二步:应用结构变量,再运用for语句将每个人按照总成绩排序。
第三步:交换他们前边的排序,并按照原顺序输出。
2.实验代码
void calc(struct student *p,int n)
{
int i=;
for(i=;i<n;i++)
{
(p+i)->sum=(p+i)->score[]+(p+i)->score[]+(p+i)->score[];
}
}
void sort(struct student *p,int n)
{
int i=,min=;
struct student m;
for(i=;i<n;i++)
{
if((p+i)->sum<(p+min)->sum)
{
min=i;
}
}
m=*(p+min);
*(p+min)=*(p+n-);
*(p+n-)=m;
if(n>)
{
n--;
sort(p,n);
}
}3.错误信息

四.学习总结和进度。
1.这两周内主要还是学习了一下上几周学的东西,感觉之前不懂得也懂一些了。这两周新学习的结构变量感觉不是很难,就是对它的编写结构还有些生疏,对于哪步该写什么还不是很熟悉,我 觉得这部分还是需要我加强的。
2.史泽文:http://www.cnblogs.com/shilcz/p/8696341.html
王姝雯:
3.
