第二次作业



【6-7】 删除字符串中数字字符
1.设计思路:定义函数,引入变量,通过for循环,在循环中判断条件,删除字符。
2.实验代码:
`

void delnum(char *s)

{

int i,j;

for(;*(s+i)!='\0'😉

{

if('0'<=(s+i)&&(s+i)<='9')

{

for(j=i;*(s+j)!='\0';j++)

{

(s+j)=(s+j+1);

}

}else{i++;

}

}

`
3.本题调试过程碰到问题及解决办法:无。
4.流程图:

【6-8】 统计子串在母串出现的次数
1.设计思路:通过题目给出的字符串,使用双重for循环,从循环中先找出相同的字符串,再判断出现次数。

2.实验代码:
`

int fun(char *str,char *substr)

{

int n=0,i,j,count=0;

for(i=0;*(str+i)!='\0';i++)

{

for(j=0;*(substr+j)!='\0';j++)

{

if((substr+j)==(str+i+j))

count=1;

else

count=0;

}

if(count)

{

n++;

count=0;

}

}

return n;

}

`
3.本题调试过程碰到问题及解决办法:最开始写代码时只有思路,但不知从何下手,具体细节不会做,在同学讲解帮助下写出了代码。
4.流程图:

【 6-9 】字符串中除首尾字符外的其余字符按降序排列
1.设计思路:首先调用函数,然后定义变量,使用for循环在循环中判断,进而输出。
2.实验代码:
`

int fun(char *s,int num)

{

int i,m=(num-2),j;

for(i=1;i<=(num-2);i++)

{

if((s+m)>(s+i))

{

j=(s+m);(s+m)=(s+i);(s+i)=j;

}

}

if(num>0)

{

num--;

fun(s,num);

}

}

`
3.本题调试过程碰到问题及解决办法:无。

【7-1】 输出学生成绩
1.设计思路:定义变量,输入人数,然后使用动态内存分配语句,使用循环,冒泡排序法,进行排序并输出。

2.实验代码:
`

include<stdio.h>

include<stdlib.h>

int main()

{

double avg=0,max=0,min=999;

int i=0,*p,j;

scanf("%d",&j);

if((p=(int )malloc(jsizeof(int)))==NULL)

exit(1);

for(i=0;i<j;i++)

{

scanf("%d",p+i);

if(p[i]>max)

max=p[i];

if(p[i]<min)

min=p[i];

avg+=p[i];

}

avg=avg/j;

free(p);

printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,max,min);

}

`
3.本题调试过程碰到问题及解决办法:无。

【7-1】 计算职工工资

1.设计思路:首先定义结构体变量,然后输入,引用结构体变量,使用循环输出各项。

2.实验代码:

`

include<stdio.h>

typedef struct work

{

char name[100];

float base;

float fdgz;

float expend;

float sum;

}WORK;

int main()

{

WORK s[10000];

int n, i,j;

scanf("%d", &n);

for (i = 0; i < n; i++)

{

scanf("%s", &s[i].name);

scanf("%f", &s[i].base);

scanf("%f", &s[i].fdgz);

scanf("%f", &s[i].expend);

s[i].sum = (s[i].base + s[i].fdgz)-s[i].expend;

}

for (j = 0; j < n;j++)

{

printf("%s %.2f\n", s[j].name, s[j].sum);

}

return 0;

}

`

3.本题调试过程碰到问题及解决办法:无。

【7-2】 计算平均成绩

1.设计思路:先定义变量类型,使用其定义该类型数组,先使用for循环输入,算出总成绩(sum),让后计算平均数,最后通过for循环在循环中判断,进而输出。

2.实验代码:

`

include<stdio.h>

struct student{

char num[6];

char name[10];

double grade;

}s[1000];

int main()

{

int n;

scanf("%d\n",&n);

int i;

double sum=0;

double average;

for(i=0;i<n;i++)

{

scanf("%s %s %lf",&s[i].num,&s[i].name,&s[i].grade);

}

int j;

for(j=0;j<n;j++)

{

sum=sum+s[j].grade;

}

average=sum/n;

printf("%.2lf\n",average);

for(j=0;j<n;j++)

{

if(average>s[j].grade)

{

printf("%s %s\n",s[j].name,s[j].num);

}

}

return 0;

}

`

3.本题调试过程碰到问题及解决办法:无。

4.流程图:

【6-1】 按等级统计学生成绩

1.设计思路:先定义函数,引入变量,在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可。

2.实验代码:

`

int set_grade( struct student *p, int n ){

int count = 0, i;

for(i = 0;i<n;i++,p++){

if(p->score<60){

p->grade = 'D';

count++;

}

else if((p->score<70)&&(p->score>=60)){

p->grade = 'C';

}

else if((p->score<85)&&(p->score>=70)){

p->grade = 'B';

}

else{

p->grade = 'A';

}

}

return count;

}

`
3.本题调试过程碰到问题及解决办法:无。
4.流程图:

【6-2】 结构体数组按总分排序

1.设计思路:调用calc函数,使用循环进行计算。然后调用sort函数,使用for循环,在循环中用if语句判断,进而返回值。

2.实验代码:

`

void calc(struct student *p,int n)

{

int i=0;

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 j=0,min=0;

struct student a;

for(j=0;j<n;j++)

{

if((p+j)->sum<(p+min)->sum)

{

min=j;

}

}

a=*(p+min);

(p+min)=(p+n-1);

*(p+n-1)=a;

if(n>1)

{

n--;

sort(p,n);

}

}

`
3.本题调试过程碰到问题及解决办法:无。

【图表】:

【git地址】:https://git.coding.net/lfyyyy/seven

【截图】:
点评同学:董欣:http://www.cnblogs.com/dx2017/p/8666072.html
高立彬: http://www.cnblogs.com/gao628526/p/8665187.html
董雅洁:http://www.cnblogs.com/exo123/p/8663311.html
总结:近两周的学习让我了解到了c语言中的许多新的知识,比如如何定义变量类型,还有如何使用已定义的变量类型定义变量,如何多变的使用指针等等,最开始还有些不太理解,两周下来已经理解的差不多了,就是对待c语言的习题,有思路但无从下手,以后勤加练习,希望有所突破。

posted on 2018-04-03 23:40  执念丶。  阅读(205)  评论(12)    收藏  举报

导航