学习内容:
8、编译和预处理
学习时间:
2020年12月06日20:00-21:00学习产出:
/*
编译和预处理
C语言的运行机制
主要过程:源代码,预处理,编译,链接,可执行文件。
程序错误分析
错误分类
语法错误
编译错误
语法问题
上下文关系有误
链接错误
逻辑错误
排错
静态排错
动态排错
预处理命令-宏定义
宏定义是最常用的预处理功能之一,它用于将一个标识符定义为一个字符串,这样,在源程序被编译器处理之前,预处理器会将标识符替换成所定义的字符串
不带参数的宏定义
#define 标识符字符串
宏定义中参数的替换
#undef指令取消宏定义
带参数的宏定义
#define 标识符(形参表) 字符串
预处理命令-文件包含
文件包含命令的形式
#include<文件名>
#include"文件名"
文件包含的实例
定义头文件date.h
定义文件date.c
使用date.c中的函数
运行函数
预处理命令-条件编译
#if/#else/#endif指令
根据常数表达式来决定某段代码是否执行
#if 判断表达式
程序段1
#else
程序段2
#endif
#ifdef指令
判断某个宏是否被定义
#ifdef 宏名
程序段1
#else
程序段2
#endif
#ifndef指令
判断某个宏是否没有被定义
#ifndef 宏名
程序段1
#else
程序段2
#endif
*/
/*
1、输入圆的半径,输出圆的面积和周长。(要求圆周率采用宏定义)
*/
#include<stdio.h>
#define IP 3.1415926535789
int main()
{
double r;
printf("请输入半径:");
scanf("%lf",&r);
printf("圆的面积为:%f\n",IP*r*r);
printf("圆的周长为:%f\n",2*IP*r);
return 0;
}
/*
2、从键盘输入六个实数。
请采用宏设计输出实数输出的格式。包括(1)一行输出一个实数 (2)一行输出两个实数
(3)一行输出三个实数。实数用“6.2f”格式输出
*/
#include<stdio.h>
#define q "%f\n"
#define w "%f\t%f\n"
#define e "%6.2f%6.2f%6.2f\n"
int main()
{
int i;
double a[6];
printf("请输入6个小数:");
for(i=0;i<=5;i++)
scanf("%lf",&a[i]);
printf("每行输出一个小数\n");
for(i=0;i<=5;i++)
printf(q,a[i]);
printf("每行输出两个小数\n");
for(i=0;i<=5;i+=2)
printf(w,a[i],a[i+1]);
printf("每行输出三个小数\n");
for(i=0;i<=5;i+=3)
printf(e,a[i],a[i+1],a[i+2]);
return 0;
}
/*
3、定义一个结构体类型名称为dog,它有数字类型:狗类型、年龄、体重等数据成员。用这个类型定义一个结构体变量“xiaohei”。输入信息,之后输出。
*/
#include<stdio.h>
struct dog
{
char a[100];
int b;
float c;
};
int main()
{
struct dog xiaohei;
printf("请输入小黑的类型:");
scanf("%s",&xiaohei.a);
printf("请输入小黑的年龄:");
scanf("%d",&xiaohei.b);
printf("请输入小黑的体重:");
scanf("%f",&xiaohei.c);
printf("小黑的简历表:\n");
printf("类型\t年龄\t体重\n");
printf("%s\t%d\t%.2f\n",xiaohei.a,xiaohei.b,xiaohei.c);
return 0;
}