C语言09 -- 高级指针

来源:互联网 发布:如何评价火绒 知乎 编辑:程序博客网 时间:2024/05/16 05:05

//
// main.m
// C9–高级指针
//
// Created by dllo on 15/7/10.
// Copyright (c) 2015年 Gaozi. All rights reserved.
//

import

import “MY - FUD.h”

// 宏是一个替换过程. PI 来 替代3.14,所以3.14后面不能加;

define PI 3.14

// 带参数的宏.

// 计算两个数的积

define MUL(A,B) (A) * (B)

define NUL(A,B) A * B

define BUL(A,B) (A*B)

define MAXVALUE(A, B) (A) > (B) ? (A) : (B)

// 条件编译一– 若是PI被定义过,就走20,否则走50.

ifdef PI

define TEXT 20

else

define TEXT 50

endif

// 条件编译二:

ifndef PI

define TEST 20

else

define TEST 50

endif

// 第三种
//条件有两种,一种是0,一种是1

if 1

int a = 10;

define TEST 20

else

int a = 50;

define TEST 50

endif

int main(int argc, const char * argv[]) {

printf("%c",'i'+2);int a1 = 10,b1 = 30;printf("mul=%d\n",MUL(a1+1, b1));printf("nul=%d\n",NUL(a1+1, b1));printf("bul=%d\n",BUL(a1+1, b1));// 定义一个结构体类型的变量Student stu = {"小红",22,'w',96.5};printf("%s\n",stu.stuName);Student temp = stu;// 常量数组,不允许通过名字直接取等赋值,但是结构体可以.int arr[2] = {0,2};int temp1 = arr;// 指针变量int *p = NULL;int a = 10;char str[20] = "";

// scanf(“%d”,&a);
// scanf(“%s”,str);
printf(“%p\n”,&a);
p = &a;
printf(“%d\n”,*p);

int arr1[6] = {5,6,7,8,9,4};int *p1 = arr1;bubbleShort(p1, 6);// 自定义数据类型.Student stu1 = {"小芳",23,'w',97};Student *p3 = &stu1;printf("%p\n",p3);printf("%p\n",&stu1);// p保存地址是结构体的地址,*p取到的结果相当于地址所对应的结构体的变量,之后的用法和结构体相同.printf("%g\n", (*p3).stuScore);p3->stuName;printf("%p\n",&stu1.stuName);printf("%p\n",&stu1.stuAge);// 求两个点之间的距离.point m = {10.21,20.39};point n = {50.46,60.97};

// point *po1 = &m;
// point *po2 = &n;

// point **p4 = {&po1,&po2};

pointDistance(&m,&n);// 将名字改成大写Student stu = {"aan ou",23,'m',96};//Student *p = &stu;stuName(&stu);

// // 结构体数组练习1
Student stu1 = {“haha”,21,’w’,98};
Student stu2= {“xixi”,22,’m’,97};
Student stu3 = {“lala”,25,’w’,93};
Student stu4 = {“houhou”,27,’w’,92};

Student student[4] = {stu1,stu2,stu3,stu4};printf("%p\n",student);printf("%p\n",&student[0]);Student *p = student;printf("%s\n",(p + 1)->stuName);printf("%c\n",p[1].stuName[0]);// student[i]和p[i]一样,取出来的是结构体,所以用.来找成员变量.//(p + 1)是根据指针来操作,用-> 来访问.// 用指针的方式来遍历所有学生姓名for (int i = 0; i < 4; i++) {    printf("%s ",p[i].stuName);}printf("\n");for (int i = 0; i < 4 - 1; i++) {    for (int j = 0; j < 4 - i -1; j++) {        if (strcmp(p[j].stuName ,p[j+1].stuName) > 0 ) {            Student temp = p[j];            p[j] = p[j+1];            p[j+1] = temp;        }    }}for (int i = 0; i < 4; i++) {    printf("%s ",p[i].stuName);}printf("\n");// 平均年龄和平均成绩.int ageCount = 0;float scoreCount = 0;for (int i = 0; i < 4; i++) {    ageCount += p[i].stuAge;    scoreCount += p[i].stuScore; }printf("%g  %g\n",ageCount/4.0,scoreCount/4.0);// 结构体数组练习2----女生加20分.超一百计100Student stu1 = {"haha",21,'w',68};Student stu2= {"xixi",22,'m',97};Student stu3 = {"lala",25,'w',93};Student stu4 = {"houhou",27,'w',52};Student four[4] = {stu1,stu2,stu3,stu4};Student *p = four;plasScore( p, 4);Person per1 = {"xiaoli",111,123,100};Person per2 = {"xiaowang",222,234,240};Person per3 = {"xiaozhang",333,456,350};Person per4 = {"xiaoyang",444,789,500};Person per[4] = {per1,per2,per3,per4};Person *pper = per;// 判断卡号和密码是是否正确.while(1){printf("\n");printf("请输入卡号:\n");int num = 0;int passnum = 0;scanf("%d",&num);printf("请输入密码:\n");scanf("%d",&passnum);int result = checkCardAndPassword(num, passnum, pper, 4);if (result ==  4) {    printf("您输入的卡号或密码不正确,请重新输入!");    continue;}else{    printf("登陆成功!\n");    printf("请输入您想要操作的钱财:~\n");    int money = 0;    scanf("%d",&money);    paymoney(pper,result ,money); }

}
// 宏定义
// 定义一个宏,命名要么全部大写,要不就是驼峰命名法 k+驼峰 的方式.
printf(“%g\n”,PI + 3);
int a =10 , b = 20;
printf(“%d\n”,MAXVALUE(a,b));
printf(“%d\n”,MUL(a, b));
printf(“%d\n”,MUL(3+4, 5));
// 要在宏的后面给A,B加上括号,防止运算符优先级的问题.

printf("test = %d\n",a);return 0;

}
//
// MY - FUD.h
// C9–高级指针
//
// Created by dllo on 15/7/10.sequens// Copyright (c) 2015年 Gaozi. All rights reserved.
//

import

import “MY - FUD.h”

void bubbleShort(int *p, int count){
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (p[j]>p[j+1]) {
int temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
}
}for (int i = 0; i < count ; i++) {
printf(“%d “,p[i]);
}
printf(“\n”);

}
void pointDistance(point *po1,point *po2 ){
float result = sqrt((po1->x - po2->x) (po1->x - po2->x) + (po1->y - po2->y)(po1->y - po2->y));
printf(“%.2f\n”,result);
}
void stuName(Student *p){
if (p->stuName[0] <= ‘z’ && ‘a’ <= p->stuName[0]) {
p->stuName[0] -= 32;
}
for (int i = 0; i < strlen(p->stuName); i++) {
if (p->stuName[i] == ’ ‘) {
p->stuName[i] = ‘_’;
}
}
printf(“%s\n”,p->stuName);
}
void plasScore(Student *p, int count){
for (int i = 0; i < count; i++) {
if (p[i].stuSex == ‘w’) {
p[i].stuScore += 10;
}
if (p[i].stuScore >= 100) {
p[i].stuScore = 100;
}
}
for (int i = 0; i < count; i++) {
printf(“%g “,p[i].stuScore);
}
printf(“\n”);
}
int checkCardAndPassword(int enterCard, int password, Person *p, int count){
for (int i = 0; i < count; i++) {
if (p[i].cardnum == enterCard && p[i].pasword == password) {
return i;
}
}
return 4;
}
void paymoney(Person *p, int result, int money){

if (p[result].moneyCount < money) {    printf("没钱取毛!重输!\n");}else{    p[result].moneyCount -= money;    if(p[result].moneyCount -= 0){        strcat(p[result].name, "00");    }    printf("%s\n",p[result].name);    printf("ZB成功~您的卡内还有余额%d!麻溜挣钱去!\n",p[result].moneyCount);}

}

0 0
原创粉丝点击