c语法规范
⑴ c语言语法的表达式有什么要求
(1)C源程序是由一个主函数和若干个其它函数组成的。
(2)函数名内后必须有小括号容,函数体放在大括号内。
(3)C程序必须用小写字母书写。
(4)每句的末尾加分号。
(5)可以一行多句。
(6)可以一句多行。
(7)可以在程序的任何位置加注释。 一个完整的C语言程序,是由一个main()函数(又称主函数)和若干个其它函数结合而成的,或仅由一个main()函数构成。
⑵ C语言的语法规则是什么
这不是一句两句话能说清楚的,就像英语语法一样,买本教材练习一下就知道了。
⑶ C语言中赋值语句的语法是怎样的
赋值的语法规则就是:
数据类型 变量名 = 表达式
表达式可以理内解为一个容值或一个计算公式就行,表达式加一个英文符号分号就是语句。
例如:
我们今天要用到的,我买了几斤苹果。
就可以这样写:
方式一:
Int apple_count = 0; //告诉计算机apple_count是用来存买苹果的斤数的,默认为0;
方式二:
Int apple_count; //告诉计算机apple_count是用来存买苹果的斤数的,以后再告诉计算机它等于多少,现在不知道;
(3)c语法规范扩展阅读
1、C语言中,赋值运算的操作是有方向的,即将右侧表达式的值(也称为右值)赋值左侧的变量,只能是标识一个特定存储单元的变量名。
2、由于变量名只能出现在赋值运算符的左边,因此它也被称为左值;由于常量只能出现在赋值运算符的右边,因此它也被称为右值。左值可以用作右值,但右值不能用作左值。
⑷ 符合C语言语法的表达式
A) a十=a一=(b= 4)*(a=3)
优先级问题
看谭浩强C语言的地356页,附录C,运算符和结合性
这表达式可简化为:
a = a + (a - ( (b=4)*(a=3) ))
先从内层括号执行到外层括号
B)a=a*3=2 //不能出现连续赋值
C) x%(一3)//不能对负数取余
D)y=f1oat(i) //强制转换语法是y = (float)i;
不知解析是否有错!
⑸ C语言的基本语法有哪些
基本语法介绍预处理命令
把小写字母转换成大写字母chara,b;a='x';b='y';a=a-32;b=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*p;structstudentstu;p=&stu;
//获取子元素的三种方法:stu.name;(*p).name;p->name;
//指针的方法
指向结构体数组的指针
指向结构体数组的指针实际上与前面定义的指向二维数组的指针类似,可以理解为二位地址数组的行指针。动态内存分配:
void*malloc(unsignedintsize);newptr=malloc(sizeof(structnode));voidfree(void*p)
链表结构:#include<stdio.h>#defineNULL0
#defineLENsizeof(structstudent)/*定义节点的长度*/#{
charno[5];floatscore;structstudent*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*test2;a=create();
printf("insertnewnode\n");
test2=&test1;a=insert(a,test2,2);printlist(a);
printf("deletenode\n");a=dellist(a,"2");printlist(a);
getch();}
/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void){
structstudent*head=NULL,*new1,*tail;intcount=0;for(;;){
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=NULL;return(head);}
/*输出链表*/
voidprintlist(structstudent*head){
structstudent*p;p=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=new;new->next=NULL;}else{
if(i==0){
new->next=head;head=new;}else{
pointer=head;
/*查找单链表的第i个结点(pointer指向它)*/for(;pointer!=NULL&&i>1;pointer=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=head;head=head->next;free(front);}else{
/*非表头结点*/
front=head;cursor=head->next;
/*通过循环移动到要删除的结点的位置*/
while(cursor!=NULL&&strcmp(cursor->no,no)!=0){
front=cursor;cursor=cursor->next;}
if(cursor!=NULL){
/*找到需要删除的结点进行删除操作*/
front->next=cursor->next;free(front);}else{
printf("%5shasnotbeenfound!",*no);}}
return(head);}
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
test2=&test1;a=insert(a,test2,2);printlist(a);
printf("deletenode\n");a=dellist(a,"2");printlist(a);
getch();}
/*创建一个具有头结点的单链表,返回单链表的头指针*/structstudent*create(void){
structstudent*head=NULL,*new1,*tail;intcount=0;for(;;){
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=NULL;return(head);}
/*输出链表*/
voidprintlist(structstudent*head){
structstudent*p;p=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=new;new->next=NULL;}else{
if(i==0){
new->next=head;head=new;}else{
pointer=head;
/*查找单链表的第i个结点(pointer指向它)*/for(;pointer!=NULL&&i>1;pointer=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=head;head=head->next;free(front);}else{
/*非表头结点*/
front=head;cursor=head->next;
/*通过循环移动到要删除的结点的位置*/
while(cursor!=NULL&&strcmp(cursor->no,no)!=0)
front=cursor;cursor=cursor->next;}
if(cursor!=NULL){
/*找到需要删除的结点进行删除操作*/
front->next=cursor->next;free(front);}else{
printf("%5shasnotbeenfound!",*no);}}
return(head);}
⑹ C语言的基本语法有哪些
先是标准语法
#include<stdio.h>
void main{}
然后是数据类型 比如 整数型int
浮点型float;double...
然后是循环体专属比如if(){}else(){}....
其他的之后可以慢慢了解,如果想学,可以看看谭浩强的《C程序设计》。
⑺ C语言什么是语法啊
通过给计算机输入某种语言的指令,这个指令一定要按照该计算机语言的规则,比如C语言的规范,然后通过对指令的编译让计算机完成某项任务。
⑻ C程序中为什么3*a*b/c*d不符合语法规范
你b选项写错了吧?是3.14%2吧?
因为%是操作符,所以要求两边都必须是整数,3.14不符合规则,故选b
⑼ 下列标识符中不符合C语言语法规范的是。 B._abc C.a#12
首先你要来知道的是C语言中的标识符源分为三类:关键字,预定义标识符、用户标识符。C语言中标识符由字母、数字和下划线组成,而且第一个字符必须是字母或下划线。所以排除C和D而A中的void是C语言中的关键字,如果用户标识符和关键字相同的话,在对程序进行编译时就会给出出错信息,所以排除A答案为B下边的那位热心网友所说的并不完全正确,因为在C语言中,大写字母和小写字母被认为是两个不同的字符,虽然for和case也是C语言中的关键字,但是For和Case是可以作为用户标识符的。另外,A选项中的define是C语言中的预定义标识符,但是C语言允许把这类标识符重新定义另作他用,只是会失去预先定义的原意,可以用作用户标识符。