大学第二次作业

大学第二次作业_第1张图片
大学第二次作业_第2张图片
大学第二次作业_第3张图片

  1. 删除字符串中数字字符:
    设计思路:首先定义一个数组,然后写入数组,引用函数,输出。定义一个指针p并将s赋给p,用一个for循环遍历字符串,并在其中用一个if语句判断是否是数字,如果是 p++=*s ,循环过后将最后一个赋上‘\0’;
    大学第二次作业_第4张图片

`
#include
void delnum(char *s);
int main ()
{ char item[80];
gets(item);
delnum(item);
printf("%s\n",item);
return 0;
}

void delnum(char *s)
{
    char *p = s;
    for(;*s;s++)
   {
         if ( *s >'9' || *s < '0' )
               *p++=*s ;
   }
   *p='\0';
 
}       

2 统计子串在母串出现的次数 1.设计思路:通过题目给出的字符串,使用双重for循环遍历数组,从循环中先找出相同的字符串,再判断出现次数。 代码:
#include
int fun(char str,char substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
int n;
n=fun(str,substr);
printf("n=%d\n",n);
return 0;
}

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

}  */ 

int fun(char *str,char *substr) 
{
    int count = 0;
    char *p=str,*ps= substr;
    for(;*p != '\0';p++){
        ps = substr;
        if(*ps == *p){
            while(*p == *ps){
                if(*p == *ps){
                p++;
                ps++;
            }else break;
            }
        
        }
        if(*p == '\0'){
            count ++;
        }
    }   
    return count;
 }      

3. 字符串中除首尾字符外的其余字符按降序排列 .设计思路: 先定义字符数组s,写入字符串,引用函数,输出排序后所得的字符串。用一个for循环表示循环的趟数,由于只需要排出排除首尾的顺序所以只需要循环num-3次,在此循环下再用一次循环进行排序,并且只需要排出从第二个到num-j-2个数的顺序。 实验代码:

include

int fun(char str,char substr);
int main()
{ char str[81]="asdasasdfgasdaszx67asdmklo",substr[4]="asd";
int n;
n=fun(str,substr);
printf("n=%d\n",n);
return 0;
}

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

} */

int fun(char str,char substr)
{
int count = 0;
char p=str,ps= substr;
for(;p != '\0';p++){
ps = substr;
if(
ps == p){
while(
p == ps){
if(
p == *ps){
p++;
ps++;
}else break;
}

    }
    if(*p == '\0'){
        count ++;
    }
}   
return count;

}
`

  1. 输出学生成绩:
    设计思路:
    输入数字个数n,动态存储分配。用for语句进行输入数据,并计算和,for语句结束后计算出平均值。令最大,最小值等于第0个数,遍历所有数据,并在其中用两个if语句判断出最大值和最小值并记录。输出最大最小值和平均数。
    实验代码:`

    include

int main()
{
int *p,i,sum = 0,max,min,n;
double avg;
scanf("%d",&n);

if((p=(int*)calloc(n,sizeof(int)))==NULL){
     exit(1);
}

for(i=0;i max){
        max = *(p+i);
    }
    
    if(*(p + i) < min){
        min = *(p+i);
    }
}
  
printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,(double)max,(double)min);
          free(p);

}
5.计算职工工资 1.设计思路:首先定义结构体变量,然后输入,引用结构体变量,使用循环输出各项。 2.实验代码:
#include

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;  

}

`
流程图:大学第二次作业_第5张图片

  1. 计算平均成绩:
    设计思路:
    定义一个结构体,并在其中定义学号num,姓名name,分数score。主函数中先输入整数n,引用结构体,用一个for循环输入学号,姓名,分数并计算出分数的和。计算出平均数。用一个for循环遍历数据,并用if语句判断当前分数是否低于平均数,如果是输出相应的姓名和学号。
    实验代码: #include

    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;is[j].grade)
    
         {
    
             printf("%s %s\n",s[j].name,s[j].num);
    
         }
    
     }
    
     return 0;

    }
    `
    7.按等级统计学生成绩
    设计思路:先定义函数,引入变量,在for循环中通过if语句进行多层判断,将学生成绩分出等级,然后使小于60分的单独计算出其数目,最后返回其值(count)即可。
    2.实验代码: int set_grade( struct student *p, int n ){

     int count = 0, i;
    
     for(i = 0;iscore<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;
    }
    `流程图:大学第二次作业_第6张图片
  2. 结构体数组按总分排序
    设计思路:调用calc函数,使用循环进行计算。然后调用sort函数,使用for循环,在循环中用if语句判断,进而返回值。
    实验代码:
    `
    void calc(struct student *p,int n)

{

int i=0;

for(i=0;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

{

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);

}

}
`
点评同学
1http://www.cnblogs.com/lhyyy/p/8711554.html
2http://www.cnblogs.com/shilcz/p/8696341.html
3http://www.cnblogs.com/DavidPark/p/8664273.html
总结:近2周的学习,让我在c语言的学习中有了很大进展,也获得了许多新知识,比如结构体struct,再比如如何使用已定义的变量类型定义变量,如何多变的使用指针等。现在我的思路还是不太好,并不能快速的理解和在脑内构成解题的程序,常常需要他人提醒,我还需要勤加联系

你可能感兴趣的:(大学第二次作业)