c学习第3天

今天学习了结构体。诶呀,结构体丫丫的。

struct stu{

int age;

char name[20];

float score;

};

今天的作业呵呵,对我来说还可以吧。不是那么难。

//1、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。

//2、模拟n个人参加选举的过程,四个候选人ABCD。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。

 

//3、某班5个学生,3门课,编写3个函数实现以下功能:

//1)求各门课的平均分

//2)找出三门都不及格的学生,输出其全部信息

//3)找出3门课平均分在80-90之间的学生,输出其信息。

耿哥要求呢,要每一个题都要创建一个.h和.c文件。下面就开始了第一题

第一题呢:

创建.h和.c文件。

.h代码:

//
//  Days_calc.h
//  homework4
//
//  Created by 尹亚坤 on 13-10-23.
//  Copyright (c) 2013年 蓝鸥科技. All rights reserved.
//

#ifndef homework4_Days_calc_h
#define homework4_Days_calc_h
//1、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
//2、模拟n个人参加选举的过程,四个候选人A、B、C、D。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。

//3、某班5个学生,3门课,编写3个函数实现以下功能:
//(1)求各门课的平均分
//(2)找出三门都不及格的学生,输出其全部信息
//(3)找出3门课平均分在80-90之间的学生,输出其信息。

typedef struct ymd{
    int year;
    int month;
    int day;
}YMD;

int IsRunian(int year);
int calc_days(YMD);
#endif

.c文件中各个函数的实现如下:

//
//  Days_calc.c
//  homework4
//
//  Created by 尹亚坤 on 13-10-23.
//  Copyright (c) 2013年 蓝鸥科技. All rights reserved.
//

#include <stdio.h>
#include "Days_calc.h"
int calc_days(YMD ymd)
{
    int year1= ymd.year;
    int month1=ymd.month;
    int day1=ymd.day;
    int days=0;
    if (1==IsRunian(year1))//如果是润年的话,走在这里面的程序.
    {
        
        int Rmounths[]={31,29,31,30,31,30,31,31,30,31,30,31};
        if (month1==1)
        {
            days=day1;
            
        }
        else
        {
            for (int i=0; i<month1-1; i++) {
                days=days+ Rmounths[i]+day1;
            }
        }
        
    }
    else//不是润年走在else里的程序.
    {
        int Mounths[]={31,28,31,30,31,30,31,31,30,31,30,31};
        
        if (month1==1)
        {
            days=day1;
            
        }
        else
        {
            for (int i=0; i<month1-1; i++) {
                days=days+ Mounths[i]+day1;
            }
        }
    }
    
   // printf("该日期是改年的第%d天",days);
    return days;
}

int IsRunian(int year)
{
    //普通年能被4整除且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年)
    //②、世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
    if(year%4==0&&year%100!=0)
    {
        return 1;
    }
    else if (year%100==0&&year%400==0)
    {
        return 1;
    }
    else
    {
        return 2;
    }
    
}

下面是第二题丫:

//模拟n个人参加选举的过程,四个候选人ABCD。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。

.h文件中代码:

#ifndef homework4_Election_h
#define homework4_Election_h
//2、模拟n个人参加选举的过程,四个候选人A、B、C、D。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。
typedef struct candidates{
    char name;
    int get_num;
}candidaor;
void calc_candidates(candidaor [],int len);

#endif

.c代码

#include <stdio.h>
#include "Election.h"
void calc_candidates(candidaor cand[],int len)
{
    candidaor temp;
    for (int i=0; i<len; i++) {
        for (int j=len-1; j>i; j--) {
            if (cand[j-1].get_num>cand[j].get_num) {
                temp=cand[j-1];
                cand[j-1]=cand[j];
                cand[j]=temp;
            }
        }
    }
    
   // return temp.name;
}

好了,最后一题了

.h代码:

#ifndef homework4_calc_score_h
#define homework4_calc_score_h
//3、某班5个学生,3门课,编写3个函数实现以下功能:
//(1)求各门课的平均分
//(2)找出三门都不及格的学生,输出其全部信息
//(3)找出3门课平均分在80-90之间的学生,输出其信息。

typedef struct stu{
    int grade_course1;
    int grade_course2;
    int grade_course3;
    char name[20];
}Student;
void avg_grade(Student [],int len);//求各门课程的平均成绩
void tooless_greade(Student[],int len);//找出三门都不及格的学生,输出其全部信息
void print_good_info(Student[],int len);//找出3门课平均分在80-90之间的学生,输出其信息。


#endif

.c代码为:

#include <stdio.h>
#include "calc_score.h"
void avg_grade(Student stus[],int len)//求各门课程的平均成绩
{
    int sum,sum1,sum2;
    float avg,avg1,avg2;
    sum=0;
    sum1=0;
    sum2=0;
        for (int i=0; i<len; i++)
        {
            sum+=stus[i].grade_course1;
            sum1+=stus[i].grade_course2;
            sum2+=stus[i].grade_course3;
        }
    avg=(sum+0.0)/len;
    avg1=(sum1+0.0)/len;
    avg2=(sum2+0.0)/len;
    printf("avg_grade1=%f
",avg);
     printf("avg_grade2=%f
",avg1);
     printf("avg_grade3=%f
",avg2);
}

void tooless_greade(Student studs1[],int len)//找出三门都不及格的学生,输出其全部信息
{
    for (int i=0; i<5; i++) {
        if (studs1[i].grade_course1<60&&studs1[i].grade_course2<60&&studs1[i].grade_course3<60) {
            printf("%s的三门成绩都小于60分,三门成绩为:%d,%d,%d
",studs1[i].name,studs1[i].grade_course1,studs1[i].grade_course2,studs1[i].grade_course3);
        }
    }
}

void print_good_info(Student students[],int len)//找出3门课平均分在80-90之间的学生,输出其信息。
{
    for (int i=0; i<len; i++) {
        int sum_3=0;
        float avg_3=0;
        sum_3= students[i].grade_course1+students[i].grade_course2+students[i].grade_course3;
        avg_3=(sum_3+0.0)/3;
        if (avg_3>80.0&&avg_3<90.0) {
            printf("%s的三门成绩在80到90之间。
",students[i].name);
        }
    }
}

好了三个题的代码都贴上了,下面到主函数中来运行吧。(这些都是自己写的,可能有的写的不怎么好,方法不是最好的。在这里写下来就是加深记忆。)

#include <stdio.h>
#include "Days_calc.h"
#include "Election.h"
#include "calc_score.h"
int main(int argc, const char * argv[])
{

    // /////////////第一题
  
    YMD ymd1={2010,2,3};
    printf("是今年的第%d天。
", calc_days(ymd1));
    ////////////////第二题
    candidaor cans[]={{'A',78},{'B',67},{'C',90},{'D',100}};
    calc_candidates(cans,4);
    for (int i=0; i<4; i++) {
        printf("%c:%d
",cans[i].name,cans[i].get_num);
    }
    
    Student stus[5]={{51,47,29,"zhangsan1"},{52,88,49,"zhangsan2"},{87,97,79,"zhangsan3"},{26,77,39,"zhangsan4"},{36,77,39,"zhangsan5"}};
    avg_grade(stus,5);
    tooless_greade(stus,5);
    
    print_good_info(stus,5);
    return 0;
}

最后给自己一个运行图:

算了吧,到现在还不会截图呢。

运行结果为:

是今年的第34天。

B:67

A:78

C:90

D:100

avg_grade1=50.400002

avg_grade2=77.199997

avg_grade3=47.000000

zhangsan1的三门成绩都小于60分,三门成绩为:51,47,29

zhangsan3的三门成绩在8090之间。

Program ended with exit code: 0

 

好了,今天到这里,明天继续,明天可能会有更好的方法来解决今天的题目。

原文地址:https://www.cnblogs.com/yinyakun/p/3384984.html