C高级第二次作业(1)

提交列表:

1.删除字符串中数字字符
设计思路:
通过遍历数组,如果遇到数字就删除,后部分的非数字字符向前移动即可完成。即定义两个循环变量,并用while语句进行判断,再根据需要进行删除。
实验代码:
···
void delnum(char *s)
{
int i=0,j=0;
for(;s[i]!='\0';i++)
{
if(s[i]>'9'||s[i]<'0')
{
(s+j++)=(s+i);
}
}
*(s+j)='\0';
}
···
调试过程:
在本题的代码中,不知道如何筛选出字符。
流程图:

统计子串在母串出现的次数
设计思路:
定义双重循环,外层用来遍历数组元素,内层判断字符数组元素是否相等,若完全相等则遍历子串,且次数加1.
实验代码:
···
int fun(char *str,char substr)
{
int num=0,i;
for(i=0;str[i]!='\0';i++)
{
if((str[i]substr[0])&&(str[i+1]substr[1])&&(str[i+2]==substr[2])){
num++;
}
}
return (num);
}
···
调试过程:
没有遇到什么困难,只是在编译的过程中出现了一个低级错误。
字符串中除首尾字符外的其余字符按降序排列
设计思路:
调用函数,然后进行定义变量,使用for循环在循环中判断,再进行输出。
实验代码:
···
int fun(char
s,int num)
{
char a;
int i,j;
for(i=1;i<num-2;i++){
for(j=i+1;j<num-1;j++){
if(s[i]<s[j])
{
a=s[i];
s[i]=s[j];
s[j]=a;
}
}
}
}
···
调试过程:
本题并没有遇到什么困难。

C高级第二次作业(2)

提交列表:

计算职工工资
设计思路:,
定义出结构变量包括员工的姓名,基本工资,浮动工资,支出,并计算实发工资并输出姓名。
实验代码:
··· #include <stdio.h>
struct clerk
{
char name[10];
float b,r,f;
float s;
};

int main() {
int i,N;
struct clerk s1; scanf("%d",&N);
for(i=1;i<=N;i++)
{ scanf("%s %f %f %f\n",s1.name,&s1.b,&s1.r,&s1.f);
s1.s =(s1.b + s1.r - s1.f);
printf("%s %.2lf\n",s1.name,s1.s);
}

return 0;
}
···
调试过程:
在定义结构变量上遇到了一些问题,请教室友后得到解决。
流程图:

输出学生成绩
设计思路:
定义变量后输入人数,再使用动态内存分配语句,循环,冒泡排序法,进行排序并输出
实验代码:
···#include <stdio.h>
struct student
{
char num[6];
char name[10];
int grade;
double average;};
int main()
{
int i,N,grade,j;
double average;
scanf("%d",&N);
struct student si[N];
grade = 0;
for(i=0;i<N;i++)
{
scanf("%s %s %d",si[i].num,si[i].name,&si[i].grade);
grade = grade +si[i].grade;
}
average = (double)(grade /N);
printf("%.2f\n", average);
for(i=0;i<N;i++)
{
if(si[i].grade<average)
{
printf("%s %s\n",si[i].name,si[i].num);
}
}
return 0;
}
···
调试过程:
没有什么大问题,细节性错误,我以后会注意。

C高级第二次作业(3)

老实承认这两道题没有什么思路,代码也是从班里的大神那里搬来的,在老师的讲解过程中我会认真听。
按等级统计学生成绩
设计思路:
调用定义函数,使用循环结构,N为不及格,等级为D时N加1。
实验代码:
···
int set_grade( struct student *p, int n )
{
int i,N = 0;
for(i = 0; i < n; i++)
{
if((p+i)->score <= 100 && (p+i)->score >= 85)
(p+i)->grade = 'A';
else if((p+i)->score <= 84 && (p+i)->score >= 70)
(p+i)->grade = 'B';
else if((p+i)->score <= 69 && (p+i)->score >= 60)
(p+i)->grade = 'C';
else if((p+i)->score <= 59 && (p+i)->score >= 0)
{
(p+i)->grade = 'D';
N++;
}
}
return N;
}
···
结构体数组按总分排序
设计思路:
定义循环变量,再通过遍历数组进行计算总分。
实验代码:
···
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;
}
}
}

}
···

学习内容总结:

对指针的复习,动态内存的分配,定义结构体变量及结构体变量的引用,还有数组指针结构的结合使用,但是老师对于动态内存的分配的讲解过程较为较为简略,有点一知半解。
图表:

作业点评:
董欣 :http://www.cnblogs.com/dx2017/p/8666072.html
李锐 :http://www.cnblogs.com/572453251asd/p/8746822.html
金海东:http://www.cnblogs.com/jhd1127/p/8746926.html