n皇后问题c语言代码初学代码问题

怎么学好C语言怎么记住代码?_百度知道
怎么学好C语言怎么记住代码?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
千锋教育一直秉承“用良心做教育”的理念,是中国移动互联网研发人才一体化服务的领导品牌,全力打造移动互联网高端研发人才服务平台。公司总部位于北京,目前已在深圳、上海、郑州、广州、大连、武汉、成都成立了分公司。拥有全国最多、最权威的移动互联网教学就业保障团队,做到了毕业学员业内最高薪水,成为学员最信赖的IT培训机构。千锋教育是中关村移动互联网产业联盟副理事长单位,中国软件协会教育培训委员会认证首家一级培训机构,中关村国际孵化软件协会唯一授权中关村移动互联网学院,拥有全国300多所合作高校,2000多家移动互联网方向合作企业,50多个APP上线项目,每年有数十万名学员受益于千锋教育组织的技术研讨会、技术培训课、网络公开课及免费教学视频。
第一:一些概念。 C语言是一门程序设计语言,有一些标准。 数据结构包括逻辑结构和物理结构。逻辑结构是数据元素集合和定义在集合上的关系。物理结构是逻辑结构在计算机中的实现。 LCC、VC、TC、GCC都是C语言编译器,一般包括集成开发环境,编译器和链接器及辅助工具,书写的是C源程序,源程序通过编译器编译为中间文件,中间文件经链接器链接生成可执行文件。不同操作系统可执行文件不同。中间文件也有几个标准,微软使用的和Linux下通用的有差异。第二:学习什么。 程序设计学习的重点放在数据结构的学习上,但是这种学习要有一个平台,比如C语言。 学习C语言首先要掌握基本语法,常量、变量、类型、及顺序结构、分支结构和循环结构的意义及用法。进一步学习构造类型如指针、结构、函数的意义和用法。 C语言提供一些标准函数以减轻程序设计工作量,这些函数自己也可以实现。即使不依靠函数库,只有编译器,理论上就足够了。事实上,提供的标准函数效率都很高,使用很频繁,没有自己实现的必要,所以掌握常用函数是非常必要的,但是要注意函数的适用范围。 继续学习因人而异,应该可以独立选择了。 第三:如何学习。 强调多实践,C语言的学习要经常上机,多写程序才能逐步提高。
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。douban.com, all rights reserved 北京豆网科技有限公司很多人都喜欢把C语言推荐给初学者,原因就是C语言语法简单。但是C语言若是用于开发之中,却是最复杂的语言。底层的 == 好的? C语言提供了对底层的操作,比如指针。但是C语言跟C++最大的不同就是,C语言避不开指针,而C++和用STL和智能指针库完全避开它。也即是说,其它语言的指针只是个类型,C语言的指针就是指针。我一向认为,初学者过早接触指针是个大忌。初学者需要的是做出各种好玩的应用,以此来产生即时反馈,而不是深入研究计算机系统,因为后者只会消磨掉他们的信心。初学者就应该专注于代码逻辑,并且屏蔽掉和底层打交道的一切事物。这么做个比喻吧,如果你刚学化学的时候,就给你讲元素周期律和VSEPR模型,你会感兴趣吗?暴露底层从另外一个角度来说也是有害的,这涉及到手动管理堆中内存。计算机讲究的是一个权衡,你可以说这种方式执行效率高,但是大多数情况下,过度追求执行效率而忽视开发效率是不对的。手动管理内存是高级程序员的事情,初级程序员就应该完全交给语言所带的特性来管理内存,否则,你的程序三天出一个空指针异常,五天出一个内存泄漏,这谁受得了?所以c语言无论从哪点来说,都不适合拿来入门。
还有一种看法是,只有c语言能接触到栈和堆的模型。我很负责任的告诉你,所有非脚本的编译语言,比如c++和swift,以及托管语言,比如c#和java,都能接触到栈和堆的模型,而且由于有了自动内存管理机制,后者使用堆的频率要远远高于C。脚本语言也有自己的变量容器模型,比如php的zval。这个锅不应该由编程语言来背,而是应该由国产的垃圾教材来背。也可以看出来,c语言的堆栈模型不是放之于四海皆准的,如果拿它去套在其它语言上,可能就行不通。可有些人非要拿它当作学习其他编程语言的基础,真是可笑。简单的代价 C语言不提供一些通用组件的高级封装和抽象。比如哈希表,你用的时候完全就得自己造一个,或者上网搜搜看有没现成的代码。这就对开发者很不友好了。由于C语言标准库里面没有这个东西,学的时候完全不会提及,这就导致很多人甚至都不知道有这么个东西,遇到问题的时候就只能干瞪眼了。C语言仅仅支持的容器是原生数组,字符串是用原生字符数组实现的,于是对字符串的处理就非常非常弱。你要是想写个字符串拼接的代码,java里要一行,c语言要好几行。这也就是c语言“简单”带来的代价。C语言的简单恰恰是省略掉了OO的原生支持换来的。我上面为什么说是原生支持,是因为C语言还是可以用组合的方式实现OO的,比如继承用组合实现,虚函数用指针函数成员来实现,等等。在OO的方面,C语言实现起来要比C++难得多。C++的一个关键词,对应到C语言又是几行代码,何谈简单呢?OO好也罢,坏也罢,它是现在业界通用的语言范式,其作用就像自然语言中的英语一样,举足轻重。如果不接触一下这个,以后找工作的时候就很吃亏。但是OO真的复杂吗?这些东西,你如果去翻java的书,顶多花两章介绍,一章是类,一章是接口。其它不那么OO的语言干脆就花一章了,就是告诉你有个class,而这些篇幅也差不多是C语言教程中结构和枚举的篇幅。C语言的“简单”,就意味着实际开发中,你需要做更多的手动操作来代替编译器。我想上帝是公平的,给了其它语言更多的语言特性,就会同时给他们更高的开发效率。
再谈谈标准库 C语言书薄的原因,不是因为没有OO那些东西,而是标准库中缺少一些现代化的组件,这些东西可都在posix里。离开posix api谈C语言,就是耍流氓。通用的组件或设施,到了c语言这边,一个都不会少,因为现代的程序运行环境和需求,你离了这些东西,就根本写不出什么来。现代编程语言的五大库(字符串、容器、io、线程、网络),c语言就坑掉两个了。至于后面那两个,C语言开发者不得不去使用posix api,然后再去解决api不兼容问题。以C语言标准库的德性,离了posix就是半残。而如果要了解posix,就得看《apue》。你如果跟我说C语言简单,看完《apue》那一大厚本书,再跟我说简单吧。不是后记的后记 我们学一门编程语言并不是要拿来应付考试,而是要实际做东西的。像C语言这种没有容器、没有string、没有模板、没有异常、没有RAII,所有轮子自己造,毫无现代编程语言特性的语言,真正用的时候复杂到爆。抱歉,我没有时间去研究每个特性或者类在C语言里怎么实现,我还是喜欢用更简短的代码来表达我的逻辑。哪里简单呢?写玩具程序简单吗?学习基地(见评论区)很多人的学习环境就是课堂,离开了课堂,自己学的时间少之又少,少了份气氛,就算逼着自己去学习,慢慢的也会觉得枯燥,有问题不会也没有人去问,可以找一个C/C++交流学习群,集合了众多志同道合的朋友,这样对你学习会起到一定的暗示作用,有问题也可以在群里讨论。写在最后 喜欢此篇文章或觉得这篇文章对你有帮助的读者可以点播关注或者转发,以便帮助更多对如何学习C/C++迷茫的小白。=-&学习基地见评论区特别声明:本文为网易自媒体平台“网易号”作者上传并发布,仅代表该作者观点。网易仅提供信息发布平台。
一键安装官方客户端
重大事件及时推送 阅读更流畅
http://dingyue.nosdn.127.net/5cLjzGLj7hB1H0G2z2VFHbh9XpTE2LkChopAOgRFtThDq4.jpg学长你好!我叫随风,今年20岁,为什么学C语言呢!因为感兴趣,&&&&&&&&&&&&&&&&&&&&&&&&我学了几天,书也看了,视频也看了,第一感觉,就是太难了,我根本就很难理解他,也不知道该怎么去理解,记住它,我也不知道那些英文有什么做用,我也知道这是一们语言,不是像其他技术那样去理解,两个字思维,就像小时候读书一样,慢慢的开始学字,慢慢的写作文……,我的理解是这样的,我现在最想解决的问题就是,该怎么做,怎么学,怎么理解它,然后记住它,我的问题就是这些了,希望学长指导我一下,谢谢!C++技术网会员解答:&&& C语言确实是一门语言,但是,它是一门计算机语言,不是人类的语言。语言要想真正掌握,就要去使用。人类语言就是要去说要去写。而计算机语言也是如此,只是方式和人类语言有所差异。
&&& 计算机语言沟通的对象是计算机,沟通的方式也就是编程。编程也就是用计算机编程语言如C语言与计算机沟通的一个过程。沟通的过程就是程序执行的过程、执行的时候可以有人机交互,也可以没有人机交互。但是,你要能够沟通,就要写好代码,编译成可以执行的程序。这也就是我们所说的写代码的过程。
&&& 在学习阶段,我们是学习基本的语法。语法就好比英语中的主谓宾定状补。主谓宾定状补属于语言的基本元素,然后就是混合使用形成各种表达方式。
&&& 计算机编程语言也是如此。编程语言都是这样,这里就针对C语言举例说明。
&&& 计算机的语言的基本元素是数据类型、操作符、函数、流程控制等。然后就是这些东西的混合使用。使用的时候也就是写代码,通过这些基本语法元素的混合使用,也就写出了各种各样的代码,实现了各种各样的功能。其实,程序功能也就是各种逻辑,代码也就是实现各种逻辑的东西。计算机也就是执行各种程序逻辑的机器。
&&& 所以说,你需要学习的方法就是:
1.学习基本的语法
例如:数据类型int、double的含义、使用和背景;逻辑判断if的使用;流程控制的循环while\for的使用;函数的调用;
2.编写基本语法的代码
学完基本的语法,熟悉了之后,针对这些基本语法,写一些基本的代码来练习,巩固。在写代码的过程中熟悉基本语法。第1步只是学习理论,这一步就是巩固基本语法,是通过实践来巩固,实践就是写代码,能够运行通过,才表示正确。这一步是最基本的一步写代码。
3.混合使用语法实现复杂的功能
各个基本的语法点都掌握了,要开始找一些实用小程序来综合练习,就好像是物理考试的最后几个大题一样。综合练习就是加深各个基本语法的理解和混合使用。这也就是项目经验的基础。这里会遇到各种混合使用中因为自己不熟而碰见的各种错误,也就是积累经验的过程。
4.写多了,遇到的坑多了,然后就理解了语法,记住了用法。无法使用英语学习的强行记忆,是行不通的。
5.自己写一个完整的可以供他人实际使用的程序
比如可以写一个完整的计算器、一个完整的通讯录、一个成绩统计分析程序、图书管理系统。这里会涉及到各种语法知识,也是真正大量积累项目经验的时候了。这些完整的程序就是小项目了。这些都能够做好后,就可以开始写大项目了。这些完整程序都要以实际的需要来做,不能绕过,要直面需求。可以直接解决,可以换个思路解决,这是锻炼自己的过程。
做完了这5步,C语言也就学好了。学习C语言,绝对不是简单学习一下语法而已。5步做完,才真正的学完了C语言基础。C Primer Plus是非常适合完全自学C语言的书籍了。根据这个5步的前3步,这本书里有对应的联系,后面两步需要自己来找程序开发。
微信扫码关注公众号CPP技术网,微信号cpp_coder,关注我们的公众号,阅读更多精彩内容!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!! 文章来源:原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。
当前位置:-> ->上一篇:下一篇:
在线提问 问题标题: 问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)C语言初学者代码中的常见错误与瑕疵(9)
字母的个数
现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个。&
输入:第一行输入一个正整数T(0&T&25)&
随后T行输入一个字符串s,s长度小于1010。&
输出:每组数据输出占一行,输出出现次数最多的字符;&
jsdhfjkshdfjksahdfjkhsajkf
#include &stdio.h&
#include &string.h&
int maxchar(char x[1010])
&int i,j,temp,
&int a[26]={0};
&for (i = 0,temp =0;i&strlen(x);i++)
& temp=x[i]-97;
& a[temp]+=1;
&for(i=1,max = a[0],j=0;i&26;i++)
& if(max&a[i])
& &max = a[i];
&return j+97;
int maxchar(char x[1010]);
int main()
&char s[1010],c[26];
&scanf(&%d&,&T);
&for (i=0;i&T;i++)
& scanf(&%s&,s);
& c[i]=maxchar(s);
&for (i=0;i&T;i++)
& printf(&%c\n&,c[i]);
&return 0;
  已经学会把函数类型声明写在函数定义外面了,但把其他函数定义写在main()之前,总体上还是有头重脚轻之感。
&char s[1010],c[26];
  s数组显然不应该定义在这里,因为这个数组只在第一个for语句内部用到。
  c数组不应该定义为26个元素,因为题目中说的是&0&T&25&。
&scanf(&%d&,&T);
  这条语句无可指责,但输入后没考虑数据有效性。&
&for (i=0;i&T;i++)
& scanf(&%s&,s);
& c[i]=maxchar(s);
&for (i=0;i&T;i++)
& printf(&%c\n&,c[i]);
  原作者显然不了解这类ACM问题的套路(参见 C语言初学者代码中的常见错误与瑕疵(5) & 11楼~13楼)。不过话说回来,ACM对这类问题的描述确实容易让外人误解,ACM是否应该自我检讨一下呢?
  除了不了解ACM的套路,这里的一个有欠考虑的地方是没有注意检查输入数据的有效性(当然,ACM对此是不管不顾的)。如果考虑输入数据的有效性应该不理会无效数据:
scanf(&%d&,&T);
if ( 0 &T && T &25 )
& &//求解问题
或者&死等&
while ( scanf(&%d&,&T) , !( 0 &T && T &25 ) )
& & //提示重新输入
  考虑的更周到些的话,可以
while ( scanf(&%d&,&T)!= 1 || !( 0 &T && T &25 ) )
& & while ( getchar()!='\n')
& & //提示重新输入
  此外,这段代码中的
scanf(&%s&,s);
这句如果写成
scanf(&%1009s&,s);
就无可挑剔了。尽管ACM的测试数据不会出问题,但这是应该考虑到的一个问题。程序员最重要的品质应该是思虑周到。
maxchar()函数 :
int maxchar(char x[1010])
&int i,j,temp,
&int a[26]={0};
&for (i = 0,temp =0;i&strlen(x);i++)
& temp=x[i]-97;
& a[temp]+=1;
&for(i=1,max = a[0],j=0;i&26;i++)
& if(max&a[i])
& &max = a[i];
&return j+97;
int maxchar(char x[1010]);
&  函数定义和函数类型声明都存在同一个问题,就是[]内的1010。这个是不应该写的,写了编译器也不&看&,写得毫无意义。
int a[26]={0};
&  这个写成
&int a['z'-'a'+1]={0};
&为好。注意这里应该是假定使用ASCII码制,如果不是ASCII码,代码不能这样写。
&for (i = 0,temp =0;i&strlen(x);i++)
& temp=x[i]-97;
& a[temp]+=1;
  这个槽点较多。首先temp明显多余,其次那个97太难看了,典型的谭浩强风格。应该写为'a'。
a[temp]+=1;
  可以直接写为&
a[ x[i] - 'a']+=1;
  再有,i&strlen(x)写得很糟糕,因为在这里调用strlen(x),意味着在循环过程中每次循环都要调用这个函数,然而对于这个循环来说,strlen(x)其实是一个常量,并不需要每次都调用。这也是初学者常见的一个毛病,总忍不住有调用库函数的冲动,而不考虑有没有更好的写法。strlen(x)是被滥用最多的库函数之一。其实这里简单地写x[i]!='\0'就可以了。由此可见源文件开头的
#include &string.h&
也完全是多余的。
  另外这条语句的功能与下一条for语句的功能相对各自独立,各抽象为一个独立的函数为好。
&for(i=1,max = a[0],j=0;i&26;i++)
& if(max&a[i])
& &max = a[i];
  这个地方写得有点笨,主要是变量太多。作者用max记录最大值元素,用j记录其下标,其实只要一个j就够了
&for(i=1,j=0;i&26;i++)
& if(a[j]&a[i])
& &j=i; &&
return j+97;
这个也是谭浩强之流不入流的写法,非常难看。应该写为
return j+'a';
字母的个数&
现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,
如果出现次数最多字母有多个那么输出最小的那个。&
输入:第一行输入一个正整数T(0&T&25)&
随后T行输入一个字符串s,s长度小于1010。&
输出:每组数据输出占一行,输出出现次数最多的字符;&
样例:输入&
jsdhfjkshdfjksahdfjkhsajkf&
作者:薛非
出处:https://www.cnblogs.com/pmer/ & &C语言初学者代码中的常见错误与瑕疵&系列博文&
#include &stdio.h&
#define S_LEN 1009
#define MAX_LEN (S_LEN + 1)&
#define N(x) N_(x)
#define N_(x) #x
char find_major( char * );
void count( int [] , char * ) ;
unsigned be_most( int [], unsigned );
int main( void )
& &int T ;
& &puts(&行数?&);
& &scanf(&%d& , &T);
& &if ( ! ( 0 & T && T & 25 ) )
& & & return 1;
& &while ( T -- & 0 )
& & & char s[ MAX_LEN ];
& & & scanf(&%&N(S_LEN)&s& , s );
& & & printf(&%c\n& , find_major( s ) );
& &return 0;
char find_major( char * s )
& &int num[ 'z' - 'a' + 1 ] = { 0 } ;
& &count( num , s ) ; & & & & & & & & //统计字母个数&
& &return 'a' + be_most( num , sizeof num / sizeof num[0] );//返回出现最多字符&
void count( int num[] , char * s )&
& &while ( *s != '\0' )
& & & num[ * s ++ - 'a' ] ++ ;&
unsigned be_most( int a[] , unsigned n )
& &unsigned max = 0
& &for ( i = 1 i & i ++ )
& & & if ( a[max] & a[i] )
& & & & &max =
& &//最大值元素下标}

我要回帖

更多关于 c语言代码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信