c学习第3天
今天学习了结构体。诶呀,结构体丫丫的。
struct stu{
int age;
char name[20];
float score;
};
今天的作业呵呵,对我来说还可以吧。不是那么难。
//1、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
//2、模拟n个人参加选举的过程,四个候选人A、B、C、D。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。
//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个人参加选举的过程,四个候选人A、B、C、D。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。
.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\n",avg); printf("avg_grade2=%f\n",avg1); printf("avg_grade3=%f\n",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\n",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之间。\n",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天。\n", 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\n",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的三门成绩在80到90之间。
Program ended with exit code: 0
好了,今天到这里,明天继续,明天可能会有更好的方法来解决今天的题目。