#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define PI 3.1414926
#define kCile(r) (PI*r*r)
#define avg(a, b) ((a+b)/2)
#define PULL(x) ((x&0xaaaaaaaa)>>1|(x&0x55555555)<<1)
typedef struct stu
{
int number;
char name[20];
char sex;
int age;
int score;
}Stu;
void changeStruct(Stu *p,Stu *p1,Stu *p2);
void changeStruct(Stu *p,Stu *p1,Stu *p2)
{
strcpy(p2->name, p->name);
strcpy(p->name, p1->name);
strcpy(p1->name, p2->name);
p2->sex= p->sex;
p->sex=p1->sex;
p1->sex= p2->sex;
p2->age=p->age;
p->age=p1->age;
p1->age=p2->age;
p2->score=p->score;
p->score=p1->score;
p1->score=p2->score;
}
void printScore(Stu *p,int count,int lScore,int hScore);
void printScore(Stu *p,int count,int lScore,int hScore)
{
for (int i = 0; i <count; i++) {
if ((p+i)->score>=lScore&&(p+i)->score<=hScore) {
printf("%s\t%c\t%d\t%d\n",(p+i)->name,(p+i)->sex,(p+i)->age,(p+i)->score);
}
}
}
void sortNumber(Stu *p,int count);
void sortNumber(Stu *p,int count)
{
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if ((p+j)->number>(p+j+1)->number) {
Stu a=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=a;
}
}
}
}
void sortScore(Stu *p,int count);
void sortScore(Stu *p,int count)
{
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if ((p+j)->score>(p+j+1)->score) {
Stu a=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=a;
}
}
}
}
void sortName(Stu *p,int count);
void sortName(Stu *p,int count)
{
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if (strcmp((p+j)->name, (p+j+1)->name)>0) {
Stu a=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=a;
}
}
}
}
int main(int argc, const char * argv[])
{
//1. (**)写一个函数交换两个结构体变量
/*
Stu student1={1,"jack",'m',24,11};
Stu student2={2,"rose",'f',20,22};
Stu student3={0};
changeStruct(&student1, &student2, &student3);
printf("%s\t%c\t%d\t%d\n",student1.name,student1.sex,student1.age,student1.score);
printf("%s\t%c\t%d\t%d\n",student2.name,student2.sex,student2.age,student2.score);
printf("%s\t%c\t%d\t%d\n",student3.name,student3.sex,student3.age,student3.score);
*/
//2. (**)有一学生数组写一函数打印出指定分数段的学生信息
/*
Stu stu[3]={{1,"jack",'m',24,88},{2,"rose",'f',20,78},{3,"lucy",'f',34,67}};
printScore(stu, 3, 70, 80);
*/
//3. (**)有一学生数组,,写包含5个学生一个函数,对学生排序(按学号从小到大),使用结构体指针操作数组元素
/*
Stu stu[5]={
{1,"jack",'m',24,88},
{2,"rose",'f',20,78},
{5,"lucy",'f',34,67},
{4,"zhangsan",'m',12,56},
{3,"lisi",'f',56,90}
};
sortNumber(stu, 5);
sortScore(stu, 5);
sortName(stu, 5);
for (int i = 0; i<5; i++) {
printf("%d\t%s\t%c\t%d\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].age,stu[i].score);
}
*/
//4. (**)有一学生数组,包含5个学生,写一个函数,对学生排序(按姓名从小到大),使用结构体指针操作数组元素
//5. (**)有一学生数组,包含5个学生,写一个函数,对学生排序(按分数从小到大),使用结构体指针操作数组元素
//6. (**)定义一个求圆面积的宏
// double a =kCile(6);
// printf("%f\n",a);
//7. (**)定义一个求2个数平均数的宏
// printf("%f",avg(2.0,9.0));
printf("%ld",PULL(6));
return 0;
}
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define PI 3.1414926
#define kCile(r) (PI*r*r)
#define avg(a, b) ((a+b)/2)
#define PULL(x) ((x&0xaaaaaaaa)>>1|(x&0x55555555)<<1)
typedef struct stu
{
int number;
char name[20];
char sex;
int age;
int score;
}Stu;
void changeStruct(Stu *p,Stu *p1,Stu *p2);
void changeStruct(Stu *p,Stu *p1,Stu *p2)
{
strcpy(p2->name, p->name);
strcpy(p->name, p1->name);
strcpy(p1->name, p2->name);
p2->sex= p->sex;
p->sex=p1->sex;
p1->sex= p2->sex;
p2->age=p->age;
p->age=p1->age;
p1->age=p2->age;
p2->score=p->score;
p->score=p1->score;
p1->score=p2->score;
}
void printScore(Stu *p,int count,int lScore,int hScore);
void printScore(Stu *p,int count,int lScore,int hScore)
{
for (int i = 0; i <count; i++) {
if ((p+i)->score>=lScore&&(p+i)->score<=hScore) {
printf("%s\t%c\t%d\t%d\n",(p+i)->name,(p+i)->sex,(p+i)->age,(p+i)->score);
}
}
}
void sortNumber(Stu *p,int count);
void sortNumber(Stu *p,int count)
{
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if ((p+j)->number>(p+j+1)->number) {
Stu a=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=a;
}
}
}
}
void sortScore(Stu *p,int count);
void sortScore(Stu *p,int count)
{
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if ((p+j)->score>(p+j+1)->score) {
Stu a=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=a;
}
}
}
}
void sortName(Stu *p,int count);
void sortName(Stu *p,int count)
{
for (int i = 0; i<count-1; i++) {
for (int j = 0; j<count-1-i; j++) {
if (strcmp((p+j)->name, (p+j+1)->name)>0) {
Stu a=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=a;
}
}
}
}
int main(int argc, const char * argv[])
{
//1. (**)写一个函数交换两个结构体变量
/*
Stu student1={1,"jack",'m',24,11};
Stu student2={2,"rose",'f',20,22};
Stu student3={0};
changeStruct(&student1, &student2, &student3);
printf("%s\t%c\t%d\t%d\n",student1.name,student1.sex,student1.age,student1.score);
printf("%s\t%c\t%d\t%d\n",student2.name,student2.sex,student2.age,student2.score);
printf("%s\t%c\t%d\t%d\n",student3.name,student3.sex,student3.age,student3.score);
*/
//2. (**)有一学生数组写一函数打印出指定分数段的学生信息
/*
Stu stu[3]={{1,"jack",'m',24,88},{2,"rose",'f',20,78},{3,"lucy",'f',34,67}};
printScore(stu, 3, 70, 80);
*/
//3. (**)有一学生数组,,写包含5个学生一个函数,对学生排序(按学号从小到大),使用结构体指针操作数组元素
/*
Stu stu[5]={
{1,"jack",'m',24,88},
{2,"rose",'f',20,78},
{5,"lucy",'f',34,67},
{4,"zhangsan",'m',12,56},
{3,"lisi",'f',56,90}
};
sortNumber(stu, 5);
sortScore(stu, 5);
sortName(stu, 5);
for (int i = 0; i<5; i++) {
printf("%d\t%s\t%c\t%d\t%d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].age,stu[i].score);
}
*/
//4. (**)有一学生数组,包含5个学生,写一个函数,对学生排序(按姓名从小到大),使用结构体指针操作数组元素
//5. (**)有一学生数组,包含5个学生,写一个函数,对学生排序(按分数从小到大),使用结构体指针操作数组元素
//6. (**)定义一个求圆面积的宏
// double a =kCile(6);
// printf("%f\n",a);
//7. (**)定义一个求2个数平均数的宏
// printf("%f",avg(2.0,9.0));
printf("%ld",PULL(6));
return 0;
}