栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C基础(一)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C基础(一)

C基础

/src/inpu.c

#include 
#include 

NODE *g_index_stu;
NODE *g_stu;
int g_index=0;

int Stu_num_init(int flag_mode)
{
    NODE *stu_index_tmp = Creat_Stu_Num();
	g_stu = Creat_Stu_Num();
	
	g_index_stu =stu_index_tmp;
	g_index_stu->next = g_stu;
    g_index_stu ->head =  g_index_stu;   //头节点等于当前指针
    g_index_stu ->previous = g_index_stu ;  //上一个节点为空
	g_index_stu->index=g_index++;
	g_index_stu->student=NULL;
	
    student_t  *i_student = Creat_Student();
    g_stu->student = i_student;
	g_stu->previous = g_index_stu;
	g_stu->head = g_index_stu;
	g_stu->next = NULL;
    return RET_ZER;
}

NODE *Get_G_Stu(G_Stu_Flag tmp_stu_falg)
{
	if(tmp_stu_falg >= G_STU_MAX)
		return NULL;
	
	switch (tmp_stu_falg)
		{
			case G_STU:
				return  g_stu;
			case G_STU_INDEX:
				return g_index_stu;
			default:
				return NULL;	
		}
}

student_t* Creat_Student()
{
	student_t *p_tmp_student = (student_t *)malloc(sizeof(struct student));
    memset(p_tmp_student,0,sizeof(struct student)); //清0 
    if (p_tmp_student == NULL)
    {
      printf("p_tmp_student error!");
      exit(RET_ERR);
    }
    return p_tmp_student;
}

NODE* Creat_Stu_Num()
{
    NODE *stu_num_tmp = (NODE *)malloc(sizeof(struct stu_num));
    memset(stu_num_tmp,0,sizeof(struct stu_num)); //清0 
    if (stu_num_tmp == NULL)
    {
      printf("stu_num_tmp error!");
	  exit(RET_ERR);
    }
    return stu_num_tmp;
}

int Input_add_student_info(NODE **stu)
{
	point_stu_shift();
	NODE *stu_tmp = *stu;
    char tmp_name[student_name_max_length];
    int  tmp_num;
    int  tmp_class;
    int8_t tmp_sex;
	
	printf("Please input student info :n");
    printf("name:t");
	scanf("%s",tmp_name);
	printf("num :t");
	scanf("%d",&tmp_num);
	printf("class:t");
	scanf("%d",&tmp_class);
	printf("index:t");
	scanf("%hhd",&tmp_sex);
	point_stu_shift();
    stu_tmp->index=g_index++;
    strncpy(stu_tmp->student->name,tmp_name,sizeof(tmp_name));
    stu_tmp->student->num=tmp_num;
    stu_tmp->student->class=tmp_class;
    stu_tmp->student->sex=tmp_sex;   
#if DEBUG
	printf("g_index:%dnn",g_index-1);
#endif
	CTC_FUN_RTUNCE(Insert_student_tail(stu_tmp));
}

int Input_remove_student_by_index()
{
    int tmp_index;
	printf("Please input remove student by index: n");
    printf("index:t");
	scanf("%d",&tmp_index);
    CTC_FUN_RTUNCE(Delte_student_from_index(tmp_index));
	return RET_ZER;
}

int Insert_student_tail(NODE *stu)
{
  printf("Insert_studentrn");
  if(stu==NULL)
    return RET_ERR;

#if DEBUG
 printf(" %d t %s t %d t %d t %d n",
      stu->index,stu->student->name,stu->student->num,stu->student->class,stu->student->sex);
#endif  
  g_stu->index = stu ->index;
  g_stu->count++;
  g_stu->student->num = stu->student->num;
  g_stu->student->class = stu->student->class;
  g_stu->student->sex = stu ->student ->sex;
  strncpy(g_stu->student->name,stu->student->name,sizeof(stu->student->name));
  return RET_ZER;
}

int  Delte_student_from_index(int tmp_index)
{
	if(tmp_index>=g_index || tmp_index <0)
	{
		printf("No search index:%d",tmp_index);
		return RET_ERR;
	}
	NODE *p_before_tmp=NULL;
	NODE *p_after_tmp =NULL;
	NODE *stu_tmp=NULL;
	stu_tmp=Get_G_Stu(G_STU_INDEX); //获取头节点	
	while(stu_tmp!=NULL)
	{
		if(tmp_index == stu_tmp->index && tmp_index>0)
		{
			if(stu_tmp->next==NULL)
			{	
				p_before_tmp=stu_tmp->previous;
				p_before_tmp->next=NULL;
				free(stu_tmp);
				return RET_ZER;
			}
			else if(stu_tmp->next!=NULL)
			{				 
				p_before_tmp=stu_tmp->previous;
				p_after_tmp=stu_tmp->next;
				p_before_tmp->next=p_after_tmp;
				p_after_tmp->previous=p_before_tmp;
				free(stu_tmp);
				return RET_ZER;
			}else{	
			  printf("Delte_student ERRrn");
			  return RET_ERR;
			}
		}
		stu_tmp=stu_tmp->next;
	}
	return RET_ZER;
}


int  Printf_stu_all()
{
  NODE *tmp_g_stu;
  tmp_g_stu =Get_G_Stu(G_STU_INDEX);
  if(tmp_g_stu==NULL)
    return RET_ERR;
  else
  {
    printf("index t name t num t class t sex rn");
    while(tmp_g_stu!=NULL)
    {
	    if(tmp_g_stu->student!=NULL)
	    {
	    printf("%03d t %s t %d t %d t %s  rn ",
	       tmp_g_stu->index,tmp_g_stu->student->name,tmp_g_stu->student->num,tmp_g_stu->student->class,tmp_g_stu->student->sex?"man":"woman");
	    }
	if(tmp_g_stu->next!=NULL)
    	tmp_g_stu =(NODE *)tmp_g_stu->next;
	else
		break;
    }	
  }
  return RET_ZER ;
}

void point_stu_shift()
{
	void *tmp_stu;
	tmp_stu=g_stu;
    g_stu ->next = Creat_Stu_Num();
	g_stu =(NODE *)g_stu->next;
    g_stu ->previous = (NODE *)tmp_stu;
	g_stu->student =Creat_Student();
    g_stu ->next =NULL;
}

int
main(int argc, char const *argv[])
{ 
#if 0
    CTC_FUN_RTUNCE(Stu_num_init(1));
    NODE *stu_tmp = Creat_Stu_Num();
    student_t  *p_tmp_student =Creat_Student();
    stu_tmp->student = p_tmp_student;

	Input_add_student_info(&stu_tmp);
    CTC_FUN_RTUNCE(Printf_stu_all());

	Input_add_student_info(&stu_tmp);
	
	Input_add_student_info(&stu_tmp);
	
    CTC_FUN_RTUNCE(Printf_stu_all());
   
	Input_add_student_info(&stu_tmp);
	CTC_FUN_RTUNCE(Printf_stu_all());
	
	CTC_FUN_RTUNCE(Input_remove_student_by_index());
	
	CTC_FUN_RTUNCE(Printf_stu_all());
	
	Input_add_student_info(&stu_tmp);
	CTC_FUN_RTUNCE(Printf_stu_all());
#endif
	test();
    return 0;
}
int fun1(int a)
{
	printf("fun1 !!! n ");
	return a+1;
}

int* fun2 (int *a)
{
	int b=11;
	int *p ;
	p=&b;
	printf("fun2 !!! *a:%d n",*a);
	return p;
}

void fun3 (int a)
{
	printf("fun3 !!! a:%d n",a+100);
}

void test()
{ 
	int ret= t_get_time(11);
	printf("ret :%d n ",ret);
#ifdef _MACRO
    printf("Hello , How are you?n");
#else
    printf("Sorry to lost you. n");
#endif
	typedef  int (* fun)(int );
    typedef  int *opera(int * );
	typedef  void  work(int );
	int *p,p_a;
	p_a=35;
	p=&p_a;
#if 0
	
	fun f1=&fun1;  
#else
    fun f1=fun1;
#endif
	ret =  f1(33);
	printf("ret1:  %d n",ret);
	opera *f2 = &fun2;
	p = f2(p);
	work *f3 = &fun3;
	f3(1);
}

/src/out.c

#include 
static int change_time_day(int day)
{   
    int ret_num=day+1;
    return ret_num;
}

int  t_get_time(int day)
{

    return change_time_day(day);
}

include/inpu.h

#ifndef   _STU_IN_PRO_
#define   _STU_IN_PRO_
#include 
#include 
#include 
#include 

#include 
#include 
#include 

#include 
#include 
#endif

#define CTC_FUN_RTUNCE(fun)                   
do{                                           
    int ctc_ret =(fun); 				      
    if(ctc_ret<0)							  
    {									      
        printf("ERROR! ret:%d n",ctc_ret);	  
        return ctc_ret;						  
    }                                         
}while(0)								  


#define  DEBUG      0
#define  RET_ONE    1
#define  RET_ZER    0
#define  RET_ERR    -1
#define  student_name_max_length  10
typedef void *my_oper(int );
typedef int (*p_fun)(int );
    
    int fun_a ;
   struct   time{
        int year;
        int month;
        int day;
    };
    struct student{
        int num;    //学号
        int class;  //班级
        int8_t sex;  
        char  name[student_name_max_length];   //性别
        struct time birth;
        struct time register_sc;
        void (*my_fun)(int );
    };
    typedef struct student student_t; 

    struct stu_num{
        int  index;        //结构体索引
        void *head;  //头节点
        void *next;  //指向下一个节点
        void *previous;    //上一个节点
        struct student *student;  //数据
        int count;   //数量
    };
    typedef struct stu_num NODE;
   
	enum G_STU_FLAG
	{
		G_STU,
		G_STU_INDEX,
		G_STU_MAX
	};
    typedef enum G_STU_FLAG G_Stu_Flag ;
	
    void test();
    int  Stu_num_init(int );
	NODE *Get_G_Stu(G_Stu_Flag);
	NODE* Creat_Stu_Num();
	student_t *Creat_Student();
	int Input_remove_student_by_index();
	int  Delte_student_from_index(int );
	int Input_add_student_info(NODE **);
    int  Insert_student_tail(NODE * );
    int  Printf_stu_all();
	void point_stu_shift();

include/out.h

#ifndef   _STU_OUT_PRO_
#define   _STU_OUT_PRO_
#include 
#include 
#define STU_SUM_NUM_OUT  58
#endif

static int change_time_day(int );
 int t_get_time(int );

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


Makefile

VERSION  = 1.0

PRO_STU_DIR :=$(shell  pwd)
TARGET_1 = app
TARGET = $(TARGET_1).$(VERSION) 
CC  :=  gcc 

SOURCE = $(wildcard   $(PRO_STU_DIR)/src/*.c)   #获取src目录下的所有的.c文件
File = $(notdir  $(SOURCE))                     # 去除路径
SRC_PATH = $(PRO_STU_DIR)/src

OBJ = $(patsubst %.c, %.o, $(SOURCE))      #.c 转为 .o  
OBJ_PATH =  $(PRO_STU_DIR)/obj

INCLUDE_PS = $(wildcard   $(PRO_STU_DIR)/include/*.h)   #获取src目录下的所有的.c文件
INCLUDE_PATH = -I $(PRO_STU_DIR)/include/

DHDEFINE = -D_MACRO    #宏定义  
CFLAGS = -Werror   #编译标志位  
#CFLAGS = -Wno-strict-aliasing  #屏蔽gcc 编译报出的waring 信息
#CFLAGS = -w
GCC_OBJ_PATH := $(patsubst %.c,$(OBJ_PATH)/%.o, $(notdir $(SOURCE)))
OBJ_OD_PATH  := $(patsubst %.c, $(OBJ_PATH)/.%.o.d,$(notdir $(SOURCE)))
OBJ_OD_PATH  := $(wildcard  $(OBJ_OD_PATH))
#@$(PRO_STU_DIR)/out/$@    执行目标文件

$(TARGET):$(GCC_OBJ_PATH)
	@$(CC)   $(GCC_OBJ_PATH) -o   ./out/$(TARGET)

ifneq ($(OBJ_OD_PATH), )
include $(OBJ_OD_PATH)
endif

$(OBJ_PATH)/%.o : $(SRC_PATH)/%.c
	@$(CC) -c -g $<  -o $@  -MD -MF $(OBJ_PATH)/.$(notdir $@).d  $(CFLAGS)   $(INCLUDE_PATH)  $(DHDEFINE)
	
.PHONY:clean
clean: 
	rm -rf  $(PRO_STU_DIR)/obj/*  
distclean:
	@rm -rf  $(PRO_STU_DIR)/obj/*  
	@rm -rf  $(OBJ_OD_PATH)
	@rm -rf  $(PRO_STU_DIR)/out/* 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/298057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号