一、填空题
1、假设变量a、b和c均为整型,以下语句借助中间变量t把a、b和c中的值进行交换,即把b中的值给a,把c中的值给b,把a中的值给c。例如:交换前,a=10、b=20、c=30;交换后,a=20、b=30、c=10。请填空。 _______;a=b;b=c;_______;
2、在C语言源程序中,一个变量代表【 】。
3、C语言的源程序必须通过【 】和【 】后,才能被计算机执行。 4、若a是int型变量,则表达式(a=4*5,a*2),a+6的值为_______。 5、若有定义语句:int m=5,y=2;则执行表达式y+=y-=m*=y后的y值是_______
6、设有char a,b;若要通过a&b运算屏蔽掉a中的其他位,只保留第2和第8位(右起为第1位),则b的二进制数是_______。 7、执行下面程序段后,k的值是_______。 k=1;n=263;
do{k*=n%10;n/=10;} while(n);
8、假设M为已经声明的符号常量,则定义一个具有M×M个元素的双精度型数组a,且所有元素初值为0的形式是_______。 9、设有以下宏定义: #define WIDTH 80
#define LENGTH WIDTH+40
则执行赋值语句:v=LENGTH*20;(v为int型变量)后,v的值是_______。 10、若想输出b数组的10个元素,则下面存在错误的程序行是_______。(每个程序行前面的数字代表行号。)
1 int main()
2 {int b[10]={1,3,5,7,9,2,4,6,8,10},k; 3 for(k=0;k<10;k++,b++) 4 printf(\"%4d\",*b); 5 return0; 6 }
二、选择题
11、设以下变量均为int类型,则值不等于7的表达式是( )。 A.(x=y=6,x+y,x+1) B.(x=y=6,x+y,y+1) C.(x=6,x+1,y=6,x+y) D.(y=6,y+1,x=y,x+1) 12、下面4个选项中,是合法整型常量的选项是( )。 A.160 B.-0xcdf C.-01 D.-0x48a -0xffff 01a 986 0122e5 011 0xe 066 80x 13、以下叙述不正确的是( )
A.一个C源程序可由一个或多个函数组成 B.一个C源程序必须包含一个main函数 C.C程序的基本组成单位是函数
D.在C程序中,注释说明只能位于一条语句的后面 14、C语言规定:在一个源程序中,main函数的位置( ) A.必须在最开始 B.必须在系统调用的库函数的后面 C.可以任意 D.必须在最后 15、下面程序段的运行结果是( )。
charc[]=\\\\\\\\\owil\\n\"; printf(\"%d\",strlen(C.);
A.14 B.3 C.9 D.字符串中有非法字符,输出值不确定
16、设x、y和z均为int型变量,则执行语句x=(y=(z=10)+5)-5;后,x、y和z的值是( )。
A.x=10 B.x=10 C.x=10 D.x=10
y=15 y=10 y=10 y=5 z=10 z=10 z=15 z=10
17、以下与库函数strcmp(char*s,char*t)的功能相等的程序段是( )。 A.int strcmpl(char*s,char*t)
{for(;*s++==*t+十;) if(*s=='\\0')return O; return(*s-*t); }
B.int strcmp2(char*s,char*t)
{for(;*s++==*t++;)
if(!*s) return O; return(*s-*t);
C.int strcmp3(char*s,char*t)
{for(;*t==*s;)
{if(!*t)return0;t++;s++;} return(*s-*t);· }
D.int strcmp4(char*s,char*t)
{for(;*s==*t;s++,t++) if(!*s) return 0; return(*t-*s); }
18、若用数组名作为函数调用的实参,则传递给形参的是(A.数组的首地址 B.数组第一个元素的值 C.数组中全部元素的值 D.数组元素的个数 19、设有以下程序段:
int x=0,s=0;
while(!x!=0)s+=++x; printf(\"%d”,s);则( )
) A.运行程序段后输出0 B.运行程序段后输出1 C.程序段中的控制表达式是非法的D.程序段执行无限次 20、若i为整型变量,则以下循环执行次数是( )。 for(i=2;i==0;)printf(\"%d\",i--); A.无限次 B.0次 C.1次 D.2次
21、当a=1、b=3、c=5、d=4时,执行以下程序段后x的值是( )。
if(a 22、下面程序的功能是将字符串s中所有的字符c删除。请选择填空( )。 #include for(i=j=0;s[i]!= '\\o';i++) if(s[i]!='c)[ ]; s[j]='\\o'; puts(s); return 0; } A)s[j++]=s[i] B)s[++j]=s[i] C)s[j]=s[];j++ D)s[j]=s[i] 23、定义如下变量和数组: int k;int a[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是( )。 for(k=0;k<3;k++)printf(\"%d\",a[k][2-k]); A)3 5 7 B)3 6 9 C)1 5 9 D)1 4 7 24、以下是有关汉诺塔问题的程序段,若在main函数中有调用语句hanoi(3,'A',B’,C.;则符合程序段运行结果的选项是( )。 void move(char getone,char putone) {printf(\"%c——>%c\\n\",getone,putone); void hanoi(int n,char one,char two,char three) {if(n==1)move(one,three); else {hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } A)A-->C B)A-->C C)A-->C D)A-->C A-->B A-->B A-->B A-->B C-->B C-->A C-->B C-->B B-->A A-->B A-->C A-->C C-->B B-->C B-->A A—->B A-->C A-->C B-->C B-->C A-->B A-->B A-->C A-->C 25、以下程序段的功能是计算一个整数的各位数字之和,请选择填空(int n,m=1; scanf(\"%d\",&n);for(;nl=0;) {m【】; n/=10; } printf(\"%d',m); A.+=n%10 B.=n%10 C.+=n D.=n/10 三、读程序填空 26、若要求下列程序的输出结果为8.00,则[]中应填入的是_______。 #include )。 float s,x=1.2,y=[]; s=2/3+k*y/x+m/2; printf(\"%4.2f\\n\",s); return 0; } 27、以下程序的输出结果为_______。 #include printf(\"c:dec=%d,oct=%o,hex=%x,ASCIl=%c\\n\",c,c,c,c); return 0; } 28、若输入的值是-125,则以下程序的运行结果是_______。 #include scanf(\"%d\",8.n); printf(\"%d=\",n); if(n<0)printf(\"-\"); n=abs(n); fun(n): return(0); } void fun(int n) {int k,r; for(k=2;k<=sqrt(n);k++) {r=n%k; while(r==0) {printf(\"%d\ n=n/k; if(n>1) printf(\"*\"); r=n%k; } if(n!=1)printf(\"%d\\n\ } 29、以下程序的运行结果是_______。 #include {int i,m=0;long s=1; for(i=1;i<=n;i++)s=s*n; s=s%1000; do {m=m+s%10; s=s/10; }while(s); return m; int main() {int d; d=fun(5); printf(\"\\nsum=%d\\n\",d); return(0); } 30、下面程序的运行结果是_______。 #include for(i=4;i>=1;i--) {for(j=1;j<=i;j++)putchar('#’); for(j=1;j<=4-i;j++)putchar('*'); putchar(\\n’); } return 0; } 31、下面程序段的运行结果是_______。 char x[]=\"the teacher\"; inti=0; while(x[十+i]!='\\o') if(x[i-1]==t)printf(\"%c\",[i]); int i=0;while(x[十+i]!='\\o') if(x[i-1]=='t')printf(\"%c\",x[]); 32、若运行以下程序时输入字符为Q,则程序的运行结果是_______。 #include scanf(\"%c\",&ch); ch=(ch>=′A'&&ch<='Z')?(ch+32):ch; ch=(ch>='a'&&ch<='z')?(ch-32):ch; printf(\"%c\",ch); return 0; } 33、设有以下main函数,它所在的文件名为filel。 #include #include int main(int argc,char*argv[]) {char*str; int num=0; if(argc<2)return(0); str=argv[1]; while(*str) if(isalpha(*str++))num++; printf(\"\\nThe count is:%d.\\n\",num); return(0);若输入的命令行参数为: file1 1234abc<回车> 则执行以上命令行后得到的输出结果是_______。 四、编程题 34、编写程序实现功能:根据表中的函数关系,对输入的每个x值,计算出相应的y值。 函数关系 x x<0 0 35、以下程序的功能是应用弦截法求方程x3-5x2+16x-80=0的根,其中f函数可根据指定的x的值求出方程的值;函数xpoint可根据x1和x2求出f(x1)和f(x2)的连线与x轴的交点;函数root用来求区间(x1,x2)的实根。请编写root函数。 #include float root(float xl,float ×2) { }float f(float x)/*略*/ { } float xpoint(float x1,floatx2)/*路*/ { } int main() {float xl,x2,fl,f2,x; do {printf(“input xl,x2:\\n\"); scanf(\"%f%,8&x1,8.x2); printf(\"xl=%5.2f,x2=%5.2f\\n\",xl,x2); f1=f(x1); f2=f(×2); }while(fl*f2>=0); x=root(x1,x2); printf(\"A root of equation is%8.4f\",x); return(0); } 参考答案 一、填空题 1、【1】t=a【2】c=t 2、内存中的一个存储单元 3、【1】编译【2】连接 4、26 5、-16 6、10000010 7、36 8、double a[M][M]={0}; 9、880 10、第3行 二、选择题 11、C 12、A 13、D 14、C 15、B 16、A 17、C 18、A 19、B 20、B 21、B 22、A 23、A 24、C 25、A 三、读程序填空 26、3.6 27、c:dec=120,oct=170,hex=78,ASCII=x 28、-125=-5*5*5 29、sum=8 (注:函数fun的功能是计算数值5°其个位、十位、百位上数字之和。) 30、#### ###* ##** #*** 31、he 32、Q 33、The count is:3. 四、编程题 34、#include else if(x>0&&x<=10)y=x; else if(x>10&&x<=20)y=10; else if(x>20&.8.x<40)y=-0.5*x+20; else y=-1; if(y!=-1)printf(\"%f\",y); else printf(\"error\\n\"); return 0; } 35、float root(float x1,float x2) {int i;floatx,y,y1; y1=f(x1); do {x=xpoint(x1,x2); y=f(x); if(y*y1>0){y1=y;x1=x;} Else x2=x; } while(fabs(y)>=0.0001); return(x); } 因篇幅问题不能全部显示,请点此查看更多更全内容