c语言学习迷茫不知道从哪里开始

大一的,对于c语言学习比较迷茫,不知道从哪里开始好,teacher直接讲怎么怎么做,b站的网课又是从零开始很冗杂,想好好学习这个有没有高人指点一下,入门是从网课开始还是从书又或者两方面一块入手,麻烦大家给点推荐和初步应该怎么做,每一个回答都会仔细看的。谢谢!

从零开始怎么了,你要觉得自己会了完全可以跳过,或者2倍速快速的过一遍完事
问题是你真的会了吗,还是以为会了,你自己写代码了吗,还是一直只是在看别人写代码
你从哪开始都无所谓
甚至不看书,不看课件,不看视频
就直接拿随便一个厂家写的demo直接看代码,能看懂你就厉害了,看不懂就去查,把基本概念全部弄清楚,也就会了
有句古话说的好,临渊羡鱼不如退而结网
关键不是怎么干,而是先干起来再调整
老是想等别人把路都给你铺好了你再下地走路,那一辈子就躺平了

新手入门的话,可以先从网站看 C语言基础 看完一遍,可以做一些小练习,不会的章节,比如

  • 变量、数据类型、运算符和表达式

  • 控制语句(if、for、while等)

  • 数组、指针和函数

  • 文件操作(输入输出、文件读写等)
    有针对的去看一些网上的视频教程。

  • 习语法和编程思想只是第一步,实际上要真正掌握一门编程语言,就需要大量的练习和实战。您可以试着完成练习题、编写小项目,或是参与开源项目等。

  • 其次就是多参加社区和交流等

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7600496
  • 这篇博客也不错, 你可以看下已有a,b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。
  • 除此之外, 这篇博客: C语言-思路与编程1中的 8、甲学院获a项,乙学院获b项。从键盘上分别给变量a、b输入甲乙奖励数,在计算机交换a、b变量值,在屏幕上输出较大值。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • (1)写出上述编程思路。

    (2)根据(1)思路编程序。

    (1)1)定义整型变量a,b,从键盘中接收a,b的值;2)用C语言中的三目运算符判断a,b的中的较大值;3)在屏幕上输出较大值。

    (2)代码如下:

    #include <stdio.h>
    
    int main() {
        int a,b;
        scanf("a=%d,b=%d",&a,&b);
        printf("a,b中的较大值是:%d\n",(a>b) ? a: b);
        return 0;
    }
    
  • 以下回答由chatgpt基于相关博客总结生成:

    对于C语言的学习,建议先从入门书籍入手,通过系统的学习,逐步建立C语言的基础知识。在学习的过程中,可以配合相关的网课或视频,对于不理解的知识点可以通过搜索引擎或者论坛等方式进行补充学习。同时,由于C语言中涉及到很多基础性很强的计算机概念,建议也跟进计算机基础知识的学习。下面是对参考资料中的三个问题的解决方案:

    1. 判断杀人凶手问题:

    根据参考资料中的提示,我们可以采用循环和条件判断的方式进行求解。具体做法是,使用一个循环,依次枚举4个嫌疑犯,对于每一个嫌疑犯,通过判断其说的话的真假性,确定是否是凶手。判断的条件是,三个人说真话,一个人说假话,则凶手是那个说假话的人。代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        char killer;
        for (killer = 'A'; killer <= 'D'; killer++)
        {
            if (((killer!='A')+(killer=='C')+(killer=='D')+(killer!='D'))==3)
            {
                printf("凶手是%c\n", killer);
            }
        }
        system("pause");
        return 0;
    }
    
    1. 堆排序问题:

    堆排序是非常高效的排序算法,其思路是基于堆这种数据结构实现的。首先需要了解堆的基本属性:堆是一棵完全二叉树,满足堆属性(最大堆或最小堆),即每个节点的值都大于等于或小于等于其子节点的值。实现堆排序的基本流程:先将待排序数组构建成一个堆,然后依次将堆顶元素(最大元素或最小元素)与堆中最后一个元素交换,并维护剩余元素构成的堆的属性。重复以上操作直至所有元素有序。下面是堆排序的代码实现:

    // 将待排序数组arr构建成大根堆
    void buildMaxHeap(int* arr, int len)
    {
        for (int i = floor(len / 2) - 1; i >= 0; i--)
            heapify(arr, len, i);
    }
    
    // 以父节点i为根节点的堆进行调整
    void heapify(int* arr, int len, int i)
    {
        int largest = i; 
        int l = i * 2 + 1; 
        int r = i * 2 + 2; 
    
        if (l < len && arr[l] > arr[largest])
            largest = l;
    
        if (r < len && arr[r] > arr[largest])
            largest = r;
    
        if (largest != i) {
            swap(arr, i, largest); 
            heapify(arr, len, largest);
        }
    }
    
    // 交换arr数组中下标为x和y的两个元素
    void swap(int* arr, int x, int y)
    {
        int temp = arr[x];
        arr[x] = arr[y];
        arr[y] = temp;
    }
    
    // 堆排序算法
    void heapSort(int* arr, int len)
    {
        buildMaxHeap(arr, len);
        for (int i = len - 1; i >= 1; i--) {
            swap(arr, 0, i);
            len--;
            heapify(arr, len, 0);
        }
    }
    
    1. 统计字符串中字母、数字、空格和其他字符的个数问题:

    这个问题的解决方案是使用一个循环,依次遍历字符串中的每个字符,对每个字符判断其类型(字母、数字、空格或其他字符),并记录下来。最后输出统计结果。具体代码如下:

    #include<stdio.h>
    void TongJi(char s[])
    {
        int ZiMu = 0, KongGe = 0, ShuZi = 0, QiTa = 0, i;
        for (i = 0; s[i] != '\0'; i++)
        {
            if (s[i] == 32) KongGe++;
            else if ((s[i] >= 48) && (s[i] <= 57)) ShuZi++;
            else if (((s[i] >= 97) && (s[i] <= 122)) || ((s[i] >= 65) && (s[i] <= 90))) ZiMu++;
            else QiTa++;
        }
        printf("空格:%d;数字:%d;字母:%d;其他:%d。\n", KongGe, ShuZi, ZiMu, QiTa);
    }
    
    int main()
    {
        char s[100];
        printf("请输入字符串:");
        gets_s(s);
        TongJi(s);
        return 0;
    }
    

我目前大三,建议看网课,去B站,尚硅谷和黑马的都可以。
忠告:不要太依赖老师。