标题:发布个《懒人学C语言》--速成版 此贴有效
只看楼主
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>    // srand rand
#include <time.h>    // time
void main()
{
    // 二维数组 二维也好 多维也好,都一样 把下标弄清楚就OK
    int num[20][15] = {0};
    int x = 0;
    int y = 0;

    // 学学随机函数的用法
    srand(time(0));    // 初始化随机种子 在程序最开始执行一次就可以 以后调用rand就可以用了

    // 如果把这个二维数组假设为棋盘(也可以假设为地图)
    // 初始化棋盘
    for (x=0; x<20; x++)
    {
        for (y=0; y<15; y++)
        {
            // rand返回0-RAND_MAX(十六进制:0x7fff,十进制:32767)的数,
            // rand()%8也就是产生一个0-7的随机数
            int r = rand()%8;    // 0-5为空 6为● 7为○ 这么设计是为了增加为空的概率
            num[x][y] = r;
        }
    }

    // 输出这个棋盘
    for (x=0; x<20; x++)
    {
        for (y=0; y<15; y++)
        {
            if (num[x][y] == 6)
                printf("");
            else if (num[x][y] == 7)
                printf("");
            else
                printf(" ");
        }
        printf("\n");
    }
}




[ 本帖最后由 闲出屁 于 2012-2-4 21:39 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 19:21
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
// 函数 更更伟大的东西
// 先学执行顺序
void Print()
{
    printf("我在这儿执行了!\n");
}
void main()
{
    printf("先执行我,然后:\n");

    Print();

    printf("最后才执行到我!\n");
}
先执行我,然后:
我在这儿执行了!
最后才执行到我!
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:40 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 19:22
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

// 函数 更更伟大的东西
// 返回值是这么回事儿
char fun1()
{
    return 'a';
}

int fun2()
{
    int nLen = strlen("abcd");
    return nLen;
}
void fun3()
{
    return;
}

void main()
{
    int n = 0;
    printf("fun1 返回 %c\n", fun1());
    n = fun2();
    printf("fun2 返回 %d\n", n);
    fun3();
    printf("fun3 啥也不返回!\n");
}
fun1 返回 a
fun2 返回 4
fun3 啥也不返回!
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-9 17:30 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 19:24
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <conio.h>

// 传参
// 把函数看成一个电视遥控器
// 返回值是告诉电视该显示哪个台
// 那在此之前,你要先按遥控器

int Menu(char ch)
{
    if (ch <= '9' && ch >= '0')
        return 0;
    else if (ch == 'q')
        return 1;
    else if (ch == 'a')
        return 2;
    return 3;
}

void main()
{
    printf("开始使用遥控器:\n");

    char input = getch();

    switch (Menu(input))
    {
    case 0:
        {
            printf("选择频道\n");
            break;
        }
    case 1:
        {
            printf("关闭电视\n");
            break;
        }
    case 2:
        {
            printf("静音\n");
            break;
        }
    case 3:
        {
            printf("电视没这个功能\n");
            break;
        }
    }
}

开始使用遥控器:
选择频道
Press any key to continue

开始使用遥控器:
关闭电视
Press any key to continue

开始使用遥控器:
静音
Press any key to continue

开始使用遥控器:
电视没这个功能
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:47 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:41
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>

// 传参
// 用函数时给函数的参数叫实参,实参可以有一个、多个或不定数量
// 函数定义中的参数叫形参,在C语言中,形参和实参个数要相同
// 返回值只能有一个
// printf就是一个不定数量参数的函数 还有传说中的scanf等等
// 不定数量一般用不上,实现过程也较麻烦,如有兴趣可查阅相关资料,很好找

// 让我们再仔细了解下函数的结构

// 函数声明
int add(int a, int b);    // 也可以这样写 int add(int , int ) 声明的时候可以不告诉编译器形参的名,告诉类型就可以了
                        // 函数的声明一般在你不知道函数调用和函数定义之间的先后编译位置时使用
                        // 当然函数声明还有可以快速让开发者查找和管理函数列表的用处,这点也很重要
void main()
{
    int b = 2;
    int a = add(5, b); // 函数的调用

    printf("a=%d\n", a);
}

// 函数的定义
int add(int a, int b)
{
    return a+b;
}
a=7
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:48 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:41
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>    // srand rand system
#include <time.h>    // time
#include <conio.h>

// 想想菜单的那个程序 如果这样写是不是就清晰多了


// 主菜单
void MainMenu()
{
    printf("\t我的游戏\n");
    printf("1.开始游戏\n");
    printf("2.排行榜\n");
    printf("3.游戏设置\n");
    printf("4.退出\n");
}

// 游戏过程
void Game()
{
    int nCount = 0;    // 统计猜测次数

    printf("按q退出游戏\n");
    for (int i=0; i<3; i++)    // 猜三次
    {
        printf("开始%d/3论猜测:\n", i+1);
        int r = rand()%10+'0';        // 产生一个0-9的随机字符
        while (1)
        {           
            char input = getch();
            if (input == 'q')   
            {// 输入q 退出游戏
                return;
            }
            else if (input > '9' || input < '0')
            {// 输入错误
                printf("输入错误,重新输入!\n");
            }
            else
            {// 输入0-9 输入正确。
                nCount++;
                printf("您输入的是:%c,", input);
                if (input > r)
                    printf("大于正确结果!\n");
                else if (input < r)
                    printf("小于正确结果!\n");
                else
                {
                    printf("恭喜你猜对了!\n");
                    break;        // 跳出while循环
                }
            }
        }
    }
    printf("您猜了%d次!\n", nCount);   
}

// 开始游戏
void Start()
{
    printf("系统产生一个0-9的数,请您对其猜测!\n");
    printf("按任意键开始游戏!\n");
    getch();
    Game();   
    printf("游戏结束\n");
    getch();
}

// 继续游戏
void Goon()
{
    printf("排行榜\n");
    getch();
    printf("还没有实现\n");
    getch();
    printf("退出游戏\n");
}

// 游戏设置
void Set()
{
    printf("游戏设置\n");
    printf("\t游戏声音\n");
    printf("\t游戏画面\n");
    printf("\t游戏难度\n");
    getch();
    printf("保存设置\n");
}

// 退出
bool Quit()
{
    printf("您确定要退出程序么?\n输入y/Y确定退出程序,其他键取消退出操作!:\n");
    char input = getch();
    if (input == 'y' || input == 'Y')
    {
        printf("您退出了游戏!\n");
        getch();
        return true;
    }
    return false;
}

// 初始化
void Init()
{
    srand(time(0));
}

// 开始
void Enter()
{
    while (1)
    {
        system("cls");
        MainMenu();

        char input = getch();    // 在VC/VS的cpp文件里,可以把变量声明放到程序过程中
        system("cls");
        switch (input)
        {
        case '1':
            {
                Start();
                break;
            }
        case '2':
            {
                Goon();
                break;
            }
        case '3':
            {
                Set();
                break;
            }
        case '4':
            {
                if (Quit())
                    return;
                else
                    break;
            }
        default:
            {
                printf("\a");
                break;
            }
        }
    }
}
void main()
{
    Init();
    Enter();
}
        我的游戏
1.开始游戏
2.排行榜
3.游戏设置
4.退出
系统产生一个0-9的数,请您对其猜测!
按任意键开始游戏!
按q退出游戏
开始1/3论猜测:
您输入的是:5,大于正确结果!
您输入的是:6,大于正确结果!
您输入的是:7,大于正确结果!
您输入的是:3,大于正确结果!
您输入的是:2,大于正确结果!
您输入的是:1,恭喜你猜对了!
开始2/3论猜测:
您输入的是:3,小于正确结果!
排行榜
还没有实现
游戏设置
        游戏声音
        游戏画面
        游戏难度
您确定要退出程序么?
输入y/Y确定退出程序,其他键取消退出操作!:


[ 本帖最后由 闲出屁 于 2012-2-4 21:50 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:41
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
// 宏定义
#include <stdio.h>

// 这部分只是编译器对程序进行的文本替换
// 编译出来的程序里是没有PI这个东西的,只是所有应用的3.1415926
#define PI    3.1415926    // 修改这里就可以改变所有的PI

double JiaoToHu(double jd)
{
    return (jd/180.0)*PI; // (jd/360.0)*(2*PI);
}
double HuToJiao(double hd)
{
    return (hd/PI)*180.0; // (hd/(2*PI))*360.0
}
void main()
{
    double jiaodu = 30.0;
    double hudu = 3.5;

    printf("圆周率为%lf\n", PI);
   
    printf("%3.2lf度=%3.2lf弧度\n", jiaodu, JiaoToHu(jiaodu));
    printf("%3.2lf弧度=%3.2lf度\n", hudu, HuToJiao(hudu));

    printf("除此之外还有ifdef,elseif,endif等等宏定义,可自己查资料!\n");
}
圆周率为3.141593
30.00度=0.52弧度
3.50弧度=200.54度
除此之外还有ifdef,elseif,endif等等宏定义,可自己查资料!
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:51 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:42
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>

// 指针 最伟大的东西
// 它有很多传说,用起来不难,但是确实软件开发最头痛的东西
// 可让开发者头疼的,主要就是什么时候释放动态申请的指针
// 刚开始学,会简单的用就行,不用有什么负担

void main()
{
    char sz[20] = "我是数组";
    char* sp = "我是指针";

    printf("%s\n", sz);
    printf("%s\n", sp);

    printf("%d\n", strlen(sz));
    printf("%d\n", strlen(sp));

    printf("%c%c\n", sz[2], sz[3]);
    printf("%c%c\n", sp[2], sp[3]);

    printf("%c%c\n", *(sz+4), *(sz+5));
    printf("%c%c\n", *(sp+4), *(sp+5));

    sp = sz;    // 如果你改为sz=sp 那么就会出现语法错误
    printf("%s\n", sp);
}
我是数组
我是指针
8
8




我是数组
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:51 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:42
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>

// 郁闷的事情来了
// sp指向的是内存的常量区 常量区的地址内容是不允许修改的
// 如果修改,程序就会崩溃
// 这么小的程序崩溃了不起眼 但是你想,如果一个大型软件,例如office
// 做一个这么大的软件,代码可能要几十万行,如果有一行这个东西,
// 那么程序运行到这儿,整个程序就会崩溃,程序会退出
// 如果是在office中,你写一个几万字的文档,没等你保存就崩溃了
// 客户杀了你的心都有

void main()
{
    char sz[20] = "我是数组";
    char* sp = "我是指针";

    sp[2] = 'x';
}




[ 本帖最后由 闲出屁 于 2012-2-4 21:53 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:42
闲出屁
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:420
专家分:612
注 册:2012-1-24
得分:0 
程序代码:
#include <stdio.h>
#include <malloc.h>

// 动态申请指针
// 在不知道需要多大内存空间的情况下,那你就要动态申请内存空间
// 在C语言中,数组的下标是不允许用变量的
// 而且一个变量可能现在需要100个内存地址,运行几行后就只需要2个了

// 初始化一个int指针
void InitPtr(int* p, int nLen)
{
    for (int i=0; i<nLen; i++)
    {
        p[i] = i;
    }
}
// 输出一个int指针
void OutPtr(int* p, int nLen)
{
    for (int i=0; i<nLen; i++)
    {
        printf("%d, ", p[i]);
    }
    printf("\n");
}

void main()
{
    // 数组指针
    int* p = NULL;    // NULL 为 0

    // 申请10个内存地址
    p = (int*)malloc(10*sizeof(int));
    if (p == NULL)
    {
        // 在现在的操作系统中,一般情况申请内存都会成功
        // 但是在好多年前,或者小型的操作系统,内存有限,是有可能申请失败的
        // 所以这个判断视情况,如果中windows开发 98以后的操作系统 xp win7之类的 都可以不判断
        // 因为如果内存不够,操作系统会中硬盘上开辟虚拟内存,够你用的
        printf("内存申请失败!\n");
        return;
    }

    InitPtr(p, 10);

    OutPtr(p, 10);
   
    // 释放指针
    free(p);
    p = NULL;    // 这步非常重要,必须要有
                // malloc动态申请出来的指针如果不free,那么会一直留在内存里,在程序结束后会造成内存泄露
                // 内存泄露很痛苦,可能会影响到操作系统,让整个操作系统变慢,
                // 之所以中free后把指针置空,原因是一个指针你用程序是无法判断指针是否被释放过
                // 这就尴尬了,如果你free两次,那程序会崩溃,如果你不free,那会造成内存泄露
                // 所以一般的开发模式都是free之后马上置空,在其他地方用到了,malloc之前先判断下当前是否为NULL
                // 如果为NULL malloc 如果不为NULL 先free 再置空 然后malloc
   
    if (p != NULL)
    {// 这个判断没用,只是对上面说明下
        free(p);
        p = NULL;
    }

    p = (int*)malloc(30*sizeof(int));

    InitPtr(p, 30);
   
    OutPtr(p, 30);
   
    // 释放指针
    free(p);
    p = NULL;
}
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22
, 23, 24, 25, 26, 27, 28, 29,
Press any key to continue


[ 本帖最后由 闲出屁 于 2012-2-4 21:54 编辑 ]

乔布斯是神 宫崎骏也是神~~ 才知道 原来士兵突击的主题曲是久石让的 久石让的音乐 真传神
2012-02-04 21:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360404-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.462485 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved