Go to Course: https://www.coursera.org/learn/c-chengxu-sheji
### Course Review and Recommendation: C程序设计进阶 (Advanced C Programming) If you've ventured into the world of C programming through "Introduction to Computer Science and Basics of C Language," the next logical step in your educational journey is the course **C程序设计进阶** (Advanced C Programming). This comprehensive course offers a deep dive into structured program design, essential programming skills, and cultivating effective coding habits to create robust computer programs. In this review, we'll explore the course structure, content, and benefits, making the case for why it should be a priority for aspiring programmers. #### Overview of the Course **C程序设计进阶** is aimed at learners who have some foundational knowledge of C programming and are eager to enhance their skills. This course emphasizes not just rote learning, but a pragmatic approach that combines theoretical concepts with practical exercises. The objective is clear: by the end of the course, you should be able to explain fundamental concepts of C programming and effectively use C to solve real-life problems. #### Course Structure and Highlights The course is strategically divided into several modules, each building on the previous ones to ensure a gradual yet solid progression of skills: 1. **Introduction to Structured Programs**: The journey begins with understanding the structured programming paradigm and the importance of modular code. This foundation sets the stage for more complex topics. 2. **Functions in C**: Functions form the backbone of organized programming. You'll learn about function definitions, calls, and parameters—key concepts that every programmer must master. 3. **Recursion**: Undoubtedly one of the course's more challenging aspects, recursion is tackled with clarity. The instructors focus on demystifying recursion, providing incremental learning steps, which ultimately help transform a daunting topic into a manageable one. 4. **Pointers**: Understanding pointers is crucial in C. You will explore various aspects, such as pointer variables, the relationship between arrays and pointers, and how to efficiently pass pointers in function parameters. 5. **Structures and Linked Lists**: This section broadens your knowledge of data structures. You will learn how to define and utilize structures as well as get a basic introduction to linked lists, equipping you with the skills needed to handle more complex data types. 6. **Object-Oriented Programming**: While the course is centered on procedural programming, it concludes with an introduction to object-oriented programming (OOP) concepts, giving you a glimpse into the next frontier of programming paradigms. 7. **Final Assessment**: The course wraps up with a comprehensive assessment designed to validate your grasp on the topics covered. It serves as a great way to measure your understanding and readiness for more advanced challenges in programming. #### Learning Approach One of the most commendable aspects of this course is its emphasis on practice. The instructors encourage learners to engage in numerous coding exercises, reiterating that programming skills are honed through hands-on experience. Additionally, the course continually adapts and incorporates feedback from past iterations, ensuring the content remains relevant and effective. #### Pros and Cons **Pros:** - Systematic and structured learning path. - Emphasis on both theory and practical coding exercises. - Supportive learning environment with step-by-step guidance on difficult topics. - Constant updates based on student feedback, enhancing the learning experience. **Cons:** - The depth of certain advanced topics (like recursion) may initially seem overwhelming. - Some programming concepts may require additional revision outside of the course materials. #### Final Recommendation If you have completed the introductory course on C programming and are looking to solidify your skills while developing advanced programming techniques, **C程序设计进阶** is highly recommended. It's an invaluable resource for anyone serious about programming in C and aims to build a strong foundation for further studies in computer science or software development. ### Conclusion Embrace the opportunity to deepen your understanding of C programming with **C程序设计进阶** on Coursera. By engaging with this course, you're not only expanding your skill set but paving the way for future learning and professional growth in the programming landscape. Start your journey today and unlock the potential of C programming!
欢迎加入《C程序设计进阶》
在学习完“理性认识C程序”之后,我们希望同学们能够自己动手编写一些简单的C程序了!如果你还没有具备这个能力,一个可能的原因是因为你还没有进行“足够的训练”。因为,学习一门程序语言,需要你获得的有两样东西——“知识”和“技巧”。“知识”可以通过讲授传递,但“技巧”却只能通过训练获得。因此,我们鼓励同学们在“理性认识C程序”这个迭代周期中,多多进行简单的编程练习,以便获得“技巧”。(注意:我们特别鼓励同学们多多进行“简单”的编程练习,因为,所有复杂的问题,都是简单问题的组合。我们的教学实践表明:多做简单练习,不但可以提升学习者的学习信心,也非常有助于编程技巧的提升!)在完成“理性认识C程序”部分的学习之后,我们将开始新的迭代周期——“结构化的程序”。在这个部分,我们将讲授一种基本的、用于将程序组织成“模块”的语言成分——函数。函数实际上是C程序的基本组织单位,是C程序设计中的重要组成部分。在这个迭代周期中,同学们不仅要学习函数的定义方式、调用方式,还要学习一种重要的函数使用方法——递归。我们将讲授递归调用的基本机理,并讲授“利用递归解决问题的技巧”。这部分,讲本课程C程序设计部分的一个难点!不过,请同学们不要担心,我们将力图通过最简明的讲解方式,帮助大家掌握“递归”的使用方法,力争“化困难于无形”。我们一起努力吧!PS:我们这门课程一直处在不断地建设与优化当中,吸取了很多以往课程的经典视频,所以如果你看到视频中出现了不同课程的名字,也不要惊讶哦,因为你正在集百家所长。
C程序中的函数本次课,我们讲授“函数”的基本概念、定义方式、调用方式、参数传递方式等基本知识。其间,我们还将讨论“变量的作用域”的问题。PS:我们这门课程一直处在不断地建设与优化当中,吸取了很多以往课程的经典视频,所以如果你看到视频中出现了不同课程的名字,也不要惊讶哦,因为你正在集百家所长:)
函数的递归本次课是C程序设计部分的一个难点。但,请不要担心,我们将按照“由简单到复杂”的方式进行讲解。我们先为大家讲解“递归调用”的执行过程,以便让大家看到“其实,递归调用与普通函数调用没什么不同”的道理,在此基础上,再去详细分解递归调用的过程,以印证我们学到的知识。 在此基础上,我们将通过几个典型的递归函数设计范例,向大家讲授递归函数的作用和使用技巧。 需要强调的是,如果在这个部分大家感觉到困难,请不要气馁:)因为,根据我们的教学经验,80%以上的同学都会感觉到同样的困难。当你也感觉困难时,可以先耐心听完我们的讲解,然后再通过练习慢慢体会。只要稍加练习,这个困难的感觉就会逐渐消失,因为,到那时,你已经对递归越来越熟悉了:)
指针(一)本次课我们为大家讲解“指针”“指针变量”“指向变量的指针”等名词的基本含义。在此,需要特别提示大家:请大家务必明确区分上述的基本概念,以便在后面的课程中准确的使用它们。 同时,我们还将向大家阐述一个重要的理解——数组名 与 指向数组首元素的指针 之间的关系,也请大家务必反复印证,以便日后轻松使用:)
指针(二)这次课是上次课的延续,我们将为大家讲解“指针与字符串”之间的关系,“二维数组名的含义”(这也是一个小难点,不过,只要大家谨记上次课中的结论,一切将会变得简单:)),以及“指针与函数参数”之间的关系(这种情况很常见哦:))。
指针(三)这次课我们将紧跟上一节的脚步,继续为大家讲解“指针做函数参数”及“指针做函数返回值”的两种情况,到此为止,你应该对于指针在C程序设计里的应用有一个比较全面的了解啦,不妨在本次课末尾画个思维导图考考自己,是否弄清楚了这个重要的概念。
结构体与链表这次课,我们将为大家讲解“结构体”的基本概念、定义方式和使用方式,结构体的使用将为某些程序的编写带来极大的便利:)在此基础上,我们还将介绍“链表”的基本概念和创建方法。需要说明的是,在我们的课程上,链表将不作为一个重点练习的内容,因为,在后续的课程中,它将被反复大量的讨论:)
最后一次课这是C程序设计课程的最后一次课,也是一次“承前启后”的课程。我们将介绍“面向对象”编程方法的基础思想。我们希望通过这个简短的介绍能够让大家对“面向对象”的软件设计方法有一个最初步的了解,以便顺利步入后续的课程:)
期末考试,课程结语恭喜你顺利完成了所有教学模块的学习,来到了我们的终极挑战-期末考试!不要紧张,考试中所涉及的内容都是为了帮助你自我检测是否真正掌握了C程序的相关知识,达到了你的目标,所以只要认真复习所学的模块,我想你一定没有问题的!加油吧,我在这趟《程序设计与算法》学习旅途的下一站等你哦!
如果说学习过《计算导论与C语言基础》,你已经迈入了C语言的殿堂,那么《C程序设计进阶》将帮助你更上一层楼,理解“结构化程序设计的基本思想”,掌握“C程序设计的基本技巧”,养成“良好的编程习惯和编程风格”,编写出“真正具有生命力的计算机程序”。完成这门课的学习,你将能解释C程序设计语言的基本概念与知识,并且使用C语言编写计算机程序解决生活工作中的实际问题。
课程内容还是很不错的,期末考试也有点难度。但是作业有点少,练习题和习题课有点少。而且老师和助教基本上已经没有看论坛了,导致论坛有很多积压的问题。
Please give the test cases when the code is failed, otherwise, it makes people confuse.
After learning the course, I can control my scripts better.
A good introductory course. Easy and you can begin to program after taking the course.
课后练习题和课程视频关联不大啊,递归那章作业略复杂,作业有个不好是不告诉你是哪几个样例不通过,郁闷的时候一个小程序得调试一整天,太费时间了,感觉和Courser优秀的课程还是有差距的,4星吧