计算机等级考试二级C语言笔试辅导课件

PPT
  • 阅读 30 次
  • 下载 0 次
  • 页数 154 页
  • 大小 379.401 KB
  • 2022-12-01 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
计算机等级考试二级C语言笔试辅导课件
可在后台配置第一页与第二页中间广告代码
计算机等级考试二级C语言笔试辅导课件
可在后台配置第二页与第三页中间广告代码
计算机等级考试二级C语言笔试辅导课件
可在后台配置第三页与第四页中间广告代码
计算机等级考试二级C语言笔试辅导课件
计算机等级考试二级C语言笔试辅导课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 154
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】计算机等级考试二级C语言笔试辅导课件.pptx,共(154)页,379.401 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-77321.html

以下为本文档部分文字说明:

计算机等级考试二级C语言笔试辅导课件[单选题]在一个源程序中main函数的位置。A.必须在最开始B.必须在最后C.必须在预处理命令的后面D.可以在其他函数之前或之后答案:D[单选题]下列叙述中正确的是。A.main函数必须出

现在其他函数之前B.main函数中至少必须有一条语句C.C程序总是从main函数的第一条语句开始执行D.C程序总是在执行完main函数的最后一条语句后结束答案:C[单选题]以下叙述中正确的是。A.C语言

系统以函数为单位编译源程序B.main函数必须放在程序开始C.用户定义的函数可以被一个或多个函数调用任意多次D.在一个函数体内可以定义另外一个函数答案:C[全国选择题]以下叙述中正确的是()。A)C语言

程序将从源程序中第一个函数开始执行B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束D)main可作为用户标识符,用以命名任意一个函数作为主函数答案:C[全国选择题]以下叙述中正确的是()。A)C程序中

的注释只能出现在程序的开始位置和语句的后面。B)C程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上D)用C语言编写的程序只能放在一个程序文件中答案:C[全国选择题]以下叙述中正确的是()。A)C程序的基本组成单位

是语句B)C程序中的每一行只能写一条语句C)简单C语句必须以分号结束D)C语句必须在一行内写完答案:C⑵基本类型数据的表示及使用①系统预定义类型标识符、类型修饰符的使用②基本类型常量的表示及使用③字符串常量形式④关键

字。标识符。⑤符号常量的定义与使用⑥基本类型变量的声明、初始化,直接引用变量【考题解析】[单选题]在C语言源程序中,不带任何修饰符的浮点数直接量(例如:3.14)都是按类型数据存储的。答案:double[单选题]已知sizeof(int)

的值为2,为将10!的值存储到变量f中(10!=3628800),变量f的类型应声明为。A.longintB.intC.shortintD.unsignedint答案:A[单选题]以下常量表示中正确的是(22)。A.\xffB.5LC.aEbD.3.14U答案:B[单选题]以下语句中有语法

错误的是。A.printf("%d",0e);B.printf("%f",0e2);C.printf("%d",0x2);D.printf("%s","0x2");答案:A[单选题]以下选项中不能用作变量名的是。A._floatB.switchC.sumD._123

答案:B[填空题]在C语言系统中,如果一个变量能正确存储的数据范围为整数-3276832767,则该变量在内存中占(3)个字节。答案:2[单选题]以下选项中,不能用作标识符的是。A.printB.FORC.&aD

._00答案:C[单选题]以下选项中,是C语言关键字。A.printfB.includeC.funD.default答案:D[学校单选题]执行语句“printf(”bye\bye101\101“);”时输出到屏幕的结果为(22)。答案:byye101A[学校单选题]表达式“1e-8/2+1.

0f”值的数据类型是(3)。A.intB.longC.floatD.double答案:D[学校单选题]以下局部变量声明中正确的是(2)。A.intchar=2;B.voida=0;C.inta=b=0;D.inta,b=a=0;答案:D⑶运算符和表达式的表示及使用①

赋值表达式,赋值运算符的左值要求②算术表达式。++、--运算符左值要求。溢出。③关系表达式与逻辑表达式,逻辑表达式优化处理④逗号表达式⑤条件表达式⑥表达式运算中操作数类型自动转换与强制转换【考题解析】[单选题]若有声明“d

oublex=3,c,*a=&x,*b=&c;”,则下列语句中错误的是。A.a=b=0;B.a=&c,b=a;C.&a=&b;D.*b=*a;答案:C[单选题]若有声明“charss[8]=”Red“;”,则s

izeof(ss)的值是。A.8B.4C.3D.1答案:A[单选题]设有定义和声明如下:#defined2intx=5;floaty=3.83;charc='d';以下表达式中有语法错误的是。A.x++B.y++C.c++D.d++答案:D[单选题]数学

式在C程序中正确的表示形式为。A.sqrt(a)/2*bB.sqrt(a)/2/bC.sqrt(a)/2bD.sqrta/(2*b)答案:Bba2[单选题]已知有声明“longx,y;”且x中整数的十进制表示有n位数字(4<n<10),若要求去掉整数x十进制表示中的最高位,用剩下的数字组成一个

新的整数并保存到y中,则以下表达式中能正确实现这一功能的是。A.y=x/(10*(n-1))B.y=x%(10*(n-1))C.y=x%(long)pow(10,n-1)D.y=x%(10(n-1))答案:C[填空题]若有声明“doublex=10,y=5

;”,则计算xy的库函数调用形式是。答案:pow(x,y)或pow(10,5)[填空题]若有声明“intx;”且sizeof(x)的值为2,则当x值为时“x+1>x”为假。答案:32767[填空题]若有声

明“floaty=3.14619;intx;”,则计算表达式“x=y*100+0.5,y=x/100.0”后y的值是。答案:3.15[单选题]已知有声明“inta=3,b=4,c;”,则执行语句“c=1/2*(a+b);”后,c的值为。A.0B.3C.3.5D

.4答案:A[填空题]若有声明“inta=5,b=2;”,则表达式“b+=(float)(a+b)/2”运算后b的值为。答案:5[填空题]已知有声明“charch=„g‟;”,则表达式ch=ch-„a‟+„A‟的值为字符的编码。答案:G[单选题]已有声明“inta=3,b=3,c=2;”,以下选项

中值为0的表达式是。A.!a&&!b&&cB.!a||!b||cC.a==b&&b>=cD.a>=b&&b>c答案:A[单选题]已知有声明“inta=3,b=4,c=5;”,以下表达式中值为0的是。A.a&&bB.a<=bC.a||b&&cD.!(!c||1)答案:D[填空题

]C语言中有!、&&、||三个逻辑运算符,其中优先级高于算术运算符的是。答案:![单选题]若有声明“intx=2,y=1,z=0;”,则下列关系表达式中有语法错误的是。A.x>y=2B.z>y>xC.x>y==1D.x==(x=0,y=1

,z=2)答案:A[填空题]数学式对应的C语言表达式为。答案:sqrt(fabs(x))!=4*a/(b*c)或sqrt(fabs(x))!=4*a/b/c[单选题]已知有声明“inta=12,b=15,c;”,则执行表达式“c=(a

||(b-=a))”后,变量b和c的值分别为。A.3.1B.15,12C.15,1D.3,12答案:C[填空题]数学式所对应的C语言表达式为pow(x,)。答案:1.0/3[填空题]若有声明“inta=15,b=20,c=25,e;”,则执行语句“e=a>b?--c:++c;

”后变量e的值是。答案:26bcax43x3x[单选题]以下选项中,不能表示函数功能的表达式是。A.s=(x>0)?1:(x<0)?-1:0B.s=x<0?-1:(x>0?1:0)C.s=x<=0?-1:(x==0?0:1)D.s=x>0?1:x==0?0:-1答

案:C[单选题]若有程序段“charc=256;inta=c;”,则执行该程序段后a的值是。A.256B.65536C.0D.-1答案:C010001)(xxxxsign[填空题]设有声明“inta=3,b=4;floatx=4.5,y=3.5;”,则表达

式“(float)(a+b)/2+(int)x%(int)y”的值是。答案:4.5[填空题].若有声明“intr=2;”,则执行语句“printf(”%d“,sizeof(2*3.14*r));”时输出。答案:8[单选题]已知有声明“intn;f

loatx,y;”,则执行语句“y=n=x=3.89;”后,y的值为。A.3B.3.0C.3.89D.4.0答案:B[单选题]已知有声明“inta=3,b=4;”,下列表达式中合法的是。A.a+b=7B.a=|b|C.a=b=0D.(a++)+

+答案:C[学校单选题]已知有声明“inta=1,b=2;”,执行语句“while(--a>0&&--b>0)a=b;”后变量a、b的值是。A.0,2B.0,1C.1,1D.2,2答案:A2.语句⑴实现顺序结构的语句①表达式语句,空语句,复合语句,函数调

用语句②标准输入输出库函数printf(),scanf(),getchar(),putchar(),gets(),puts()【考题解析】[单选题]已知int类型数据在内存中存储长度为2个字节,以下语句中能正确输出整数32768的是。A.printf("%d",32768);B.pri

ntf("%ld",32768);C.printf("%f",32768);D.printf("%c",32768);答案:B[学校单选题]已知某编译系统中sizeof(int)的值为2,在该编译系统中执行以下(10)语句时输出结果不是39999。A.printf("%u",39999

);B.printf("%d",39999);C.printf("%ld",39999);D.printf("%lu",39999);答案:B[单选题]若有声明“floatf=123.45678;”,则执行语句“printf(”%.3f“,f);”后,

输出结果是。A.1.23e+02B.123.457C.123.456780D.1.234e+02答案:B[单选题]已知有声明“chars[80];”,若需要将键盘输入的一个不含空格的字符串保存到s数组中,则下列语句中正确的是。A.scanf("%s",s);B.scanf(

"%s",s[0]);C.s=gets();D.s=getchar();答案:A[填空题]已知有声明和语句“inta;scanf(”a=%d“,&a);”,欲从键盘上输入数据使a中的值为3,则正确的输入

应是。答案:a=3[单选题]若有声明“longa,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是。A.scanf("%ld%ld,&a,&b");B.scanf("%d%d",a,b);C.s

canf("%d%d",&a,&b);D.scanf("%ld%ld",&a,&b);答案:D⑵实现选择结构的语句:if-else,switch【考题解析】[单选题]若在一个C语言源程序中“e1”和“e3”是表达式,“s;”是语句,则下列选项中与语句“for(e1;;e3)s;”功能等同的语句

是。A.e1;while(10)s;e3;B.e1;while(10){s;e3;}C.e1;while(10){e3;s;}D.while(10){e1;s;e3;}答案:B[单选题]已知有声明“intx,y;”,若要求编写一段程序实现“当x大于等于0时y取值1,否则

y取值-1”,则以下程序段中错误的是。A.if(x>=0)y=1;elsey=-1;B.y=x>=0?1:-1;C.switch()D.switch(x-abs(x)){casex>=0:y=1;break;{case0:y=1;break;de

fault:y=-1;default:y=-1;}}答案:C[学校单选题]已知有声明“inta=1,b=2,c=0;”,执行语句“if(a>b)c=a;a=b;b=c;”后变量a、b的值是(21)。答案:2,0[阅读程序]下列程序运行

后的输出结果第一行是(1);第二行是(2)。#include<stdio.h>main(){inti,a=0,c=2;for(i=0;i<2;i++)switch(++a,a*c){case1:printf("1");case2:printf("2");case3:printf("3

\n");break;default:printf("other\n");}}[阅读程序]以下程序运行时输出结果为(6)#include<stdio.h>voidmain(){inti,sum=0;fo

r(i=0;i<5;i++){switch(i){case0:case1:sum++;case3:sum++;case4:sum--;break;}}printf("%d\n",sum);}答案:1⑶实现循环结构的语句:while,do-while,for,goto【考题解析】

[单选题]若有声明“inti,k=1;unsignedj;”,则下列语句执行时会出现无限循环的语句是。A.for(j=15;j>0;j-=2)k++;B.for(j=0;j<15;j+=2)k++;C.for(i=0;

i<15;i+=2)k++;D.for(i=15;i>0;i-=2)k++;答案:A[学校单选题]以下语句中有语法错误的是。A.for(;;);B.do;while(1);C.while();D.p:;gotop;答案:C[阅读程

序]以下程序运行时输出结果最后一行是。#include<stdio.h>voidmain(){inta=1,b=1,i;for(i=1;i<=2;i++){a=a+b;printf("%d/%d,",b,a);b=a+b;printf("%d/%d\n",a,b);}printf("\n

");}[阅读程序]以下程序运行时输出结果是。#include<stdio.h>main(){ints=1,n=235;do{s*=n%10;n/=10;}while(n);printf("%d\n",s);}答案:30⑷跳转语句:break,continue,return【考题解析

】[全国选择题]有以下程序#include<stdio.h>#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序的运行结果是(

)。A)742,B)8752,C)9764,D)85423.构造类型数据⑴基本类型数组(一维,二维)①数组声明及初始化②数组存储结构③使用数组名引用数组元素【考题解析】[单选题]以下声明中错误的是。A.inta[2];B.inta[]={0,1};C.inta[3

]=0;D.inta[3][4]={0};答案:C[全国单选题]下列选项中,能正确定义数组的语句是()。A)intnum[0..2008];B)intnum[];C)intN=2008;D)#defineN2008intnum[N];intnum[N];

答案:D[单选题]设有声明“intp[10]={1,2},i=0;”,以下语句中与“p[i]=p[i+1],i++;”等价的是。A.p[i]=p[i++];B.p[++i]=p[i];C.p[++i]=p[i+1];D.i++,p[i-1]=p[i];答案:D[全国单选题]已知有声明

“intm[]={5,4,3,2,1},i=0;”,下列对m数组元素的引用中,正确的是。A)m[--i]B)m[2*2]C)m[m[0]]D)m[m[i]]答案:B[填空题]若有声明“chars1[10]=″ABCDE″,s2[10]=″A\\0″;”,

则语句“printf(″%d″,strlen(strcpy(s1,s2)));”的输出结果是。答案:3[全国选择题]有以下程序#include<stdio.h>main(){inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;for(

i=0;i<5;i++)s=s+a[b[i]];printf("%d\n",s);}程序运行后的输出结果是():A)6B)10C)11D)15答案:C[单选题]已知有声明“chars[20]=”Hello“;”,在程序运行过程中,若要想使数组s中的内

容修改为“Good”,则以下语句中能够实现此功能的是。A.s="Good";B.s[20]="Good";C.strcat(s,"Good");D.strcpy(s,"Good");答案:D[单选题]已知有声明“i

nta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};”,若需要引用值为12的数组元素,则下列选项中错误的是。A.*(a+2)+3B.*(*(a+2)+3)C.*(a[2]+3)D.a[2

][3]答案:A[阅读程序]以下程序运行时输出结果中第一行是(1),第三行是(2)。#include<stdio.h>#defineN5voidmain(){staticchara[N][N];inti,j,t,start=0,en

d=N-1;charstr[]="123",ch;for(t=0;t<=N/2;t++){ch=str[t];for(i=j=start;i<end;i++)a[i][j]=ch;for(j=start;j<end;j++)a[i][j]

=ch;for(i=end;i>start;i--)a[i][j]=ch;for(j=end;j>start;j--)a[i][j]=ch;if(start==end)a[start][end]=ch;start++,end--;}生成矩阵:11111122

21123211222111111for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%c",a[i][j]);printf("\n");}}答案:(1)11111(2)12321[阅读程序]以下程序运行时输出结果的第一行是(1),第三行是(2)。#include

<stdio.h>voidmain(){inti,j,a[3][3];for(i=0;i<3;i++)for(j=0;j<3;j++)if(i<j)a[i][j]=1;elsea[i][j]=i-j+1;for(i=0;i<3

;i++){for(j=0;j<3;j++)printf("%4d",a[i][j]);printf("\n");}}生成矩阵:111211321答案:(1)111(2)321⑵结构类型变量与数组①定义结构类型②结构类型变量、数组声明

及初始化③用变量名引用结构变量(结构数组元素)的全体成员④用变量名引用结构变量(结构数组元素)的基本类型成员【考题解析】[单选题]若有结构类型定义“typedefstructtest{intx,y[2];}TEST;”,则以

下声明中正确的是(27)。A.structtestx;B.structx;C.testx;D.structTESTx;答案:A[单选题]以下结构变量stu1的声明形式中,错误的是。A.typedefstructstu{charname[10];flo

atscore;}STU;STUstu1;B.#defineSTUstructstuSTU{charname[10];floatscore;}stu1;C.structstu{charname[10];floatscore

;}stu1;D.structstu{charname[10];floatscore;}STU;STUstu1;答案:D[学校单选题]若有定义“structc{doublex,y;}c1={1.2,1.3},c2={

1.2,1.3},c3;structd{doublex,y;}d1={1.2,1.3},d2={1.2,1.3},d3;”,则以下表达式中正确的是。A.c3=0B.c1==c2C.c3=c1D.d3=c1答案:C[阅读程序]以下程序运行后的输出结果第一行是(1);第二行是(2)。#in

clude<stdio.h>structnum{intx,y;}st[]={{1,10},{2,20},{3,30},{4,40},{-1,-1}},s1[2],s2[2];main(){inti=0,j=0,k;for(k=0;st[k].x!=-1;k++){if(st[k].x

%2)s1[i++]=st[k];elses2[j++]=st[k];}printf("%d\n%d\n",s1[0].y,s2[0].y);}答案:(1)10(2)204.指针类型数据⑴基本类型变量的指

针操作①基本类型变量地址的获取与保存。指向基本类型变量的指针变量声明、初始化与赋值。②引用指针变量指向的基本类型变量(使用运算符*)【考题解析】[填空题]若有声明char*p="%d,%d\n";inta=1,b=2;则执行语句“printf(p,a,b);”时

输出(4)。答案:1,2[全国选择题]若有定义语句:doublex,y,*px,*py,执行了px=&x,py=&y;之后,正确的输入语句是()。A)scanf(”%f%f”,x,y);B)scanf

(”%f%f”,&x,&y);C)scanf(”%lf%le”,px,py);D)scanf(”%lf%lf”,x,y);答案:C[全国选择题]有以下程序#include<stdio.h>main(){intm=1,n=2,

*p=&m,*q=&n,*r;r=p;p=q;q=r;printf(“%d,%d,%d,%d\n”,m,n,*p,*q);}程序运行后的输出结果是A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2答案:B[全国选择题]有以下程序#include<stdio.h>#

include<stdlib.h>intfun(intn){int*p;p=(int*)malloc(sizeof(int));*p=n;return*p;}main(){inta;a=fun(10);printf(“%d\n”,a+fun

(10));}程序的运行结果是()。A)0B)10C)20D)出错答案:C(2)基本类型数组的指针操作①基本类型数组元素地址的获取、保存与算术运算。②引用指针变量指向的基本类型数组元素③二维数组行地址的获取、保存及算术运算。行指

针变量的声明、初始化。④引用行指针变量指向的基本类型数组元素【考题解析】[单选题]设指针变量占2个字节的内存空间,若有声明“char*p=”123“;intc;”,则执行语句“c=sizeof(p);”后,c的值为。A.1B.2C.3

D.4答案:B[全国选择题]若有定义语句:doublex[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是()。A)*pB)x[5]C)*(p+1)D)*x答案:B[单选题]若有声明“intx[10]={0

,1,2,3,4,5,6,7,8,9},*p;”,则值不为4的表达式是。A.p=x,*(p+4)B.p=x+4,*p++C.p=x+3,*(p++)D.p=x+3,*++p答案:C[单选题]已知有程序段“charstr[][10]={"Aoyun","Beij

ing"},*p=&str[0][0];printf("%s\n",p+10);”,则执行printf语句后输出为。A.BeijingB.AoyunC.ingD.ng答案:A[单选题]已知有声明“inti,a[10],*p=a;

”,现需要将110保存到a[0]a[9]中,以下程序段中不能实现这一功能的是。A.for(i=0;i<10;i++)a[i]=i+1;B.for(i=0;i<10;i++)p[i]=i+1;C.i=1;while(p<a+10)*p++=

i++;D.i=1;while(p<a+10)*a++=i++;答案:D[填空题]已知有声明“inta[3][2]={{1,2},{3,4},{5,6}},*p=a[0];”,则执行语句“printf(”%d\n“,*(p+4));”

后的输出结果为。答案:5[单选题]若有声明“inta[3][4],*p=a[0],(*q)[4]=a;”,则下列叙述中错误的是。A.a[2][3]与q[2][3]等价B.a[2][3]与p[2][3]等价C.a[2][3]与*(p+11)等价D.a[2][3]与p=p+11,*p等价答案:B[单

选题]已知有声明“inta[3][3]={0},*p1=a[1],(*p2)[3]=a;”,以下表达式中与“a[1][1]=1”不等价的表达式是。A.*(p1+1)=1B.p1[1][1]=1C.*(*(p2

+1)+1)=1D.p2[1][1]=1答案:B[填空题]若有声明“chars[10]=”remind“;”,执行“puts(s+2);”后的输出结果是。答案:mind[单选题]已知有声明:“chara[]="Itismine",*p="Itismi

ne";”,下列叙述中错误的是。A.strcpy(a,“yes”)和strcpy(p,“yes”)都是正确的B.a=“yes”和p=“yes”都是正确的C.*a等于*pD.sizeof(a)不等于sizeof(p)答案:B[全国完善程序]以

下程序的功能是:借助指针变量找出数组元素中的最大值所在数组元素的下标值。#include<stdio.h>main(){inta[10],*p,*s;for(p=a;p-a<10;p++)scanf(“%d”,p);for(p=a,s=a;p-a<10;p++)if(*p>*s)s=____

______;printf(“index=%d\n”,s-a);}答案:p(3)结构类型变量、数组的指针操作①结构变量地址、结构数组元素地址的获取与保存。指向结构变量指针变量的声明、初始化与赋值。②引用指针指向的结构类型变量(结构类型数组元素)的基本类型成员③结构变量成员

的地址、结构数组元素成员的地址获取与保存。指向结构变量成员的指针变量声明、初始化与赋值。【考题解析】[单选题]已知有结构定义和变量声明如下:structstudent{charname[20];intscore;structstudent*h;}stu,*p

;int*q;以下选项中错误的是。A.p=&stu;B.q=&stu.score;C.scanf("%s%d",&stu);D.stu.h=p;答案:C[阅读程序]以下程序运行时输出结果的第一行是(1),第二行

是(2)#include<stdio.h>structs{intx,*y;}*p;intd[5]={10,20,30,40,50};structsa[5]={100,&d[0],200,&d[1],300,&d[2],400,&d[3],500,&d[4]};vo

idmain(){p=a;printf("%5d",p->x++);printf("%5d\n",p->x);printf("%5d",*p->y);printf("%5d\n",*++p->y);}答案:(1)100101(2)1020[单选题]设有结构定义及变

量声明如下:structproduct{charcode[5];floatprice;}y[4]={"100",100};以下表达式中错误的是。A.(*y).code[0]='2';B.y[0].code[0]='2';C.y->price=10;D.(*y)->price

=10;答案:D(4)指针类型数组的声明和使用【考题解析】[全国单选题]有以下程序#include<stdio.h>main(){char*a[]={"abcd","ef","gh","ijk"};inti;for(i=0;i<4;i++

)printf("%c",*a[i]);}程序运行后输出的结果是A)aegiB)dfhkC)abcdD)abcdefghijk答案:A[全国单选题]若有定义语句:inta[4][10],*p,*q[4];且0<=i<4,则

错误的赋值是()。A)p=aB)q=ac)q[0]=aD)p=&a[2][1]答案:B[全国填空题]有以下程序#include<stdio.h>main(){inta[]={1,2,3,4,5,6},*k[3],i=0;while(i<3){k[i]=&a[2*i];pri

ntf("%d",*k[i]);i++;}}程序运行后的输出的结果是___________答案:1355.函数⑴函数定义、函数声明、函数调用(2)函数调用时基本类型实参的传递与使用。实参与形参的类型兼容性要求。实参类

型的自动转换【考题解析】[单选题]以下函数定义中正确的是(25)。A.doublefun(doublex,doubley){}B.doublefun(doublex;doubley){}C.doublefun(

doublex,doubley);{}D.doublefun(doublex,y){}答案:A[单选题]以下选项均为fun函数定义的头部,其中错误的是。A.intfun(intx,inty[])B.i

ntfun(intx,inty[x])C.intfun(intx,inty[3])D.intfun(intx,int*y)答案:B[学校单选题]已知函数fun定义的头部为“voidfun(intx,inty[])”,以下fun函数声明中正确的是。A.voi

dfun(intx,inty[]);B.voidfun(intx,int*y);C.voidfun(int,int);D.voidfun(int,int*);答案:C[单选题]若有声明“longfun(int*x,intn,long*s);in

ta[4]={1,2,3,4};longb,c;”,则以下函数调用形式中正确的是。A.c=fun(a,4,b);B.c=fun(a[],4,&b);C.c=fun(a[4],4,b);D.c=fun(a,4,&b);答案:D[单选题]若函数调用时的实参为变量,则以下关于函数形参和实参的叙述中正确

的是。A.实参和其对应的形参占用同一存储单元B.形参不占用存储单元C.同名的实参和形参占用同一存储单元D.形参和实参占用不同的存储单元答案:D[全国选择题]函数调用语句func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8

)));中func函数的实参个数是()。A)3B)4C)5D)8答案:A[阅读程序]以下程序运行时输出结果是。#include<stdio.h>voidfunc(intb){inta;a=b;b=10;}voidmain(){inta=10,b=20;func(b)

;printf("%d,%d",a,b);}答案:10,20[阅读程序]以下程序运行时输出到屏幕的结果是。#include<stdio.h>voidswap(inta,intb){intt;if(a>b)t=a,a=b,b=t;}voidmain(){intx=

13,y=11,z=12;if(x>y)swap(x,y);if(x>z)swap(x,z);if(y>z)swap(y,z);printf("%d\t%d\t%d\n",x,y,z);}答案:8.131112[阅读程序]以下程序运行时输出结果是。#include<stdio.h>int

f(intx,inty){returnx+y;}voidmain(){doublea=5.5,b=2.5;printf("%d",f(a,b));}答案:7[阅读程序]以下程序运行后的输出结果是。#include<stdio.h>

intfun(intw1,intw2){returnw2-w1;}main(){intw=1,k;k=fun(fun(w+1,w),w);printf("%d\n",k);}答案:2[全国选择题]有以下程序#include<stdio.h>voidfun(inta,i

ntb){intt;t=a;a=b;b=t;}main(){intc[10]={1,2,3,4,5,6,7,8,9,0},i;for(i=0;i<10;i+=2)fun(c[i],c[i+1]);fo

r(i=0;i<10;i++)printf(“%d,”,c[i]);printf(“\n”);}程序的运行结果是()A)1234567890B)(3)函数调用时结构类型实参的传递与使用[阅读程序]以下程序运行时输出到屏幕的结果第一行是(1),第二行是(2)。#include<st

dio.h>typedefstruct{intx,y;}direction;intvisible(directions,directionA,directionB,directionC){directionp1,p2;intd

;p1.x=B.x-A.x;p1.y=B.y-A.y;p2.x=C.x-A.x;p2.y=C.y-A.y;d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;printf("%4d\n",d);returnd>0;}voidmain(){char*ss[]={"invi

sible","visible"};directions={1,1},T={1,1},A={0,0},B={2,1};puts(ss[visible(s,T,A,B)]);}答案:(1)-1(2)invisible(4)函数调用时指针类型实参的传递与使用【考题解析】[单选题]

若需要通过调用f函数得到一个数的平方值,以下f函数定义中不能实现该功能的是。A.voidf(double*a){*a=(*a)*(*a);}B.voidf(doublea,double*b){*b=a*a;}C.voidf(doublea,doubleb){b=a*

a;}D.doublef(doublea){returna*a;}答案:C[全国选择题]有以下程序#include<stdio.h>voidfun(int*a,int*b){int*c;c=a;a=b;b=c;}main(){intx=3,y=5,*P=&x,*

q=&y;fun(p,q);printf(”%d,%d,”,*p,*q);fun(&x,&y);printf(”%d,%d\n”,*p,*q);}程序运行后的输出结果是A)3,5,5,3B)3,5,3,5C)5,3,3,5D)5,3,5,3、答案:B[阅读程序]以下程序运行时输出

结果是。#include<stdio.h>voidchange(intx,inty,int*z){intt;t=x;x=y;y=*z;*z=t;}voidmain(){intx=18,y=27,z=63;change(x,y,&z);prin

tf("x=%d,y=%d,z=%d\n",x,y,z);}答案:x=18,y=27,z=18[全国选择题]有以下程序#include<stdio.h>voidfun(inta[],intn){inti,t;for(i=0;i<n/2;i++){t=a[i];

a[i]=a[n-1-i];a[n-1-i]=t;}}main(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5);for(i=2;i<8;i++)printf(“%d”,k[i]);printf(“\n”

);}程序的运行结果是A)345678B)876543C)1098765D)321678答案:D[阅读程序]以下程序运行时输出结果中第一行是(1),第二行是(2)#include<stdio.h>voidfun(intx,intp[],int*n){inti,j=0;f

or(i=1;i<=x/2;i++)if(x%i==0)p[j++]=i;*n=j;}voidmain(){intx,a[10],n,i;fun(27,a,&n);/*调用fun函数将27的所有因子保存到a数组,因子个数保存到n*/for(i=0;

i<n;i++)printf("%5d",a[i]);printf("\n%5d",n);}答案:(1)139(2)3[阅读程序]以下程序运行时输出结果中第一行是(1),第二行是(2)#include<stdio.h>intfun(char*a,char*b){intm=0,

n=0;while(*(a+m)!='\0')m++;while(b[n]){*(a+m)=b[n];m++;n++;}*(a+m)='\0';returnm;}voidmain(){chars1[20]="yes",s2[5]="no";printf("%d\n",

fun(s1,s2));puts(s1);}答案:(1)5(2)yesno[阅读程序]以下程序运行时输出到屏幕的结果第一行是(1),第二行是(2)。#include<stdio.h>voidfun(char*p1,char*p2);voidmain(){inti;ch

ara[]="54321";puts(a+2);fun(a,a+4);puts(a);}voidfun(char*p1,char*p2){chart;while(p1<p2){t=*p1;*p1=*p2;*p2=t;p1+=2,

p2-=2;[完善程序]以下程序的功能是:求a数组中前4个元素之和及后6个元素之和。#include<stdio.h>intfsum(int*array,intn){inti,s=0;for(i=0;(1);i+

+)s+=array[i];return(s);}voidmain(void){inta[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};intsumh,sumt;sumh=

fsum(a,4);sumt=(2);printf(“%d%d\n”,sumh,sumt);(5)函数返回值的产生【考题解析】[填空题]已知有函数定义“intfun(){return(3,4);}”,则调用fun

后的函数返回值是(1)。答案:4[全国选择题]以下叙述中错误的是()。A)用户定义的函数中可以没有return语句B)用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值C)用户定义的函数中若没有return语句,则应当定义函数为void类型D)函数的return

语句中可以没有表达式答案:B[全国选择题]以下关于return语句的叙述中正确的是()。A)一个自定义函数中必须有一条return语句B)一个自定义函数中可以根据不同的情况设置多条return语句C)定义成void类型的函

数中可以有带返回值的return语句D)没有return语句的自定义函数在执行结束语句时不能返回到调用处答案:B(6)全局变量、局部变量与形式参数的作用域【考题解析】[阅读程序]以下程序运行时输出结果是。#include<stdio.h>intt;intsub(int*s){*s+=1;t

+=*s;returnt;}main(){inti;for(i=1;i<4;i++)printf("%4d",sub(&i));}答案:26(7)局部变量、形式参数的存储类型和生存期【考题解析】[单选题]已知在函数f中声明了局部变量x,如

果希望f函数第一次被调用返回后变量x中存储的数据保持到下次f函数被调用时仍可以使用,则在声明x时必须指定其存储类型为(30)。A.autoB.registerC.staticD.extern答案:C[填空

题]声明局部变量时若缺省存储类别,该变量的存储类别是。答案:auto[填空题]可以改变局部变量的生存期、但不能改变它的作用域的存储类别是。答案:static[阅读程序]以下程序运行时输出结果的第一行是(1),第二行是(2)

。#include<stdio.h>intf1(){staticinti=0,f=1;returnf*=++i;}intf2(){inti=0,f=1;returnf*=++i;}voidmain(){printf("%d\n",f1()+f1());printf("%d\n",f2()+f

2());}[阅读程序]以下程序运行时输出到屏幕的结果第一行是(1),第二行是(2),第三行是(3)。#include<stdio.h>intg(intx,inty){returnx+y;}intf(intx,inty){{staticintx=2;if(

y>2){x=x*x;y=x}elsey=x+1;}returnx+y;}voidmain(){inta=3;printf("%d\n",g(a,2));printf("%d\n"f(a3));6.函数高级应用(1)

递归函数执行过程【考题解析】[阅读程序]以下程序运行时输出结果是(8)。#include<stdio.h>voidf(longx){if(x<100)printf("%d",x/10);else{f(x/100);printf("%d",x%10

0/10);}}main(){f(123456);}答案:135[阅读程序]以下程序运行后的输出结果第一行是(13)。#include<stdio.h>voidprint(intn);voidprint_n(intn);main(){p

rint(4);}voidprint(intn){if(n==0)return;print_n(n);if(n>0)print(n-1);}voidprint_n(intn){if(n==0)return;printf("%d",n);[阅

读程序]以下程序运行时输出结果是.#include<stdio.h>#include<string.h>voidsf(char*s1,char*s2){if(*s1=*s2)sf(s1+1,s2+1);}vo

idmain(){chara[20]="ABC",b[20]="xyz";sf(a+strlen(a),b);puts(a);}答案:ABCxyz[阅读程序]以下程序运行时输出结果是.#include<stdio.h>#include<ctype.h>intcount(char

s[]){inti=0;if(s[i]=='\0')return0;while(isalpha(s[i]))i++;while(!isalpha(s[i])&&s[i]!='\0')i++;return1+

count(&s[i]);/*递归调用*/}voidmain(){charline[]="oneworld,onedream.";printf("%d",count(line));}答案:4[阅读程序]以下程序运行时输出到屏幕的结果是。#incl

ude<stdio.h>voidfun(intm,intn){if(m>=n)printf("%d",m);elsefun(m+1,n);printf("%d",m);}voidmain(){fun(1,2);}答案

:221(2)函数的指针操作①函数地址的获得及保存。指向函数的指针变量声明、初始化、赋值②调用指针变量指向的函数【考题解析】[全国填空题]请将以下程序中的函数声明语句补充完整#include<stdio.h>int___

______________;main(){intx,y,(*p)();p=max;printf(“&d\n”,(*p)(x,y));}intmax(intaintb)[全国选择题]设有以下函数:voidfun(intn,

char*s){…….}则下面对函数指针的定义和赋值均正确的是A)void(*pf)();pf=fun;B)void*pf();pf=fun;C)void*pf();*pf=fun;D)void(*pf)(int,char*);pf=fun;答案:D[学校单选题

]若已有如下程序:#include<math.h>doubleg(doublea,double(*p)(double)){returnp(a)*p(a);}main(){doublex=2,y;/*g函数调用语句位置*/}现需要在main函数中调用g函数,以下选项中正确的g函数调用语句是。A.y

=g(x,exp);B.y=g(x,exp(x));C.y=g(x,exp());D.y=g(doublex,doubleexp);答案:A(3)返回指针类型值的函数以下程序运行结果是()。#include<stdio.h>#in

clude<stdlib.h>int*fun(intn){int*p;p=(int*)malloc(sizeof(int));*p=n+10;returnp;}main(){int*p;p=fun(10);printf(“%d\n”,*p);}

答案:207.单向链表⑴结点数据类型定义⑵使用malloc()函数,free()函数动态申请、释放结点存储区⑶基本操作:建立链表、遍历链表、查找结点、插入新结点、删除结点、数据统计、链表倒序•建立链表关键操作需声明指针变量:hea

d(指向链表首结点),p1(指向新申请结点),p2(指向链表末结点)while(仍有数据需保存到链表){p1=(structnode*)malloc(sizeof(structnode));p1->成员名=数据;if(head==0

)head=p2=p1;else{p2->next=p1;p2=p1;}}p2->next=NULL;returnhead;•遍历链表(输出结点数据,统计结点数据)关键操作需声明指针变量p或直接用形参p=head;(指向链表首结点)while(p!=NULL){查找结点数据、输出结点

数据、统计结点数据p=p->next;}•插入结点到链表关键操作需声明指针变量:p(指向待插入新结点),head(指向链表首结点),p1(指向插入位置之前结点),p2(指向插入位置之后结点)①申请新结点并保存数据到结点p=(structnode*)mall

oc(sizeof(structnode));p->成员=数据;p->next=NULL;②若要求将新结点插入链表第一个结点前if(head==NULL)head=pelse{p->next=head;head=p;}returnhead;③若要求将新结点插入有序链表中if(新结点应插入

到链表首结点之前){p->next=head;head=p;returnhead;}else{p1=head;p1指向链表第一个结点p2=head->next;p2指向链表第二个结点while(p2!=NULL){if(新结点应插入到p2指向结点之前)立即终止循环el

se{p1=p2;p2=p2->next;}}if(p2==NULL)p1->next=p;新结点添加到末结点之后else{p->next=p2;p1->next=p;}新结点插入p2指向结点之前}returnhead;•从链表中删除结点关键操作需声明指针变量:head(

指向链表首结点),p1(指向需删除结点之前结点),p2(指向需删除结点)if(首结点需要删除,即head->成员=给定值){p=head;head=head->next;或head=p->next;free(p);}else{p1=head;p1指向链表第一个结点p2=head->next

;p2指向链表第二个结点while(p2!=NULL){if(p2指向结点需删除)立即终止循环else{p1=p2;p2=p2->next;}}ifp2==NULL){puts(“notfound”);}未找到结点else{p1->next=p2->next;free

(p2);}删除p2指向结点}returnhead;【考题解析】•插入新结点[完善程序]以下程序的功能是:函数structnode*insert(structnode*head,structnode*p)将p指向的结点作为首结点插入

head指向的链表中。main函数接收从键盘输入的一行字符,每接收一个字符后,申请一个新结点保存该字符,并调用insert函数将新结点插入链表中。最后从表头开始依次输出该链表各结点成员c的值。试完善程序以达

到要求的功能。#include<stdio.h>#include<stdlib.h>structnode{charc;structnode*next;};voidmain(){structnode*insert(structnode*head,st

ructnode*p);charch;structnode*head,*p;head=NULL;while((ch=getchar())!='\n'){p=(structnode*)malloc(sizeof(struc

tnode));(1)=ch;p->next=NULL;(2);}p=head;while(p!=NULL){printf("%c",p->c);(3);}}structnode*insert(structnode*head,structnode*p){if(head==NULL)head

=p;else{(4);head=p;}returnhead;}答案:(1)p->c(2)head=insert(head,p)(3)p=p->next;(4)p-next=head•数据统计[完善程序]以下程序创建一个链表并实现数据统计功能。函数WORD*create(chara[]

[20],intn)创建一个包含n个结点的单向链表,结点数据来自a指向的数组中存储的n个单词(字符串)。函数voidcount(WORD*h)统计h指向的单向链表中不同单词各自出现的次数,将统计结果保存到局部数组c中并输出。(20

09春)程序运行时输出结果为“red:1green:2blue:3”。#include"stdio.h"#include"stdlib.h"#include"string.h"typedefstructw{charword[20];structw*next;}WORD;WORD*cre

ate(chara[][20],intn){WORD*p1,*p2,*h=0;inti;for(i=0;i<n;i++){p1=(WORD*)malloc(sizeof(WORD));strcpy((1),a[i]);if(h==0)h=p2=p1

;else{p2->next=p1;p2=p1;}}p2->next=(2);returnh;}答案:(1)p1->word(2)0或NULLvoidcount(WORD*h){struct{charword[20];intnum;}c[6]={0};intm=

0,i;while(h){if(m==0){strcpy(c[0].word,h->word);c[0].num=1;m++;}else{for(i=0;i<m;i++)if(strcmp(c[i].word,h->word)==

0){(3);break;}if(i>=m){strcpy(c[m].word,h->word);c[m++].num=1;}}(4);}for(i=0;i<m;i++)printf("%s:%d",

c[i].word,c[i].num);}答案:(1)c[i].num++(2)h=h->nextvoidmain(){charwords[6][20]={"red","green","blue","blue","green","blue"};WORD*head=0

;head=create(words,6);count(head);}•查找、删除结点[完善程序]设h1和h2分别为两个单链表的头指针,链表中结点的数据结构为:typedefstructnode{intdata;structnode*next

;}NODE;sea_del函数的功能是:删除h1指向的链表中首次出现的与h2指向的链表中数据完全匹配的若干个连续结点,函数返回h1指向链表的头指针。例如,初态下,h1指向链表和h2指向链表如下图所示:124790h12470h2调用

sea_del函数后h1指向链表为:1h190NODE*sea_del(NODE*h1,NODE*h2){NODE*p,*ph,*q,*s;ph=NULL;p=q=h1;s=h2;if(h1==NULL||(1))returnh1;while(p!=NULL&&s!=NULL){while(q

->data==s->data&&q&&s){q=q->next;s=(2);}if(s!=NULL)/*失配时,h1起始结点后移,h2从首结点开始*/{ph=p;p=q=p->next;s=(3);}elseif(ph==NULL)h1=q;elseph->next=q;}(4);}

答案:(1)h2==NULL或h2==0(2)s->next(3)h2(4)returnh1•查找、删除、插入结点[完善程序]设一个单向链表结点的数据类型定义为:structnode{intx;structnode*

next;};fun函数从h指向的链表第二个结点开始遍历所有结点,当遇到x值为奇数的结点时,将该结点移到h链表第一个结点之前,函数返回链表首结点地址。print函数输出p指向的链表中所有结点的x值。程序运行后的输出结果是“1342”。#include<stdio.

h>#defineN4structnode{intx;structnode*next;};voidprint(structnode*p){while((1)){printf("%4d",(2));p=p->next;}printf("\n");

}答案:(1)p(2)p->xstructnode*fun(structnode*h){structnode*p1,*p2,*p3;p1=h;p2=p1->next;while(p2){if(p2->x%2){p3=p2;p1->next=(3);

p2=p1->next;p3->next=h;(4);}else{p1=p2;p2=p2->next;}}returnh;}main(){structnodea[N]={{4},{3},{2},{1}},*head=a;inti,num;for

(i=0;i<N-1;i++)a[i].next=&a[i+1];a[i].next=0;head=fun(head);print(head);}答案:(3)p2->next或p3->next(4)h=p3•链表倒序设某单向链表结点的数据结构定义为:typedefstructno

de{charch;structnode*next;}linklist;以下程序首先建立一个单向链表head(如图1所示),该链表每个结点中保存x数组的一个元素值;输出head链表中每个结点的值;再将head链表变换为倒序链表

(如图所示),输出倒序后head链表中每个结点的值。headD0图1CBAheadA0图2BCD#include<stdio.h>typedefstructnode{charch;structnode*next;}linklist;li

nklist*create(charx[]){inti;linklist*pt,*pr,*p=NULL;for(i=0;x[i]!='\0';i++){pt=(linklist*)malloc(sizeof(linklist));pt->ch=x[i];pt->next=NULL;if

(p==NULL){(1);pr=pt;}else{pr->next=pt;(2);}}returnp;}答案:(1)p=pt(2)pr=pr->nextlinklist*revlist(linklist*head){linklist*hp,*p=NULL;hp=head;h

ead=(29);while(hp){p=hp;hp=hp->next;p->next=head;(30);}returnhead;}voidprint(linklist*phead){while(phead){printf("%c

",phead->ch);phead=phead->next;}printf("\n");}main(){linklist*head;charx[]="ABCD";head=create(x);print(head);head=revlist(head);print(head);}答案

:(3)NULL或0(4)head=phead链表倒序算法提示:(1)使hp指向head链表,置head为0(head链表为空链表)。(2)从hp指向的链表第一个结点开始,依次从hp链表中删除每个结点,将所删除的结点再依次插入到head链表第一个结点之前,直到hp链表为空时结束。

8.枚举类型数据⑴枚举类型定义⑵枚举变量的命名、声明⑶枚举常量的使用⑷枚举变量的赋值及使用【考题解析】[填空题]若已有定义“enumTP{A,B,C};”,则执行语句“printf(”%d\n“,A+1);”后输出结果是(3)。答案:1[单选题].若有枚举类型定

义“enumlist1{x1,x2,x3,x4=6,x5,x6};”,则枚举常量x2和x6代表的值分别是。A.1,6B.1,8C.2,6D.2,8答案:B9.预处理命令⑴#define命令(2)#include命令【考题解

析】[填空题]C语言有效的预处理命令总是以(4)开头。答案:#[填空题]执行以下程序段中的语句“k=M*M+1;”后k的值是(4)。#defineN2#defineMN+1k=M*M+1;答案:6[阅读程序]以下程序运行后的输出结果是。#inclu

de<stdio.h>#defineCount(n)++nmain(){intx=-3,n=8;while(Count(x))n--;printf("%d\n",n);}答案:6[阅读程序]以下程序运行时输出到屏

幕的结果为。#include<stdio.h>#defineMAX(A,B)A>B?2*A:2*Bvoidmain(){inta=1,b=2,c=3,d=4,t;t=MAX(a+b,c+d);printf("%d\n",t);}

答案:10[阅读程序]以下程序运行时输出结果是(5)。#defineEVEN(x)x%2==0?1:0main(){if(EVEN(5+1))printf("Even");elseprintf("Odd");}答案:Odd[全国选择题]以下叙述中

错误的是()。A)在程序中凡是以“#”开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束C)#defineMAX是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的答案:D10.文件操作⑴文件指针变量的声明(重点掌握)⑵缓冲文件系统常

用操作函数的使用:fopen(),fclose(),fprintf(),fscanf(),fgetc(),fputc(),fgets(),fputs(),feof(),rewind(),fread(),fwrite(),fseek()【考题解析】[填空题]已知某程序中有预处理命令“#includ

e<stdio.h>”,为使语句“zx=fopen(”c:\\a.txt“,”r“);”能正常执行,在该语句之前必须有声明。答案:FILE*zx;[填空题]若需要打开D盘上user子目录下已经存在的名为abc.txt的文本文件,先读出文件中数据,后追加写入新数据,则正确的

函数调用语句是:“fp=fopen("D:\\user\\abc.txt",);”。答案:"a+“[单选题]已知A盘根目录下有文本文件“data.txt”且程序中已有声明“FILE*fp;”,若程序需要先从“data.txt”文件中读出数据,修改后再写入“dat

a.txt”文件中,则调用fopen函数的正确形式是(28)。A.fp=fopen("a:\\data.txt","rw");B.fp=fopen("a:\\data.txt","w+");C.fp=fopen("a:\\data.txt"

,"r+");D.fp=fopen("a:\\data.txt","r");答案:C[单选题]下列叙述中,正确的是。A.C语言中的文件是流式文件,只能顺序存取文件中数据B.调用fopen函数时若用“r”或“r+”模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。C.当

对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据。D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖。答案:B[全国选择题]有以下程序#include<stdio.h>mai

n(){FILE*fp;inta[l0]={1,2,3},i,n;fp=fopen("d1.dat","w");.for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);fprintf(fp,"\n");fcl

ose(fp);fp=fopen("d1.dat","r");fscanf(fp,"%d",&n);fclose(fp);printf("%d\n",n);}程序的运行结果是()。A)12300B)123C)1D)321答案:B[阅读程序]以下程序运行时输出结果是.#inc

lude<stdio.h>voidmain(){doublex[3]={1.1,2.2,3.3},y;FILE*fp=fopen("d:\\a.out","wb+");fwrite(x,sizeof(double),3,fp);fseek(fp,2L*sizeof(double),S

EEK_SET);fread(&y,sizeof(double),1,fp);printf("%.1f",y);fclose(fp);}答案:3.311.综合[单选题]在下列C语言源程序的错误中,通常不能在编译时发现的是(21)。A.括号不匹配B.非法标识符C.数组

元素下标值越界D.程序结构不完整答案:C[单选题]以下定义和声明中,语法均有错误的是(21)。①int_f(intx){}②intf(intf){}③int2x=1;④structfor{intx;};A.②③B.③④C.①④D.①②③④

答案:B[单选题]若程序中已有相应的声明,下列语句中错误的是。A.printf(i==4?"%6d\n":"%6d",i);B.i==4?printf("%6d\n",i):printf("%6d",i);C.for(i=10;;i--)if(i==1)

break;D.for(i=10;;)if(i--);break;答案:D[全国填空题]以下程序的输出结果是_______#include<stdio.h>main(){intj,a[]={1,3,5,7,9,11,13,15},*p=a+5;for(j

=3;j;j--){switch(j){case1:case2:printf(“%d”,*p++);break;case3:printf(“%d”,*(--p));}}[阅读程序]以下程序运行时输出结果中第一行是(1),第二行是(2),第三行是(3)。#include<stdio.h

>main(){inti,j,a[3][3]={0};for(i=0;i<3;i++)for(j=0;j<3;j++)switch(i-j+2){case0:case1:a[i][j]=1;break;case2:a[i][j]=2;break;case3:a

[i][j]=3;break;case4:a[i][j]=5;break;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%4d",a[i][j]);printf("\n");}}答案

:(1)211(2)321(3)532算法考试要求及考题解析(2007秋~2010春)1.基本操作:交换,累加,累乘【考题解析】交换数据[阅读程序]以下程序运行时输出到屏幕的结果是(7)。#include<stdio.h

>voidmain(){inta=1,b=2;a+=b;b=a-b;a-=b;printf("%d,%d\n",a,b);}答案:2,12.数值计算算法(1)求若干整数的最大公约数(2)求一个十进制表示整数的反序数(

3)一元非线性方程求根(牛顿迭代法,半分区间法)(4)定积分计算(梯形法,矩形法)(5)级数计算(递推法)(6)矩阵转置,矩阵乘法【考题解析】•求最大公约数[完善程序]以下程序求一组整数的最大公约数。#include<stdio.h>i

ntgcd(inta,intb){intr;while((1)){r=a%b;a=b;(2);}returna;}voidmain(){intx,i,a[6]={12,56,48,32,16,24};x=(3);for(i=1;i<6

;i++)x=gcd((4),a[i]);printf("(%d,",a[0]);for(i=1;i<5;i++)printf("%d,",a[i]);printf("%d)=%d\n",a[5],x);}答案:(1)b!=0

(2)b=r(3)a[0](4)x•求一个十进制字符串表示整数的反序数[阅读程序]以下程序运行后的输出结果是(10)。#include<stdio.h>main(){chara[]="369",*p=a;ints=0,t=1;while(*

++p)t*=10;p--;while(t){s+=(*p-'0')*t;p--;t/=10;}•一元非线性方程求根(牛顿迭代法)[阅读程序]用牛顿迭代法求方程3x3-3x2+x-1=0在2.0附近的一个实根,精度

要求为10-5。函数F求f(x)的值,函数F1求f(x)的一阶导数值。牛顿迭代公式如下:)0(')0(0xfxfxx#include<stdio.h>#include<math.h>floatF(floatx){returnx*(3*x*(x-1)+1)-1;}floatF1(

floatx){return9*x*x-6*x+1;}floatnewtoon(floatx){floatf,f1,x0;do{(1);f=F(x0);f1=F1(x0);x=(2);}while(fabs(x-x0)>1e-5);returnx;}mai

n(){floatx0;scanf("%f",&x0);printf("Theresult=%.2f\n",newtoon(x0));}答案:(1)x0=x(2)x0-f/f1或x0-F(x0)/F1(x0)•级数计算(

递推法)[完善程序]以下程序通过给出的公式计算的近似值,计算过程在所加项的值小于10-10时终止。753217165432121514321213121216

#include<stdio.h>main(){doublesum=0.5,t,t1,t2,t3;intodd=1,even=2;t=t1=t2=1.0;t3=0.5;while(t>1e-10){t1=(1);odd+=2;even+=2;t2=1.0/odd;t3=(2

);t=t1*t2*t3;sum+=t;}printf("\nPI=%.8lf",(3));}答案:(1)t1*odd/even(2)t3*0.5*0.5(3)sum*63.非数值计算算法(1)穷举法找数(2

)排序(冒泡法,插入法,选择法)(3)在数组中查找数据(线性法,折半法)(4)将一个数据插入有序数组中(5)删除数组中数据(6)多个数组数据合并(7)数据统计(8)其他(素数判断,回文数判断,回文判断,约瑟夫问题)(9)生成矩阵(杨辉三角形,…

)(10)模拟十进制长整数算术运算(11)字符串处理(子串替换,加密,„)【考题解析】•穷举法找数[阅读程序]寻找具有下列特性的四位正整数,其百位数为0,去掉百位数0可得到一个三位正整数,而该三位正整数乘以9等于原四位正整数。例如,6075=675×9,所以6075是具有上述特性的正整

数。#include<stdio.h>intfun(intn){inta[4],i,k;k=n;for(i=0;k>0;i++){a[i]=(1);k/=10;}if((2)&&(a[3]*100+a[1]*10+a[0])*9==n)main(){inti,n=0;for(i=1000;i<10

000;i++)if(fun(i))printf("%4d\t",i);printf("\n");}答案(1)k%10(2)a[2]==0或!a[2]•穷举法找数[完善程序]某餐厅用苹果、桔子、香蕉、菠萝、梨五种水果制作水果拼盘,要求每个拼盘中恰有三种不同水果。以下程序的功能就是计算可

以制作出多少种这样的水果拼盘并列出组合方式。#include<stdio.h>typedefenum{apple,orange,banana,pineapple,pear}Fruit;main(){(1)fruits[]={"apple","orange","ba

nana","pineapple","pear"};Fruitx,y,z,p;intk=0,i;for(x=(2);x<=pear;x++)for(y=x+1;y<=pear;y++)for(z=y+1;z<=pear;z++)printf("\n%d%s%s%s",++k,fruits[x],f

ruits[y],fruits[z]);}答案:(1)char*(2)apple或0•排序:下标为奇数的数组元素排序,选择法[阅读程序]以下程序运行时输出结果是.#include<stdio.h>voidsort(inta[],intn){inti

,j,p;intt;for(i=1;i<n-1;i+=2){p=i;for(j=i+2;j<n;j+=2)if(a[j]>a[p])p=j;if(p!=i){t=a[i];a[i]=a[p];a[p]=t;}}}v

oidmain(){ints[]={8,1,4,3},n=4,k;sort(s,n);for(k=0;k<n;k++)printf("%4d",s[k]);printf("\n");}答案:8341•排序(选择法)[完善程序]以下

程序对二维数组a中存储的NN矩阵做如下操作:先将每一行中值最大的元素与该行位于主对角线处的元素交换值,然后对主对角线上的所有元素排序使其自左上角到右下角升序排列,最后输出排序后主对角线上各元素的值。试完善程序以达到要

求的功能。#include<stdio.h>#defineN5voidfun(intx[][N],intn){inti,j,t,arr,col;for(i=0;i<n;i++){arr=x[i][0];col=0;for(j=0;j<n;j+

+)if(x[i][j]>=arr){arr=x[i][j];(1);}t=x[i][i];(2);x[i][col]=t;}for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if((3)){t=x[i][i];x[i][i]=x[j][j];x[j][j]=t;}

}voidmain(){inta[N][N]={{10,25,24,13,23},{11,22,12,21,14},{20,15,19,16,18},{17,9,4,5,3},{2,1,6,7,8}},i;

fun(a,N);for(i=0;i<N;i++)printf("%3d",a[i][i]);}答案:(1)col=j(2)x[i][i]=x[i][col](3)x[i][i]>x[j][j]•结构数组排序:按成

员x值升序,x值相同的按成员y值升序[阅读程序]以下程序运行时输出结果中第一行是(1),第二行是(2)第三行是(3).#include<stdio.h>typedefstruct{intx;inty;}S;voidfun(Spp[],intn)

{inti,j,k;St;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if((pp[j].x<pp[k].x)||(pp[j].x==pp[k].x&&pp[j].y<pp[k].y))k=

j;if(k!=i){t=pp[i];pp[i]=pp[k];pp[k]=t;}}}voidmain(){Sa[5]={{3,2},{3,1},{1,2},{2,4},{2,3}};inti,n=5;fun(a,n);for(i

=0;i<n;i++)printf("%d,%d\n",a[i].x,a[i].y);}答案:(1)1,2(2)2,3(3)2,4•二维数组数据变换:最小值所在行与最后一行数据交换,最大值所在列与最后一列数据交换[阅读程序]以下程序运行后的输出结果第一行是(1);第二行是(2);第三行是(3)

。#include<stdio.h>voidsot(inta[3][3]){inti,j,i0,j1,min,max,temp;min=max=a[0][0];for(i=0;i<3;i++){for(j=0;j<3;j++){if(a[i]

[j]<=min){min=a[i][j];i0=i;}if(a[i][j]>=max){max=a[i][j];j1=j;}}}789456123321654987for(j=0;j<3;j++){temp=a[i0][j];a[i0][j]=a[2][j];a[2][j]=te

mp;}for(i=0;i<3;i++){temp=a[i][j1];a[i][j1]=a[i][2];a[i][2]=temp;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d",a[i][j]);printf("\n");

}}main(){intb[3][3]={{3,2,1},{6,5,4},{9,8,7}};sot(b);}答案:(1)789(2)456(3)123•排序[完善程序]下列程序的功能是对a数组a[0]

~a[n-1]中存储的n个整数从小到大排序。排序算法是:第一趟通过比较将n个整数中的最小值放在a[0]中,最大值放在a[n-1]中;第二趟通过比较将n个整数中的次小值放在a[1]中,次大值放在a[n-2]中;……,依次类推,直到待排序序列为递增序列。试完善程序以

达到要求的功能。#include<stdio.h>#defineN7voidsort(inta[],intn){inti,j,min,max,t;for(i=0;i<(1);i++){(2);for(j=i+1;j<n-i;j++)if(a[j]<a[min])min=j;e

lseif(a[j]>a[max])max=j;if(min!=i){t=a[min];a[min]=a[i];a[i]=t;}if(max!=n-i-1)if(max==i){t=a[min];a[min]=a[n-i-1];a[n-i-1]=t;}voidma

in(){inta[N]={8,4,9,3,2,1,5},i;sort(a,N);printf("sorted:\n");for(i=0;i<N;i++)printf("%d\t",a[i]);printf("\n");}•字符串排序[完善程序]程序运行时

输出结果第一行(1)第二行是(2)。#include<stdio.h>#include<string.h>voidfun(charstr[][20],intn){inti,j,k;chars[20];for(i=0;i<n-1;i

++){k=i;for(j=i+1;j<n;j++)if(strcmp(str[j],str[k])<0)k=j;strcpy(s,str[i]);strcpy(str[i],str[k]);strcpy(st

r[k],s);}}main(){charstr[6][20]={"PASCAL","BASIC","FORTRAN","C","COBOL","Smalltalk"};inti;fun(str,6);for(i=0;i<6;i++)printf("%s\n",st

r[i]);}答案:(1)BASIC(2)C•删除数组中满足给定条件的所有数据[阅读程序]以下程序运行时输出结果的第一行是(1);第二行是(2)。(删除数组中所有偶数)#include<stdio.h>intfun(int*x,intn){inti

,j;for(i=j=0;i<n;i++)if(*(x+i)%2)*(x+j++)=*(x+i);returnj;}main(){inta[10]={1,5,2,3,8,3,9,7,4,10},n,i;n=fun(a,10);for(i=0;i<n;i++){

printf("%5d",a[i]);if((i+1)%3==0)printf("\n");}}答案:(1)153(2)397数组数据合并[阅读程序]以下程序运行时输出结果的第一行是(1);第二行是(2);第三行是(3)。#include<stdio.h>#defineN10intmerge(

inta[],intb[],intc[],intm[][N+1]){inti=0,j,k;while((k=m[0][i])!=2){j=m[1][i];if(k==0)c[i]=a[j];elsec[i]=b[j];i++;}main()

{inta[N]={1,3,5},b[N]={2,4,6},c[2*N],i,n;intm[2][N+1]={{0,1,0,1,0,1,2},{0,0,1,2,2,1,-1}};n=merge(a,b,c,m);printf("%d\n",n);for(i=0;i<n;i++){pri

ntf("%d",c[i]);if((i+1)%3==0)printf("\n");}}答案:(1)6(2)123(3)654•在数组中查找数据[阅读程序]以下程序运行时,若在键盘上输入2<Enter>,则输出是(1);若在键盘上输入i<Enter>,

则输出是(2)。#include<stdio.h>#include<string.h>intstrch(char*s,charch){inti;for(i=strlen(s);i>=0;i--)if(s[i-1]==ch)ret

urni;if(i<0)return0;}main(){charch,s1[]="as123d2nfghjkm";intk;printf("inputch:");ch=getchar();k=strch(s1

,ch);if(k!=0)printf("k=%d\n",k);elseprintf("notfound\n");}答案:(1)k=7(2)notfound•约瑟夫问题:n个人报数,报到3的人出列,剩下人继续报数,直到所有人出列为止,显示依次出列人编号[阅读程序]以下程序运行时若

输入8,则输出结果中第一行是(1),第二行是(2),第三行是(3)。#include<stdio.h>voidmain(){intk,i,m,n,num[20];scanf("%d",&n);for(i=0;i<n;i++)num[

i]=i+1;i=k=m=0;while(m<n-1){if(num[i]!=0)k++;if(k==3){printf("%4d",num[i]);num[i]=0;k=0;m++;if(m%3==

0)printf("\n");}i++;if(i==n)i=0;}i=0;while(num[i]==0)i++;printf("%4d",num[i]);}答案:(16)361(17)528(18)47•生成矩阵(杨辉三角形)[阅读程序]

以下程序运行时输出到屏幕的结果第二行是(1),第四行是(2)。#include<stdio.h>#defineN6voidmain(){inti,j,a[N+1][N+1];for(i=1;i<=N;i++){a[i][i]

=1;a[i][1]=1;}for(i=3;i<=N;i++)for(j=2;j<i;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<=N;i++){for(j=1;j<=i;j++)printf("%4d",a[i][j]);printf("

\n");}}答案:(1)11(2)1331•模拟十进制长整数算术运算[完善程序]以下程序完成两个长正整数的加法运算并输出计算结果。函数add模拟手工加法运算的过程,将a和b指向的数组中存储的两个以字

符串形式表示的n位正整数相加,并将运算结果以字符串形式保存到c指向的数组中。main函数中p1和p2数组分别存放被加数字符串和加数字符串,p3数组存放运算结果字符串。若p1中的字符串为"1000000001"、p2中的字符串为"9000000009",调用add函数后p3得到的是以字符串表示的

这两个整数相加的结果"10000000010"。试完善程序以达到要求的功能。#include"stdio.h"#include"string.h"voidadd(chara[],charb[],charc[],(1)){inti,k;c[n]='\0';

k=0;for(i=n-1;i>=0;i--){c[i]=(a[i]-'0')+(b[i]-'0')+k;k=(2);c[i]=c[i]%10+'0';}if(k){for(i=n+1;i>0;i--)

c[i]=(3);c[i]=k+'0';}}答案:(1)intn(2)c[i]/10(3)c[i-1]voidmain(){charp1[80]="1000000001",p2[80]="9000000009",p3[80];inti,x=strlen(p1

),y=strlen(p2);if(x<y){for(i=x;i>=0;i--){p1[i+y-x]=p1[i];p1[i]='0';}(4);}if(x>y)for(i=y;i>=0;i--){p2[i+x-y]=p2[i];p2[i]='0';}add(p1,p2,p3,x);puts

(p3);}答案:(4)x=y•字符串处理:加密[完善程序]以下程序中函数replace的功能是:将字符串s中所有属于字符串s1中的字符都用s2中的对应位置的字符替换。假如s为“ABCBA”,s1为“AC”

,s2为“ac”,则调用replace函数后,字符串s的内容将变换为“aBcBa”。试完善程序以达到要求的功能。#include<stdio.h>#defineMAX20voidreplace(char*s,char*s1,char*s2){ch

ar*p;for(;*s;s++){p=s1;while(*p&&(1))p++;if(*p)*s=(2);}}voidmain(){chars[MAX]="ABCBA",s1[MAX]="AC",s2[MAX]="ac";(3);printf("Thestringofsis:");prin

tf("%s\n",s);}答案:(1)*p!=*s(2)*(s2+p-s1)(3)replace(s,s1,s2)•字符串处理:数据统计[完善程序]统计一个字符串中数字字符“0”到“9”各自出现的次数,统计结果保存在数组

count中。例如,如果字符串为“1enterschar4543123564879ffgh”,则统计结果为:1:22:13:24:35:26:17:18:19:1。#include<stdio.h>voidfun(char*t,

intcount[]){char*p=t;while((1)){if(*p>='0'&&*p<='9')count[(2)]++;p++;}}voidmain(){chars[80]="1enterschar4543123564879ffgh";intcount[10]={0},i;fun(s,

count);for(i=0;i<10;i++)if(count[i])printf("%d:%d",i,count[i]);}答案:(1)*p或*p!=„\0‟或p[0]!=„\0„(2)*p-'0'或

p[0]-'0'•数据统计[完善程序]程序功能:选票统计。二维数组s中保存了投票后10张有效选票上所填写的候选人姓名,结构数组stat中保存统计结果。程序运行后的输出结果是“liu:2wang:5zhao:3”。#include<s

tdio.h>#include<string.h>typedefstruct{charname[20];/*候选人姓名*/intcount;/*候选人得票数*/}COUNT;intcount(charx[][20],intn,(1)){inti,j,k=0;for(i=0;(2);i+

+){for(j=0;j<k;j++)if(strcmp(st[j].name,x[i])==0){(3);break;}if(j>=k){(4);st[k].count++;k++;}}return

k;}main(){chars[10][20]={"liu","wang","zhao","zhao","wang","liu","wang","zhao","wang","wang"};COUNTs

tat[5]={0};inti,n;n=count(s,10,stat);for(i=0;i<n;i++)printf("%s:%d\t",stat[i].name,stat[i].count);}答案:(1)COUNTst[]或C

OUNT*st(2)i<n(3)st[j].count++(4)strcpy(st[k].name,x[i])•字符串处理:子串替换[完善程序]下列程序中函数find_replace的功能是:在s1指向的字符串中查找s2指向的字

符串,并用s3指向的字符串替换在s1中找到的所有s2字符串。若s1字符串中没有出现s2字符串,则不做替换并使函数返回0,否则函数返回1。试完善程序以达到要求的功能。#include<stdio.h>#include<stri

ng.h>intfind_replace(chars1[],chars2[],chars3[]){inti,j,k,t=0;chartemp[80];if(s1[0]=='\0'||s2[0]=='\0')returnt;for(i=0;s1[i]!='\0';i++){k=0

;j=i;while(s1[j]==s2[k]&&s2[k]!='\0'){j++;(1);}答案:(1)k++if(s2[k]=='\0'){strcpy(temp,&s1[j]);(2);i=i+strlen(s3);(3);t=1;}}returnt;}voidm

ain(){charline[80]="Thisisatestprogramandatestdata.";charsubstr1[10]="test",substr2[10]="actual";intk;k=find_replace(line,substr1,substr2);

if((4))puts(line);elseprintf("notfound\n");}答案:(2)strcpy(&s1[i],s3)或strcpy(s1+i,s3)(3)strcpy(&s1[i],t

emp)或strcpy(s1+i,temp)(4)k或k==1或k!=0或k>0•字符串处理:数字字符串转换为整数[完善程序]以下程序中函数longfun(char*str)的功能是:自左至右取出非空字符串str中的所有数字字符,将

这些数字字符组成一个不超过8位的十进制整数并输出。例如,字符串str为“efg32gh76.jbejing08t5y4u2”,程序输出:32760854。#include<stdio.h>longfun(char*str){inti=0;l

ongk=0;char*p=str;while(*p!='\0'&&(1)){if(*p>='0'&&*p<='9'){k=(2)+*p-'0';++i;}(3);}returnk;}voidmain(){charx[]="efg32gh76

.jbejing08t5y4u2";printf("%ld\n",fun(x));}答案:(1)i<8(2)k*10(3)p++•补充:回文数判断[完善程序]以下程序输出6位整数中的所有回文数。若一个整数等于它自身的反序数,则称该整数为回

文数。例如,123321是回文数。#include<stdio.h>intmain(){longx,y=0,i;for(i=100000;i<=999999;i++){x=i;(1);while(x>0){y=y*10+x%10;(2);}if(i==y)printf("

\t%ld",i);}return0;}答案:(1)y=0(2)x=x/10

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?