c语言学习网

时间:2024-09-29 17:31:40编辑:奇闻君

C语言学习。。。。

相对于其他编程语言,C语言还是比较难的。初学者需要注意一下几点:

一是学习顺序

  先从熟悉简单的C语言语法开始入门,然后再循序渐进,学习C++语法,WIN32、MFC、QT、网络编程,数据库、数据结构、算法、COM、STL等。构建一个完整的C语言知识体系。这需要一个比较漫长的学习积累的过程。语法入门部分大概2-3个月,其他部分需要学习和工作中慢慢理解和消化了。

c11.jpg

二是学习方法

  人的知识80%是通过眼睛获取的,但是学习编程有所不同,除了看书、看视频之外,关键是要勤动手,勤动脑。通过做大量的练习、项目实战不断积累代码量。只有代码量足够多了,项目做的多了,才能算是真正学会了。项目能否完成,就是衡量是否学会的唯一标准。后期就是代码的质量和优化问题了,这个只能在项目工作中慢慢积累经验了。

c12.jpg

  最后强调一点

  很多人学不会编程是因为掉坑里了。就是教程或者书上的知识点之间跨越太大,作为一个初学者很难自己摸索出来,前面的知识点没有掌握,接着学习后面的知识,肯定是学不会了。目前绝大多数编程书籍和教程或多或少都有这样的弊端。自学能力比较强的人可以通过各种方法,参考各种网上的资料自己解决。但是大多数自学能力不是很强的人,只能依赖老师、同学、同事或者朋友帮忙指导,或者报名培训机构,老师指导完成了。

  学习编程通常需要一些好的学习资料,包括纸质的书籍,视频教程,课件,项目练习,代码。零基础入门的书籍推荐《明解C语言》、《C Primer Plus》,还有一本非常特别的汇编和C语言正向逆向结合的书编程达人内部教材《汇编、C语言基础教程》也非常不错,讲解汇编和C语言的本质非常透彻,非常细致。视频资料也是特别多了,各种视频网站、论坛、自媒体都有,比如网易课堂、腾讯课堂、慕客网这些。还有一些论坛,比如CSDN、编程中国等。最重要的一点就是答疑服务,推荐爱达人的网站也很不错,从零基础入门到应用课程,配套的视频、课件、代码、项目、答疑服务都有,还可以兼职接单,学以致用。


c语言如何学习

相对于其他编程语言,C语言还是比较难的。初学者需要注意一下几点:

一是学习顺序

  先从熟悉简单的C语言语法开始入门,然后再循序渐进,学习C++语法,WIN32、MFC、QT、网络编程,数据库、数据结构、算法、COM、STL等。构建一个完整的C语言知识体系。这需要一个比较漫长的学习积累的过程。语法入门部分大概2-3个月,其他部分需要学习和工作中慢慢理解和消化了。

c11.jpg

二是学习方法

  人的知识80%是通过眼睛获取的,但是学习编程有所不同,除了看书、看视频之外,关键是要勤动手,勤动脑。通过做大量的练习、项目实战不断积累代码量。只有代码量足够多了,项目做的多了,才能算是真正学会了。项目能否完成,就是衡量是否学会的唯一标准。后期就是代码的质量和优化问题了,这个只能在项目工作中慢慢积累经验了。

c12.jpg

  最后强调一点

  很多人学不会编程是因为掉坑里了。就是教程或者书上的知识点之间跨越太大,作为一个初学者很难自己摸索出来,前面的知识点没有掌握,接着学习后面的知识,肯定是学不会了。目前绝大多数编程书籍和教程或多或少都有这样的弊端。自学能力比较强的人可以通过各种方法,参考各种网上的资料自己解决。但是大多数自学能力不是很强的人,只能依赖老师、同学、同事或者朋友帮忙指导,或者报名培训机构,老师指导完成了。

  学习编程通常需要一些好的学习资料,包括纸质的书籍,视频教程,课件,项目练习,代码。零基础入门的书籍推荐《明解C语言》、《C Primer Plus》,还有一本非常特别的汇编和C语言正向逆向结合的书编程达人内部教材《汇编、C语言基础教程》也非常不错,讲解汇编和C语言的本质非常透彻,非常细致。视频资料也是特别多了,各种视频网站、论坛、自媒体都有,比如网易课堂、腾讯课堂、慕客网这些。还有一些论坛,比如CSDN、编程中国等。最重要的一点就是答疑服务,推荐爱达人的网站也很不错,从零基础入门到应用课程,配套的视频、课件、代码、项目、答疑服务都有,还可以兼职接单,学以致用。


C语言oj题求解

根据题意:不允许使用现成字符串函数,所以string.h头文件下的所有函数都没有使用。程序支持任意长度字符串输入,第一个字符串有且只有一个*号。第一个字符串格式可以是a*b,可以是*a,也可以是a*。根据题目要求*号至少代表一个字符(不超过字符串2范围)注意:如果最小匹配或贪婪匹配,匹配成功多个一样长度的字符串,只返回其中一条!代码的逻辑:1、将字符串1按*号拆分成2个字符。比如aa*bb,就会拆分才“aa”和“bb”2、两个拆分的子串分别与字符串2匹配,返回所有满足的位置集合(用结构链表保存)3、得到的2个位置集合,进行组合,找出满足条件的位置组合,输出对应字符串。#include #include #include typedef struct address//记录对应位置的结构体{ char *sBen;//起始位置 char *sEnd;//结束位置 struct address *next;}ASD;ASD *check(char *str1,char *str2);//检查字符是否在字符串中,是返回字符串中对应地址,否返回NULLint strlenRW(char *str);//自定义计算字符串长度void printfASD(ASD *asdHead);void meError(void *p);//内存申请失败char **splitStr(char *str);//拆分子字符串,以*号分割,返回分割后的两个字符串组成的二维数组char *input();//输入任意长度字符串void orderStr(ASD *asdHead,int flag);//将字符串链表,按结束地址大小,升序排列,冒泡排序char *getMinOrMax(ASD *asdHead1,ASD *asdHead2,int flag,char *str2);//获取最小匹配或贪婪匹配,flag=0:最小匹配,flag=1:贪婪匹配,str2:主字符串int main(){ int len1=0,len2=0; char *str1=NULL,*str2=NULL,**spStrs=NULL; ASD *asdHead1=NULL,*asdHead2=NULL; printf("----用包含*号的字符串1在字符串2中找出最小匹配和贪婪匹配----\n"); while(1) { str1=NULL,str2=NULL,spStrs=NULL; asdHead1=NULL,asdHead2=NULL; printf("\n请分别输入字符串1及字符串2,每输入一个字符串回车确认:\n"); str1=input(); if(str1) { len1=strlenRW(str1); spStrs=splitStr(str1); if(!spStrs) continue; } else printf("字符串1不能为空,本次匹配无效,重新输入\n\n"); str2=input(); if(str1) { len2=strlenRW(str2); } if(len2next) { asdHNext=asdHead->next; while(asdHNext->next) { if(!flag) boolv=asdHead->next->sEnd>asdHNext->next->sEnd; else boolv=asdHead->next->sEndnext->sEnd; if(boolv) { cSave=asdHead->next->sBen; asdHead->next->sBen=asdHNext->next->sBen; asdHNext->next->sBen=cSave; cSave=asdHead->next->sEnd; asdHead->next->sEnd=asdHNext->next->sEnd; asdHNext->next->sEnd=cSave; } asdHNext=asdHNext->next; } asdHead=asdHead->next; }}char *getMinOrMax(ASD *asdHead1,ASD *asdHead2,int flag,char *str2)//获取最小匹配或贪婪匹配,flag=0:最小匹配,flag=1:贪婪匹配{ int len,i,boolv; char *pBen=NULL,*pEnd=NULL,*rStr=NULL; ASD *asdH2Save=asdHead2,*asdTempMin=NULL,*asdTempMax=NULL; if(!asdHead1)//首字符是* { asdHead1=(ASD *)malloc(sizeof(ASD)); asdTempMin=(ASD *)malloc(sizeof(ASD)); asdTempMax=(ASD *)malloc(sizeof(ASD)); meError(asdHead1),meError(asdTempMin),meError(asdTempMax); asdHead1->next=asdTempMin; asdTempMin->next=asdTempMax; asdTempMax->next=NULL; if(asdHead2->next) { orderStr(asdHead2,0); if(asdHead2->next->sBen-1>=str2) asdTempMin->sBen=asdHead2->next->sBen-1; else asdTempMin->sBen=asdHead2->next->sBen; asdTempMin->sEnd=asdHead2->next->sBen-2; orderStr(asdHead2,1); asdTempMax->sBen=str2; asdTempMax->sEnd=asdHead2->next->sBen-strlenRW(str2); } else return NULL; } if(!asdHead2)//最后一个字符是* { asdHead2=(ASD *)malloc(sizeof(ASD)); asdTempMin=(ASD *)malloc(sizeof(ASD)); asdTempMax=(ASD *)malloc(sizeof(ASD)); meError(asdHead2),meError(asdTempMin),meError(asdTempMax); asdHead2->next=asdTempMin; asdTempMin->next=asdTempMax; asdTempMax->next=NULL; orderStr(asdHead1,1); asdTempMin->sBen=asdHead1->next->sEnd+2; if(*(asdHead1->next->sEnd+1)!=0) asdTempMin->sEnd=asdHead1->next->sEnd+1; else asdTempMin->sEnd=asdHead1->next->sEnd; orderStr(asdHead1,0); asdTempMax->sBen=asdHead1->next->sEnd+strlenRW(str2); asdTempMax->sEnd=&str2[strlenRW(str2)-1]; asdHead2->next=asdTempMin; asdTempMin->next=asdTempMax; } asdH2Save=asdHead2; if(!flag)//最小匹配,*号前数组取最大匹配地址,*号后数组取最小匹配地址 orderStr(asdHead1,1),orderStr(asdHead2,0),boolv=strlenRW(str2); else//贪婪匹配,*号前数组取最小匹配地址,*号后数组取最大匹配地址 orderStr(asdHead1,0),orderStr(asdHead2,1),boolv=0; while(asdHead1->next) { asdHead2=asdH2Save; while(asdHead2->next) { if(asdHead2->next->sBen-asdHead1->next->sEnd>=2)//前后之间至少间隔一个字符 if((!flag && asdHead2->next->sBen-asdHead1->next->sEndnext->sBen-asdHead1->next->sEnd>boolv))//间隔字符数满足条件 { pBen=asdHead1->next->sBen; pEnd=asdHead2->next->sEnd; boolv=asdHead2->next->sBen-asdHead1->next->sEnd; } asdHead2=asdHead2->next; } asdHead1=asdHead1->next; } len=pEnd-pBen+1; rStr=(char *)malloc(sizeof(char)*(len+1)); meError(rStr); i=0; while(pBennext) { sBen=asdHead->next->sBen; sEnd=asdHead->next->sEnd; while(sBennext; } printf("\n");}int strlenRW(char *str)//自定义计算字符串长度{ int len=0; while(*str) { len++; str++; } return len;}ASD *check(char *str1,char *str2)//检查子字符str1在字符串str2中位置,返回所有位置的集合,集合中每个对应地址是按照升序排列的{ ASD *asdHead=(ASD *)malloc(sizeof(ASD)),*asdTail=NULL,*asdNew=NULL; char *s1Save=str1,*s2Save=str2; meError(asdHead); asdHead->next=NULL; asdNew=(ASD *)malloc(sizeof(ASD)); meError(asdNew); asdNew->next=NULL; asdNew->sBen=NULL; asdNew->sEnd=NULL; while(*str2) { if(*s1Save==*s2Save && *s1Save!=0)//str1当前位与str2当前位相等,记录起始位置 { if(!asdNew->sBen) asdNew->sBen=s2Save; s1Save++; s2Save++; } else if(*s1Save!=*s2Save && *s1Save!=0)//str1当前位与str2当前位不相等,str1重头开始取位,继续往str2下一位匹配,清空起始和结束地址指针sBen、sEnd { s1Save=str1; s2Save=++str2; asdNew->sBen=NULL; asdNew->sEnd=NULL; } else if(*s1Save==0)//一次匹配完成,str1重头开始取位,继续往下找匹配 { asdNew->sEnd=s2Save-1; if(asdHead->next==NULL) asdHead->next=asdNew; else asdTail->next=asdNew; asdTail=asdNew; asdNew=(ASD *)malloc(sizeof(ASD)); meError(asdNew); asdNew->next=NULL; asdNew->sBen=NULL; asdNew->sEnd=NULL; s1Save=str1; s2Save=++str2; } } free(asdNew); return asdHead;}void meError(void *p)//内存申请失败{ if(p==NULL) { printf("异常:内存申请失败!回车结束程序!\n"); while(getch()!='\r'); exit(0); }}


上一篇:婚礼沙画视频

下一篇:没有了