C语言枚举,联合体,预处理
2016-11-04 本文已影响0人
帅碧
枚举
enum Seaeon
{
spring,//spring=1;则summer=2
summer,//若summer=6,则autumn=7
autumn,
winter
};
int main()
{
enum Season season=spring;//(Season)1
enum Season season1=summer;
printf("season=%d\n",season);
printf("season1=%d\n",season1);
return 0;
}
>- 结果为0,1
- 作业:将字符串"123"以整型123输出
#include "stdio.h"
int func(char *str1)
{
char p[10];
int length=0,i,num=0;
while(*str1!='\0')
{
length++;
p[length-1]=*str1;
str1++;
}
for(i=0;i<length;i++)
{
num=num*10+(p[i]-48);
}
return num;
}
int main()
{
char string[20];
int num=0;
printf("请输入一个字符串\n");
scanf("%s",string);
getchar();
num=func(string);
printf("原来的字符串为%s\n",string);
printf("变成整形为:%d\n",num);
return 0;
}
双链表
#include "stdio.h"
#include "stdlib.h"
typedef struct LINK
{
int num;
struct LINK *pre;
struct LINK *next;
}LINK,*pLINK;
pLINK createDoubleList(pLINK head)
{
if(head==NULL)
{
head=(pLINK)malloc(sizeof(LINK));
head->pre=NULL;
head->next=NULL;
}
printf("双链表创建成功\n");
return head;
}
int getNum()
{
int num;
printf("请输入数字\n");
scanf("%d",&num);
return num;
}
void headInsertData(pLINK head)
{
if(head==NULL)
{
printf("双链表没有创建\n");
return;
}
if(head->next==NULL)
{
pLINK p=(pLINK)malloc(sizeof(LINK));
p->next=NULL;
p->pre=head;
head->next=p;
p->num=getNum();
return;
}
pLINK p=(pLINK)malloc(sizeof(LINK));
p->num=getNum();
p->next=head->next;
p->pre=head;
head->next=p;
p->next->pre=p;
printf("头插数据成功\n");
}
void printData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("无信息可打印\n");
return;
}
pLINK temp;
printf("head--->");
for(temp=head->next;temp!=NULL;temp=temp->next)
{
printf("[%d]--->",temp->num);
}
printf("NULL\n");
}
void tailInsertData(pLINK head)
{
if(head==NULL)
{
printf("双链表没有创建\n");
return;
}
pLINK temp;
for(temp=head;temp->next!=NULL;temp=temp->next);
pLINK p=(pLINK)malloc(sizeof(LINK));
temp->next=p;
p->next=NULL;
p->pre=temp;
p->num=getNum();
printf("尾插数据成功\n");
}
void headDeleteData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("无信息可删\n");
return;
}
if(head->next->next==NULL)
{
pLINK p=head->next;
head->next=NULL;
free(p);
p=NULL;
return;
}
pLINK p=head->next;
head->next=p->next;
p->next->pre=head;
free(p);
p=NULL;
printf("头删成功\n");
}
void tailDeleteData(pLINK head)
{
if(head==NULL||head->next==NULL)
{
printf("无信息可删\n");
return;
}
if(head->next->next==NULL)
{
pLINK p=head->next;
head->next=NULL;
free(p);
p=NULL;
return;
}
pLINK temp;
for(temp=head;temp->next!=NULL;temp=temp->next);
pLINK p=temp->pre;
p->next=NULL;
free(temp);
temp=NULL;
printf("尾删成功\n");
return;
}
int main()
{
pLINK head=NULL;
int select;
while(1)
{
printf("======\n");
printf("1.创建链表\n");
printf("2.头插数据\n");
printf("3.尾插数据\n");
printf("4.头删数据\n");
printf("5.尾删数据\n");
printf("6.打印数据\n");
printf("7.退出\n");
printf("=========\n");
scanf("%d",&select);
switch(select)
{
case 1:
head=createDoubleList(head);
break;
case 2:
headInsertData(head);
break;
case 3:
tailInsertData(head);
break;
case 4:
headDeleteData(head);
break;
case 5:
tailDeleteData(head);
break;
case 6:
printData(head);
break;
case 7:
return 0;
default :
break;
}
}
}
联合体
- 联合体:多个成员变量共用一块空间,一个时间段只能用其中的一个成员
- 如果成员变量都是基本数据类型,那么这个联合体的所占空间是最大成员变量所占的空间
- 如果不是基本数据类型,struct Person{int num;double score;};最后收尾是按成员变量里的最大字节数的成原变量的最小倍数。
- 最后徐收尾的时候,这个联合体所占的空间能够容纳最大成员变量的所占的空间,还要是单个成员变量字节数的最小倍数。
预编译处理
#define N 1
#include "stdio.h"
int main()
{
#if N
int a=8;
printf("a=%d\n",a);
#else
int b=9;
printf("b=%d\n",b);
#endif
return 0;
}
条件编译
#if N
#endif
#if N
#else
#endif
#if N
#elif M
#else
#endif
- 案例
#define N 0
#define M 0
#include "stdio.h"
int main()
{
#if N
int a=8;
printf("a=%d\n",a);
#elif M
int c=10;
printf("c=%d\n",c);
#else
int b=9;
printf("b=%d\n",b);
#endif
return 0;
}
#ifdef MM//分析:如果上面有对MM进行过宏定义,就编译ifdef下面的语句。
int a=9;
printf("a=%d\n",a);
#endif
return 0;
>- 结果为a=9;
#ifndef MM
int a=9;
printf("a=%d\n",a);
#endif
return 0;
>- 结果为:return 0;不执行a=9;