手机版

百科游戏 手游攻略

c语言学习资料(需要哪些资料)

百科 2025-12-26 02:30:37 手游攻略 阅读:3968次

大家好,今天来为大家解答c语言学习资料这个问题的一些问题点,包括C语言入门怎么自学 需要哪些资料也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~

学习C语言需要掌握哪些基本知识

1.入门程序

#include

intmain()

{

printf("HelloWorld!");

return0;

}

2.数据类型

数据类型:

1.基本数据类型:

1.1.整型:int4个字节

1.2.字符型:char1个字节

1.3.实型(浮点型)

1.3.1.单精度型:float4个字节

1.3.2.双精度型:double8个字节

2.构造类型:

2.1.枚举类型

2.2.数组类型

2.3.结构体类型

2.4.共用体类型

3.指针类型:

4.空类型:

3.格式化输出语句

%d:十进制整数;

%c:单个字符;

%s:字符串;

%f:6位小数;

#include

intmain()

{

intage=18;

floatheight=1.85;

charunit='m';

printf("小明今年%d岁\n",age);

printf("小明身高%f%c\n",height,unit);

printf("小明现在在慕课网上学习IT技术\n");

return0;

}

学好C++才是入职大厂的敲门砖!当年要是有这课,我的C++也不至于这样

已失效

4.常量

值不发生改变的量成为常量;

定义字符常量(注意后面没有;)

#include

#definePOCKETMONEY10//定义常量及常量值

intmain()

{

printf("小明今天又得到%d元零花钱\n",POCKETMONEY);

return0;

}

5.运算符

5.1.算数运算符:+,-,*,/,%,++,--;前++/--,先运算,再取值.后++/--,先取值,再运算;

5.2.赋值运算符:

5.3.关系运算符;

5.4.逻辑运算符;

5.5.三目运算符:

表达式1?表达式2:表达式3;

6.水仙花数计算

输出所有三位数的水仙花数字

所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数,如:153就是一个水仙花数,153=111+555+333。

#include

intmain()

{

//定义三位数num,个位数sd,十位数td,百位数hd

intnum,sd,td,hd;

//循环所有三位数

for(num=100;num<1000;num++)

{

//获取三位数字num百位上的数字

hd=num/100;

//获取三位数字num十位上的数字

td=num/10%10;

//获取三位数字num个位上的数字

sd=num%10;

//水仙花数的条件是什么?

if(num==hd*hd*hd+td*td*td+sd*sd*sd)

{

printf("水仙花数字:%d\n",num);

}

}

return0;

}

7.打印正三角形的*

#include

intmain()

{

inti,j,k;

for(i=1;i<5;i++)

{

for(j=i;j<5;j++)

{

printf("");//输出空格

}

for(k=0;k<2*i-1;k++)

{

printf("*");//每行输出的*号

}

printf("\n");//每次循环换行

}

return0;

}

8.臭名远扬的goto语句

很少使用

#include

intmain()

{

intsum=0;

inti;

for(i=1;i<=10;i++)

{

printf("%d\n",i);

if(i==3){

gotoLOOP;//满足条件就执行goto语句

}

}

//执行goto

LOOP:printf("结束for循环了....");//请选择合适位置添加标识符

return0;

}

9.形参与实参

形参:形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数;

实参:实参是在调用时传递该函数的参数。

函数的形参和实参具有以下特点:

形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。

在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。

10.函数返回值注意

注意:void函数中可以有执行代码块,但是不能有返回值,另void函数中如果有return语句,该语句只能起到结束函数运行的功能。其格式为:return;

11.递归

#include

intgetPeachNumber(intn)//这里要定义n,要不编译器会报错!

{

intnum;

if(n==10)

{

return1;

}

else

{

num=(getPeachNumber(n+1)+1)*2;

printf("第%d天所剩桃子%d个\n",n,num);

}

returnnum;

}

intmain()

{

intnum=getPeachNumber(1);

printf("猴子第一天摘了:%d个桃子。\n",num);

return0;

}

12.变量存储类别!

12.1.生存周期划分存储方式

C语言根据变量的生存周期来划分,可以分为静态存储方式和动态存储方式。

静态存储方式:是指在程序运行期间分配固定的存储空间的方式。静态存储区中存放了在整个程序执行过程中都存在的变量,如全局变量。

动态存储方式:是指在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储区中存放的变量是根据程序运行的需要而建立和释放的,通常包括:函数形式参数;自动变量;函数调用时的现场保护和返回地址等。

12.2.存储类型划分

C语言中存储类别又分为四类:自动(auto)、静态(static)、寄存器的(register)和外部的(extern);

用关键字auto定义的变量为自动变量,auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。

用static修饰的为静态变量,如果定义在函数内部的,称之为静态局部变量;如果定义在函数外部,称之为静态外部变量。

注意:静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放;静态局部变量在编译时赋初值,即只赋初值一次;如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)

为了提高效率,C语言允许将局部变量的值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。

注意:只有局部自动变量和形式参数可以作为寄存器变量;一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;局部静态变量不能定义为寄存器变量。

用extern声明的的变量是外部变量,外部变量的意义是某函数可以调用在该函数之后定义的变量。

#includ

//来源公众号:C语言与CPP编程

intmain()

{

//定义外部局部变量

externintx;

return0;

}

intx=100;

13.内部函数外部函数!

在C语言中不能被其他源文件调用的函数称为内部函数,内部函数由static关键字来定义,因此又被称为静态函数,形式为:

static[数据类型]函数名([参数])

这里的static是对函数的作用范围的一个限定,限定该函数只能在其所处的源文件中使用,因此在不同文件中出现相同的函数名称的内部函数是没有问题的。

在C语言中能被其他源文件调用的函数称为外部函数,外部函数由extern关键字来定义,形式为:

extern[数据类型]函数名([参数])

C语言规定,在没有指定函数的作用范围时,系统会默认认为是外部函数,因此当需要定义外部函数时extern也可以省略。extern可以省略;14.数组数组:一块连续的,大小固定并且里面的数据类型一致的内存空间,数组的声明:数据类型数组名称[长度n]

数据类型数组名称[长度n]={元素1,元素2,元素3,......};

数据类型数组名称[]={元素1,元素2,元素3,......};

数类类型数组名称[长度n];数组名称[0]=元素1;数组名称[1]=元素2;......注意:1、数组的下标均以0开始;2、数组在初始化的时候,数组内元素的个数不能大于声明的数组长度;3、如果采用第一种初始化方式,元素个数小于数组的长度时,多余的数组元素初始化为0;4、在声明数组后没有进行初始化的时候,静态(static)和外部(extern)类型的数组元素初始化元素为0,自动(auto)类型的数组的元素初始化值不确定。

15.数组遍历

#include

intmain()

{

intarr[]={0,1,2,3,4,5,6,7,8,9};

inti;

for(i=0;i<10;i++)

{

printf("%d\n",arr[i]);

}

return0;

}

数组的冒泡排序

冒泡排序的思想:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。

字符串与数组

在C语言中,是没有办法直接定义子字符串数据类型的,需使用数组来定义所要的字符串,形式如下:

char字符串名称[长度]="字符串内容";

char字符串名称[长度]={'字符串1','字符串2',....,'字符串n','\0'};

注:

[]中的长度可以省略不写;

采用第二种方式最后一个元素必须是'\0',表示结束;

第二种方式不能写中文!;输出字符串时,要使用:printf("%s",字符数组名);或puts(字符数组名);

16.字符串函数

strlen(s):获取字符串s的长度;

strcmp(s1,s2):比较字符串;比较的时候会把字符串转换成ASCII码再进行比较,返回结果为0表示s1和s2的ASCII码值相等,返回结果为1表示s1比s2的ASCII码大,返回结果为-1表示s1比s2的ACSII码小;

strcpy(s1,s2):字符串拷贝;s2会取代s1中的内容;

strcat(s1,s2)将s2拼接到s1后面;注意:s1的length要足够才可以!

atoi(s1)将字符串转为整数!

17.多维数组

数据类型数组名称[常量表达式1]...[常量表达式n];

多维数组的初始化与一维数组的初始化类似也是分两种:

数据类型数组名称[常量表达式1][常量表达式2]...[常量表达式n]={{值1,..,值n},{值1,..,值n},...,{值1,..,值n}};

数据类型数组名称[常量表达式1][常量表达式2]...[常量表达式n];数组名称[下标1][下标2]...[下标n]=值;

多维数组初始化要注意以下事项:

采用第一种始化时数组声明必须指定列的维数。因为系统会根据数组中元素的总个数来分配空间,当知道元素总个数以及列的维数后,会直接计算出行的维数;

采用第二种初始化时数组声明必须同时指定行和列的维数。

18.多维度数组的遍历

使用嵌套循环

注意:多维数组的每一维下标均不能越界!

19.结构体

C数组允许定义可存储相同类型数据项的变量,结构是C编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:

Title

Author

Subject

BookID

定义结构

为了定义结构,您必须使用struct语句。struct语句定义了一个包含多个成员的新的数据类型,struct语句的格式如下:

structtag{

member-list

member-list

member-list

...

}variable-list;

tag是结构体标签。

member-list是标准的变量定义,比如inti;或者floatf,或者其他有效的变量定义。

variable-list结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。下面是声明Book结构的方式:

structBooks

{

chartitle[50];

charauthor[50];

charsubject[100];

intbook_id;

}book;

在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。以下为实例:

//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c

//同时又声明了结构体变量s1

//这个结构体并没有标明其标签

struct

{

inta;

charb;

doublec;

}s1;

//此声明声明了拥有3个成员的结构体,分别为整型的a,字符型的b和双精度的c

//结构体的标签被命名为SIMPLE,没有声明变量

structSIMPLE

{

inta;

charb;

doublec;

};

//用SIMPLE标签的结构体,另外声明了变量t1、t2、t3

structSIMPLEt1,t2[20],*t3;

//也可以用typedef创建新类型

typedefstruct

{

inta;

charb;

doublec;

}Simple2;

//现在可以用Simple2作为类型声明新的结构体变量

Simple2u1,u2[20],*u3;

访问结构成员

为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个句号。您可以使用struct关键字来定义结构类型的变量。下面的实例演示了结构的用法:

#include

#include

//来源公众号:C语言与CPP编程

structBooks

{

chartitle[50];

charauthor[50];

charsubject[100];

intbook_id;

};

intmain()

{

structBooksBook1;

structBooksBook2;

strcpy(Book1.title,"CProgramming");

strcpy(Book1.author,"NuhaAli");

strcpy(Book1.subject,"CProgrammingTutorial");

Book1.book_id=6495407;

strcpy(Book2.title,"TelecomBilling");

strcpy(Book2.author,"ZaraAli");

strcpy(Book2.subject,"TelecomBillingTutorial");

Book2.book_id=6495700;

printf("Book1title:%s\n",Book1.title);

printf("Book1author:%s\n",Book1.author);

printf("Book1subject:%s\n",Book1.subject);

printf("Book1book_id:%d\n",Book1.book_id);

printf("Book2title:%s\n",Book2.title);

printf("Book2author:%s\n",Book2.author);

printf("Book2subject:%s\n",Book2.subject);

printf("Book2book_id:%d\n",Book2.book_id);

return0;

}

学好C++才是入职大厂的敲门砖!当年要是有这课,我的C++也不至于这样

已失效

20.共用体

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。

#include

#include

unionData

{

inti;

floatf;

charstr[20];

};

intmain()

{

unionDatadata;

printf("Memorysizeoccupiedbydata:%d\n",sizeof(data));

return0;

}

21.指针

#include

intmain()

{

intvar=20;

int*ip;

ip=&var;

printf("Addressofvarvariable:%p\n",&var);

printf("Addressstoredinipvariable:%p\n",ip);

printf("Valueof*ipvariable:%d\n",*ip);

return0;

}

22.文件读写

写入文件

#include

intmain()

{

FILE*fp=NULL;

fp=fopen("/tmp/test.txt","w+");

fprintf(fp,"Thisistestingforfprintf...\n");

fputs("Thisistestingforfputs...\n",fp);

fclose(fp);

}

读取文件

#include

intmain()

{

FILE*fp=NULL;

charbuff[255];

fp=fopen("/tmp/test.txt","r");

fscanf(fp,"%s",buff);

printf("1:%s\n",buff);

fgets(buff,255,(FILE*)fp);

printf("2:%s\n",buff);

fgets(buff,255,(FILE*)fp);

printf("3:%s\n",buff);

fclose(fp);

}

C语言与C++学习路线

23.排序算法

十大经典排序算法(动态演示+代码)

24.查找算法

九种查找算法

25.面试知识

C语言与C++面试知识总结

26.字符串操作

字符串操作的全面总结

27.C语言常用标准库解读

C语言常用标准库解读

28.C语言最常用的贪心算法

C语言最常用的贪心算法就这么被攻克了

29.常见的C语言内存错误及对策

常见的C语言内存错误及对策

30.C语言实现面向对象的原理

C语言实现面向对象的原理

31.C语言/C++内存管理

看完这篇你还能不懂C语言/C++内存管理?

32.再谈C语言指针

再谈指针:大佬给你拨开C指针的云雾

C语言函数指针之回调函数

C语言指针详解(文末有福利)

33.C语言预处理命令

长文详解:C语言预处理命令

34.C语言高效编程与代码优化

C语言高效编程与代码优化

35.C语言结构体

C语言之结构体就这样被攻克了!值得收藏!

36.原码,反码,补码详解

原码,反码,补码详解

37.C语言宏定义

简述C语言宏定义的使用

38.c语言之共用体union、枚举、大小端模式

c语言之共用体union、枚举、大小端模式

初学c语言用什么教材好,求推荐

想看国内的还是国外的?

国内的看谭浩强的《c语言程序设计》,虽然褒贬不一,不过依然是本很好的教材。国外的就选《CPrimerPlus》,C语言的入门经典,很厚的一本书(初学者千万别被吓到……),课后习题一定要都自己做了,这本书会让你打下很牢的基础。

综合来说,毕竟是国人,先看看谭浩强的吧,《CPrimerPlus》对初学者来说啃起来很难,看完谭的再看《CPrimerPlus》会好很多。

注:另外也可以看《HeadFirstC》,虽然我没看过,但HeadFirst系列评价一直不错,我看的是这系列中的Python教程,编书的风格很好,如果不喜欢教科书式的枯燥内容,HeadFirst系列就是不错的选择,让你的学习不那么枯燥并且快速入门。看完后再看《CPrimerPlus》(当然其他c语言基础教程书也行),绝对可以事半功倍。

看到别的评论说到指针,虽说对初学者来说有点早,不过我也补充一下(不知道指针的话可以先略过下面这段话):对于指针,记住一句话:“指针中存的是地址。”这也是指针的定义,永远不要忘了这句话,万变不离其宗,指针函数、函数指针、数组指针、指针数组、常量指针、指针常量、指向常量的常量指针……很头疼的东西,但不要觉得它难,觉得难只会让它越来越难,第一次学学不透不要紧,知道基本概念即可。学完了c再回头来看指针,抓住它定义的那句话,无非就是一个存地址的。以前我也混乱过,然后清晰了,然后又混乱……周而复始,混乱的时候无一例外都是被指针指来指去搞晕了,而忘记了它的定义——一个存地址的。后来看了一本书,名字我忘了,好像是C和指针,很薄的一本书,很经典的教材,这才算彻底理清了指针,也把指针中存的是地址这句话真正记在了心上,然后任何复杂的例子都是一眼明了,当同学还在为指针困惑时,我也在为他困惑:这么简单的例子有什么好困惑的?(哈哈,当时确实被同学们奉为大神了,允许我装一下)。所以对于指针不要怕,记住它的本意,再复杂的例子也可以由里到外慢慢肢解,第一遍看不透不要急眼,过后再看,有了基础可以再找一找c和指针这本书,它会让你豁然开朗。

C语言入门怎么自学 需要哪些资料

参考我的自学路线:

0.选定了C就别放弃。入门C可能需要一个多月的连续学习时间,但其他听上去更“厉害”的编程语言会花费更长的时间,并且它们需要有C的基础才能深入学习。

1.一台笔记本或平板,不推荐在手机上编程。

2.如果是windows操作系统,下载安装mingw,在命令行下熟悉了“编辑—编译—链接—执行”这个基本流程之后,就可以尝试VS2017community或者Code::Blocks或者其他任何C/C++的集成开发环境。

想学好就不要直接用IDE!在从命令行转到IDE之前,你甚至可以花半个小时的时间熟悉一下Makefile,不学这个也没事。

3.一本《CPrimerPlus》实体书,简单详细,入门经典。不推荐看电子版,伤眼睛。

4.一支笔,如果不想在书上记笔记,则你还需要一本笔记本。

5.最重要的:受得了枯燥。知识点不弄懂不跳过。看书的时候不做一些不相干的事:看电影,聊天,玩游戏……

我在过去的四个月里看完了《CPrimerPlus》和《C++Primer》,为了学好编程彻底放弃了玩游戏、听音乐(一听歌就会跟着唱,没办法认真学习)。

说实话,完整地看完第一遍是一个很痛苦的过程,不过现在再复习起来,最多也就是两天一遍。每次复习都能巩固新知识。

c语言学习资料和C语言入门怎么自学 需要哪些资料的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

本文链接:https://bk.89qw.com/a-1372331

最近发表
网站分类