一、单项选择题(每小题2分,共20分)
第一章
D 1.下列说法中错误的是( )。
A、程序的执行总是从主函数开始
B、主函数可以调用任何非主函数的其它函数 C、任何非主函数可以调用其它任何非主函数 D、程序可以从任何非主函数开始执行
C 2.若a=4,b=7,则输出4*7=28的语句是( )。 A、printf(“a*b=%d\\n”a+b); B、 printf(“a*b=%d\\n”,a*b);
C、printf(“%d*%d=%d\\n”,a,b,a*b); D、 printf(“%d*%d=%d\\n”,a+b); 第三章
C 1. C语言中int型数据占2个字节,则long型数据占(C )个字节。
A、1 B、2 C、4 D、8 D 2.若C中int型数据占2个字节,则double型数据占(D )个字节。
A、1 B、2 C、4 D、8 B 3.若a为整型变数,则以下语句(B )。 a=-2L;
printf(“%d\\n”,a);
A、赋值不合法 B、输出-2 C、输出不确定值 D、输出2
D 4. 若int型数据占2个字节,则下列语句的输出为(D )。
int k=-1;
printf(“%d,%u\\n”,k,k); A、-1,-1 B、-1,32767 C、-1,32768 D、-1,65535 B 5. 下列程序的输出是(B )。
#include
{printf(“%d\\n”,null);}
A、0 B、变量无定义 C、-1 D、1 C 6.若x为float型变数,则以下语句: x=223.82748;
printf(\ 运行结果为(C )。
1
A、223.8 B、223.82 C、223.83 D、223.827 D 7. 设有语句int a=3;则执行语句a+=a-=a*a后,变量a 的值是(D )。
A、3 B、0 C、9 D、-12 第四章
A 1. 执行语句:a=5,b=8;printf(“%d\\n”, c=a/b); 后输出的值为(A )。
A、0 B、0.6 C、0.625 D、0.625000 B 2. 下列语句(B )。
int k=8567;
printf(“|d|\\n”,k);
A、输出格式描述符不合法 B、输出为|008567| C、输出为|8567 | D、输出为|-08567| C 3. 下列语句(C )。
int k=8567;
printf(“|%-06d|\\n”,k);
A、输出格式描述符不合法 B、输出为|008567| C、输出为|8567 | D、输出为|-08567|
C 4. 若ch为字符型,k为整,则执行下列语句后的输出为(C )。 ch=’a’; k=12;
printf(“%x,%o,”,ch,ch,k); printf(“k=%%d\\n”,k)
A、因变量类型与格式描述符的类型不匹配,输出无定值; B、输出项与格式描述符个数不符,输出为0或不定值; C、61,141,k=%d; D、61,141,k= D 5. 若k,g为int型变数,则下列语句的输出为(D )。
k=017; g=111;
printf(“%d,%x\\n”,++k,g++); A、15,6f B、16,70 C、15,71 D、16,6f B 6. 有以下程序I和II,判断它们的输出(B )。 I #include
{int a=4,b=7;
printf(“%d\\n”,(a=a+1,b+a,b+1));
2
}
II #include
{int a=1,b=2;
printf(“%d\\n”,a=a+1,a+b,b+1)); }
A、I输出5,II输出2 B、I输出8,II输出2 C、I输出5,II输出3 D、I输出8,II输出3 A 7. 下列程序的输出为(A )。 #include
{int m=7,n=4;
float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf(“%f\\n”,x); }
A、27.000000 B、27.500000 C、28.000000 D、28.500000 第五章
D 1. 在C语言中,能代表逻辑值“真”的是(D )。 A、true B、大于0的数 C、非0整数 D、非0的数 C 2. 若给定表达式(M)?(a++):(a--),则其中表达式M(C )。
A、和(M= =0)等价 B、和(M= =1)等价 C、和(M!=0)等价 D、和(M!=1)等价 D 3. 在C语言的if语句中,用作判断的表达式为(D )。
A、关系表达式 B、逻辑表达式 C、算术表达式 D、任意表达式 D 4. 以下程序的输出是(D )。
#include
{int i,j,k,a=3,b=2;
i=(--a= =b++)?-- a:++b; j=a++;k=b;
printf(“I=%d,j=%d,k=%d\\n”,i,j,k); }
A、i=2,j=1,k=3 B、i=1,j=1,k=2 C、i=4,j=2,k=4 D、i=1,j=1,k=3
3
B 5. 执行下面的程序: main() {int x;
scanf(\
if (x++>5) printf(\ else printf(\ }
若输入5,则输出为(B )。 A、6 B、-6 C、5 D、-5 6. 有程序段: int a,b; a=9; b=10;
则表达式:(++a= =b--)?--a:++b的值为(B )。 A、8 B、9 C、10 D、11 ●7. 假设所有变量都是整型,则表达式: a=2,b=5,a>b?a++:b++,a+b 的值为(B )。
A、7 B、8 C、9 D、2 8. 下面程序的输出为(A )。
#include
a=10;b=50;c=30; if(a>b) a=b, b=c;c=a;
printf(“a=%d,b=%d,c=%d\\n”,a,b,c); }
A、a=10,b=50,c=10 B、a=10,b=30,c=10 C、a=50,b=30,c=10 D、a=50,b=30,c=50 C 9. 下面程序运行后输出的结果是( )。
main() { int n;
for(n=0;n<3;n++) switch(n)
{ case 1: printf(“%d”, n); case 2: printf(“%d”, n); default: printf(“%d”, n) }
4
}
A、012 B、120 C、011122 D、012020 10. 下面程序的输出是(B )。
#include
{ int x=1,y=0,a=0,b=0; switch(x) { case 1:
switch(y)
{ case 0: a++;break; case 1: b++;break; }
case 2: a++;b++;break; case 3: a++;b++; }
printf(“a=%d,b=%d\\n”,a,b); }
A、a=1,b=0 B、a=2,b=1 C、a=1,b=1 D、a=2,b=2 第六章
1. 下面循环的执行次数是(4 )次。 n=0;
while(++n<5)
{ printf(\
2. C语言中,用于结构化程序设计的三种基本结构是(A )。
A、顺序结构、选择结构、循环结构; B、if、switch、break; C、for、while、do- while; D、if、goto、continue:
3. 在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为(A )。 A、0 B、1 C、true D、非0
4. 在C语言中,为了结束do-while语句构成的循环,while后一对圆括号中表达式的值应该为(A )。 A、0 B、1 C、true D、非0 5. 若k为整型,则while循环执行(C )。 k=10;
5
while(k=0) k=k-1;
A、10次 B、无限次 C、0次 D、2次 6. 若k为整型,则while循环执行(B )。
k=2;
while(k= =0) printf(“%d”,k),k--; printf(“\\n”);
A、无限次 B、0次 C、1次 D、2次 7. 下面程序执行后,k的值是(C )。 #include
int k=2; while(k==0)
printf(\ printf(\ printf(\}
A、0 B、1 C、2 D、-2 8. 下面程序的输出为(B )。
#include
{int i,j,x=0; for(i=0;i<2;i++) {x++;
for(j=0;j<=3;j++) {if(j%2) continue; x++; } x++; }
printf(\ }
A、x=4 B、x=8 C、x=6 D、x=12 第七章
1. 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值,则在下划线处应填入的是(D )。 #define N 10
void arrin(int x[N])
6
{ int k=0; while(k scanf (“%d”, ); } A、x+k B、&x[k+1] C、x+(k++) D、&x[k++] 2. 以下能正确定义数组并正确赋值的语句是(D )。 A、int N=5,a[N][N]; B、int b[1][2]={{1},{3}}; C、int c[2][]={{1,2},{3,4}};6 D、int d[3][2]={{1,2},{34}}; 3. 不正确的字符串赋值或赋初值方式是(C )。 A、 char *str; str=”string”; B、 char str[7]={‘s’,’t’,’r’,’i’,’n’,’g’}; C、 char str[10]; str[10]=”string”; D、 char str1[]=”string”,str2[]=”12345678”; strcpy(str2,str1); 4. 若有以下定义和语句,则输出结果是(C )。 char s[12]=”a book!”; printf(“%d”, strlen(s)); A、9 B、8 C、7 D、6 5. 若有以下定义和语句,则输出结果是(B )。 char s[]=”a book!”; printf(“%d”, sizeof(s)); A、9 B、8 C、7 D、6 第八章 C 1. C语言可执行程序的开始执行点是( )。 A、第一条可执行语句 B、第一个函数 C、main函数 D、包含文件中的第一个函数 C2. C语言中规定,若对函数类型未加显示说明,则函数的隐含类型为( )。 A、void B、double C、int D、char C 3. C语言程序中,当调用函数时( )。(不确定) A、实参和形参各占一个独立的存储单元 B、实参和形参可以共享存储单元 C、可以由用户指定是否共享存储单元 D、由计算机系统自动确定是否共享存储单元 C 4. 下面程序的输出结果为( )。 #include 7 void main() {int f(); int i=2,k; k=f(i,++i); printf(\} int f(int a,int b) {int c; c=a; if(a>b) c=1; else if(a==b) c=0; else c=-1; return(c); } A、2 B、1 C、-1 D、0 A 5. 下面程序的输出结果是( )。 #include {int func(int a,int b); int k=4,m=1,p; p=func(k,m); printf(\ p=func(k,m); printf(\ } int func(int a,int b) {static int m,n=2; n+=m+1; m=n+a+b; return(m); } A、8,17 B、8,16 C、8,20 D、8,8 第九章 C 1.以下叙述正确的是( )。 A、在程序的一行上可以出现多个预处理命令行 B、预处理行是C的合法语句 C、被包含的檔不一定以 .h 作为后缀 8 D、在以下定义中C R是称为“宏名”的标识符 #define fc 4566 CR B 2. 在“檔包含”预处理语句的使用形式中,当#include后面的文件名用“”(双引号)括起时,寻找被包含檔的方式是( )。 A、直接按系统设定的标准方式搜索目录 B、先在源程序所在目录搜索,再按系统设定的标准方式搜索 C、仅仅搜索源程序所在目录 D、仅仅搜索当前目录 C 3.以下叙述中不正确的是( )。 A、预处理命令行都必需以#开始 B、在程序中凡是以#号开始的语句行都是预处理命令行 C、程序在执行过程中对预处理命令行进行处理 D、在下是正确的宏定义 #define IBM_PC C 4. 以下程序的运行结果是( )。 #define PT 3.5 #define S(x) PT*x*x main() { int a=1,b=2; printf(“%4.1f\\n”,S(a+b)); 3.5*a+b*a+b } A、14.0 B、31.5 C、7.5 D、10.5 C 5.下面程序运行后输出的结果 )。 #include\ #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=8*MIN(a,b); printf(\} A、10 B、20 C、80 D、120 A 6.下面程序运行后输出的结果是()。 #include\ 9 #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=8*MIN(a,b)-5; printf(\} A、75 B、15 C、20 D、155 C 7.下面程序运行后输出的结果是( )。 #include\ #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=MIN(a+b,a-b)*8; printf(\} A、10 B、20 C、-80 D、-10 第十章 1.若有以下定义和语句,且0≤i≤10,则对数组元素的错误引用是(C )。 A、*(a+i) B、a[p-a] C、p+i D、p[i] 2. 若有以下定义和语句,且0≤i≤10,则对数组元素的正确引用是(D )。 A、&(a+1) B、a++ C、&p D、&p[i] 3.以下程序的输出结果是(A )。 char *alpha[6]= {“ABCD”,”EFGH”,”IJKL”,”MNOP”,”QRST”,”UVWXYZ”}; char **p; main() {int k; p=alpha; for(k=0;k<4;k++) printf(“%c”,*(p[k])); printf(“\\n”); } A、AEIM B、BFJN C、ABCD D、DHLP 10 4.下面程序的输出结果是(D )。 #include {int a[]={1,2,3,4,5,6},*p; p=a; *(p+3)+=2; printf(“%d,%d\\n”, *p, *(p+3)); } A、0,5 B、1,5 C、0,6 D、1,6 D 5.若由以下说明和语句,那么对C数组元素的正确引用是( )。 int c[4][5], (*cp)[5]; cp = c; A、cp+1 B、(cp+3) C、*(cp+1)+3 D、*(*cp+2) 第十一章 1. 共享体变数中起作用的成员是(C )。 A、 第一次存放的成员; B、 中间存放的成员; C、 最后一次存放的成员; D、 所有的成员。 2. 若有以下程序段,则值为101的表达式是(C )。 struct wc {int a; int *b; }*p; int x0[]={11,12},x1[]={31,32}; struct wc x[2]={100,x0,300,x1}; p=x; A、*p->b B、p->a C、++p->a D、(p++)->a D 3.如果在C程序中有main( float argc, char *argv[]),那么类型定义错误的参数是( )。 A、argv B、argv[] C、argc,argv[] D、argc B 4.若程序中由下面的说明和定义: struct stt { int x; char b; } struct stt a1, a2; 则会发生的情况是( )。 11 A、程序将顺利编译、连接、执行 B、编译出错 C、能顺利通过编译、连接,但不能执行 D、能顺利通过编译,但连接出错 C 5.下面程序的输出是( )。 #include { unsigned int a=32,b=66; printf(“%c\\n”,a|b); } A、66 B、98 C、b D、B 第十二章 1.下面程序的输出是(D )。 #include {unsigned int a=3,b=10; printf(\} A、1 B、5 C、12 D、13 3. 若int型是2个字节,下面程序运行后,输入331,则输出结果为(C )。 #include unsigned a,b,c,d; printf(\ scanf(\ b=a>>4; c=~(~0<<4); d=b&c; printf(\} A、331,217 B、13,15 C、15,13 D、217,331 4.若int型是2个字节,下面程序段运行后,若输入:a=157653,n=3,则输出的值为(A )。 main() { unsigned a,b,c,d; 12 int n; scanf(\b=a<<(16-n); c=a>>n; d=c|b; printf(\} A、75765 B、35765 C、13765 D、30000 D 5. 表达式11&10的结果用二进制表示为( )。 A、11 B、3 C、1 D、10 B 6.表达式9|5 的结果十进制表示为( )。 A、12 B、13 C、14 D、15 第十三章 1. C语言中,文件由(D )。 A、记录组成 B、由数据行组成 C、由数据块组成 D、由字符(字节)序列组成 2. C语言中的文件类型只有(B )。 A、索引文件和文本文件 B、ASCII文件和二进制文件两种 C、文本文件一种 D、二进制文件一种 3. C语言中档的存取方式(C )。 A、只能顺序存取 B、只能随机存取 C、可以顺序存取,也可以随机存取 D、只能从檔开头进行存取 二、程序填空题 第三章 1.要使下面程序的输出形式为:12+10=22,-24+10=-14,请填空。 #include int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(\【1】+【2】=%d,【3】+【4】=%d\\n\【5】); } 13 选择答案:【1】%d 【2】%d 【3】%d 【4】%d 【5】b,u,d 第四章 2. 下面程序不借助任务中间变量把a,b的值进行交换。请填空。 #include printf(“Input a,b:”); scanf(“%d,%d”, 【1】 &a,&b ); a+=【2】 b ;b=a- 【3】 b ;a- = 【4】 b ; printf(“a=%d,b=%d\\n”, 【5】 a,b ); } 第五章 3. 下面程序输入一个学生的生日(年:y0,月:m0,日:d0),并输入当前日期(年:y1,月:m1,日:d1)。求出该学生的实足年龄。请填空。 #include {int age,y0,m0,d0,y1,m1,d1; printf(\输入生日日期(年、月、日)\ scanf(\【1】 &y0,&m0,&d0 ); printf(\输入当前日期(年、月、日)\ scanf(\【2】 &y1,&m1,&d1 ); age=y1-y0; if(m0 【3】 > m1) age--; if ((m0 【4】 = = m1)&&( 【5】 d0 > d1 )) age--; printf(\ } 4. 下面程序输出乘法九九表。 #include for(i=1;i<【1】 10 ;i++) printf(\ printf(\ for(i=1;i<【2】 10 ;i++) for(j=1;j<10;j++) 14 printf((j= =【3】 9 )?\【4】\\n \【5】i*j ); } 第六章 5. 下面程序从读入的整数据中,统计大于0的整数个数i和小于0的整数个数j,当输入0时,程序运行结束。请填空。 #include {【1】 int n,i,j; printf(“Input int numbers,with 0 to end:”); i=j=0; scanf (“%d”,&n); while (【2】 n!=0 ) { if (n>0) i=【3】 i+1 ; if (n<0) j=【4】 j+1 ; 【5】 scanf (“%d”, &n) ; } printf(“i=%d,j=%d\\n”,i,j ); } 第七章 1. 设数组a和数组b中分别有an和bn个有序数,程序把数组a和数组b按由小到大的顺序合并到数组c中。请填空。 #include {int a[10]={1,2,5,8,9,10},an=5; int b[10]={1,3,4,8,12,18},bn=5; int i,j,k,c[20],max=9999; /*在a,b数组的后面都放上一个max(大于数组中所有的数),作为结束标志*/ a[an+1]=b[bn+1]=【1】 max ; i=j=k=0; /*若a[i],b[j]中有一个不等于max,则尚有数未合并到c数组中,循环继续进行*/ while((a[i]!=max)||(b[j]!=max)) if(a[i] /*如果a[i] for(i=0;i 15 rintf(\printf(\} 2. 从键盘输入一个3行4列矩阵的数据,然后求其最大数。请填空: main() { int 【1】 i,j , max, a[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) scanf(\【2】 &a[i][j] ) ; 【3】 max=a[0][0] ; for(i=0;i<3;i++) for(j=0;j<4;j++) if( max 3. 下面程序求出数组a中所有素数的和。请填空。 #include #include 【1】 {int isprime(int x); int i,a[10],sum=0; printf (\:\ for(i=0;i<10;i++) scanf(\【2】 &a[i]) ; for(i=0;i<10;i++) if(isprime( 【3】 a[i] )= =1) {printf(\ sum+=a[i]; } printf(\ } int isprime(int x) {int i,k; k=sqrt(x); for(i=2;i<=k;i++) if(x%i= =0) break; if( 【4】 x>=2 &&(i>=k+1)) return 【5】 1 ; 16 else return 0 ; } 第十章 4. 下面程序建立一个主次对角在线的元素为1,其余元素为0的5阶方阵并输出。请选择填空。 #include {int a[5][5]={0},*p[5],i,j; for(i=0;i<5;i++) p[i]=【1】 &a[i][0] ; /*使指针数组p指向二维数组每行首地址*/ for(i=0;i<5;i++) {*(p[i]+【2】 i )=1; /*使主对角在线元素为1*/ *(p[i]+5-【3】 (i+1) )=1;/*使次对角在线元素为1*/ } for(i=0;i<5;i++) { for(j=0;j<5;j++) printf(\【4】 p[i][j] ); 【5】 printf(\ } } [1] A、&a[i][0] B、&a[i][1] C、&p[i] D、 &a[0][i] [2] A、0 B、1 C、i D、(i+1) [3] A、0 B、1 C、i D、(i+1) [4] A、a[i][i] B、a[j][j] C、p[i][i] D、p[i][j] [5] A、putchar(“\\n”); B、putchar(‘\\n’); C、putchar(‘\\0’); D、printf(“’\\n’); 5. 下面程序交换a,b的值,请填空 #include \ void swap(int *p1,int *p2) {int temp ; 【1】 temp =*p1; *p1=*p2; *p2=【2】 temp ; 17 } void main() {int a,b; int *p_1,*p_2; printf(\ scanf(\ p_1=【3】 &a ; p_2=【4】 &b ; if(a 6. 若一个字符串顺读和倒读都一样,则此字符串是“回文”,如LEVEL,下面程序判断输入的字符串是否是“回文”。请填空。 #include char s[81],*pi,*pj; int n; gets(s);n=strlen(s); pi=【1】 s ;pj=【2】 s+n-1 ; /*pi指向串首,*pj指向串尾*/ while(*pi= =' ') 【3】 pi++ ; /*跳过字符串的前导空格*/ while(*pj= =' ') 【4】 pj-- ; /*跳过字符串最后面的空格*/ while((【5】 pi if(pi } 第十三章 7. 从键盘输入一些字符存贮到磁盘文件中,直到输入一个\为止。 #include \ main() {FILE *fp; 18 char ch, filename[10]; scanf(\ if((fp=【1】 fopen (filename, 【2】 \=NULL) {printf (\ exit(0); } ch=【3】 getchar(fp) ; while(ch!=【4】 '#' ) {fputc (ch, fp); ch=getchar(fp); } 【5】 fclose(fp) ; } 8. 从磁盘文件E:\\D.txt中顺序读入字符,并显示在屏幕上。 #include FILE 【1】 *fp ; char ch; fp=fopen(\【2】 E:\\\\D.txt\ ch=fgetc(fp); while(ch!= 【3】 EOF ) { putchar(ch); ch=【4】 fgetc(fp) ; } printf(\ 【5】 fclose(fp ) ; } 三、判断题 第一章 1. √C语言可以直接访问物理位元元址。 2. √C语言既可以用来写系统软件,也可以用来写应用软件。 19 3. √C中的变量必须“先定义,后使用”,函数也不例外。 4. √一个C源程序只能有一个main()函数。 5. √一个C源程序可以由一个main()函数和若干个其它函数组成。 6. ×C程序中和每一行就是一个语句。 第三章 7. ×min和id-s都是合法的标识符。 8. √在某种意义上,char和int通用。 9. √若a=2,b=-4;则执行a||b++ 后,b为-4。 10. √在C程序中“%”是只能用于整数运算的运算符,而“/”是既可以用于整数运算又可以用于实数运算的运算符。 11. ×用户标识符中可以出现下划线和中划线(减号)。 12. ×在C中 变量不定义也可以使用。 13. √表达式 ’a’ 和 “a” 是不同的,前者长度为1,后者长度为2。 14. √自增自减运算符++,--可以用于int型、float型和double型资料。 15. √在某种意义上,char和int通用。 16. ×自增运算符和自减运算符的结合方向也是“自左向右”。 第四章 17. ×格式字符%md中的m只能为正,不能为负。 第五章 18. ×在C的if语句中,用作判断的表达式只能是关系表达式或逻辑表达式。 19. ×若有int a,b; 则a=(b*b>b)的值是1。 20. ×若a=2,b=-4; 则执行a||b++ 后,b为-3。 21. √若a=7,b=5; 则执行a&&b++ 后,b为6。 22. √在C中能代表逻辑值“假”的是0。 23. ×若有int x,y,z; x=y=z=1;则执行++x&&++y&&++z后,x,y,z的值分别为2,1,1。 第六章 24. ×continue语句可用于switch语句,也可用于for、while和do循环语句中。 20 25. √break语句可用于switch语句,也可用于for、while和do循环语句中。 第七章 26. √数组类型不是C的基本数据类型,而是一种构造类型 。 27. √数组名代表数组的起始地址。 28. ×若有int a[10]={1,2,3,4,5,6,7,8,9,10}; a=a+1; 则这时a代表元素2的位元元址。 第八章 29. ×C程序中,当调用函数时,由实参把值传递给形参,调用结束后,再由形参把值传回给实参。 30. √用数组名作为实参时,把实参数组的起始地址传递给形参数组,因此形参数组和实参数组占用同一段内存单元,改变形参数组的值,也就改变了实参数组的值。 31. √若有static int a[10]; 则a数组的10个元素的值都是0。 32. ×全局变量的作用域一定比局部变量的作用域范围大。 33. ×函数的实参可以传递给形参,形参也可以传递给实参。 第九章 34. √#define命令是在编译之前处理的。 35. ×一个包含命令include可以包含几个头檔。 第十章 36. √若定义char *str;则str=\是正确的。 37. ×若定义char str[]; 则str=\是正确的。 38. √数组名是指标常量,不需要也不能为其赋值;指针是变量,使用前需对其赋值。 39. ×C中*&a是取变量a的地址。 第十一章 40. √可以用typedef声明各种类型名,但不能用它来定义变量。 41. ×结构类型变量所占内存长度等于成员的长度;而共享体类型变量所占用的内存长度是各成员的内存长度之和,每个成员分别占用其自己的内存单元。 第十二章 21 42. √有unsigned int a=16;a=a>>2;则a的值是4。 43. √有unsigned int a=16;a=a<<2;则a的值是64。 44. ×一个无符号整数各数字往左移动2位后,一定是原数的4倍。 第十三章 45. ×C语言中,feof函数用来判断即将读入的是否是文件结束标志,它可用于二进制文件,但不能用于文本文件。 46. ×C语言的文件存取方式只能是顺序存取,不能随机存取。 47. √C语言中rewind函数使位置指针回到文件的开头位置,而fseek函数使位置指针移到指定的位置。 四、填空题 1. Turboc2中,程序运行后,按下 alt+F5键可以看到运行结果。 2. 做任何事情都有一定的步骤。为解决一个问题而采取的方法和步 骤,就称为 算法 。 3. 算法的特性中包含有 0或多个输入 输入和有一个或 多个输出。 4. C语言中,二维数组中的元素在内存中的排列优先级是:行优先。 5. 若想对一个存储单元清零,只要找一个二进制数,其中各个位符合以下条件:原来的数中为1的位新数中相应的数为0。然后使二者进行&运算,即可达到清零目。 6. 连接(linker):将目标模块和其它一些必要的功能模块装配在一起,生成可执行档,执行程 序文件后缀为 exe 。 7. 具体说,采取以下方法来保证得到结构化的程序:自顶向下,逐步 细化 ,模块化设计,结构化编码。 8. 071∧052 = 19 。(071 052 是8进制数) 9. 有一数01010100, 想把其中左面第3,4,5,7,8位保留下来,运算如下: 01010100(84) & 00111011(59) = 00010000(16) |a|?bc10. 写出数学表达式的C语言表达式。 a?bsqrt(fabs(a)+b*c)/(a+b) 。 22 第一章 1.C程序总是从(主函数开始 )执行的,而不管其在程序的前面、中间或后面。 2.一个C源程序可以由一个(main )函数和若干个其它函数组成。 3.76U表示76是(无符号整数 ),而3F表示3是(浮点数 )。 4.若'a' 的ASCII码是97,则字符'D'的ASCII码是(68 )。 5.若int型是2个字节,unsigned a=65535,b;b=a+1;则按“%u”格式输出b的值为(0 )。 6.将一个字符常量放到一个字符变量中去,实际上并不是把该字符本身放到内存单元中去,而是把该字符的(ASCII码 )放到存储单元中。 7.C规定了各种运算符的结合方向,(自左至右 )的结合方向称为左结合性,(自右至左 )的结合方向称为右结合性。 8.逗号表达式:表达式1,表达式2,的求解过程是:(先求解表达式1,再求解表达式2 ),整个表达式的值是(表达式2 )的值。 第四章 9. putchar('b'+'M'-'m')的值是(’B’ )。 10.对字符变量,可以用格式符(%c )按字符输出,也可用(%d )按整数输出。 第五章 1.对逻辑表达式a&&b&&c,只要a为(假 ),就不必判别b和c,如果a为(真 ), b为(假 ),就不必判别c 。 第六章 2.下面循环的执行次数是(4 )次。 n=0; while(++n<5) { printf(\第七章 23 9.对字符数组,可以用格式符(%c )将字符逐个输入输出,用格式符(%s )将整个字符串一次输入输出。 10.用语句scanf(“%s”,str); 输入字符串,(不能 )接收空格字符。 11.用语句gets(str )输入字符串,(能够 )接收空格字符。 12. C语言中,数组名代表数组的(起始地址 ),如果在scanf函数中的输入项是字符数组名,则(不能 )在数组名前加地址运算符&。 13.函数strcat(str1,str2)的作用是(把字符串str2连接到字符串str1的后面 ),结果存放在字符数组(str1 )中。 14. char str[]=”abc”,则strlen(str)的值是(3 ),sizeof(str)的值是(4 )。 15. char str[]=”abc\\0def”,则strlen(str)的值是(3 ),sizeof(str)的值是(8 )。 第八章 16.调用函数时,才给形参(分配 )存储单元,调用结束后,形参单元被(释放 ),而实参单元仍保留原值。 17.在C中调用函数前,对被调用的函数要作类型说明,但如果函数的类型是(整型 ), 则可以不加说明。 第十章 18.一个变量的(地址 )称为变量的指针,一个变量专门用来存放另一个变量的(地址 ),则称该变量为指针变量。 19.若有char *a=”Computer”,则a中存放的是( 字符串的起始地址 )。 第十一章 20.有下面的定义: struct student {char name[8]; char sex; int age; }stu1, stu2; 则,sex占(1 )个字节, stu1占(11 )个字节。 第十二章 21. C语言中,2^4的值是(6 )。 24 第十三章 22. feof函数可用于(二进制 )文件和(ASCII码 )檔,它用来判断即将读入的是否为文件(结束 )标志,若是,函数值为真。 五、写出程序程序运行后的结果(每小题4分,共20分) 1.写出下面程序输出的结果 main() {int n=0; while(n++<=1) printf(\ printf(\} 结果:1 2 3 2. 写出下面程序运行后的结果 main() {int i,s; s=0; for(i=1;i<=10;i=i+2) s+=i; printf(\} 结果:s=25 3.写出下面程序运行后的结果 main() {int a,b,i; a=1; b=0; for(i=1;i<=5;i++) {a*=i; b+=a; } printf(\} 结果:a=120,b=153 第七章 4.写出下面程序运行后的结果: main() {int i,j,t; 25 static int a[6]={1,3,4,5,2,6}; for(i=0, j=5; i } 结果:6 2 5 4 3 1 5.写出下面程序运行后的结果: void px(int a[],int n) { int i,j,k,t; for(i=0;i for(j=i+1;j t=a[k];a[k]=a[i];a[i]=t; } } void main() { int a[5]={1,4,-3,5,-8},i; px(a,5); for(i=0;i<5;i++) printf(\ printf(\} 结果:-8 –3 1 4 5 6.写出下面程序运行后的结果: #include void main() {int i, j; static int a[4][4]={{3,5,6},{2,1,4},{8,7,1}}; for(i=0; i<3; i++) for(j=0; j<3; j++) {a[i ][3]+=a[i][j]; a[3][j ]+=a[i][j]; a[3][3]+=a[i][j]; } for(i=0; i<4; i++) 26 {for(j=0; j<4; j++) printf(\ printf(\ } } 结果: 3 5 6 14 2 1 4 7 8 7 1 16 13 13 11 37 7.写出下面程序运行后的结果: main() {int i, j, max, row, col; static int a[3][3]={{7,5,6},{2,9,4},{4,1,3}}; for(i=0; i<3; i++) { max=a[i][0]; row=i; col=0; for(j=1; j<3; j++) if(a[i][j]>max) {max=a[i][j]; row=i; col=j; } printf(\ } } 结果: a[0][1]=7 a[1][1]=9 a[2][0]=4 第十章 8.写出下面程序运行后的结果: #include \ void cp_str(char *q1,char *q2) { while(*q1) q1++; while(*q2) *q1++=*q2++; *q1='\\0'; } void main() { char a[80]=\ char b[]=\ 27 char *p1,*p2; p1=a; p2=b; cp_str(p1,p2); printf(\} 结果: a=TeacherStudent b=Student 第十一章 9.写出下面程序运行后的结果: #include w.c[0]='A';w.c[1]='a'; printf(\} 解:上面结构如下图: ‘a’(97) ‘A’(65) 01100001 01000001 w.c[1] w.c[0] w.a w.a是整型,占2个字节,其值为:01100001 01000001 从右往左3位一节,转换为八进制数,结果为:60501 10.写出下面程序运行后的结果: #include { enum team{qiaut,cubs=4,pick,dodger=qiaut-2}; printf(“%d,%d,%d,%d\\n”,qiaut,cubs,pick,dodger); } 结果:0,4,5,-2 28 第十二章 11.写出下面程序的输出结果。 #include {char a=9,b=020; printf(“%o\\n”, ~a&b<<1); } 结果:040 12.阅读以下程序,给出正确的运行结果: #i nclude {int x; int y; }in; int a; int b; }e; e.a=1; e.b=2; e.in.x=e.a*e.b; e.in.y=e.a+e.b; printf(\printf(\} 该程序的运行结果是:4,8 4,4 六、编程序题 1.编一程序,求a=123,b=456的和sum,输出形式为:123+456=579。 main() {int a,b,sum; a=123; b=456; sum=a+b; printf(\} 29 2. 编一程序从键盘输入一个时间t,求h=1/2gt的值。输出格式2 为:t=?,h=?。要求保留一位小数。 #include {float t,h; printf(“Input t:”); scanf(“%f”, &t); h=1.0/2*G*t*t; printf(“t=%.1f, h=%.1f\\n”,t,h); } 3.编一程序求1!+3!+5!+7!+9!。 #include int i,j,t,s; s=0; for(i=1;i<=9;i=i+2) { t=1; for(j=1;j<=i;j++) t=t*j; s=s+t; } printf(\} 4.编一程序求1+(1+2)+(1+2+3)+?+(1+2+3+?10)。解法1: #include int i,j,t,s; s=0; for(i=1;i<=10;i++) { t=0; 30 for(j=1;j<=i;j++) t=t+j; s=s+t; } printf(\} 解法2: #include int i,t,s; s=0; for(i=1;i<=10;i++) { t=t+j; s=s+t; } printf(\} 5.一个三位的素数,若其个位和百位数字相同,则这个数叫做回文数,打印这些回文数。 解法1:不用函数 #include int n,i,j,x,y,z,loop; for(n=101;n<=999;n++) { x=n/100; y=(n-x*100)/10; z=n; j=sqrt(n); for(i=2;i<=j;i++) if(n%i==0) break; if(i>=j+1) loop=1; else loop=0; if( (x= =z)&&loop= =1 ) printf(\ 31 } printf(\ } 解法2:用函数 #include int ZS(int n) /*判素数的函数*/ { int z,i,j=sqrt(n),temp; for(i=2;i<=j;i++) if(n%i==0) break; if(i>=j+1) temp=1; else temp=0; return temp; } int HWS(int n) /*判回文数的函数*/ { int x,y,z,loop,c; x=n/100; y=(n-x*100)/10; z=n; c=ZS(n); if( (x= =z)&& c ) loop=1; else loop=0; return loop; } main() { int n; for(n=100;n<=999;n++) if(HWS(n)) printf(\printf(\} 6.用递归方法编程序求解习题6.10—猴子吃桃子问题。#include 32 { int c; if(n==1) c=1; else c=2*(num(n-1)+1); return c; } void main() { printf(\} 7.用选择法,对十个整数按从小到大的顺序排列(排序用函数实现)。 void sort(int a[],int n) { int i,j,k,t; for(i=0;i k=i; for(j=i+1;j void main() { int i,a[10]={1,3,2,4,5,6,9,0,8,7}; sort(a,10); for(i=0;i<10;i++) printf(\ printf(\} 8.编一程序,查找输入的N个字符串中最长的那个字符串。 #include 33 {char str[N][81],*sp; int k; for(k=0;k for(k=1;k printf(\最长的那个字符串是:\\n%s\\n\ printf(\最长的那个字符串的长度是:%d\\n\} 9.编程序,设二进制数a=00101101,编程序使a的高4位取反,低4位不变,求出这个结果 。 #include main() {unsigned int a=055,b,c,d,e; b=~0<<4; c=a^b; d=~(~0<<8); e=c&d; printf(\ } 10.函数原型说明为int mystrlen(char *s);,其功能是测试字符串s的长度,编制该函数并用相应主函数对其进行测试。 #include { int mystrlen(char *s); char str[80]; gets(str); printf(“%d\\n”, mystrlen(str)); } int mystrlen(char *s) { int len=0; while (*s++) len++; return len; } 34 七、程序分析题 1. 程序1如下: #include { int i,j,k,t,a[10]; printf(\ for(i=0;i<10;i++) scanf(\ for(i=0;i<10;i++) { k=i; 【1】 for(j=i+1;j<10;j++) if(a[j]>a[k]) k=j; 【2】 if(k!=i) { t=a[i]; a[i]=a[k]; a[k]=t; } 【3】 } for(i=0;i<10;i++) printf(\ printf(\} 语句【1】的所用是:假设无序序列中最大的数的下标为第一个数,其下标为i 语句【2】的所用是:找出无序序列中最大的数的下标 语句【3】的所用是:把最大的数与无序序列的第一个数交换 2. 程序2如下: #include \void main() { int i; int f[20]={1,1};【4】 for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; 【5】 for(i=0;i<20;i++) { if(i%5==0) printf(\ printf(\ } 【6】 printf(\} 语句【4】的所用是:初始化Fibonacci数列的前两个数为1 语句【5】指的for语句的所用是:循环求出Fibonacci数列的 35 每一项 语句【6】指的for语句的所用是:以每行5个整数每个整数占12格的格式输出Fibonacci数列 3. 程序3如下: #include { int a,b, temp; 【7】 printf(“input the data a and b:”); scanf(“%d %d”,&a,&b); printf(“ %d %d”,a,b);【8】 printf(“change a and b: ”); temp=a; a=b; b=temp; printf(“input the data a and b:”); printf(“%d %d”,a,b); 【9】 printf(“\\n”); } 【7】变数temp的所用是:中间变数 语句【8】和语句【9】的结果一样吗?:不一样 为什么?:因为8是原样输出9是在它们被交换了之后的输出 4. 程序4如下: #include \ void funstr(char *q1,char *q2) { while(*q1) q1++; 【10】 while(*q2) *q1++=*q2++; 【11】 *q1='\\0'; 【12】 } void main() { char a[80]=\ char b[]=\ char *p1,*p2; p1=a; p2=b; funstr(p1,p2); printf(\【13】 } 语句【10】的所用是: 令q1指向字符串a的末尾 36 语句【11】的所用是: 把b字符串连接到a字符串后面 语句【12】的所用是:在连接后的字符串末尾加上结束符 语句【13】输出的结果是: a=Teacher.Student. b=Student. 5. 阅读程序,根据要求分析程序。 #include \void main() { int a,b,c,x; scanf ( “%d” , &x ); { a=x/100; 【1】 b=(x-a*100)/10; 【2】 c=x;【3】 } printf(\} 语句【1】的所用是: 把x百位及以上的数赋值给a 语句【2】的所用是: 把x十位上的数赋给b 语句【3】的所用是: 把个位上的数赋给c 6. 阅读程序,根据要求分析程序。 #include \void main() { int a[11]; int i,j,t; printf(\ for (i=1; i<11; i++) scanf (\ printf(\ for(j=1;j<=9;j++) for(i=1;i<=10-j;i++) if(a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; }【4】 printf(\ for(i=1;i<11;i++) printf(\【5】 printf(\ getch(); } 语句【4】的作用是: 如果相邻两数前一个大于后一个则交换 37 它们 语句【5】输出的结果和输入数组a的有什么不同: 输出之后的数组是有序的 7. 阅读程序,根据要求分析程序。 #include { char str1[80],str2[80]; int i,j; printf(\输入字符串 str1: \gets(str1); printf(\输入字符串 str2: \gets(str2); i=0,j=strlen(str1); while(str2[i]!='\\0') str1[j++]=str2[i++];【6】 str1[j]='\\0';【7】 puts(str1);【8】 } 语句【6】的所用是:把str2连接到str1的后面 语句【7】的所用是: 在连接后的字符串末尾加上结束符 语句【8】的所用是: 输出连接后的字符串 8. 阅读程序,根据要求分析程序。 #include { int b[N],x,k,r,i; printf(\ k=-1; do { r=x%2; b[++k]=r; x/=2; } while (x!=0); 【9】 for ( i=k; i>=0; i-- ) printf(\b[i] 【10】 ); printf(\} 【9】语句所指的整个do循环的含义是: 把十进制数x转化为2进制储存在b数组中 【10】语句中数组b的值为: x 的二进制数 38 9. 阅读程序,根据要求分析程序。 #include printf(\输入文件名:\【11】 if ( ( fp = fopen (filename,\ { printf(\ exit(0); } 【12】 printf(\输入一行字符\ ch=getchar(); while(ch!='#') { fputc(ch,fp); putchar(ch); ch=getchar(); } 【13】 printf(\ fclose(fp); } 【11】语句所指的整个if语句的含义是:判断檔打开是否成功 【12】语句中的含义结果为:输出文件无法打开的提示,退出程序 【13】语句所指的整个while循环的含义是:把从键盘上输入的字符写入文件 当输入为‘#‘时结束 39