c语言错题
c语言面试找错题

c语言面试找错题1、c语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么?inta=5,b=7,c;c=a+++b;这个问题将做为这个测验的一个愉快的结尾。
不管你相不相信,上面的例子是完全合乎语法的。
问题是编译器如何处理它?水平不高的编译作者实际上会争论这个问题,根据最处理原则,编译器应当能处理尽可能所有合法的用法。
因此,上面的代码被处理成:c=a+++b;因此,这段代码持行后a=6,b=7,c=12。
如果你知道*,或猜出正确*,做得好。
如果你不知道*,我也不把这个当作问题。
我发现这个问题的最大好处是这是一个关于代码编写风格,代码的可读*,代码的可修改*的好的话题。
2、下面的代码输出是什么,为什么?voidfoo(void){unsignedinta=6;intb=-20;(a+b>6)?puts(">6"):puts("<=6");}这个问题测试你是否懂得c语言中的整数自动转换原则,我发现有些开发者懂得极少这些东西。
不管如何,这无符号整型问题的*是输出是">6"。
原因是当表达式中存在有符号类型和无符号类型时所有的*作数都自动转换为无符号类型。
因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。
这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
如果你答错了这个问题,你也就到了得不到这份工作的边缘。
3、请找出下面代码中的所以错误说明:以下代码是把一个字符串倒序,如“abcd”倒序后变为“dcba”1、#include"string.h"2、main()3、{4、char*src="hello,world";5、char*dest=null;6、intlen=strlen(src);7、dest=(char*)malloc(len);8、char*d=dest;9、char*s=src[len];10、while(len--!=0)11、d++=s--;12、printf("%s",dest);13、return0;14、}答:方法1:intmain(){char*src="hello,world";intlen=strlen(src);char*dest=(char*)malloc(len+1);//要为\\0分配一个空间char*d=dest;char*s=&src[len-1];//指向最后一个字符while(len--!=0)*d++=*s--;*d=0;//尾部要加\\0printf("%s\",dest);free(dest);//使用完,应当释放空间,以免造成内存汇泄露return0;}方法2:#include#includemain(){charstr[]="hello,world"; intlen=strlen(str);chart;for(inti=0;i{t=str[i];str[i]=str[len-i-1];str[len-i-1]=t; }printf("%s",str);return0;}4、请问下面程序有什么错误? inta[60][250][1000],i,j,k;for(k=0;k<=1000;k++)for(j=0;j<250;j++)for(i=0;i<60;i++)a[i][j][k]=0;*:把循环语句内外换一下。
c语言易错题pdf

C语言中有一些常见的易错题,例如:
-数组越界:数组的索引是从0开始的,一个长度为`n`的数组的索引范围应该是0到`n-1`。
如果尝试访问超出这个范围的索引,就会导致未定义的行为。
-忘记初始化变量:如果一个变量在使用之前没有被初始化,它的值将是未定义的。
这可能会导致难以预测的结果。
-忘记声明变量:在C语言中,变量必须在使用之前声明。
如果在函数内部使用了一个变量,但没有声明,就会导致编译错误。
-错误的逻辑比较:逻辑比较运算符是`&&`(和)、`||`(或)和`!`(非)。
如果使用错误的比较运算符,如`<`或`>`,就会导致错误的结果。
-忘记释放内存:通过`malloc`、`calloc`或`realloc`等函数分配的内存必须在使用完毕后通过`free`函数释放,否则可能会导致内存泄漏。
这些是C语言中常见的一些易错题类型,希望对你有所帮助。
C语言易错题

D.7
C.8
D.7
i=f(4+4)/f(2+2); printf("%d\n",i); } A.28 B.64 C.4 D.3
36. 有以下程序执行后输出结果是 #include <stdio.h> struct STU {char name[10]; int num; int score; }; main() {struct STU s[5]={{"YangSan",0041,703},{"LiSiguo",0042,580},{"WangYin", 0043,680},{"Sundan",0044,550},{"PengHua",0045,537}},*p[5],*t; int i,j; for(i=0;i<5;i++) p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++) if(p[i]->score > p[j]->score) {t=p[i];p[i]=p[j];p[j]=t;} printf("%d %d\n",s[1].score,(*p[1]).score); } A.550 550 B.680 680 C.580 550 D.580 680 37.下面程序的运行结果是: int f(int a[],int n) {if(n>1) return a[0]+f(&a[1],n-1); else return a[0]; } main() {int aa[3]={1,2,3},s; s=f(&aa[0],3); printf("%d\n",s); } 答案: 6 38.结构化程序有三种基本结构组成,三种基本结构组成的算法: A. 可以完成任何复杂的任务 B. 只能完成部分复杂的任务 C. 只能完成符合结构化的任务 D. 只能完成一些简单的任务 39.有以下程序运行后输出结果是 main() {int a[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a+5,*q;
C语言典型易错题

C语言典型易错题(1)以下程序段中的变量已正确定义For(i=0;i<4;i++,i++)For(k=1;k<3;k++);printf(“*”);程序段的输出结果是()A********B****C**D*解析:注意第二个for后执行语句为空,故答案为D。
(2)有以下程序#include<stdio.h>V oid f(int*p,int*q);Main(){int m=1,n=2,*r=&m;f(r,&n);printf(“%d,%d,m,n);}V oid f(int*p,int*q){p=p+1;*q=*q+1;}程序运行后的输出结果是()A1,3B2,3C1,4D1,2解析:注意C语言中函数的值传递规律,故答案为A。
(3)有以下程序#include<stdio.h>Int b=2;Int fun(int*k){b=*k+b;return(b);}Main{int a[10]={1,2,3,4,5,6,7,8},i;For(i=2;i<4;i++){b=fun(&a[i])+b;printf(“%d”,b);}Printf(“\n”);}程序运行后的输出结果是()A1012B810C1028D1016解析:b是全局变量,当b=2时,i<4符合,执行b=fun(&a[i])+b对于fun(&a[i])得b=a[2]+2=5所以b=b+b=10i++,i=3,i<4符合fun(&a[i]),得b=a[3]+10=14,b=b+b=28所以答案是C(4)若变量已正确定义,有以下程序段Int a=3,b=5,c=7;If(a>b)a=b;c=a;If(c!=a)c=b;Printf(“%d,%d,%d\n”,a,b,c);其输出结果是()A程序语段有语法错误B3,5,3C3,5,5D3,5,7解析:注意第一个If语句之后的分号,c=a是不属于If语句的,故答案为B。
c语言错题总结期末

c语言错题总结期末一、变量与表达式1. 以下语句的输出是什么?```c#include <stdio.h>int main(){int a = 2, b = 3;printf("a*3+5*b = %d", a*3+5*b);return 0;}```答案:a*3+5*b的值是21。
解析:根据运算符的优先级,先进行乘法运算,然后进行加法运算。
2. 下面代码的输出是什么?```c#include <stdio.h>int main(){int a = 3, b = 4, c = 5;printf("a + b - c = %d\n", a + b - c);printf("a * b / c = %d\n", a * b / c);printf("a + b * c = %d\n", a + b * c);return 0;}```答案:```a +b -c = 2a *b /c = 2a +b *c = 23```解析:根据运算符的优先级,先进行乘法运算,然后进行加法和减法运算。
二、流程控制1. 下面哪个循环语句可以用来反复执行一段代码块,直到满足某个条件时停止执行?A. ifB. switchC. whileD. for答案:C. while解析:while循环可以根据给定的条件反复执行一段代码块,直到条件不再满足时停止执行。
2. 下面的代码片段输出结果是什么?```c#include <stdio.h>int main(){int i = 0;while(i < 3){printf("%d ", i);i++;}return 0;}```答案:输出结果是0 1 2 。
解析:while循环的终止条件是i小于3,所以循环会执行3次,i的初始值为0,每次循环后i会自增1。
各公司C语言笔试频繁易错题

2布尔变量,整型变量,浮点变量与零值得比较方法(flag)
布尔型:if(flag)
整形:if(flag==0)
浮点型:Define EPSILON0.000000001
if ( fabs(a-b) <= EPSILON )
3.软件开发过程分为:需求分析、设计、编码、测试4个阶段。
5.strcpy的原函数
6.用来求一个十进制数转换成二进制后有多少个1
7,软件设计中划分模块的准则是高内聚,低耦合。
8,赋值表达式(研华)
9.研华(数据指针以及存储)
10,字节范围表达
11,数组的旋转填充。
顺时针填充数字(n*n)
12,指针加1搜代表的含义
13,结构体所占存储空间
6,12
14,关键字static的作用:
1)对局部变量使用static声明,则使得该变量在整个程序执行期间不释放,
为其分配的空间始终存在。
2)全局变量用static声明,则该变量只限于本文件模块(声明所在的文件15,指针
gh int *p[4]:p是存有4个指向整型数据的指针
int(*p)[4]:p是指向有四个数据的一维数组的指针
16.不同类型的数据占用的内存
17,函数调用形参仅仅是值传递
test。
c语言易错选择题错题集

1:设有定义:char p[]={'1','2','3'},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是()。
A) sizeof(p)B) sizeof(char)C) sizeof(*q)D) sizeof(p[0])参考答案:A【解析】根据题目中的定义可以知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数。
2:面向对象方法中,继承是指()。
A) 一组对象所具有的相似性质B) 一个对象具有另一个对象的性质C) 各对象之间的共同性质D) 类之间共享属性和操作的机制参考答案:D【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。
广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。
3:若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是A) x+1=yB) ++x,y=x--C) x=x+10=x+yD) double(x)/10参考答案:B【解析】A选项中不能将变量y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10。4:有以下程序#include <stdio.h>main(){ FILE *pf;char *s1="China", *s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf); /*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A) ChinaB) ChinangC) ChinaBeijingD) BeijingChina参考答案:B【解析】本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。
c语言面试找错题

c语言面试找错题C语言面试中经常会出现找错题,考察面试者在代码中找出错误的能力。
下面给出一些常见的C语言找错题,供大家练习。
题目1:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum = a + b;printf("The sum of a and b is: %d\n", sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码没有错误。
题目2:```c#include <stdio.h>int main() {int a = 10;int b = 20;printf("The sum of a and b is: %d\n", a, b);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的使用。
`printf`函数的第一个参数是一个格式化字符串,后续参数是格式化字符串中使用的参数。
在上述代码中,格式化字符串中只有一个`%d`,但是后续提供了两个参数`a`和`b`。
正确的写法应该是`printf("The sum of a and b is: %d\n", sum);`。
题目3:```c#include <stdio.h>int main() {int a = 10;int b = 20;int sum;sum = a + b;printf(“The sum of a and b is: %d\n”, sum);return 0;}```问题:请找出以上代码中的错误,并解释原因。
答案:以上代码的错误在于`printf`函数的格式化字符串中使用的双引号是中文引号,而不是英文引号。
C语言中使用的是英文引号,因此应该修改为`printf("The sum of a and b is: %d\n", sum);`。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
●字符常量:用单引号‘’括起来的一个字符。
包括普通字符常量和转义字符。
普通字符常量:如‘a’、‘A’、‘1’。
转义字符:由一对单引号引起来的以\开头的若干字符的组合。
如‘\n’表示回车换行、‘\\’表示反斜线符、‘\’’表示单引号符、‘\”’表示双引号、‘\ddd’表示八进制数、‘\xhh’表示十六进制数。
/:当除号左右两边都是整数的时候,商也要是整数,如果不是整数则舍弃小数部分。
当参与运算量有一个为实型,则商为double型。
规则:把<<左边的运算数的各二进位全部左移若干位,高位丢弃,低位补0。
左移一位相当于该数乘以2。
左移n位相当于该数乘以2n。
●右移运算>>把>>左边的运算数的各二进位全部右移若干位。
高位补0,低位丢弃。
右移一位相当于该数除以2。
右移n位相当于除以2n。
当定义的变量类型和scanf中“格式符”类型不一致时(这里只限定在字符型和整型两种类型,其他数据类型不可以。
)整型和字符型之间通过ASCALL可以相互转化。
●getchar经常作为while循环条件,判断输入哪一个字符时,循环结束。
例如,输入字符串,直到输入‘0’,程序结束,则可写成while( getchar()!='0')●内嵌结构中,else总是与前面最近的且未曾配对的if语句配对,组成一对if-else语句。
4.知识点:switch语句●switch语句的圆括号中的表达式的值必须是整型或字符型,不能为实型。
●case后的表达式可以是求得整型和字符型的常量表达式,但不能含有变量。
●default的位置对程序的执行没有影响。
●循环体部分可以只有一条空语句,不做任何操作。
3.知识点:一维数组的初始化●顺序列出数组元素的全部初值,例如int a[5]={1,2,3,4,5};●只给数组的前面一部分元素设定初值,未赋初值的元素自动取0值。
例如,int a[5]={1,2};●对全部数组元素赋初值时,可以不指定数组元素的个数。
例如,int a[]={1,2,3,4,5};4.知识点:二维数组的初始化●按行分段给二维数组赋初值●按行连续赋值●对部分元素赋初值,未赋初值的元素自动取0值● 若对全部元素赋初值,则第一维的长度可以不指定 ● 字符数组名是地址常量,不能赋值给数组名。
例1:(2009-04-32)以下选项中正确的语句组是(D)A)char s[];s=”BOOK!”; B)char *s;s={“B OOK!”}; C)char s[10];s=”BOOK!”; D)char *s;s=”BOOK!”;【解析】字符数组名是地址常量,不能赋值给数组名,故A 、C 项错误,D 项指针s 是个变量,将字符串常量赋值给s ,是正确的。
B 项中给s 赋值时不能用花括号将字符串括起来。
8.设有说明:int x=0x03,y=3;表达式x&~y 的值是(A. ) A.0B.1C.2D.314. 下面各个位运算符的优先级从左到右依次升高的是(A. ) A. | ^ & >>B. ^ >> & ~C. << | ^ ~D. ~ | & >>23.如果a=1,b=2,c=3,d=4,则表达式a>b?a:c<d?c:d 的值是( C ) A .1 B .2 C .3 D .425.设有说明int x=0,y=0; 则执行if(x++)y=1+x;else y=2+x ; 后,变量y 的值是( D ) A .0 B .1 C .2D .3 26.以下程序段所表示的数学函数关系是( A. ) y=-1if(x!=0) if(x>0) y=1;else y=0; A .⎪⎩⎪⎨⎧>=<-=)0(1)0(0)0(1x x x yB .⎪⎩⎪⎨⎧>=-<=)0(0)0(1)0(1x x x yC .⎪⎩⎪⎨⎧>=-<=)0(1)0(1)0(0x x x yD .⎪⎩⎪⎨⎧>=<-=)0(0)0(1)0(1x x x y30.整数-2在机器内存中的表示是( B ) A .1000000000000010 B .1111111111111110 C .11111111111111101D .111111111111111133.以十进制无符号形式输出整数的格式说明符是( A. ) A .%u B .%x C .%oD .%d35.下列位运算符中,表示按位异或操作的是(C)A.~ B.│C.^ D.&42.在printf语句中,格式说明符u表示(C)A.以十进制带符号形式输出整数B.以十六进制带符号形式输出整数C.以十进制无符号形式输出整数D.以十六进制无符号形式输出整数45.只能在循环语句中用于结束本轮循环的语句是( A.)注:是本轮循环不是本次循环A.break;B.continue;C.goto D.if46.下列是合法C语言常量的是(D)A. eB. 7E4.0C. E4D. -9.13E-3058.设有说明:int u=1,v=3,w=2;表达式(v>>1|u<<2)&w的值是( A.)A.0B.1C.3D.560. 下面程序段的输出结果是( A.)a=100;while(a>120);a=a+1;printf(″%d″,a);A. 100B. 101C. 120D. 121(注意while后的“;”)73.两次运行下面的程序,如果从键盘上分别输入6和4,则输出的结果是( A. )void main(void){int x;scanf("%d",&x);if(x + + >5)printf("%d",x);else printf("%d\n",x——);}A.7和5B.6和3C.7和4D.6和4(注意++优先级高于>!)75.若有定义int a[3][5];则数组a在内存中占用的字节数是(D)A.8B.15C.16D.3090. 在C程序中,若用基本数据类型所定义的变量调用函数,正确的说法是(B)A.由系统自动指定对应实参和形参是否共用存储单元B. 对应实参和形参各占一个独立的存储单元C. 对应实参和形参共用一个存储单元D. 可以由用户指定对应实参和形参是否共用存储单元91. 下面叙述中不.正确的是(D)A. 不同函数中可以使用相同名字的变量B. 形式参数是局部变量C.在一个函数内部定义的变量只能在本函数范围内有效D. 在一个函数内部的复合语句中定义的变量在本函数范围内有效99.下列程序的运行结果是(B)#difine N 9fun (char s[ ]){char*p=s+4,*q=s;int i;for(i=0;i<4;i+ +,p+ +,q + +){s[i]=*p;s[i+4]=*q}}main( ){char ss[N]= ″ABCDEFGH″;fun(ss)printf(″%s\n″,ss);}A.EFGHABCD B.EFGHEFGH C.ABCDEFGH D.ABCDABCD 112.下面程序段的运行结果是( C )chars *s="abcde";s+=2 printf("%d",s);A.cdeB.字符′c′C.字符′c′的地址D.无确定的输出结果120.设有说明:FILE *fp;char *filename=〃paper〃;对于fp=fopen(filename,〃rb+〃);语句,下面说法正确的是(B)A.打开名为filename的文件读写 B.打开名为paper的文件读写C.打开名为filename的文件只读 D.打开名为paper的文件只读121. 如果将文件指针fp指向文件末尾,正确的语句是(D)A. feof(fp);B. rewind(fp);C. fseek(fp,0L,0);D. fseek(fp,0L,2); 122. 下面程序段中,不能..完成的功能是(B)FILE *fp;char ch =′v′;fp=fopen(″boy″, ″rb+″);fputc(ch,fp);A. 建立文件指针fp与文件boy的联系B.从boy文件中读取一个字符C. 向boy文件中写一个字符D. 打开名为boy的二进制文件123.下面程序段中,不.能完成的功能是(C)FILE *fp;char ch;fp=fopen(″file1″, ″rb+″);ch=fgetc(fp);A.建立文件指针fp与文件file1的联系B.从file1文件中读一个字符C.向file1文件中写一个字符D.打开名为file1的二进制文件124.在格式:fread(stu,size,n,fp);中,下面说法不正确...的是(B)A.stu是内存中存放数据的首地址B.n表示读n次C.size是一个数据块的字节数D.fp表示文件指针125.由FILE*fp;fp=fopen(″a:\\abc.txt″,″r+″);可以推知fopen 函数的原型是(B)A.char *fopen(char,char);B.FILE*fopen(char*,char*);C.int fopen (char*,char*); D.FILF fopen(char* ,char*); 126.如果文件存储的是数据在内存中存放的字节形式,则该文件是(C)A.ASCII文件B.文本文件C.二进制文件D.设备文件127.设有说明:FILE*fp;对于fp=fopen(″c:\\abc.dat″,″rb″);语句,下列说法中不正确的是(B)A.fp将指向abc.dat文件B.以只读方式打开二进制文件C.打开文件的文件名是abc.datD.以读写方式打开ASCII码文件128.ASCII码文件的结束可以用符号常量EOF表示。
EOF的值是(C)A.0 B.1 C.-1 D.不能确定的值129.在语句fgets(str,n,p);中,下列说法不正确...的是(B )A. str是字符指针B. 一次可以读n个字符C. str是字符数组名D. 一次可以读n-1个字符130.指向与文件参数有关的结构体类型的指针变量称为(D )A.函数指针B.整型指针C.字符型指针D.文件指针1的有(ADE )1.设有int a=3,b=-5;下面表达式值不等于...A.a<0&&b<0B.a=fabs(b)-(a+1)C.a<b||b<0D.(a,2,-5)= =(b,2,a)E.! (a>0&&b<0)2.设有说明:int u=1,v=3;下面表达式的值为3的是(ACD )A.v|uB.u&vC.u ^ v|1D.v|u>>1E.v&~u3. 设有说明:int x=1, y=3; 下面表达式的值为2的有(ABE)A. y&~xB. x^yC. x|yD. y|x>>1E. x<<1|y>>25.若有int x;float;y下面结果为整型数的表达式有(ACD )A.(int)(x+y) B.(int)x+yC.´a´+x D.x+(int)yE.x*y6.设有说明:int u=1,v=5;则下列表达式的值为1的有(ABE)A.u&v B.v>>2C.u^u D.u¦vE.(u<<3)/59.设有说明:int u=0,v=l,z=2;则下列表达式中结果为-l的有(AB )A.v=~uB.u=u|~(v&z)C.v=(u|z)<<1D.u=~(u|z)E.v&=(~u)8.下面合法的C语言转义字符有(ABCE )A.\123B.\xabC.\\D.\88E.\n11.下面基本结构和特性中符合结构化程序设计的要求的有(ABCE)A.选择结构B.循环结构C.顺序结构D.各结构之间只有一个入口,至多两个出口E.各结构之间只有一个入口,一个出口16.下列关于break、goto、continue语句的说法中正确的是(ACE )A. break语句能够用于循环语句中B. break语句不能用于switch语句中C. goto语句可以用于直接从多层循环中退出D. continue语句可用于跳出循环体E. continue语句不能用于switch语句中19. 若定义char c[11]; 可将字符串″I am a boy″赋给数组c,下面正确的选项有(CE )A. c=″I am a boy″;(就是不能!) B. getchar(c);C. gets(c);D. scanf(″%s″,c);(若输入I am a boy 只会输出I)E. for(i=0;i<10;i++) scanf(″%c″,&c[i];c[10])=’\0’;21.下面各选项中,能正确进行字符串操作的有(ACE)A. char s[ ]={′a′, ′b′, ′c′, ′d′, ′e′, ′\0′};B. char s[10];s=″abcde″;C.char s[10];strcpy(s, ″abcde″)(编译时报错)D.char s[10];getchar(s);E.char s[10];gets(s);24.设有二维数组int a[4][3];下列表示数组元素a[0][2]地址的有(CDE)A.a[2] B.*aC.*a+2 D.a[0]+2E.&a[0][2]29.以下关于函数和变量的说法中正确的有(ABC )A.不同函数中可以使用相同名字的变量B.形式参数是局部变量C.一个函数内部定义的变量只能在本函数范围内有效D.在一个函数内部的复合语句中定义的变量可在本函数范围内有效E.如果全局变量与函数内定义的局部变量同名,则在函数内局部变量无效31.设有关于结构体类型的定义:(BD)struct car{char*name;float price;struct car *next;}*p,*head=NULL;下面各选项中正确的有A.p=(struct car*)MALLOC(sizeof (struct car);B.p=(struct car*)malloc (sizeof (struct car);C.p.next=head;D.p->next=head;E.p=(struct car *)malloc (sizeof(car);32.设有关于结构体类型的定义:(AD)struct data{int num;struct data *next;} *p,* head=NULL;下列语句中正确的有A.p=(struct data *)malloc(sizeof(struct data));B.p=(struct data )malloc(sizeof(struct data));C.p=(struct data *)malloc(sizeof(data));D.p->next=head;E.p.next=head;33.设有关于结构体类型的定义:struct worker{int id;char *name;float salary;} wl={102035,″Lihua″,2560.50},*p;下列选项中语句语法正确的有(BD )A. p=wl;B. p=&wl;C. p->id=wl->idD. p->id=wl.id;E. p.salary=wl.salary;34. 在C语言中,关于符号FILE下面说法正确的有(BDE)A. FILE是C的关键字B. FILE表示一种关于文件参数的结构体类型C. FILE表示一种关于文件参数的结构体变量D. FILE*可以用来说明文件指针E. 文件指针指向的变量的数据类型是FILE35.在C语言中,下面关于文件说法正确的有(ACE)A.按数据的组织形式,可分为文本文件和二进制文件B.文件只能是ASCII码文件C.文件能用fopen( )函数打开D.文件只能是二进制文件E.对打开的文件可以进行读或写操作(%o表示输出八进制)优先级运算符名称或含义使用形式结合方向说明1 [] 数组下标数组名[常量表达式]左到右() 圆括号(表达式)/函数名(形参表). 成员选择(对象)对象.成员名-> 成员选择(指针)对象指针->成员名2- 负号运算符-表达式右到左单目运算符(类型) 强制类型转换(数据类型)表达式++ 自增运算符++变量名/变量名++ 单目运算符-- 自减运算符--变量名/变量名-- 单目运算符* 取值运算符*指针变量单目运算符& 取地址运算符&变量名单目运算符! 逻辑非运算符!表达式单目运算符~ 按位取反运算符~表达式单目运算符sizeof 长度运算符sizeof(表达式)3 / 除表达式/表达式左到右双目运算符* 乘表达式*表达式双目运算符% 余数(取模)整型表达式/整型表达式双目运算符4 + 加表达式+表达式左到右双目运算符- 减表达式-表达式双目运算符5 << 左移变量<<表达式左到右双目运算符>> 右移变量>>表达式双目运算符6> 大于表达式>表达式左到右双目运算符>= 大于等于表达式>=表达式双目运算符< 小于表达式<表达式双目运算符<= 小于等于表达式<=表达式双目运算符7 == 等于表达式==表达式左到右双目运算符!= 不等于表达式!= 表达式双目运算符8 & 按位与表达式&表达式左到右双目运算符9 ^ 按位异或表达式^表达式左到右双目运算符10 | 按位或表达式|表达式左到右双目运算符11 && 逻辑与表达式&&表达式左到右双目运算符12 || 逻辑或表达式||表达式左到右双目运算符13 ?: 条件运算符表达式1? 表达式2:表达式3右到左三目运算符14= 赋值运算符变量=表达式右到左/= 除后赋值变量/=表达式*= 乘后赋值变量*=表达式%= 取模后赋值变量%=表达式+= 加后赋值变量+=表达式-= 减后赋值变量-=表达式<<= 左移后赋值变量<<=表达式>>= 右移后赋值变量>>=表达式&= 按位与后赋值变量&=表达式^= 按位异或后赋值变量^=表达式|= 按位或后赋值变量|=表达式15 , 逗号运算符表达式,表达式,…左到右从左向右顺序运算说明:同一优先级的运算符,运算次序由结合方向所决定。