第一篇:C语言第12讲 C语言的常用语法小结
第12讲C语言的常用语法小结
1、标识符
由字母、数字和下划线组成。标识符必须以字母或下划线开头。大、小写的字母分别认为是两个不同的字符。不同的系统对标识符的字符数有不同的规定,一般允许7个字符。
2、注释
“/*”和“*/”必须成对出现; 注释不能嵌套;
注释可出现在程序的任何位置。
3、常量
整型常量十进制常数(八进制常数、十六进制常数、长整型常数); 字符常量(用单引号括起来的字符); 字符串常量(用双引号括起来的字符序列); 浮点型常量(小数形式、指数形式)。
4、表达式
算术表达式(整型表达式、实型表达式);
逻辑表达式(用逻辑运算符连接的整型量,结果为一个整数0或1,逻辑表达式可以认为是整型表达式的一种特殊形式); 字位表达式;
强制类型转换表达式(用“类型”运算符使表达式的类型进行强制转换); 逗号表达式;
赋值表达式(将赋值号“=”右侧表达式的值赋给赋值号左边的变量); 条件表达式;
指针表达式(对指针类型的数据进行运算)。
5、数据定义
对程序中用到的所有变量都需要进行定义。对数据定义其类型,需要时要指定其存储类别。类型标识符可用:int、short、long、unsigned、char、float、double、struct 结构体名、union 共用体名等;存储类别可用:auto、static、register、extern(如不指定存储类别,作auto处理)。注意:外部数据定义只能用extern或static,而不能用auto或register。
6、函数定义
形式为:存储类别 数据类型 函数名(形参表列);形参说明;函数体。
函数的存储类别只能用extern或static。函数体是用花括弧括起来的,可包括数据定义和语句。
7、变量的初始化
可以在定义时对变量或数组指定初始值;静态变量或外部变量如未初始化,系统自动使其初值为零(对数值型变量)或空(对字符型数据);对自动变量或寄存器变量,若未初始化,则其初值为一不可预测的数据;只有静态或外部数组才能初始化。
第二篇:C语言小结
本人也是刚学C不久算是老菜鸟。把我遇到的问题写出来,希望对初学者有点帮助。
一、分号,大括号
分号。分号是表达式结束的标志,一般表达式后面都要有。写“;”的时候一定要注意:是否要结束前面的语句。注意:if,switch,for,while语句,数据类型定义,函数定义。
if(a>b)/*if语句,没有分号*/ {...}
while(i+=10,i!=100);/*while语句循环体为空,依靠逗号语句实现循环*/
struct a /*结构体数据定义,没有分号*/
{...}b;/*结构体变量,要有分号*/
int sum(...)/*函数定义,没有分号*/ {....}
大括号。大括号是一个语句段的标志。写大括号时最好一次写一对,然后把光标移到大括号里写。避免遗漏。
二、运算符号
“=”与“==”
“=”用于赋值,注意“=”左边必须是变量,右边可以是常量也可以是变量。“==”用于判断两个量的大小,左右两边可以是常量也可以是变量(尽量把常量写在左边,这样“==”误写成“=”时编译器就会报错)。运算表达式有它本身的值。“=”语句值为“=”右边的量的大小;“==”语句值为判断结果,无外乎两种,0(表示“==”两边不等)1(“==”两边相等)。
(i=1)==(3==4);/*i值为1,整个表达式值为0*/
“,”
逗号语句是从左到右计算,整个逗号语句的值为最后一个语句的值 i=(j=2,j+8,j++);
/*先计算j=2,值为2,j+8不是运算表达式,跳过,计算j++得到整个括号内的值3*/ “/”
“/”两边都是整型变量的时候结果也是整型,而且结果遵循向0靠拢的原则。
运算符的优先级及结合方向
不多说了,表格一定要背牢。
三、变量
命名
不要吝惜,能说明白性质尽量在变量的名字上说明。避免老是使用一个字母,或者难以理解的变量名。对于较长的变量命名可以使用宏定义、类型定义。
#deine UP 0x4800
/*键码的宏定义*/
typedef struct
{....}MEM;
/*结构体变量的类型定义*/
类型
注意变量的使用范围。当不确定变量的范围的时候尽量选用值域宽的类型。双目运算符两边的变量一般类型要一致。不一致的时候需要使用类型转换。上回说的是一些小问题,真正编东西,学东西还有许多要注意的地方。
由于本人也是刚学不久,水平有限,说错的地方望大家原谅。谢谢!
一、多看代码
在有一定基础以后一定要多看别人的代码。注意代码中的算法和数据结构。毕竟学C之后的关口就是算法和数据结构。提到数据结构,指针是其中重要的一环,绝大多数的数据结构是建立在指针之上的,如链表、队列、树、图等等,所以只有学好指针才能真正学好C。别的方面也要关注一下,诸如变量的命名、库函数的用法等等。有些库函数是经常用到的。对于这些函数的用法就要牢牢记住。
二、要自己动手
编程序是个实干的活,光说不练不行。刚开始学的时候可以多练习书上的习题。对于自己不明白的地方,自己编个小程序实验一下是最好的方法,能给自己留下深刻的印象。自己动手的过程中要不断纠正自己不好的编程习惯和认识错误。有一定的基础以后可以尝试编一点小游戏,文曲星之类的电子词典上小游戏很多,照着编作为练习。基础很扎实的时候,可以编一些关于数据结构方面的东西,诸如最经典的学生管理系统。之后.....学汇编、硬件知识。
三、选择一个好的编译器
本人前段时间就遭受了一个编译器的折磨。这个编译器带了个自运行程序,自动修改IE主页。叫什么名字就不说了。言归正传,英文版Turbo C v2.0没话说,最经典的C编译器(下载地址:http://),其次推荐一个win-tc 1.91,支持windows下的编译器。(下载地址:http://)
四、关于养成良好的编程习惯
基本上每本C教材上都要提到。作为新手这条一定要时时遵守。记的一位网友发过评论:高手写一堆乱七八糟的代码就是艺术,新手写一堆乱七八糟的代码就是垃圾。就象古代贤人写错字叫通假字,小学生写错字叫错别字,一个道理。具体方面:
1、在比较复杂的代码后面要有注释。如果光溜溜一堆代码,别人就不可能看懂你的代码,而且也不利于查找错误。除非你一直编东西给自己看。能在代码里说明白的就一定要在代码里体现。比如变量名、函数名,在命名的时候尽量说明是干什么用的。
2、注意语句的嵌套不能过长,一般来说,一段代码里Tab要少于8个。简单说就是语句最多8个嵌套。对于新手来说,这个标准还要下降。有一个好习惯是,把主函数尽量写简短。经常看到别人的代码是主函数只有几行,几个函数调用,而定义全在主函数外部。这样一是减少了主函数内部的嵌套,二是比较精简,容易读懂。
3、注意语句的选择。并不是分支语句就用if循环就用while、for。在适当的情况下switch和do while语句也是要用的。在某些时候,switch语句比if语句更加精练明了,而do while比while少一个循环。
第三篇:C语言小结2
题目: 给定n个数据, 求最小值出现的位置(如果最小值出现多次,求出第一次出
现的位置即可)。
#include
int a[10], i, *p;
printf(“输入10个数:n”);
//下标法输入各值:
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
//指针法输出各值:
for(p=a;p printf(“%3d”, *p);} 题目:编写函数fun,函数的功能是:计算n门课程的平 均值,计算结果作为函数值返回。 例如,若有5门课程的成绩是:92,76,69,58,88,则函数的值为76.600000。 #include “stdio.h” float fun(int a[],int n){ /**********Program**********/ int i; float s=0,t; for(i=0;i s=s+a[i]; t=s/n; return(t); /********** End **********/ } void main(){ int a[]={92,76,69,58,88};printf(“y=%fn”,fun(a,5));} 题目:编写函数fun,函数的功能是:找出一批正整数中 的最大的偶数。 #include “stdio.h” int fun(int a[],int n){ /**********Program**********/ int i,num;num=-1;for(i=0;i /********** End **********/ } void main(){ int a[]={1,2,9,24,35,18},k;k=fun(a,6);printf(“max=%dn”,k);} C语言学习心得体会 不知不觉在xx学习也有一个月,在这一个月中,生活上,我已经熟悉并习惯了周围的环境。学习上,我也有了不小的进步,虽然还是有很多欠缺的地方,但我相信再经过一段时间的学习,我一定会有更大的进步。 在前三个星期,我们系统的学习了c语言,不敢说学的非常好,但还是可以的。虽然是短期的学习,但可能是之前接触过的原因,学起来并不是很辛苦,感觉还是比较轻松的。在这三个星期里,我巩固了之前学过的知识,也进一步学习了之前没有学到的,或者之前学的不到位的地方。让我对c语言有了进一步的深刻的了解,以及规范熟练的运用。在C语言课程的最后,我们做了一个小项目,向全班同学演示了自己在三个星期里所编写的程序。在最后完成的时候,我都不敢相信,这是我亲手编写出来的程序。 而在近两个星期的数据结构的课程的学习过程中,我就有点力不从心了。之前也没有接触过这门课程,很多东西都理解不了,思维转不过弯来,编写程序的时候甚至感觉无从下手。老师的课讲的很好,也十分有条理,可有很多逻辑思维上的东西并不是老师讲,我们就能懂的,老师也只能起到引导的作用,还是需要自己慢慢摸索,慢慢理解。我感觉自己还是需要时间,去慢慢消化,去慢慢理解。 最近几天,我们开始分组做项目(电子地图管理系统),虽然感觉自己不会的东西还有很多,但我还是努力完成组长分配给我的任务,一边学习,一边编程序。在项目的完成过程中,我更多的学会的是团队合作与交流,有些东西你不会,你不懂,但有其他人会,合作与交流才能更好的完成一个项目。 xxx2014-x-x 第十六讲 一、内容概要及重点 1.教学内容:文件(共2学时,本讲2学时) (1)C文件概述 (2)文件类型指针(3)文件的打开与关闭(4)文件的读写 2.教学目的及要求: (1)了解c语言文件的概念与类型 (2)了解文件型指针的定义 (3)掌握文件打开与关闭的方法及其意义(4)掌握文件读写函数的使用方法 3.教学重点: (1)文件的打开与关闭 (2)文件的读写 4.教学难点: 文件的读写 5.主要教学环节的组织: 结合例子、上机、幻灯课件板书掌握文件的概念和用法 二、教学内容 一、C语言文件概述 在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据被释放。 如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。 1、文件与文件名 文件是指存放在外部存储介质上的数据集合。 为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名[.扩展名] 文件命名规则,遵循操作系统的约定。 2、文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。(2)根据文件的组织形式,可分为顺序存取文件和随机存取文件。(3)根据文件的存储形式,可分为ASCII码文件和二进制文件。ASCII码文件的每1个字节存储1个字符,因而便于对字符进行逐个处理。但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)。 二进制文件是把内存中的数据,原样输出到磁盘文件中。可以节省存储空间和转换时间,但1个字节并不对应1个字符,不能直接输出字符形式。 3、读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送到计算机内存的操作。所谓写文件是指,从计算机内存向磁盘文件中传送数据的操作。 4、构成文件的基本单元与流式文件 C语言将文件看作是由一个一个的字符(ASCII码文件)或字节(二进制文件)组成的。将这种文件称为流式文件。 而在其它高级语言中,组成文件的基本单位是记录,对文件操作的基本单位也是记录。 5、文件类型FILE 系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为FILE。 注意:结构类型名“FILE”必须大写 6、ANSI C的缓冲文件系统 所谓缓冲文件系统是指,系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。从内存向磁盘输出数据时,必须首先输出到缓冲区中。待缓冲区装满后,再一起输出到磁盘文件中。 从磁盘文件向内存读入数据时,则正好相反:首先将一批数据读入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。 二、文件的打开与关闭 对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。C语言规定了标准输入输出函数库,用fopen()函数打开一个文件,用fclose()函数关闭一个文件。 1、文件的打开──fopen()函数 1.用法: FILE *fopen(“文件名”,“操作方式”);2.功能:返回一个指向指定文件的指针。3.函数原型:stdio.h。注:对文件操作的库函数,函数原型均在头文件stdio.h中。 (1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。 (2)“操作方式” “r”(只读) 为输入打开一个文本文件 “w”(只写) 为输出打开一个文本文件 “a”(追加) 为追加打开一个文本文件 “rb”(只读) 为输入打开一个二进制文件 “wb”(只写) 为输出打开一个二进制文件 “ab”(追加) 为追加打开一个二进制文件 “r+”(读写) 为读/写打开一个文本文件 “w+”(读写) 为读/写创建一个文本文件 “a+”(读写) 为读/写打开一个文本文件 “rb+”(读写) 为读/写打开一个二进制文件 “wb+”(读写) 为读/写创建一个二进制文件 “ab+”(读写) 为读/写打开一个二进制文件 说明: 1)打开文件的方式,必须与文件的属性兼容。例如,不能以“w”和“a”方式打开具有“只读”属性的文件。但可以以任何方式打开“隐藏”属性文件。 2)DOS/Windows中,无“只写”文件属性,一个文件可写,同时意味着可读。 3)用带“r”的方式(“r”、“rb”、“r+”、“rb+”)打开文件时,若文件不存在,则返回NULL指针。 4)在Turbo C2.0中,用带“a”或带“w”的方式打开文件时,若文件不存在,则创建该文件。但fopen()函数仍可能因为磁盘写保护或目录满而失败。 5)在Turbo C2.0中,用带“a”或带“w”的方式打开文件时,若文件已存在,“a”方式在原文件后追加数据,“w”方式把原文件删除、并重新创建一个相同名字的文件。 例如,FILE *fp;fp=fopen(“data.99”,“r”); 说明: (1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定义为0)。 为增强程序的可靠性,常用下面的方法打开一个文件: if((fp=fopen(“文件名”,“操作方式”))==NULL){ printf(“can not open this filen”);exit(0);} 关于exit()函数 1)用法:void exit([程序状态值]);2)功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将“程序状态值”返回给操作系统。当“程序状态值”为0时,表示程序正常退出;非0值时,表示程序出错退出。 (2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。 (3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。 使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。 (4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同,请注意所使用系统的规定。 (5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针: 1)标准输入文件——stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。 2)标准输出文件——stdout:指向终端输出(一般为显示器)。 3)标准错误文件——stderr:指向终端标准错误输出(一般为显示器)。 2、文件的关闭──fcolse()函数 1.用法: int fclose(FILE *文件指针); 2.功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。 例如,fclose(fp);/*关闭fp所指向的文件*/ 三、文件的读写操作 文件打开之后,就可以对它进行读与写的操作了。 1.将一个字符写到文件中──fputc()函数 1)用法:int fputc(字符数据,文件指针);其中“字符数据”,既可以是字符常量,也可以是字符变量。 2)功能:将字符数据输出到“文件指针”所指向的文件中去,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。 如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为-1)。 2.从文件中读入一个字符──fgetc()函数和feof()函数 (1)库函数fgetc()1)用法:int fgetc(文件指针);2)功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。该函数无出错返回值。 例如,fgetc(fp)表达式,从文件fp中读一个字符,同时将fp的读写位置指针向前移动到下一个字符。 (2)关于符号常量EOF 在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。 在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到文件尾。 3.库函数feof(): 1)用法:int feof(文件指针);2)功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。feof()函数同时适用于ASCII码文件和二进制文件。 例如,!feof(input))表示源文件(用于输入)未结束,循环继续。 读/写一个字符串──fgets()和fputs()(1)为增强程序的可靠性,程序中对参数过多的情况,提示出错、并终止程序运行;而遗漏文件名时,提示用户输入。 同时,为增强程序的人机交互性,凡是需要用户输入数据的地方,都设置提示输入的信息;凡是输出数据的地方,都设置输出说明信息。 4.库函数fputs()──向指定文件输出一个字符串 1)用法:int fputs(字符串,文件指针);其中“字符串”可以是一个字符串常量,或字符数组名,或字符指针变量名。 2)功能:向指定文件输出一个字符串,同时将读写位置指针向前移动strlength(字符串长度)个字节。如果输出成功,则函数返回值为0;否则,为非0值。 5.库函数fgets()──从文件中读一个字符串 1)用法:char *fgets(指针,串长度+1,文件指针);2)功能:从指定文件中读入一个字符串,存入“字符数组/指针”中,并在尾端自动加一个结束标志' ';同时,将读写位置指针向前移动strlength(字符串长度)个字节。 如果在读入规定长度之前遇到文件尾EOF或换行符,读入即结束。 6.读/写一个数据块──fread()和fwrite() 实际应用中,常常要求1次读/写1个数据块。为此,ANSI C 标准设置了 fread()和fwrite()函数。 1.用法: int fread(void *buffer,int size,int count,FILE *fp); int fwrite(void *buffer,int size,int count,FILE *fp); 2.功能: fread()──从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节。 其中,buffer是存放读入数据的起始地址(即存放何处)。 fwrite()──从buffer开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。 其中,buffer是要输出数据在内存中的起始地址(即从何处开始输出)。如果调用fread()或fwrite()成功,则函数返回值等于count。fread()和fwrite()函数,一般用于二进制文件的处理。对文件进行格式化读/写──fscanf()和fprintf()函数 与scanf()和printf()函数的功能相似,区别在于:fscanf()和fprintf()函数的操作对象是指定文件,而scanf()和printf()函数的操作对象是标准输入(stdin)输出(stdout)文件。 int fscanf(文件指针,“格式符”,输入变量首地址表);int fprintf(文件指针,“格式符”,输出参量表);例如,......int i=3;float f=9.80;......fprintf(fp,“%2d,%6.2f”, i, f);......fprintf()函数的作用是,将变量i按%2d格式、变量f按%6.2f格式,以逗号作分隔符,输出到fp所指向的文件中:□3,□□9.80(□表示1个空格)。 读/写函数的选用原则 从功能角度来说,fread()和fwrite()函数可以完成文件的任何数据读/写操作。但为方便起见,依下列原则选用: (1)读/写1个字符(或字节)数据时:选用fgetc()和fputc()函数。 (2)读/写1个字符串时:选用fgets()和fputs()函数。 (3)读/写1个(或多个)不含格式的数据时:选用fread()和fwrite()函数。 (4)读/写1个(或多个)含格式的数据时:选用fscanf()和fprintf()函数。 三、习题 13.4 综合作业第四篇:c语言培训小结(推荐)
第五篇:C语言讲稿第十六讲