• 大学第二次作业




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

    `
    #include <stdio.h>
    void delnum(char *s);
    int main ()
    { char item[80];
    gets(item);
    delnum(item);
    printf("%s ",item);
    return 0;
    }

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

    2 统计子串在母串出现的次数 1.设计思路:通过题目给出的字符串,使用双重for循环遍历数组,从循环中先找出相同的字符串,再判断出现次数。 代码:
    #include<stdio.h>
    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);
    return 0;
    }

    /* int fun(char *str,char *substr)
    {
        int n=0,i;
        for(i = 0;*(str + i) != '';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 != '';p++){
            ps = substr;
            if(*ps == *p){
                while(*p == *ps){
                    if(*p == *ps){
                    p++;
                    ps++;
                }else break;
                }
            
            }
            if(*p == ''){
                count ++;
            }
        }   
        return count;
     }      
    

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

    include<stdio.h>

    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);
    return 0;
    }

    /* int fun(char str,char substr)
    {
    int n=0,i;
    for(i = 0;
    (str + i) != '';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 != '';p++){
    ps = substr;
    if(
    ps == p){
    while(
    p == ps){
    if(
    p == *ps){
    p++;
    ps++;
    }else break;
    }

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

    }
    `

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

    include<stdio.h>

    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<n;i++){
        scanf("%d",&*(p+i));
        sum = sum + *(p+i);}
    
    avg = (double)sum /(double) n;
    max = *p;
    min = *p;
    for(i=1;i<n;i++){
        if(*(p + i) > max){
            max = *(p+i);
        }
        
        if(*(p + i) < min){
            min = *(p+i);
        }
    }
      
    printf("average = %.2lf
    max = %.2lf
    min = %.2lf",avg,(double)max,(double)min);
              free(p);
    

    }
    5.计算职工工资 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
    ", s[j].name, s[j].sum);  
    
    
    
        }  
    
        return 0;  
    
    }
    

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

    struct student{
    
        char num[6];
    
        char name[10];
    
        double grade;
    
    }s[1000];
    
    int main()
    
    {
    
        int n;
    
        scanf("%d
    ",&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
    ",average);
    
        for(j=0;j<n;j++)
    
        {
    
            if(average>s[j].grade)
    
            {
    
                printf("%s %s
    ",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;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;
    
    }
    

    流程图:![](https://images2018.cnblogs.com/blog/1238411/201804/1238411-20180408184733311-899188134.png) 8. 结构体数组按总分排序 设计思路:调用calc函数,使用循环进行计算。然后调用sort函数,使用for循环,在循环中用if语句判断,进而返回值。 实验代码:
    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);
    

    }

    }
    `
    点评同学
    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,再比如如何使用已定义的变量类型定义变量,如何多变的使用指针等。现在我的思路还是不太好,并不能快速的理解和在脑内构成解题的程序,常常需要他人提醒,我还需要勤加联系

  • 相关阅读:
    Remove Linked List Elements
    Count Primes
    Isomorphic Strings
    Read N Characters Given Read4 II
    Word Ladder II Graph
    Word Ladder
    Binary Tree Right Side View
    House Robber
    Find non-overlap jobs with max cost
    Find Peak Element
  • 原文地址:https://www.cnblogs.com/archeralter/p/8746738.html
Copyright © 2020-2023  润新知