C语言的基本语法有哪些?

Python012

C语言的基本语法有哪些?,第1张

基本语法介绍预处理命令

把小写字母转换成大写字母chara,ba='x'b='y'a=a-32b=b-32

printf("%c,%c\n%d,%d\n",a,b,a,b)

复合赋值语句有利于编译处理,能提高编译效率并产生质量较高的目标代码C语言中的空语句:while(getchar!='\n')//这里包含了空循环体

scanf与printf:

scanf输入数据可以指定数据字段的宽度,但不能规定数据的精度,而printf则可以printf(“%3,2f”,a)//这里的3.2表示按实数形式输出,输出宽度为3,如果输出的数不足3,位,则按实际宽度输出,四舍五入保留两位小数预处理命令

宏定义

(1)不带参数的宏定义#definePI3.1415926//不用加分号

(2)带参数的宏定义

#defineMAN(a,b)((a)>(b)?(a):(b))

在语句块内定义的变量称之为局部变量,又称为内部变量,仅在定义它的语句块内有效,并且拥有自己独立的存储空间。

全局变量:

在函数之外定义的变量成为全局变量。

如果在同一个源文件中,全局变量和局部变量同名,则在局部变量的作用范围内,全局变量不起作用,即被“屏蔽”。

说明:

(1)一个函数中既可以使用本函数的局部变量,又可以使用有效的全局变量。(2)利用全局变量可以增加函数联系的渠道,从而得到一个以上的返回值(3)全局变量一般第一个字母用大写表示

(4)建议在一般情况下不要使用全局变量,因为全局变量一直占用存储空间,降低ile函数的通用性和程序的清晰性,容易出错。变量的存储类型:(1)自动型变量

autointi=1

auto关键字只能用于定义局部变量,为默认的类型(2)寄存器型变量register

(3)静态型变量static

该变量只有在所在的函数内有效,退出该函数时该变量的值仍然保留,下次进入后仍然可以使用。退出程序时值才消失。(4)外部型变量extern

C程序在编译时当遇到extern,先在本文件中找外部变量的定义,如果找到,就在本文件中扩展作用域,如果找不到就在连接时从其他的文件中找到外部变量的定义如果找到,就将作用域扩展到本文件,否则按出错处理。

在高级语言的学习中一方面应数量掌握该语言的语法,因为它是算法实现的基础,另一方面必须认识到算法的重要性,加强思维训练,以便写出高质量的程序。getchar()getch()getche()函数和putchar()putch()函数

putchar(c)putch(c)把单个字符c输出到标准设备上getchar()getche()getch()函数用于从终端输入数据

getchar()按enter键之后才接受数据,只接收第一个数据

getch()和getche()在输入一个字符后立刻被函数接受,不用按enter键。getch()不回显输入的数据getche()显示输入的数据

指针与数组一维数组二维数组字符数组二维字符串指针与一维数组

一维数组:

不允许对数组的长度进行动态定义数组必须先定义后使用数组的定义:inti[10]

intb[]={1,2,3,0,0,0}等价于intb[6]={1,2,3}字符数组:

字符数组是由若干个有效字符构成且以字符‘\0’作为结束标志的一个字符序列。字符数组的定义:

chara[10]

字符数组的初始化:

对字符数的各个元素分别进行初始化chara[3]={'a','b'}

/*余下的自动补‘\0’,这时字符数组就变成了字符串*/

用字符串常量来给字符数组进行初始化chara[13]="helloworld!"

字符数组的输入输出:

charc[6]

(1)用格式符“%c”逐个输入输出字符:scanf("%c",&c[1])printf("%c",c[1])

(2)用格式符“%s”整个输入输出字符串:scanf("%s",c)printf("%s",c)

字符数组与字符串的区别:

字符数组用来存放和处理字符数组且不加结束标识符就“\0”时,则在程序中只能逐个引用字符数组中的各个字符,而不能一次引用整个字符数组。而字符串则可以对其引用整个数组。其操作的方式一个是数组元素,一个是数组名。

字符串处理函数:

(1)输入字符串函数char*gets(char*str)

//stdio.h

在使用gets()输入字符串时,可以包括空格在内的字符,在回车时,自动骄傲字符串结束标志‘\0’赋予字符数组的最后一个元素。

(2)输出字符串函数intputs(char*str)

//stdio.h

在使用puts()输出字符串时,将字符串结束标志‘\0’转换成‘\n’输出。

(3)字符串复制函数

char*strcpy(char*strl,char*str2)

//string.h

不能使用‘=’赋值语句对字符数组整体赋值,只能使用strcpy()处理。

(4)字符串比较函数

intstrcmp(char*str1,char*str2)

//string.h

字符串比较不能使用if(str1==str2)的形式,只能使用strcmp()(5)字符串长度测量函数unsignedintstrlen(char*str)不包括字符串结束字符‘\0’(6)找字符或字符串位置函数查找字符的位置:

char*strchr(char*str,charch)查找字符串的位置:

char*strstr(char*str1,charstr2)指针

可以简单的认为“指针”就是地址,地址就是指针。一个变量的地址只能使用&符号获得。

指针变量:

在C语言中指针被用来标识号内存单元的地址,如果把这个地址用一个变量来保存,则这中噢噢那个变量就成为指指针变量。

如指针变量pi只想变量i,那么pi就表示变量i的地址,*pi就表示变量i的值,pi=&i。i=3与*pi=3等价指针变量的使用:

先定义,后使用。

定义的一般形式:数据类型*指针变量名

指针变量与普通变量建立联系的方法(为指针赋值):指针变量名=&普通变量名说明:

(1)由于数组名就是该数组的首地址,所以指针变量与数组建立联系时,只需将数组名赋予指针变量即可。

(2)当指针变量没有赋值时,可以赋空指针NULL或0,不能间接引用没有初始化或值为NULL的指针。

(3)&取地址运算符,*取只想的值的运算符。指针变量的引用方式:

(1)*指针变量名:表示所指变量的值。(2)指针变量名:表示所指变量的地址使用指针作为函数的参数:#include<stdio.h>voidswap(int*x,int*y)voidmain(){

inta=3,b=4

printf("main1:a=%d,b=%d\n",a,b)swap(&a,&b)

printf("main2:a=%d,b=%d\n",a,b)}

voidswap(int*x,int*y){

inta

printf("swap1:a=%d,b=%d\n",*x,*y)a=*x*x=*y*y=a

printf("swap2:a=%d,b=%d\n",*x,*y)}

指针的运算:

指针的运算通常只限于:+,-,++,–

(1)指针变量加减一个整数的算术运算:

(*指针变量名)(实际参数列表)int(*FunctionPointer)(inta)FunctionPointer=func//func为函数名

(*FunctionPointer)(100)带参数的main函数

voidmain(intargc,char*argv[]){

函数体}

argc表示命令行参数个数,argv表示参数数组指向结构体的指针structstudent*pstructstudentstup=&stu

//获取子元素的三种方法:stu.name(*p).namep->name

//指针的方法

指向结构体数组的指针

指向结构体数组的指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。动态内存分配:

void*malloc(unsignedintsize)newptr=malloc(sizeof(structnode))voidfree(void*p)

链表结构:#include<stdio.h>#defineNULL0

#defineLENsizeof(structstudent)/*定义节点的长度*/#defineNODEstructstudentstructstudent{

charno[5]floatscorestructstudent*next}

structstudent*create(void)voidprintlist(structstudent*head)

NODE*insert(NODE*head,NODE*new,inti)NODE*dellist(NODE*head,charno[])

voidmain(){

structstudent*a

structstudenttest1={"abc",1.0,NULL}structstudent*test2a=create()

printf("insertnewnode\n")

test2=&test1a=insert(a,test2,2)printlist(a)

printf("deletenode\n")a=dellist(a,"2")printlist(a)

getch()}

/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void){

structstudent*head=NULL,*new1,*tailintcount=0for(){

new1=(structstudent*)malloc(LEN)

/*申请一个新结点的空间*/

printf("InputthenumberofstudentNo.%d(5bytes):",count+1)scanf("%5s",new1->no)if(strcmp(new1->no,"*")==0)

/*这里不用加取址符号,因为no就表示数组的首

地址*/

{

free(new1)/*释放最后申请的结点空间*/

break

/*结束for语句*/

}

printf("InputthescoreofthestudentNo.%d:",count+1)scanf("%f",&new1->score)count++

/*将新结点插入到链表尾,并设置新的尾指针*/if(count==1){

head=new1/*是第一个结点,置头指针*/

}else

tail->next=new1/*不是第一个结点,将新结点插入到链表尾*/tail=new1/*设置新的尾结点*/

}

/*置新结点的指针域为空*/new1->next=NULLreturn(head)}

/*输出链表*/

voidprintlist(structstudent*head){

structstudent*pp=head

if(head==NULL){

printf("Listisempty!!!\n")}else{

while(p!=NULL){

printf("%5s%4.1f\n",p->no,p->score)p=p->next}}}

/*插入链表结点*/

NODE*insert(NODE*head,NODE*new,inti){

NODE*pointer

/*将新结点插入到链表中*/if(head==NULL){

head=newnew->next=NULL}else{

if(i==0){

new->next=headhead=new}else{

pointer=head

/*查找单链表的第i个结点(pointer指向它)*/for(pointer!=NULL&&i>1pointer=pointer->next,i--)if(pointer==NULL)

printf("Outoftherange,can'tinsertnewnode!\n")else{

/*一般情况下pointer指向第i个结点*/

new->next=pointer->next

pointer->next=new}}}

return(head)}

/*删除链表*/

NODE*dellist(NODE*head,charno[]){

NODE*front/*front表示要删除结点的前一个结点*/NODE*cursor

/*cursor表示当前要删除的结点*/if(head==NULL){

/*空链表*/

printf("\nListisempty\n")return(head)}

if(strcmp(head->no,no==0)){/*要删除的结点是表头结点*/

front=headhead=head->nextfree(front)}else{

/*非表头结点*/

front=headcursor=head->next

/*通过循环移动到要删除的结点的位置*/

while(cursor!=NULL&&strcmp(cursor->no,no)!=0){

front=cursorcursor=cursor->next}

if(cursor!=NULL){

/*找到需要删除的结点进行删除操作*/

front->next=cursor->nextfree(front)}else{

printf("%5shasnotbeenfound!",*no)}}

return(head)}

var script = document.createElement('script')script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'document.body.appendChild(script)

test2=&test1a=insert(a,test2,2)printlist(a)

printf("deletenode\n")a=dellist(a,"2")printlist(a)

getch()}

/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void){

structstudent*head=NULL,*new1,*tailintcount=0for(){

new1=(structstudent*)malloc(LEN)

/*申请一个新结点的空间*/

printf("InputthenumberofstudentNo.%d(5bytes):",count+1)scanf("%5s",new1->no)if(strcmp(new1->no,"*")==0)

/*这里不用加取址符号,因为no就表示数组的首

地址*/

{

free(new1)/*释放最后申请的结点空间*/

break

/*结束for语句*/

}

}

printf("InputthescoreofthestudentNo.%d:",count+1)scanf("%f",&new1->score)count++

/*将新结点插入到链表尾,并设置新的尾指针*/if(count==1){

head=new1/*是第一个结点,置头指针*/

}else

tail->next=new1/*不是第一个结点,将新结点插入到链表尾*/tail=new1/*设置新的尾结点*/

}

/*置新结点的指针域为空*/new1->next=NULLreturn(head)}

/*输出链表*/

voidprintlist(structstudent*head){

structstudent*pp=head

if(head==NULL){

printf("Listisempty!!!\n")}else{

while(p!=NULL){

printf("%5s%4.1f\n",p->no,p->score)p=p->next}}}

/*插入链表结点*/

NODE*insert(NODE*head,NODE*new,inti){

NODE*pointer

/*将新结点插入到链表中*/if(head==NULL){

head=newnew->next=NULL}else{

if(i==0){

new->next=headhead=new}else{

pointer=head

/*查找单链表的第i个结点(pointer指向它)*/for(pointer!=NULL&&i>1pointer=pointer->next,i--)if(pointer==NULL)

printf("Outoftherange,can'tinsertnewnode!\n")else{

/*一般情况下pointer指向第i个结点*/

new->next=pointer->next

pointer->next=new}}}

return(head)}

/*删除链表*/

NODE*dellist(NODE*head,charno[]){

NODE*front/*front表示要删除结点的前一个结点*/NODE*cursor

/*cursor表示当前要删除的结点*/if(head==NULL){

/*空链表*/

printf("\nListisempty\n")return(head)}

if(strcmp(head->no,no==0)){/*要删除的结点是表头结点*/

front=headhead=head->nextfree(front)}else{

/*非表头结点*/

front=headcursor=head->next

/*通过循环移动到要删除的结点的位置*/

while(cursor!=NULL&&strcmp(cursor->no,no)!=0)

front=cursorcursor=cursor->next}

if(cursor!=NULL){

/*找到需要删除的结点进行删除操作*/

front->next=cursor->nextfree(front)}else{

printf("%5shasnotbeenfound!",*no)}}

return(head)}

  •1 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成、格式、以及良好的书写风格,使读者对c语言有个初步认识。 例1 计算两个整数之和的c程序: 1、任何一个c语言程序都必须包括以下格式: 这是c语言的基本结构,任何一个程序都必须包含这个机构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main()----在c语言中称之为“主函数”,一个c程序有且仅有一个main函数,任何一个c程序总是从main函数开始执行,main函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main函数的函数体,这部分内容就是计算机要执行的内容。 4、在{  }里面每一句话后面都有一个分号(;),在c语言中,我们把以一个分号结尾的一句话叫做一个c语言的语句,分号是语句结束的标志。 5、printf(“a=%d,b=%d,sum=%d\n”,a,b,sum)----通过执行这条c语言系统提供给我们直接使用的屏幕输出函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: 6、#include 7、程序中以 /*开头并且以*/结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。   •  2 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件,如图所示。                              编译过程 • 3 标识符 在编写程序时,必须为函数、变量等命名,这个名字称为标识符。C语言中标识符的命名规则如下: 标识符不能与程序中具有特殊意义的关键字相同,不能与用户编制的函数名、C语言库函数相同,在程序中各种标识符尽量不要重复,以便区分。选择变量名和其他标识符时,应注意做到 “见名知义”。标识符分为如下三类: 1、关键字3、用户标识符 用户根据需要自己定义的标识符称为用户标识符。无论如何自定义标识符,都必须符合标识符的三条命名规则。 • 4 常量 在程序运行中,其值不能被改变的量称为常量。常量有5种类型:整型常量、实型常量、字符常量、字符串常量和符号常量。 (一)数值转换 数字的四种表现形式:在计算机内部,数字均以二进制形式表示和存放,用户输入的普通十进制数字都要被计算机转换成二进制才能在计算机内部存储,同样计算机的运算结果也为二进制,一般要将其转换成十进制数再输出给用户阅读,这种转换通常由计算机自动实现。(1)将十进制转换二进制、八进制和十六进制 除法:将十进制数除以2,记录余数,得到的商继续除以2,直到商为0,然后将各次相处所得的余数从后往前逆序排列,所得余数数字序列就是该十进制数对应的二进制数。八进制和十六进制转换方法同上。 例:十进制数13转换成二进制数的值为1101,转换八进制为015,转换成十六进制为D.(2)将二进制、八进制和十六进制转换成十进制 乘积求和:将二进制的每一位从低位到高位(右边为低位,左边为高位)分别乘以20,21,22。。。。,然后将这些积求和。 例如:(1101)2=(13)10     (317)8=(207)10     (23E)16=(574)10(3)二进制与八进制、十六进制数之间的相互转换(二)整型常量 整型常量有3种形式:十进制整型常量、八进制整型常量和十六进制整型常量。 书写方式如下:(三)实型常量 实型常量有两种表示形式:小数形式和指数形式。(四)字符常量 (2)由一对单引号括起来,以反斜杠\开头,后跟若干数字或者字母,比如‘\n’,其中“\“是转义的意思,后面跟不同的字符表示不同的意思,这类字符常量叫转义字符。具体如图所示 。(五)字符串常量 C语言中,以双引号括起来的,由若干个字符组成的序列即为字符串常量。 例:“ni hao”   “happy”等等。 (六)符号常量 例:计算圆的面积的c程序。说明:• 5 变量 变量就是其值可以改变的量。变量要有变量名,在内存中占据一定的存储单元,存储单元里存放的是该变量的值。不同类型的变量其存储单元的大小不同,变量在使用前必须定义。 (一)整型变量 不同的编译系统对上述四种整型数据所占用的位数和数值范围有不同的规定。类型说明符说明:(二)实型变量 C语言中,实型变量分为单精度类型( float )和双精度类型( double )两种。如: 在vc中,float 型数据在内存中占4个字节(32位),double型数据占8个字节。单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。实型常量不分float型和double型,一个实型常量可以赋给一个float 型或double型变量,但变量根据其类型截取实型常量中相应的有效数字。 注意:实型变量只能存放实型值,不能用整型变量存放实型值,也不能用实型变量存放整型值。(三)字符变量 字符变量用来存放字符常量,定义形式: char  变量名; 其中关键字char定义字符型数据类型,占用一个字节的存储单元。 将一个字符赋给一个字符变量时,并不是将该字符本身存储到内存中,而是将该字符对应的ASCII码存储到内存单元中。例如,字符 ′A′ 的ASCII码为65,在内存中的存放形式如下:01000001 由于在内存中字符以ASCII码存放,它的存储形式和整数的存储形式类似,所以C语言中字符型数据与整型数据之间可以通用,一个字符能用字符的形式输出,也能用整数的形式输出,字符数据也能进行算术运算,此时相当于对它们的ASCII码进行运算。     •6 类型的自动转换和强制转换 当同一表达式中各数据的类型不同时,编译程序会自动把它们转变成同一类型后再进行计算。转换优先级为: 即左边级别“低“的类型向右边转换。具体地说,若在表达式中优先级最高的数据是double型,则此表达式中的其他数据均被转换成double型,且计算结果也是double型;若在表达式中优先级最高的数据是float型,则此表达式中的其他数据均被转换成float型,且计算结果也是float型。 在做赋值运算时,若赋值号左右两边的类型不同,则赋值号右边的类型向左边的类型转换;当右边的类型高于左边的类型时,则在转换时对右边的数据进行截取。 除自动转换外,还有强制转换,表示形式是: 讨论:当a值赋值为3.4,b值赋值为2.7,(int)(a+b)和(int)a+b的值分别为多少?   • 7  C运算符认识 C语言的运算符范围很广,可分为以下几类: 1、算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(%)、自增(++)、自减(--)共七种。 2、赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 3、逗号运算符:用于把若干表达式组合成一个表达式(,)。 4、关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。 5、逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 6、条件运算符:这是一个三目运算符,用于条件求值(?:)。 7、位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 8、指针运算符:用于取内容(*)和取地址(&)二种运算。 9.、求字节数运算符:用于计算数据类型所占的字节数(sizeof)。 10、特殊运算符:有括号(),下标[],成员(→,.)等几种。 另外,按参与运算的对象个数,C语言运算符可分为:单目运算符 (如 !)、双目运算符 (如+,- )和三目运算符 (如 ?  : )。一、   基本的算术运算符 (1)+(加法运算符或正值运算符,如2+5)。 (2)-(减法运算符或负值运算符,如4-2)。 (3)*(乘法运算符,如3*8)。 (4)/(除法运算符,如11/5)。 /的运算分为两种情况: (5)%(模运算符或称求余运算符,%两侧均应为整型数据,如9%7的值为2)。 需要说明的是:当运算对象为负数时,所得结果随编译器不同而不同,在vc中,结果的符号与被除数相同,比如:13%-2值为1,而-15%2值为-1.二、   算术表达式和运算符的优先级与结合性 算术表达式是用算术运算符和括号将运算量(也称操作数)连接起来的、符合C语言语法规则的表达式。运算对象包括函数、常量和变量等。 在计算机语言中,算术表达式的求值规律与数学中的四则运算的规律类似,其运算规则和要求如下。 (1)在算术表达式中,可使用多层圆括号,但括号必须配对。运算时从内层圆括号开始,由内向外依次计算各表达式的值。 (2)在算术表达式中,对于不同优先级的运算符,可按运算符的优先级由高到低进行运算,若表达式中运算符的优先级相同,则按运算符的结合方向进行运算。 (3)如果一个运算符两侧的操作数类型不同,则先利用自动转换或强制类型转换,使两者具有相同类型,然后进行运算。 三、   自增自减运算符 作用:使变量的值增1或减1。 (1)只有变量才能用自增运算符 (++)和自减运算符(--),而常量或表达式不能用,如10++或(x+y)++都是不合法的。 (2)++和--的结合方向是“自右向左“,如 -i++ ,i的左边是负号运算符,右边是自增运算符,负号运算和自增运算都是 “自右向左“结合的,相当于 -(i++)。 在循环语句中常用到自增(减)运算符,在指针中也常用到该运算符,考生要弄清楚“i++”和“++i”及“i--”和“--i”的区别,特别弄清楚表达式的值和变量的值。 例:变量n的初始值为2,则 例:有以下程序程序运行后的输出结果是_____ A.12  35  13  35  14  36     B. 12  35  14  35  14  36 C.12  35  14  36  14  36     D. 12  35  14  35  14  35 解析:自增自减运算需要注意区分表达式的值和变量的值,表达式运算后,变量会自增自减运算,表达式和变量变化如下:     •9 赋值运算符与赋值表达式 一、赋值运算符与赋值表达式 赋值符号 “=“就是赋值运算符,作用是将一个数据赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。一般形式为: 变量名 = 表达式 在程序中可以多次给一个变量赋值,每赋一次值,与它相应的存储单元中的数据就被更新一次,内存中当前的数据就是最后一次所赋值的那个数据。 说明: a、如果赋值号两边的运算对象类型不一致,系统会自动进行类型转换,转换的规则:将赋值号右边表达式的值的类型转换成赋值号左边变量的类型, b、 可以将复制表达式的值再赋值给变量,形成连续赋值。二、复合的赋值运算符 在赋值运算符之前加上其他运算符可以构成复合赋值运算符。其中与算术运算有关的复合运算符是:+=,-=,*=,/=,%= 。 两个符号之间不可以有空格,复合赋值运算符的优先级与赋值运算符的相同。表达式n+=1等价于n=n+1,作用是取变量n中的值增1再赋给变量n,其他复合的赋值运算符的运算规则依次类推。 如求表达a+=a-=a*a 的值,其中a的初值为12 。 步骤:   •10  逗号运算符和逗号表达式 在c语言中,逗号除了作为分隔符,还可以用作一种运算符----逗号运算符,用逗号运算符将几个表达式连接起来,例如a=b+c,a=b*c等称为逗号表达式。 一般形式为: 表达式1 ,表达式2 ,表达式3 , …,表达式n 例:x=2,y=3,z=4 逗号表达式具有从左至右的结合性,即先求解表达式1,然后依次求解表达式2,直到表达式n的值。表达式n的值就是整个逗号表达式的值。上述的逗号表达式的值就是表达式z=4的值4.需要注意的是,逗号运算符是所有运算符中级别最低的。 例:有如下程序段: 程序显示结果为:y=6,x=6 讨论:将y=(x=a+b),(b+c)改为y=((x=a+b),b+c) 的程序结果?  • 11 关系运算符和关系表达式 一、   C语言中的逻辑值 C语言中的逻辑值只有两个:真(true)和假(flase)。用非零代表真,用零代表假。因此,对于任意一个表达式,如果它的值为零,就代表一个假值,如果它的值为非零,就代表一个真值。只要值不是零,不管是正数,负数,整数,实数,都代表一个真值。例如-5的逻辑值为真。二、   关系运算符及其优先次序 C语言提供了6种关系运算符,见表 由两个字符组成的运算符之间不可以加空格,关系运算符都是双目运算符。(1)结合性:自左向右。 (2)优先次序:前4种关系运算符( <,<=,>=,>)的优先级别相同,后两种 (==,!=)优先级相同,且前4种优先级高于后两种;关系运算符的优先级低于算术运算符,高于赋值运算符。三、   关系表达式 由关系运算符连接而成的表达式称为关系表达式。 例如:a>b,(a=7)>(b=10)等都是合法的关系表达式。 关系表达式的结果有两个:0和1,。其中0表示假,1表示真。如果关系表达式成立,则值为真,如果关系表达式不成立,则值为假。 例:变量a的值为5,b的值为6,那么关系表达式a>b的值为假,即为0.而关系表达式 (a=13)>(b=10)的值为真,即为1。 当关系运算符两边值的类型不一致时,若一边是整型,一边是实型,系统将自动把整型数转化为实型数,然后再进行比较。    •12 逻辑运算符和逻辑表达式 一、   逻辑运算符及其优先级 C语言提供了3种逻辑运算符,如下表。 二、   逻辑表达式“&&”和“||”的运算对象有两个,故它们都是双目运算符,而!的运算对象只有一个,因此它是单目运算符。逻辑运算举例如下: (1)a&&b: 当&&两边都为“真”时,表达式a&&b的值才是真。值得注意的是:在数学中,关系式0 (2)a||b: 当||两边有一个为“真”时,表达式a||b的值就是真。 (3)!a:   表示取反,如果a为真,则!A为假,反之亦然。例如!-5的值就为0.在C语言中,由&&或||组成的逻辑表达式,在某些特定情况下会产生“短路“现象。 (1)x &&y &&z ,只有当x为真(非0)时,才需要判别y的值;只有x和y都为真时,才需要去判别z的值;只要x为假就不必判别y和z,整个表达式的值为0。口诀:“一假必假”。 例:(!5==1)&&(++i==0)  (!5==1)表达式的值为0,所以计算机运行中就跳过(++i==0)此表达式,(!5==1)&&(++i==0)表达式的值为0. (2)x||y||z ,只要x的值为真(非零),就不必判别y和z的值 ,整个表达式的值为1,只有x的值为假,才需要判别y的值,只有x和y的值同时为假才需要判别z的值,口诀:“一真必真”。   •13 位运算 一、   位运算符 在计算机中,数据都是以二进制数形式存放的,位运算就是指对存储单元中二进制位的运算。C语言提供6种位运算符。二、位运算位运算符 & |~<< >> ∧ 按优先级从高到低排列的顺序是: 位运算符中求反运算“~“优先级最高,而左移和右移相同,居于第二,接下来的顺序是按位与 “&“、按位异或 “∧“和按位或 “|“。顺序为~  << >> & ∧  |  。 例1左移运算符“<<”是双目运算符。其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例 2右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。 应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。例 3 设二进制数a是00101101 ,若通过异或运算a∧b 使a的高4位取反,低4位不变,则二进制数b是。 解析:异或运算常用来使特定位翻转,只要使需翻转的位与1进行异或操作就可以了,因为原数中值为1的位与1进行异或运算得0 ,原数中值为0的位与1进行异或运算结果得1。而与0进行异或的位将保持原值。异或运算还可用来交换两个值,不用临时变量。 所以本题的答案为: 11110000 。

   计算机c语言的特性

C语言是世界上最流行、使用最广泛的高级程序设计语言之一。在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言的主要特性有以下几种:

1、C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。

2、C是结构式语言:结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。

3、C语言功能齐全:具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。

4、C语言适用范围大:适合于多种操作系统,如Windows、DOS、UNIX等等也适用于多种机型。

5、C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。C++在这方面做了改进,在保留了指针操作的同时又增强了安全性。

6、C语言创始人D.M.Ritchie6、C语言文件由数据序列组成:可以构成二进制文件或文本文件常用的C语言IDE有Microsoft Visual C++,Dev-C++,Code::Blocks,Borland C++,Watcom C++,Borland C++ Builder,GNU DJGPP C++,Lccwin32 C Compiler 3.1,High C,Turbo C,C-Free,win-tc,xcode等。

   计算机c语言的语法结构

1.顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算,输出三步曲的程序就是顺序结构。

2.选择结构

选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。

3.循环结构

循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。

4.模块化程序结构

C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。

   计算机c语言基础知识

【知识点1】C程序

C语言程序结构有三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch)

【知识点2】main函数

每个C语言程序中main 函数是有且只有一个。读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。

【知识点3】存储形式

计算机的数据在电脑中是以二进制的形式保存。最低的存储单元是bit(位),位是由为 0 或者1构成。 byte 是指字节, 一个字节 = 八个位。数据存放的位置就是它的地址。

【知识点4】注释

是对程序的说明,可出现在程序中任意合适的地方,注释从“/*”开始到最近一个“*/”结束,其间任何内容都不会被计算机执行,注释不可以嵌套。

【知识点5】书写格式

每条语句的后面必须有一个分号,分号是语句的一部分。一行内可写多条语句,一个语句可写在多行上。

【知识点6】标识符

合法的用户标识符考查:

合法的要求是由字母,数字,下划线组成。有其它元素就错了。

并且第一个必须为字母或则是下划线。第一个为数字就错了。

C语言标识符分如下3类

(1)关键字。它们在程序中有固定的含义,不能另作他用。如int、for、switch等。

(2)预定义标识符。预先定义并具有特定含义的标识符。如define、include等。

(3)用户标识符。用户根据需要定义的标识符,符合命名规则且不与关键字相同。

关键字不可以作为用户标识符号。main define scanf printf 都不是关键字。迷惑你的地方If 是可以做为用户标识符。因为If 中的'第一个字母大写了,所以不是关键字。

【知识点7】实型数据

实型数据的合法形式:小数形式和指数形式。掌握判定指数形式合法性。

2.333e-1 就是合法的,且数据是2.333×10-1。

考试口诀:e 前e 后必有数,e 后必为整数。

【知识点8】字符

字符数据的合法形式::

'1' 是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。

'0' 的ASCII 数值表示为48,'a' 的ASCII 数值是97,'A'的ASCII 数值是65。

字符型和整数是近亲:

char a = 65

printf(“%c”, a)得到的输出结果:a

printf(“%d”, a)得到的输出结果:65

一般考试表示单个字符错误的形式:'65' "1"

字符是可以进行算术运算的,记住: '0'-0=48

大写字母和小写字母转换的方法: 'A'+32='a' 相互之间一般是相差32。

【知识点9】整型数据

整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节:

考试时候一般会说,在16 位编译系统,或者是32 位系统。碰到这种情况,不要去管,

一样做题。掌握整型一般是两个字节, 字符型是一个字节,双精度一般是4 个字节就可以了。

【知识点10】转义字符

转义字符的考查:

在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x 必须存在。

在程序中 int a = 06d, 是一个八进制的形式。

在转义字符中, ’x6d’ 才是合法的,0 不能写,并且x 是小写。

‘141’ 是合法的, 0 是不能写的。

‘108’是非法的,因为不可以出现8。

【知识点11】算术运算

算术运算符一共有+、—、*、/、%这五个。%符号两边要求是整数。不是整数就错了。

三种取整丢小数的情况:不是四舍五入是舍掉小数部分。

1、int a =1.6

2、(int)a

3、1/23/2

【知识点12】强制类型转换

将一个运算对象转换成指定类型,格式为(类型名)表达式

一定是 (int)a 不是 int(a),注意类型上一定有括号的。

注意(int)(a+b) 和(int)a+b 的区别。前是把a+b 转型,后是把a 转型再加b。

【知识点13】赋值

是表达式就一定有数值。

赋值表达式:表达式数值是最左边的数值,a=b=5该表达式为5,常量不可以赋值。

复合赋值运算符:注意:a*=m+2 是 a=a*(m+2)

自加、自减表达式:假设a=5,++a(表达式的值为6), a++(表达式的值为5)

j=a++等价于j=aa=a+1而j=++a等价于a=a+1j=a。

考试口诀:++在前先加后用,++在后先用后加。

【知识点14】逗号运算

逗号表达式:优先级别最低表达式的数值逗号最右边的那个表达式的数值。

(2,3,4)的表达式的数值就是4。

【知识点15】数制转换

一定要记住二进制 如何转换成十进制。

八进制是没有8 的,逢8 进1,018 的数值是非法的。

【知识点16】位运算

会有一到二题考试题目。

C语言提供6种位运算符:按位求反~,按位左移<<,按位右移>>,按位与&,按位异或|,按位或^。

总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。

异或运算的规则:0异或1得到1,0异或0得到0,1异或1得到0。可记为“相同为0,不同为1”。

在没有舍去数据的时候,<<左移一位表示乘以2>>右移一位表示除以2。