levels of contents

6-7 删除字符串中数字字符

1.设计思路:

1.使用while函数来查找。

2.找到数字不做处理,将非数字字符储存在新的数组中。

2.流程图:

3.实验代码:

void delnum(char *s) 
	{  
    int i=0,j=0;  
   	while(*(s+i)!='\0')
	   	{  
        if (!(*(s+i)>= '0' && *(s+i)<= '9')) 
		{  
            s[j++] = s[i];  
        }  
        i++;  
    }   
    *(s+j) = '\0'; }

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

在开始尝试了for循环进行编辑,但是一直出现错误于是选择了难度较低的while循环,进过姜健同学的指导将本题做出。

6-8 统计子串在母串出现的次数

1.设计思路:

1.理解题意,使用for循环查找;

2.判断数组str相邻的3个字符是否与substr的相邻的三个字符相同

3.如果相同 则+1 最后输出相同的个数

2.流程图:

3.实验代码:

int fun(char *str,char *substr)
{
  int i;
  int n=0;
  for(i=0;str[i]!='\0';i++)
  {
    if(str[i] == substr[0] && str[i+1] == substr[1] && str[i+2] == substr[2])
  	n++;
  }
    return n;
}

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

在刚开始的时候忽略了相邻问题 在解决之后题目成功解决

6-9 字符串中除首尾字符外的其余字符按降序排列

1.设计思路:

1.使用for循环来冒泡排序

2.除第一个和最后一个进行设计函数

3.比较 交换顺序 然后输出

2.实验代码:

int fun(char *s,int num){
         int i,j,k,temp;
         for(i=1;i<num-2;i++){
             k=i;
             for(j=i+1;j<num-1;j++){
                 if((int)(*(s+k))<(int)(*(s+j))){
                     k=j;
                 }
             }
            if(k!=i){
             temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;
             }
        }
         return 0;
     }

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

在一开始无法进行对第一个和最后一个数的忽略 同时使用for循环的时候没办法搞懂冒泡法和选择法的区别和如何使用,在姜健和李伍壹同学的指导下才成功完成本题。

7-1 计算职工工资

1.设计思路:

1.定义结构体struct emp;

2.使用for循环输入职工的各项数据

3.再用for循环输出职工姓名和应发工资;

2.流程图:

3.实验代码:

#include <stdio.h>
int main (void)
{
int i, n;
struct emp{
char name[1000];
double jbg;
double fdg;
double zc;
} s[1000];
scanf("%d", &n);
for(i=0;i<n;i++)
scanf("%s%lf%lf%lf",s[i].name,&s[i].jbg,&s[i].fdg,&s[i].zc); 
for (i = 0; i < n; i++)
printf ("%s %.2f\n", s[i].name, s[i].jbg + s[i].fdg - s[i].zc);
} 

4.遇见的问题和解决路径

这道题在做的时候是和室友合作的 但是问题一直在与为什么会出现部分错误,具体情况未知,到现在还是找不到原因。 希望老师和同学可以给予指点 在此感谢。

7-2 计算平均成绩

1.设计思路:

1.定义结构体变量struct score 及其变量;

2.定义整型i,n,利用for循环遍历数组

3.输入结构体里的变量 计算avg并输出;

4.使用for循环并输出低于平均数的学生的姓名和学号

2.实验代码:

#include <stdio.h> 
struct score 
{ 
char num[10]; 
char name[10]; 
double s; 
}; 
int main() 
{ 
struct score s[1000]; 
int i, n; 
double average = 0; 
scanf("%d", &n); 
for (i = 0; i < n; i++) 
{ 
scanf("%s %s %lf", &s[i].num, &s[i].name, &s[i].s); 
} 
for (i = 0; i < n; i++) 
{ 
average = average + s[i].s; 
} 
average = average / n; 
printf("%.2f\n", average); 
for (i = 0; i < n; i++) 
{ 
if (s[i].s < average) 
{ 
printf("%s %s\n", s[i].name, s[i].num); 
} 
} 
return 0; 
}

错误和解决方案:

在姜健同学指导下这道题只出现了一些小问题 解决的也比较顺利

题目7-1 输出学生成绩

1.设计思路

第一步:建立for语句把每个人的分数所对应的等级赋给等级数组。

第二步:在不及格的if语句里计数。

第三步:输出。

(2)流程图

2.实验代码

int set_grade( struct student *p, int n )
{
    int count=0;
    int i;
    for(i=0; i<n; i++)

    {
        if((p->score) >= 85 && (p->score) <= 100)
        (p->grade) = 'A'; 
        else if((p->score) >= 70 && (p->score)<= 84)
        (p->grade) = 'B'; 
        else if((p->score) >= 60 && (p->score) <= 69)
        (p->grade) = 'C'; 
        else if((p->score) >= 0 && (p->score) <= 59)
        {
            (p->grade) = 'D'; 
            count ++;
        }
        p++;    
    }
    return count;
    
}

4.遇见的错误和解决方法

由于这道题难度较大 我是在姜健同学的指导下才勉强完成 故对问题理解不全面

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

设计思路:

1:用指针变量指向结构中的sum,sum为每个同学每门成绩的和;

2:用选择排序法将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,k;
  struct student x;
    for(k=0;k<n-1;k++)
    {
    for(i=0;i<n-1-k;i++)
    {
    if((p+i)->sum<(p+i+1)->sum)
    {
     x=*(p+i);*(p+i)=*(p+i+1);*(p+i+1)=x;
    }
    }
    }
    }

学习周总结:本周学习了结构体方面的内容,对于我感觉难度很大,特别是与指针相结合的地方还是不明白用法,最后几道题在没有同学的帮助下根本无从下手。
图表: 第一次做这个有些数据还未记录

 posted on 2018-04-09 08:19  linkzr  阅读(163)  评论(0编辑  收藏  举报