`
microjava
  • 浏览: 318642 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

条件编译-结构体的使用

阅读更多
main()
{
  struct stu
  {
    int num;
    char *name;
    char sex;
    float score;
  } boy1,boy2;

  boy1.num=102;
  boy1.name="microjava";
  printf("input sex and score:");
  scanf("%c %f",&boy1.sex,&boy1.score);
  
  boy2=boy1;
  printf("Number:%d\nName:%s\n",boy2.num,boy2.name);
  printf("Sex:%c\nScore:%5.2f\n",boy2.sex,boy2.score);
}



main()
{
  struct stu
  {
    int num;
    char *name;
    char sex;
    float score;
  } boy2,boy1={102,"mcfeng",'M',98.5};

  boy2=boy1;
  printf("Number:%d\nName:%s\n",boy2.num,boy2.name);
  printf("Sex:%c\nScore:%5.2f\n",boy2.sex,boy2.score);
}



计算学生的平均成绩和不及格人数
struct stu
{
  int num;
  char *name;
  char sex;
  float score;
}boy[5]={
          {101,"Li ping",'M',45},
          {102,"Zhang ping",'M',62.5},
          {103,"He fang",'F',92.5},
          {104,"Cheng ling",'F',87},
          {105,"Wang ming",'M',58},
        }; 
main()
{
  int i,c=0;
  float ave,s=0;
  for(i=0;i<5;i++) 
  {
    s+=boy[i].score;
    if(boy[i].score<60) c++;
  }
  printf("s=%5.2f\n",s);
  ave=s/5;
  printf("average=%5.2f\ncount=%d\n",ave,c);
}




计算一组学生的平均成绩和不及格人数。用结构指针变量作函数参数编程。
struct stu
{
    int num;
    char *name;
    char sex;
    float score;
    }boy[5]={
        {101,"Li ping",'M',45},
        {102,"Zhang ping",'M',62.5},
        {103,"He fang",'F',92.5},
        {104,"Cheng ling",'F',87},
        {105,"Wang ming",'M',58},
      };
main()
{
    struct stu *ps;
    void ave(struct stu *ps);
    ps=boy;
    ave(ps);
}
void ave(struct stu *ps)
{
    int c=0,i;
    float ave,s=0;
    for(i=0;i<5;i++,ps++)
      {
        s+=ps->score;
        if(ps->score<60) c+=1;
      }
    printf("s=%f\n",s);
    ave=s/5;
    printf("average=%f\ncount=%d\n",ave,c);
}


通讯录
#define NUM 3
struct mem
{
  char name[20];
  char phone[18];
};

main()
{
  struct mem man[NUM];
  int i;
  for(i=0;i<NUM;i++)
  {
    printf("input name:");
    gets(man[i].name);
    printf("input phone:");
    gets(man[i].phone);
  }
  printf("name\t\t\tphone\n\n");
  for(i=0;i<NUM;i++)
  {
    printf("%s\t\t\t%s\n",man[i].name,man[i].phone);
  }
}



1.第一种形式:
#ifdef  标识符
  程序段1
#else
  程序段2
#endif
它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。如果没有程序段2(它为空),本格式中的#else可以没有,即可以写为:
#ifdef  标识符
程序段
#endif

2.第二种形式:
#ifndef 标识符 
      程序段1 
#else 
     程序段2 
#endif
      与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。

3.第三种形式:
#if 常量表达式
       程序段1
#else 
      程序段2
#endif
它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。

//#define FLAG ok
main()
{
  struct stu
  {
    int num;
    char *name;
    char sex;
    float score;
  } *ps;
  ps=(struct stu*)malloc(sizeof(struct stu));
  ps->num=102;
  ps->name="microjava";
  ps->sex='M';
  ps->score=99.5;
  
  #ifdef FLAG
    printf("Number=%d \nScore=%5.2f \n",ps->num,ps->score);
  #else
    printf("Name=%s \nSex=%c \n",ps->name,ps->sex);
  #endif
  free(ps);
}




#define R 1
main()
{
  float c,r,s;
  printf("input a number: ");
  scanf("%f",&c);
  #if R
    r=3.14*c*c;
    printf("area of round is:%f\n",r);
  #else
    s=c*c;
    printf("area of square is:%f\n",s);
  #endif
}

分享到:
评论

相关推荐

    家庭财务管理系统—可执行程序(c语言编译——结构体)

    在实际使用中,用户通过`FamilyEconomic.exe`执行程序,系统会加载`data.txt`中的历史记录,或者允许用户输入新的交易数据。程序会根据这些数据进行处理,提供友好的用户界面展示财务信息,帮助用户做出合理的财务...

    c程序设计语言课件,完整版。

    - 宏定义与条件编译 - 文件包含与头文件的使用 10. **第十章:位运算和位字段** - 位运算符:按位与(&), 按位或(|), 按位异或(^), 按位取反(~) - 位字段:在结构体中定义位字段以节省存储空间 通过学习这10个...

    谭浩强C语言word版

    《谭浩强C语言》是入门C语言编程的经典教材,由谭浩强教授编写,...此外,还可以了解到指针这一C语言的核心特性,以及如何使用预处理命令进行条件编译和宏定义。对于想要深入学习C语言的读者,此教程提供了坚实的基础。

    C语言学习教程课件(详细,深入)

    - 预处理器指令:#define,#include,条件编译 - 宏定义与函数宏 - 预处理头文件 10. **位运算** (ch12位运算.ppt) - 位运算符:按位与(&),按位或(|),按位异或(^),按位非(~),左移(),右移(&gt;&gt;) - 位字段与...

    九月份全国计算机等级考试二级C语言笔试上机题库.pdf

    - 条件编译:使用#ifdef、#else、#endif。 10. 流程控制结构的逻辑错误 - 例如错误地使用赋值运算符(=)代替等值运算符(==)。 以上内容反映了典型的C语言笔试和上机考试题目,涵盖了C语言基础知识点,如数据...

    c的初级代码

    - 预处理指令:学习#include、条件编译(如#if, #ifdef等)等预处理指令。 8. **Chap15 - 动态内存分配** - 动态内存管理:掌握malloc()、calloc()、realloc()和free()等函数,用于在运行时动态分配和释放内存。 ...

    c语言中级开发

    - **类型重定义(Typedef)**:使用`typedef`关键字可以为已有的数据类型或结构体定义一个新的名称,但不会创建新的数据类型。例如: ```c typedef int Integer; Integer i; // 相当于 int i; ``` - **常量**...

    C语言程序设计(谭浩强)

    - 宏定义与条件编译 - 头文件的包含与管理 11. **第11章:程序设计方法** - 结构化编程思想 - 函数的设计与调用策略 - 问题解决与算法设计 通过学习这11个章节,初学者可以全面了解C语言的语法和常用编程技巧...

    The C Programming Language

    - 宏定义、文件包含与条件编译的使用。 **第5章:指针与数组** - **指针与地址** - 指针变量的声明与使用; - 取地址运算符`&`与间接寻址运算符`*`。 - **指针与函数参数** - 通过指针传递数组; - 修改数组...

    讲解C语言基础的PPT

    - 条件编译:#ifdef、#ifndef、#endif 11. **内存管理** - 动态内存分配:malloc()、calloc()、realloc()、free() - 内存泄漏及其预防 12. **错误处理与调试** - 运行时错误和编译时错误 - 使用调试工具:如...

    C语言预处理、结构体和make的使用--C语言预处理命令

    ### C语言预处理、结构体和make的使用详解 #### C语言预处理命令解析 C语言的预处理机制是编译前的一个重要步骤,它包括宏定义、文件包含、条件编译等,这些预处理指令在编译之前由预处理器执行,对源代码进行...

    C语言程序设计+研究生复试+求职+面试题

    - 条件编译:根据条件编译不同的代码块,减少不必要的代码执行。 - 优化循环结构:合理安排内外层循环,减少CPU跨层切换次数。 2. `if...else`与`switch`的区别: - `if...else`可以处理任何布尔表达式,`switch...

    c语言课本(谭浩强)学习代码

    - 预处理器指令:宏定义、条件编译。 - 头文件的包含和作用,以及避免头文件重复包含的方法。 12. **CH12** - 异常处理 - 错误处理和异常检测。 - setjmp和longjmp函数实现非局部跳转。 13. **CH13** - 高级...

    计算机国家二级C上机题库

    - 宏定义 (#define) 的使用,包括简单的常量定义和条件编译。 - 文件包含 (#include) 的作用,了解头文件的组织和使用。 5. **输入/输出函数** - 标准输入输出流(scanf, printf)的使用。 - 文件操作,如fopen...

    现代编译原理--C语言描述

    ### 现代编译原理中的C语言结构体与类型定义 #### 标题与描述解析 本篇文章的标题及描述均为“现代编译原理—C语言描述”,这表明文章旨在探讨C语言在现代编译原理中的应用。C语言作为一种广泛应用的编程语言,其...

    The C Language Program

    - 条件编译指令(`#ifdef`, `#ifndef`)的作用。 #### 八、指针与数组 - **指针基本操作**: - 指针的定义与初始化; - 地址运算符与间接访问运算符的使用。 - **指针与数组的关系**: - 指针作为数组名的应用;...

    C面试题精华

    - 预处理器:熟悉宏定义、条件编译等预处理指令。 2. **内存管理**: - 内存区域:堆、栈、静态存储区的区别和作用。 - 动态内存分配:malloc、calloc、realloc、free等函数的使用与内存泄漏问题。 - 局部变量...

    c语言入门程序(学生成绩信息)(dev_cpp编译).rar

    其中,"dev_cpp编译"指的是使用Dev-C++集成开发环境进行编译和运行代码,这是一个轻量级且易于使用的C/C++ IDE。 1. C语言基础知识 - 变量与数据类型:C语言中的基本数据类型包括整型(int)、浮点型(float、...

Global site tag (gtag.js) - Google Analytics