第二次作业
【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(j*sizeof(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语言的习题,有思路但无从下手,以后勤加练习,希望有所突破。