ios学习记录 day9
1.递归函数 函数体内调用和函数相同的另一个函数
课上练习:
1)计算:s=5!
long value (int x)
{
if(x < 2){
return 1;
}
return x * value(x - 1);
}//递归函数
2).return 类似于break,没有返回值return 结束
void printNum(int x){
if (x < 1) {
return;
}
printNum(x - 1);// printf("%d\n",x);
printf("%d\n",x);//顺序 printNum(x - 1);//逆序
}
3).10进制转换2进制
void er(int x){
int n = 0;
n = x % 2;
x /= 2;
if (x > 0) {
er(x);
}
printf("%d",n);
}
2.结构体 (是一种类型)
结构体也是构造类型.比数组更灵活,可以放基本数据类型 数组 结构体.
定义:
struct 结构体名
{
类型 成员名;
类型 成员名;
........
};//分号不可少
3.内存占用:结构体所占的空间可以简单的认为是各个成员所占内存空间之和,实际是最大成员变量所占空间的最小整数倍.
字符型数据较特殊 挨着的前面有剩余内存的也用 其它的如果不是正好的不能用
4.typedef 原类型 新类型//类型重定义
1)struct person{
int age;
char name[20];
char sex;
};
typedef struct person Person;
2)typedef truct person{
int age;
char name[20];
char sex;
}Person;
5.结构体成员调用
per1.age = 99;
strcpy(per1.name, "longdd");
printPerson(per1);
Person per3 = per2;
Person min = per1.age < per2.age ? per1 : per2 ;
min = min.age < per3.age ? min : per3 ;
6.结构体嵌套 成员的访问
typedef struct myorigin{
float x;
float y;
}MyOrigin;
typedef struct size{
float width;
float height;
}MySize;
typedef struct myrect{
MyOrigin origin;
MySize size;
}MyRect;
int main(int argc, const char * argv[])
{
MyRect rect = {{3,5},{100,100}};
rect.origin.x = 15;
rect.size.width = 150;
return 0;
}
7.结构体数组
struct person{
int age;
char name[20];
char sex;
};//分号不能少!
typedef struct person Person;//类型重新定义struct person为Person
void printPerson(Person per){
printf("%d\n%s\n%c\n",per.age,per.name,per.sex);
}
int main(int argc, const char * argv[])
{
Person per1 = {26,"ZhaoYunlong",'f'};
Person per2 = {23,"ShenQingjun",'m'};
Person per3 = {26,"LiuChundong",'f'};
Person per4 = {26,"LiXiaolong",'m'};
Person per5 = {29,"YangKun",'m'};
Person per[5] = {{26,"ZhaoYunlong",'f'},per2,per3,per4,per5};
Person maxAge = {0};
for (int i = 0; i < 5; i++) {
if (maxAge.age < per[i].age) {
maxAge = per[i];
}
}
printPerson(maxAge);
for (int i = 0; i < 5 - 1; i++) {
for (int j = 0; j < 5 - i - 1; j++) {
if (per[j].age < per[j + 1].age) {
Person temp = per[j];
per[j] = per[j + 1];
per[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printPerson(per[i]);
}
return 0;
}
作业:
1、定义一个结构体变量(包含年月日),计算该日在本年中为第几天?要求写一个days函数。参数是此结构体类型的变量,返回值是整数。
typedef struct date {
int year;
int month;
int day;
}Date;
int days(Date date){
int a[11] = {31,28,31,30,31,30,31,31,30,31,30};
int sum = 0;
for (int i = 0; i < date.month - 1; i++) {
sum += a[i];
}
sum += date.day;
if (date.month > 2) {
if ((date.year % 4 == 0 && date.year % 100 != 0) || date.year % 400 == 0) {
sum++;
}
}
return sum;
}
int main(int argc, const char * argv[])
{
Date dat;
scanf("%d,%d,%d",&dat.year,&dat.month,&dat.day);
printf("%d\n",days(dat));
return 0;
}
2、模拟n个人参加选举的过程,四个候选人A、B、C、D。若选举某人直接输入其编号,最后按获得票数从高到低排序并输出候选人编号和票数。
struct candidate{
char name[10];
int score;
};
typedef struct candidate Candidate;
void xuanju(){
Candidate can[5] = {{'A',0},{'B',0},{'C',0},{'D',0},{"弃权",0}};
int n = 0;
scanf("%d",&n);
for (int i = 0; i < n; i++) {
int r = arc4random() % (4 - 0 + 1) + 0;//随机找一个人得下标
can[r].score++;//票数+1
}
for (int i = 0; i < 5 - 1; i++) {
for (int j = 0; j < 5 - i - 1; j++) {
if (can[j].score < can[j + 1].score) {
Candidate temp = can[j];
can[j] = can[j + 1];
can[j + 1] = temp;
}
}
}
for (int i = 0; i < 5; i++) {
printf("%s:%d\n",can[i].name,can[i].score);
}
}
int main(int argc, const char * argv[])
{
xuanju();
return 0;
}
3、某班5个学生,3门课,编写3个函数实现以下功能:
(1)求各门课的平均分
(2)找出三门都不及格的学生,输出其全部信息
(3)找出3门课平均分在80-90之间的学生,输出其信息。