必看:C语言高效学习方法(附经典试题详解)

写在前面

本专栏提供多于100道C试题解答,并且会一直不定期更新,使用的过程中如果有看不懂的地方,可以通过扫描文章末尾的公众号免费向我寻求解答。如果在做题的过程中有遇到专栏中没有的题目,也欢迎向我寻求解答,我将尽力为你解答!

C语言高效学习方法

  • 首先:选一款好用的编译器,千万不要再用VC++6.0了,可以下载一个DEVC,不说有多么厉害,但是起码没VC++这么多故障,你想一下,如果编译器老是出故障,那直接影响的是学C语言的热情。

    如何使用DEVC搭建工程可以点击这个链接:使用DEVC创建C语言工程
  • 其次:你可以自学C语言,这个其实不用看视频的,C那么多语法,不可能全部记住,你可以跟着下面我推荐的网站走,踏踏实实敲代码。因为学习编程最有效的方式就是多敲。

    菜鸟编程-C语言学习,这个网站可以很全面的介绍C语言语法,初期可以在菜鸟编程里查资料去学习。

    另外,我还发现CSDN有一个技能树功能,这个怎么使用呢,可以搭配菜鸟编程一起看,技能树面向初中期吧,更多的是中期,我看了几节讲指针的,内容确实不错。
  • 最重要的来了,那就是实战(刷题)了,咱们都是高中过来的,题海战术有多重要就不用多说了,跟着C试题专栏里的试题,先熟知题目,自己敲代码,多敲多思考。

    如果运行成功了,可以再简单看一下我的代码,想一下我的思路,因为一道题会有很多不同的解法,相信我的代码思想会对你思想上有所帮助,如果实在敲不出来也没关系,可以跟着我的代码去敲。

    前期一定要坚持去敲代码,先连续做个30道题,找找手感。当然了,不一定非得使用专栏里的试题,网上代码也很多,也能搜到答案,按照我说的学习方法也能学习C语言。

    我的专栏更多是为了节省大家的时间,因为专栏里的试题都是一些经典试题、二级C常考试题、也是大家私信问的比较多比较经典的试题。可以让大家在短期内提升C语言学习

    这个短期怎么定义呢?一天如果能空出6个小时,那两周就能搞定C语言,那么就有人问了,怎么算搞定呢?我可以这样讲,最基本的二级C能让你过了,课设你也可以自己做了。
  • 记录(错题本): 要养成随做随记录的习惯,因为C语言很多,不可能所有的知识点都可以记住,但你可以记住常用的一些C语言语法,比如Math、String等,比如什么是ASCII码、函数如何传参等,这样遇到类似的问题,可以回头翻翻看。

    另外,一道题会涉及一些语法或者经典思想,把这些可以记下来,方便后面套用。以我以我专栏中的记录方式举例,可以给你做个参考:

在这里插入图片描述

  • 答疑: 做题有疑惑自己去研究肯定是对的,但是有些问题不能一直往里钻,这样学习会适得其反,违背了本专栏的高效学习原则。

    因此在学习的过程中可以免费找我答疑,只希望你能少走弯路!

    添加公众号《程序艺术室》或者扫描下方二维码添加我的微信

在这里插入图片描述

正片开始:

问题描述

请编写一个函数,函数功能是删除字符串中的所有空格,例如,主函数中输入”asd af aa z67”,则输出为”asdafaaz67”.

课题分析

思路: 首先遍历整个字符串,当遇见字符为空格时,则内层循环从左往右依次往前覆盖;
主函数: 输入字符串,调用算法接口并返回结果,打印输出;
子函数: 外层循环遍历整个字符串,遍历的过程中判断字符时候为空格,如果为空格,则触发内层循环,内存循环从左往右依次往前覆盖。

算法描述

自然语言方式描述

(1)主函数
I.输入字符串
II.输出原字符串
III.调用实现接口
IV.打印输出结果
(2)调用fun函数
I.求字符串长度
II.从下标0开始遍历字符串
I)当字符为空格时
II)从空格所在字符的下标+1开始遍历字符,从后往前覆盖字符
III.字符串中出现空值,则必定往前换一次,那么结束符也要往前摞一次,因此长度-1, 并且将结束字符’\0’往前覆盖
IV.为了防止连续出现两个及两个以上的空格的情况,因此下标需要减1
V.返回新的字符串

流程图方式描述

在这里插入图片描述

源代码

#include<stdio.h>
#include<string.h>
char *fun(char *s){
	int i,j;
	for(i=0;s[i]!='\0';i++){
		if(s[i]==' '){//也可以使用ASCII码,空格的ASCII码为32 
			for(j=i;s[j]!='\0';j++){
				s[j]=s[j+1];
			}
//			printf("删除空格后的字符串:%s\n",s);
			i--;//因为有可能下一个字符也是空格,因此第二层for循环结束后,需要当前下标回退一下也即当前下标i--
		}
	}
	return s;
}
int main() {
	char s[20];
	printf("请输入字符串:");
	gets(s);
	printf("删掉空格的字符串为:%s\n",fun(s));
	return 0;
}

试验结果分析与讨论

(1)实验结果实例展示
示例一:当输入的字符串无空格时:
在这里插入图片描述
示例二:当输入的字符串空格间隔最大为1时:
在这里插入图片描述
示例三:当输入的字符串空格间隔大于1时:
在这里插入图片描述
(2)代码优缺点
优点:逻辑上无缺陷,示例的运行结果均符合预期
缺点:代码时间复杂度较高,效率偏低
(3)扩展思路
可进一步考虑在内层循环调用时,不仅仅只消除掉一个空格
思路:再往前覆盖时,加一层判断,如果是空格,则跳过空格往前覆盖

end

在这里插入图片描述

*过程中如果有问题可以通过关注微信公众号“程序艺术室”,添加我的微信向我咨询
*专栏中没有的试题可以通过关注微信公众号“程序艺术室”,添加我的微信向我咨询

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Inspiration666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值