标签 c语言 下的文章

MAC下载使用Visual Studio Code (VS Code)

(Visual Studio Code)-VS Code for Mac

MAC下载使用Visual Studio Code (VS Code)

Visual Studio Code是一个轻量级但功能强大的源代码编辑器,可在桌面上运行,可用于Windows,MacOS和Linux。 它具有内置的对JavaScript,TypeScript和Node.js的支持,并且具有丰富的其他语言(如C ++,C#,Java,Python,PHP,Go)和运行时(如.NET和Unity)的扩展生态系统,使用VS Code开始您的旅程。

- 阅读剩余部分 -

一些c语言学习中的话,也是我的一个总结

2015年11月09日进入蓝鸥学习,然后现在第一阶段完事2015-11-24,两周/15天.
第一阶段学的是C语言,也是一个基础,之前在学校的时候也有学过C好像是2013年末吧,
然后上课也没有听过,在加上时间这么长,也全部忘记了.
然后2015-11-10 开始正式学习C语言,从开始学都现在,也从有点了解都慢慢遗忘,我也搞不懂到底怎么了.
2015-11-23-晚自习20:00开始C语言的测试,然后发现什么也不会,看不明白,尤其是在需要计算的时候,更加晕乎乎的.我不禁怀疑我的思考问题的方式,理解问题的方式(或者说是智商不够用),然后最近这几天特别的烦躁,在凳子上坐不住.而且特别压抑,总感觉自己这个不行,那个不行.而且奇怪的是上课的时候,我明明记住了,但是等下课之后,就考试迷迷糊糊的,一点一点忘记.我自己也搞不明白,好像没有学进去的样子,(好像是左耳朵进来右耳朵出去),弄的我也很尴尬,在别人学习进度都不错的情况下,感觉脱了后腿.
然后学习的时候,思想老是走空,不知道在想什么,不受控制的样子.而且像概念什么的也没有理解,或者说是没有记住,然后老师一提问,我就蒙逼了,很是尴尬.
下一阶段就是OC了,感觉好遥远,也忐忑,不会,或者是跟不上,或者又发生什么事.很是蛋疼.
唉,就这些吧,看情况了!或者说我是真不适合学这个,蛋疼的日子!

2015-11-20 C9_结构体指针

//
// main.m
// C9_结构体指针
//
// Created by YIem on 15/11/20.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

struct test {

int a;
float b;
char c;

};
typedef struct test TEST;
int main(int argc, const char * argv[]) {

// 结构体指针
int  a = 100;
int *p = &a;
TEST t = {1, 2, 'a'};
TEST *pT = &t;
printf("%d\n", t.a);
printf("%d\n", (*pT).a);
// 高能: -> 指向操作符
printf("%d\n", pT->a);
// 变量名.成员变量
// (*地址).成员变量
// 地址->成员变量
    // 这三种变量形式都是一样的




TEST t1 = {2, 2, 'b'};
TEST t2 = {3, 3, 'c'};
TEST ttt[] = {t, t1, t2};
// 结构体数组的指针遍历
for (int i = 0; i < 3; i++) {
    TEST *tt = ttt + i;
    // ttt[i].a
    // (*(ttt + i)).a
    // (ttt + i)->a
    printf("%d %f %c\n", tt->a, tt->b, tt->c);//
}





return 0;

}

2015 -11-20 内存管理 -------填坑

//
// main.m
// C9_内存管理
//
// Created by YIem on 15/11/20.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

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

// 填坑:
// 1.字符串
char s1[] = "iPhone";// s1 是一个常量地址不能被++
char *s2 = "iPhone";// s2 可以++ // s2 保存在常量,本身空间在栈区

// s1++; // 错误

s2++;
s1[0] = 'a';

// s2[0] = 'a'; // 错误

printf("%p %p\n", s1, s2);
printf("%s %s\n", s1, s2);// s2打印出Phone  s1 打印aPhone
// 2. 不同分区
char *s4 = "iPhone";
// 指向指针的指针(二级指针)
char **s5 = &s4;
printf("%p %p\n", s4, &s4);

// 通过malloc开辟一段'堆'空间 返回空间首地址 使用p6变量保存起来 p6变量自身在 '栈' 中
int *p6 = malloc(4);
printf("%p %p\n", p6, &p6);

// 其他内存分配函数
// calloc 分配空间后会清空
// 参数1: 元素个数
// 参数2: 单个元素大小
int *p7 = calloc(5, sizeof(int));
free(p7);

// realloc  重新分配空间
int *p8 = malloc(10);
// 参数1: 需要重新分配内存空间首地址
// 参数2: 新的空间大小
p8 = realloc(p8, 20);
free(p8);
printf("%lu\n", sizeof(p8));










return 0;

}

C_5函数 函数 的四大结构

//
// main.m
// C_5函数
//
// Created by YIem on 15/11/16.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

// 函数 的四大结构
/// 1.无返回无参数
void noReturnNoArgus(void) {

printf("无返回无参数\n");
return;// 表示 函数的结束/停止 return 下方的代码永远不会被执行

}
/// 2.无返回 有参数
void noReturnHasArgus(int a, float b, char c) {

printf("无返回有参数:%d, %f %c\n",a, b, c);

}
/// 3.有返回无参数
int hasReturnNoArgus(){

printf("有返回无参数\n");
return 100;

}
/// 4.有返回有参数
int hasReturnHasArgus(int a){

printf("有返回有参数\n");
return a;

}
// 函数的三要素: 定义 调用 声明

// 函数声明
// 格式: 返回值 函数名(参数)
void test();

// 函数声明
int sumN(int n);
// 函数定义
int sumN(int n){

// 算法
//

return n;// return (1 + n) * n / 2;

}

int main(int argc, const char * argv[]) {
// argc -> 个数 argv -> 数组


// Function 函数

// 具有某种功能的代码段
// 完成某件事的一个人

// 函数的格式构成
// 函数返回值 函数名 (参数列表) { 函数体}
// 返回值: 只有void 无符号值 其他所有类型都是有返回
// 有返回值的函数 结尾处必须有return 无返回值的函数 可有可无
// 参数列表: 有参数/无参数  无参数时 只写一个void 或者什么都不写 有参数时 写(参数类型 参数名) 多个参数之间 逗号分隔
// 函数体: 要执行的代码

if 0

/// 函数的调用

// 返回值 = 函数名(参数);
// 1.无返回无参数
noReturnNoArgus();
// 2.无返回有参数
// 也可以通过int a = 100;
noReturnHasArgus(100, 3.14, '+');
// 3.有返回无参数
int b = hasReturnNoArgus();
printf("%d %d\n", b,hasReturnNoArgus());// 可以直接调用hasReturnNoArgus
// 4.有返回有参数
int c = hasReturnHasArgus(100);
printf("%d",hasReturnHasArgus(c));

endif

// 如 < # 输入内容 # >

/// bb




/// <#nihao#>

// 限时代码 2:30

if 0

int a[5] = {7, 2, 4, 5, 6};
for (int i = 0; i < 5; i++) {
    for (int j = 0; j <5 - 1; j++) {
        if (a[j] > a[j + 1]) {
            int temp = a[j];
            a[j] = a[j +1];
            a[j + 1] = temp;
        }
    }
}

for (int i = 0; i < 5; i++) {
    printf("%d",a[i]);
}


endif







//调用测试
test();

// 练习 计算1-n的值

int n = 0;
scanf("%d", &n);
printf("shi %d\n", n = (1 + n) * n / 2);
int result = sumN(n);
printf("%d\n", result);

// 书写过程: 声明->定义->调用
// 执行过程: main函数->自定义函数->回到main函数


return 0;

}

void test(){

printf("suibian\n");

}

C5_函数2 函数参数: 形(形式)参 / 实(实际)参

//
// main.m
// C5_函数2
//
// Created by YIem on 15/11/16.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

/// 求和
int sum(int a, int b);// 声明
int sum(int a, int b){//定义


return a + b;

}
int sub(int a, int b);
int sub(int a, int b) {

return a - b;

}
int ji(int a, int b);
int ji(int a, int b) {

return a * b;

}
int chu(int a, int b);
int chu(int a, int b) {

return a / b;

}
double yu(int a, int b);
double yu(int a, int b) {

return a % b;

}
/// 交换
void exchange(int a, int b);
void exchange(int a, int b) {

int temp = a;
a = b;
b = temp;

}

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

// 练习1.两个数求和
int he = sum(3, 5);

printf("%d\n", he);
//也可以直接打印(下面)
//printf("%d\n", sum(3, 5));

// 练习2.两个数求差

printf("%d\n", sub(5, 3));

// 练习3.两个数求积

printf("%d\n", ji(4, 6));
// 练习4.两个数求除

printf("%d\n", chu(9, 3));
// 练习4.两个数求余

printf("%.2f\n", yu(6, 4));

// 练习:交换两个数的函数
int a = 3, b = 5;
exchange(a, b);
printf("%d %d\n", a, b);


// 函数参数:

// 形参: 函数声明/定义处的为 形参 形参有类型
// 实参: 函数调用处的为 实参 没有类型 只有具体的 变量/值
// 实参由函数调用处 向函数定义中传递时 是复制过程




return 0;

}

C5_函数3.1 定义 声明

//
// main.m
// C5_函数3.1
//
// Created by YIem on 15/11/16.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//
// main 函数中写函数调用

import <Foundation/Foundation.h>

include "MyFunc.h"

// 递归函数 函数定义中调用当前函数
void diGui(){

diGui();
printf("随便\n");

}
// 递归 阶乘 5 4 3 2 1
int jieCheng(int n) {

if (1 == n) {
    return 1;
}
return n * jieCheng(n - 1);

}

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


// main 函数中写函数调用
printf("%d\n", maxTwo(3, 4));
// 函数嵌套调用
printf("%d\n", maxTwo(maxTwo(3, 4), 5));
// 函数中 只能调用函数 不能定义函数
// 定义只能写在main函数的外面
printf("%d\n", maxThree(3, 4, 5));
printf("%d\n", maxTwo(maxThree(3, 4, 5), 6));




//diGui();


return 0;

}











- 阅读剩余部分 -

2015-11-16- C_5函数

//
// main.m
// C_5函数
//
// Created by YIem on 15/11/16.
// Copyright (c) 2015年 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

// 函数 的四大结构
/// 1.无返回无参数
void noReturnNoArgus(void) {

printf("无返回无参数\n");
return;// 表示 函数的结束/停止 return 下方的代码永远不会被执行

}
/// 2.无返回 有参数
void noReturnHasArgus(int a, float b, char c) {

printf("无返回有参数:%d, %f %c\n",a, b, c);

}
/// 3.有返回无参数
int hasReturnNoArgus(){

printf("有返回无参数\n");
return 100;

}
/// 4.有返回有参数
int hasReturnHasArgus(int a){

printf("有返回有参数\n");
return a;

}
// 函数的三要素: 定义 调用 声明

// 函数声明
// 格式: 返回值 函数名(参数)
void test();

// 函数声明
int sumN(int n);
// 函数定义
int sumN(int n){

// 算法
//

return n;// return (1 + n) * n / 2;

}

int main(int argc, const char * argv[]) {
// argc -> 个数 argv -> 数组


// Function 函数

// 具有某种功能的代码段
// 完成某件事的一个人

// 函数的格式构成
// 函数返回值 函数名 (参数列表) { 函数体}
// 返回值: 只有void 无符号值 其他所有类型都是有返回
// 有返回值的函数 结尾处必须有return 无返回值的函数 可有可无
// 参数列表: 有参数/无参数  无参数时 只写一个void 或者什么都不写 有参数时 写(参数类型 参数名) 多个参数之间 逗号分隔
// 函数体: 要执行的代码

if 0

/// 函数的调用

// 返回值 = 函数名(参数);
// 1.无返回无参数
noReturnNoArgus();
// 2.无返回有参数
// 也可以通过int a = 100;
noReturnHasArgus(100, 3.14, '+');
// 3.有返回无参数
int b = hasReturnNoArgus();
printf("%d %d\n", b,hasReturnNoArgus());// 可以直接调用hasReturnNoArgus
// 4.有返回有参数
int c = hasReturnHasArgus(100);
printf("%d",hasReturnHasArgus(c));

endif

// 如 < # 输入内容 # >

/// bb




/// <#nihao#>

// 限时代码 2:30

if 0

int a[5] = {7, 2, 4, 5, 6};
for (int i = 0; i < 5; i++) {
    for (int j = 0; j <5 - 1; j++) {
        if (a[j] > a[j + 1]) {
            int temp = a[j];
            a[j] = a[j +1];
            a[j + 1] = temp;
        }
    }
}

for (int i = 0; i < 5; i++) {
    printf("%d",a[i]);
}


endif







//调用测试
test();

// 练习 计算1-n的值

int n = 0;
scanf("%d", &n);
printf("shi %d\n", n = (1 + n) * n / 2);
int result = sumN(n);
printf("%d\n", result);

// 书写过程: 声明->定义->调用
// 执行过程: main函数->自定义函数->回到main函数


return 0;

}

void test(){

printf("suibian\n");

}

C语言---给定某年某月某日,输出其为这一年的第几天

C语言---给定某年某月某日,输出其为这一年的第几天

int y = 0, m = 0, d = 0, ds = 0;

scanf("%d%d%d", &y, &m, &d);
ds = d;
switch (m - 1) {
    case 11:
        ds += 30;
    case 10:
        ds += 31;
    case 9:
        ds += 30;
    case 2:
        if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) {
            ds += 1;
        }
        ds += 28;
    default:
        break;
}

2015-11-14-C-5_二维数组

//
// main.m
// C5_二维数组
//
// Created by YIem on 8/15/15.
// Copyright (c) 2015 www.yiem.net YIem博客. All rights reserved.
//

import <Foundation/Foundation.h>

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

if 0

// 二维数组的定义
// 类型 数组名[第一维度(行)][第二维度(列)] = {初值};
int a[5] = {2, 7, 4, 3, 6};
int b[2][3] = {1, 2, 3, 4, 5, 6};
// 数组最后补0
int c[2][3] = {1, 2, 3, 4};
int d[2][3] = {{1, 2}, {3, 4}};
// 第一维度(行数)可以不写 但列数必须要写
int e[][3] = {1, 2, 3, 4, 5, 6};
// 数组名[行][列] 访问元素
printf("%d\n", e[1][0]);
// 二维数组遍历
// 外层循环 控制第一维度(行)
for (int i = 0; i < 2; i++) {
    // 内层循环 控制第二维度(列)
    for (int j = 0; j < 3; j++) {
        printf("%d ", e[i][j]);
    }
    printf("\n");
}

// 练习: 定义一个4 * 5的二维数组 随机赋值34 - 56 输出打印
int f[4][5] = {0};// 空数组
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 5; j++) {
        f[i][j] = arc4random() % (56 - 34 + 1) + 34;
        printf("%d ", f[i][j]);
    }
    printf("\n");
}

endif

if 0

// 字符串数组
// 字符的二维数组 字符串的一维数组
char strings[4][20] = {"iPhone", "Sumsung", "Huawei", "ZTE"};
// 获取字符
printf("%c\n", strings[1][4]);
// 获取字符串
printf("%s\n", strings[2]);
// 字符串数组遍历
for (int i = 0; i < 4; i++) {
    printf("%s\n", strings[i]);
}
// 练习: 写一个字符串数组 内容为周围四个人名字拼音 遍历输出
char names[][20] = {"JiangXingFei",
                    "LiZhongRen",
                    "WangLiQian",
                    "WangJun",
                    "ZhouYou",
                    "YuTao"};
int count = sizeof(names) / sizeof(names[0]);
for (int i = 0; i < count; i++) {
    printf("%s\n", names[i]);
}
printf("--------华丽丽的分割线------\n");
for (int i = 0; i < count - 1; i++) {
    for (int j = 0; j < count - i - 1; j++) {
        if (strcmp(names[j], names[j + 1]) > 0) {
            char temp[20] = "";
            strcpy(temp, names[j]);
            strcpy(names[j], names[j + 1]);
            strcpy(names[j + 1], temp);
        }
    }
}
for (int i = 0; i < count; i++) {
    printf("%s\n", names[i]);
}

endif

if 1

// 多维数组
// 三维数组
int a[2][3][4] = {0};
// 层
for (int i = 0; i < 2; i++) {
    // 行
    for (int j = 0; j < 3; j++) {
        // 列
        for (int k = 0; k < 4; k++) {
            a[i][j][k] = arc4random() % 10;
            printf("%d ", a[i][j][k]);
        }
        printf("\n");
    }
    printf("\n");
}
// 数组每多一个维度 需要多加一个循环使用
// 数组元素个数 等于各个维度的乘积

endif


return 0;

}