C语言快速入门

#include <stdio.h>

int main(int argc, const char * argv[])
{
    printf("hello world\n");
    return 0;
}

变量与表达式

#include <stdio.h>

int main(int argc, const char * argv[])
{
    //求矩形面积
    int l,w,area; //定义变量
    l = 3;//变量赋值
    w = 4;
    area = l*w;//表达式

    printf("%d\n", area);
    return 0;
}

字符类型

#include <stdio.h>

int main(int argc, const char * argv[])
{
    //字符类型
    char c1,c2;
    c1 = 'a';
    c2 = 98;
   
    printf("%c %d\n", c1, c1);
    printf("%c %d\n", c2, c2);
    return 0;
}

条件语句

#include <stdio.h>

int main(int argc, const char * argv[])
{
    //条件语句
    int score;
    printf("please input score \n");
    scanf("%d", &score);

    if(score >= 60){
        printf("ok\n");
    }else{
        printf("sorry\n");
    }

    return 0;
}

输入三角形的三边长,求三角形面积。

#include <stdio.h>
#include <math.h>

int main()
{
  float a,b,c,s,area;
  
  scanf("%f %f %f", &a, &b, &c);
  s = 1.0/2*(a+b+c);
  area = sqrt(s*(s-a)*(s-b)*(s-c));
  printf("%7.2f\n",area);

  return 0;
}

条件分支

#include <stdio.h>

int main(int argc, const char * argv[])
{
    //条件语句
    int score;
    printf("please input score \n");
    scanf("%d", &score);

    switch(score/10){
        case 10:
        case 9: printf("best\n"); break;
        case 8:
        case 7: printf("better\n");break;
        case 6: printf("good\n");break;
        default:printf("week\n"); break;
    }

    return 0;
}

循环语句

#include <stdio.h>

int main(int argc, const char * argv[])
{
    //循环语句
    int n=1,sum=0;
    while(n<=100){
        sum = sum+n;
        n=n+1;
    }
    printf("%d\n",sum);
    
    return 0;
}
#include <stdio.h>

int main(int argc, const char * argv[])
{
    //循环语句
    int n=1,sum=0;

    do{
        sum = sum+n;
        n++;
    }while(n<=100);

    printf("%d\n",sum);

    return 0;
}
#include <stdio.h>

int main(int argc, const char * argv[])
{
    //循环语句
    int n=1,sum=0;

    for(n=1; n<=100; n++){
        if(n%2==0){
            sum += n;   
        }
    }

    printf("%d\n",sum);

    return 0;
}

数组

#include <stdio.h>

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

    //求一组玩家金币的最高值
    int player[10] = {1,2,3,4,2,5,10};
    int max = player[0];
    int length = sizeof(player)/sizeof(int);
    
    for(int i=0; i<length; i++){
        if(player[i]>max){
            max = player[i];
        }
    }

    printf("%i\n",max);

    return 0;
}

数组排序:冒泡排序

#include <stdio.h>

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

    //数组排序
    int player[10] = {1,2,3,4,2,5,10};
    int length = sizeof(player)/sizeof(int);
    int tmp = player[0];
    for(int i=0; i<length; i++){
        for(int j=0; j<length; j++){
            if(player[i] < player[j]){
                int tmp = player[i];
                player[i] = player[j];
                player[j] = tmp;
            }
        }
    }

    for(int n=0; n<length; n++){
        printf("%i\n", player[n]);
    }

    return 0;
}

字符串(字符数组)

#include <stdio.h>

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

    //字符串(字符数组)
    char name[20] = {'a','l','i','c','e','\0'};//\0是字符数组结束的标识
    printf("%s\n", name);

    return 0;
}

字符串处理库

#include <stdio.h>
#include <string.h>

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

    //字符串(字符数组)
    char name[20] = {'a','l','i','c','e','\0'};//\0是字符数组结束的标识
    char tmp[20] = {'o','k'};
    tmp[0] = 'k';

    strcpy(tmp,name);//将name中的字符拷贝给tmp
    printf("%s\n%s\n", name, tmp);

    strcat(name,tmp);//将tmp连接到name上
    printf("%s\n%s\n",name,tmp);

    return 0;
}

函数定义

#include <stdio.h>

//函数定义
int max(int a, int b)
{
    if(a>b){
        return a;
    }else{
        return b;
    }
}


//入口函数
int main(int argc, const char * argv[])
{
    int result = max(11,10);
    printf("%d\n", result);
    return 0;
}

求最大值

$ vim util.h
int max(int a, int b)
{
  return a>b ? a : b;
}

$ vim  program.c

#include <stdio.h>
#include "util.h" //加载自定义库


//入口函数
int main(int argc, const char * argv[])
{
    int result = max(11,10);
    printf("%d\n", result);
    return 0;
}

指针

$ vim program.c
#include <stdio.h>

int main()
{
  int i = 10;
  int *p;
  *p = &i;// 指向变量的指针,指针保存着变量在内存中的地址
  printf("%d\n%d\n", i, *p);
  return 0;
}

$ gcc program.c -o program
$ program.c
10
10

数组指针:指向数组的指针

$ vim program.c -o program
#include <stdio.h>

int main()
{
  int iarr[10] = {1,2,3,4,5,6,7,8,9};
  int *p;
  p = iarr;// *p = &iarr[0];
  printf("%d\n%d\n", *p, *(p+2));
  return 0;
}
$ gcc program.c -o program
$ program.exe
1
3

函数指针

$ vim program.c
#include <stdio.h>

int max(int x, int y)
{
  return x>y ? x : y;
}

int main()
{
  int (* p)(int a, int b);//定义函数指针
  p = max;
  printf("%d\n", p(1, 10));
  return 0;
}

$ gcc program.c -o program
$ program.exe
10

结构体

$ vim program.c
#include <stdio.h>
#include <string.h>
#定义结构体
struct User
{
  char username[20];
  int diamond;
}
#定义自定义类型
typedef struct _Admin
{
  char account[20];
  int status;
} Admin;

int main()
{
  sturct User u;//定义结构体变量
  strcpy(u.username, "junchow");
  u.diamond = 100;
  printf("%s\n%d\n", u.username, u.diamond);

  Admin admin;//定义自定义类型变量
  strcpy(admin.account, "junchow");
  admin.status = 1;
  printf("%s\n%d", admin.account, admin.status);

  Admin * root;
  root = &admin;
  printf("%s\n%d\n", root->account, root->status);

  return 0;
}

$ gcc program.c -o program
$ program.exe
junchow
100
junchow
1
junchow
1

结构体数组

$ vim program.c
#include <stdio.h>
// 定义自定义结构体类型
typedef struct _Player
{
  char name[20];
  int life;
  int job;
  // 定义联合体
  union {
    int classID;
    char officeAddress[20];
  }jobinfo;
} Player;

int main
{
  Player p;//定义自定义类型变量
  p.job = 1;
  if(p.job==0){
    p.jobinfo.classID=1;
    printf("%d\n", sizeof(p));
  }else{
    printf("please input job address\n");
    scanf("%s", p.jobinfo.officeAddress);
  }
  return 0;
}

结构体和联合体

$ vim program.c
#include <stdio.h>

typedef struct _Player{
  char name[20];
  int life;
  int job;
  union{
    int classID;
    char officeAddress[20];
  }jobinfo;
} Player;

int main()
{
  int length = 3;
  Player p[length];
  for(int i=0; i<length; i++){
    printf("please input job type\n");
    scanf("%d", &p[i].job);
    if(p[i].job == 0){
      printf("please input class id\n");
      scanf("%d", &p[i].job.classID);
    }else{
      printf("please input office address\n");
      scanf("%s", &p[i].job.officeAddress);
    }
  }
   return 0;
}
$ gcc program.c -o program
$ program.exe

NPC管理系统(bug)

#include <stdio.h>
#include <stdlib.h>

//定义结构体
typedef struct _NPC{
  int nid;
  char name[20];
  int nx,ny;
}NPC;
//定义节点对象
typedef struct _NDOE{
  NPC * data;
  struct _NPC * next;
}NODE;
//定义链表的头节点
NODE * head;
//添加节点
void addNode();
//查找节点
void searchNode(int nid);
//显示节点
void showNode();
//插入节点
void insertNodeAt(NODE *node, int index);
//定义枚举类型
enum SYSMENU{
  ADD,//1显示
  SEARCH,//2查询
  SHOW,//3显示
  QUIT//4
};

int main()
{
  enum SYSMENU input;
  head = NULL;
  //main menu
  while(1){
    printf("NPC Manage system\n0 add npc\n1 search npc\n2 show npc\n3 quit\n");
    scanf("%d", &input);
    switch(input){
      case ADD:
        printf("choose add npc\n");
        addNode();
        break;
        case SEARCH:
        printf("search npc\n");
        break;
      case SHOW:
        printf("show npc\n");
        showNode();
        break;
      case QUIT:
        printf("quit\n");
        exit(0);
        break;
      default:
        break;
    }
    printf("---------------------------------------------------\n");
  }
  return 0;
}

//添加节点
void addNode()
{
  //新节点
  NODE * inode = (NODE *)malloc(sizeof(NODE));//动态分配
  //链表数据区
  inode->data = (NPC *)malloc(sizeof(NPC));
  //节点赋值
  printf("please input npc id and name and position\n");
  scanf("%d %s %d %d", &inode->data->nid, &inode->data->name, &inode->data->nx, &inode->data->ny);
  if(head==NULL){
    //直接添加一个新节点
    head = inode;
  }else{
    //找到最后一个基点后添加
    NODE * pnode;
    pnode = head;
    while(pnode->next != NULL){
        pnode = pnode->next;
    }
    pnode->next = inode;
  }
}

void showNode()
{
  NODE * pnode;
  pnode = head;
  while(pnode != NULL){
    printf("%d %s %d %d", pnode->data->nid, pnode->data->name, pnode->data->nx, pnode->data->ny);
    pnode = pnode->next;
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,430评论 3 44
  • 一、框架 1、Mac系统及常用工具、进制;C数据类型、常量变量、运算符、表达式、格式化输入输出 2、关系运算符、逻...
    师景福阅读 685评论 0 1
  • C语言大总结 一、基础: 1、进制、位权、1字节等于8位(位是计算机的最小储存单位,字节是计算机最小存储单元)、十...
    雾中探雪阅读 2,819评论 1 36
  • 重返家乡 雪野中的我远眺着北方的一个角落,那里是我魂牵梦绕了十年的家。想到此,我泪如雨下。 流泪的原因,一是看到家...
    惊鸿独舞阅读 941评论 20 15
  • 知秋明冬春始夏 一山一水一晚霞 明月有时终有逝 不负江离秋兰花
    笔易景悲阅读 266评论 2 1