单选题:
1.给出以下定义:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为
A) 数组x和数组y等价B) 数组x和数组y的长度相同
C) 数组x的长度大于数组y的长度D) 数组x的长度小于数组y的长度
提示:x 的长度还需要包括末尾的’\n’.
2.设有数组定义:char array[ ]="chinr",则数组array所占的空间为
A)4个字节B)5个字节C)6个字节D)7个字节
提示:需要加上末尾的’\n’.
3.合法的数组定义是
A) int a[]="string"; B) int a[5]={0,1,2,3,4,5};
C) chars="string"; D) char a[]={0,1,2,3,4,5};
提示: A 是字符串,B后面初始化的长度大于5,C不是正确的定义, 没有类型。D是正确的
4.下列描述中不正确的是
A) 字符型数组中可以存放字符串B) 可以对字符型数组进行整体输入、输出
C) 可以对整型数组进行整体输入、输出
D) 不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值
提示:
5.有以下程序,执行后输出结果是
main()
{ char s[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}
A) 赋初值的字符串有错B) 6,7 C) 5,6D) 6,6
提示:sizeof(s)还需包括’\n’,而字符串的长度不包括’\n’
6.若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该是a=1234
b=5 。
char a[10],b;
scanf(“a=%s b=%c”,a,&b);
提示:
7.设有以下语句
typedef struct S
{ int g; char h;} T;
则下面叙述中正确的是()
A)可用S定义结构体变量B)可以用T定义结构体变量
C)S是struct类型的变量D)T是struct S类型的变量
提示:T跟struct S 完全等价
8.若有以下说明和定义,以下叙述正确的是______。
typedef int *INTEGER
INTEGER p,*q;
A) p是int型变量B) p是基类型为int的指针变量
C) q是基类型为int的指针变量D) 程序中可用INTEGER代替int类型名
提示:上述定义等价于int * p
9.变量a所占内存字节数是
A)4 B) 5 C) 6 D) 8
union U
{ char st[4];
int i;
long l;
};
srtuct A
{ int c;
union U u;
} a;
10.设有如下定义,若要使p指向data中的成员n,正确的赋值语句是
struct sk
{ int n;
float x;
} data,*p;
A.p=&data.n; B.*p=data.n;
C.p=(struct sk *)&data.n;D.p=(struct sk *) data.n;
提示:p是struct sk类型的指针,必须指向struct sk类型地址,而data.n是整数,其地址只能给整数型指针赋值,如果需要给其他类型赋值,必须使用强制性的类型转换如(struct sk *).
11.设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)
则执行语句:z=2*(N+Y(5+1));后,z的值为
A) 出错B) 42 C) 48 D) 54
提示:需要注意的是Y(n) = ((N+1)*n), 这里的n 如果是表达式,则应该直接把表达式替换n, 而不是表达式的运算结果。所以这里Y(5+1) = ((3+1)*5+1)= 21,2*(3+21)= 48。这是使用#define 来定义函数跟正常函数定义不一样之处
12.下列不正确的转义字符是:
A ) '\\' B) "\"C) '074' D) '\0'
提示:字符只能用单引号括起来,对于特殊的字符如’,”, \ 等,需要在前面加上\,
如’\\’表示\, \”表示”, \’表示单引号,因此字符’\’’, ‘\”’, ‘\\’都为正确。
13.在C语言提供的合法的关键字是:
A) swicth B) cher C) Case D) default
提示:default 表示缺省,跟switch 和case联合使用
14.在C语言中,合法的字符常量是:
A) '\084' B) '\x43'C) 'ab' D) "\0"
提示:A 错,8进制数中不能出现8或根大的数,B正确,x表示16进制,C错,’a’或’b’, 但不能是‘ab’, D 错,是字符串而非字符。
15.以下叙述中正确的是______。
A)构成C程序的基本单位是函数B) 可以在一个函数中定义另一个函数
C)main()函数必须放在其它函数之前 D) 所有被调用的函数一定要在调用之前进行
16.已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,
以下选项中正确的输入语句是______。
A) scanf("%2d%2d%2d",&i,&j,&k); B) scanf(""%d %d %d",&i,&j,&k);
C) scanf("%d,%d,%d",&i,&j,&k);D) scanf("i=%d,j=%d,k=%d",&i,&j,&k);
17.下列程序的输出结果是:
A)3 B)3.2 C)0D)3.07
main()
{double d=3.2;int x,y;
x=1.2;y=(x+3.8)/5.0;
printf("%d\n", d*y);
}
提示:因x是整数,在x=1.2 执行完后,x=1, y=(1+3.8)/5.0)=0.96, 取整数时,直接把小数部分去掉,就变成0,所以y=0
18.下列程序执行后的输出结果是(小数点后只写一位)
A)6 6 6.0 6.0 B)6 6 6.7 6.7 C)6 6 6.0 6.7 D)6 6 6.7 6.0
main()
{ double d;float f;long l;int i;
i=f=l=d=20/3;
printf(”%d%ld%f%f\n”,i,l,f,d);
提示:两个整数相除时,其结果得整数,小数部分不计,所以20/3=6。
19.设有说明语句:char a='\72';则变量a
A) 包含1个字符B) 包含2个字符C) 包含3个字符D) 说明不合法
提示:a=’\72’ (用8进制表示一个字符)= 7*8+2=58. 这里等价于a=58.
a = ‘\0’等价于a = 0 (表示值0), 但是跟a=’0’(表示字符0)不等
20.下列叙述中正确的是:
A) C语言编译时不检查语法B) C语言的子程序有过程和函数两种
C) C语言的函数可以嵌套定义D) C语言所有函数都是外部函数
21.下列选项中,合法的C语言关键字是:
A) V AR B) cher C) integer D) default
22.在一个C语言程序中
A) main函数必须出现在所有函数之前B) main函数可以在任何地方出现
C) main函数必须出现在所有函数之后D) main函数必须出现在固定位置
23.以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是()
A)if((a>b)&&(b>c)) k=1; B) if((a>b)||(b>c)) k=1
else k=0; else k=0;
C)if(a<=b) k=0; D) if(a>b) k=1;
else if(b<=c) k=1; else if(b>c) k=1;
else k=0;
24.阅读以下程序:程序运行后,如果从键盘上输人5,则输出结果是
main()
{ int x;
scanf("%d",&x);
if(x--<5) printf("%d",x);
else printf("%d",x++);
}
A) 3 B) 4C) 5 D) 6
提示:上述语句先比较X<5, 然后立即计算X--,然后执行else printf("%d",x); 这时候X=4。然后再X++.
25.假定w、x、y、z、m均为int型变量,有如下程序段:
w=1; x=2; y=3; z=4;
m=(w 则该程序运行后,m的值是 A) 4 B) 3 C) 2 D) 1 提示:m=(w 26.有以下程序,输出结果是 main() { int i, j; for(j=10;j<11;j++) {for(i=9;i=j-1)printf("%d",j); } } A) 11 B) 10 C) 9 D) 10 11 27.当执行以下程序段时 A)循环体将执行一次B)循环体将执行两次 C)循环体将执行无限次D)系统将提示有语法错误 x=-1; do { x=x*x;} while(!x); 提示:注意do型循环先执行后比较。while(!x)表示当x==0时继续执行,因为x不等于0,所以在执行一次后停止。 28.有如下程序,该程序段的输出结果是 main0 { int n=9; while(n>6) {n--;printf("%d",n);} } A) 987 B) 876 C) 8765 D) 9876 29.有以下程序段 int k=0 while(k=1)k++; while 循环执行的次数是 A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次 提示:注意while(k=1) 跟while (k==1) 的区别,前者先计算k=1 然后再去比较k 是否为非零值,因为k不等于0 ,所以它一直执行。而while (k==1) 则只有当k恒等于1是才执行。注意, 一个是赋值语句k=1, 另一个是逻辑比较语句k==1. 30.当调用函数时,实参是一个数组名,则向函数传送的是 A) 数组的长度B) 数组的首地址 C) 数组每一个元素的地址D) 数组每个元素中的值 31.若有以下定义和语句: char *s1="12345",*s2="1234"; printf("%d\n",strlen(strcpy(s1,s2)));则输出结果是 A) 4B) 5 C) 9 D) 10 提示:在字符串拷贝后,S1中的内容变化了。 32.若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示a数组元素的表达式是 A) *p B) a[10] C) *a D) a[p-a] 提示:a[x], x 的合法取值范围是0-9,第一个元素为a[0], 第十个元素为a[9]. 33.若有以下的定义: int a[]={1,2,3,4,5,6,7,88,9,10}, *p=a; 则值为3的表达式是 A) p+=2; *(p++); B) p+=2;*++p; C) p+=3; *p++; D) p+=2;++*p; 提示:a[2] = 3, 答案A正确,p+=2 后,p=&a[2], *(p++) 先计算*p, 然后再p=p+1. 34.设有如下定义, 若有p=&data;,则对data中的a域的正确引用是 struct sk {int a;float b;}data,*p; A) (*p).data.a B) (*p).a C) p->data.a D) p.data.azhe 提示:这里p->a 等价于(*p).a , 等价于data.a, 因p=&data 35.以下对枚举类型名的定义中正确的是 A) enum a={one,two,three}; B) enum a {one=9,two=-1,three}; C) enum a={"one","two","three"}; D) enum a {"one","two","three"}; 提示:定义枚举变量时,不能用“=”,也不能使用字符串作为值。 36.有以下定义,不能给数组a输入字符串的语句是 #include char a[10],*b=a; A) gets(a) B) gets(a[0])C) gets(&a[0]); D) gets(b); 提示:gets(p) ,p 必须是字符串指针, 37.有以下程序,执行后输出结果是 main( ) { char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"}; printf("%d\n",strlen(p[4])); } A) 2B) 3 C) 4 D) 5 提示:注意, p[4] 是p 的第五个元素,即“cd” . 38.若有以下调用语句,则不正确的fun函数的首部是 A) void fun( int m,int x[ ]) B) void fun( int s, int h[41]) C) void fun( int p, int *s) D) void fun(int n, int a) main( ) { int a[50], n; fun( n,&a[9]); } 提示:调用时fun 的第二个参数显示是指针或地址。定义时第二个参数也应该是地址。 39.以下程序的输出结果是 A)4 B) 3 C) 2 D) 1 long fun( int n) { long s; if(n==1||n==2) s=2; else s=n-fun(n-1); return s; } main() { printf("%ld\n",fun(3)); } 提示:fun(3)=3-fun(2)=3-2= 1. 40.设有如下定义,下面各输入语句中错误的是______。 struct ss { char name[10]; int age; char sex; } std[3],*p=std; A) scanf("%d",&(*p).age); B) scanf("%c",&std[0].sex); C) scanf("%s",&https://www.wendangku.net/doc/8b14744589.html,); D) scanf("%c",&(p->sex)); 提示:name 已经是地址,没必要再加地址运算符。 41.已知:char c='A';int i=1,j; 执行语句j=!c&&i++; 则i和j的值是______。 A)1,1 B)2,1 C)1,0 D)2,0 提示:运算j=!c 时,当c=0时,j=1, 否则j=0, 因c!=0, 所以j=0. 需要注意的一点是:在双目运算符&&中, 只要&&前面为0时,&& 后面的判断语句不再执行,就直接返回(a&&b 只有两者都不为零时才为真,如果a为0,则无论b是何值,结果都为假,所以a为0时,在C语言里面b不再考虑)。所以i值仍然为1。 42.以下说法中正确的是_____。 A) #define和printf都是C语句B) #define是C语句,而printf不是 C) printf是C语句,但#define不是D) #define和printf都不是C语句 43.若有以下定义和语句char c1='b',c2='e'; printf("%d,%c\n",c2-c1,c2-'a'+'A'); 则输出结果是______。 A) 2,M B) 3,E C)2,E D) 输出项与对应的格式控制不一致,输出结果不确定 提示:字符本身也是数,所以可以进行加减法。c2-'a'+'A' 相当于把小写字母变成大写字母。 44.以下对C语言函数的描述中,正确的是______。 A) 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B) C函数既可以嵌套定义又可以递归调用 C) 函数必须有返回值,否则不能使用函数 D) C程序中有调用关系的所有函数必须放在同一个源程序文件中 45.若执行以下程序时从键盘上输入9,则输出结果是______。 A) 11 B) 10C) 9 D) 8 main() { int n; scanf("%d",&n); if(n++<10) printf("%d\n",n); else printf("%d\n",n--); } 提示:先比较n<10, 然后n=n+1, 然后printf("%d\n",n); 46.设有变量说明"static int a[2][3]={1,2,3,4,5,6};int m,*ptr=&a[0][0];" 执行语句m=(*ptr)*(*(ptr+2))*(*(ptr+4));后,m的值为______。 A)15 B)48 C)24 D)60 提示:*ptr=a[0][0]=1, *(ptr+2)=a[0][2]=3, *(ptr+4)=a[1][1]=5 47.设有“char s[]="Program" , *p=s; " ,则以下叙述中正确的是______。 A) 数组s的内容与指针变量p中内容相同 B) 数组s的长度与strlen(p)的值相同 C) p[5]的值等于s[5]的值 D) sizeof(s)等于sizeof(*p) 48.有以下程序段 int k=0 while(k=1)k++; while 循环执行的次数是______。 A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次 49.设有说明"int x=2,y=3; " ,则"++x>y--?x:y"的值为 A)1 B)2 C)3 D)4 提示:先计算++x, 得到x=3, 然后比较x>y? 之后计算y--, 最后选择x或者y, 因为x>y 为假(x和y都等于3),所以取值是y—后的y,其值为2。 50.以下程序段的输出结果是______。 int a=0,b=4,k=2; k=a+1>0||(++a<0)&&(!(b--<=0)); printf(“%d,%d,%d”,k,a,b); A)1,1,3 B)1,0,4 C)1,0,3 D)1,1,4 提示:需要注意同学们,在或运算“||”双目运算符中,如a||b , 当a为非零值是,此结果无论b 取何值都为真,C语言执行过程中,当a 为真时,b 不再考虑。所以上述语句只执行k=a+1 ,,其值为1,即真,而||后面的(++a<0)&&(!(b--<=0)) 不再执行。这跟41题a&&b 运算很类似,即如果a已经足以确定结果(a为假),后面的表达式b 不再进行运算. 在“||”(或运算)中,a||b, 只要a为真,则a||b 必为真。这时b 不再予以考虑。 51.与语句"while(!x)"等价语句是______。 A)while(x= =0)B)while(x!=0) C)while(x!=1) D)while(~x) 52.已知:char a[20],b[20] ;则以下正确的输入语句是______。 A)gets(“a,b”);B)scanf("%s%s",a,b); C)scanf("%s%s",&a,&b); D)gets("a");gets("b"); 53.已知:int i=0,j=1,*p=&i,*q=&j;错误语句是______。 A) i=*&q B) i=*&j C) p=&*&i D) j=*p++; 54.下列程序执行后的输出结果是______。 main() {int a[3][3],*p,i; p=&a[0][0]; for( i= 0 ; i< 9 ; i++) p[i]= i+1; printf("%d\n",a[1][2]); } A)3 B)6C)9 D)随机数 提示:a[1][2] 是p后的第5个元素,相当于p[5]. 55.若有宏定义,则执行语句"z=2*(N+Y(N+2)); " 后,z的值是______。 #define N 2 #define Y(n) ((N+1)*n) A) 21 B) 20 C) 28 D) 18 提示:2*(N+Y(N+2) = 2*(N+((N+1)*N+2)) = 20. 其运算次序参照11题。 需要注意的是Y(n) = ((N+1)*n), 这里的n 如果是表达式,则应该直接把表达式替换n, 而不是表达式的运算结果。这是使用#define 来定义函数跟正常函数定义不一样之处 56.若有以下程序: main() {int k=2,i=2,m; m=(k+=i*=k); printf("%d,%d\n",m,i); } 执行后的输出结果是______。 A)8,6 B) 8,3 C) 6,4D) 7,4 提示:在计算m=(k+=i*=k) 这样的复合表达式时,总是服从自右向左的次序,这是其一特点。把步骤分解,首先计算i= i*k, 得到i=4,然后计算k+= i 得到k=6, 然后计算m=k, 得m=6. 57.在C语言中,对于存储类型为的变量,只有在使用它们时才占用内存单元。 A)register和static B)static和auto C)register和extern D)auto和register 58.已知:char a[20],b[20] ;则以下正确的输入语句是______。 A)gets(“a,b”);B)scanf("%s%s",a,b); C)scanf("%s%s",&a,&b); D)gets("a");gets("b"); 59.已知:int i=0,j=1,*p=&i,*q=&j;错误语句是______。 A)i=*&q B)i=*&j C)p=&*&i D) j=*p++; 60.有以下函数 char fun(char *p) { return p; } 该函数的返回值是______。 A) 无确切的值B) 形参p中存放的地址值 C) 一个临时存储单元的地址D) 形参p自身的地址值 61.已知struct {int I;char c;float a;}test ; 则sizeof()的值是。 A)4 B)5 C)6 D)9 62. 有以下程序,执行后输出结果是______。 main( ) { char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"}; printf("%d\n",strlen(p[4])); } A) 2B) 3 C) 4 D) 5 63.设有数组说明"int a[4][4]; " ,则不能等价表示的数组元素a[3][3]是______。 A)*(a[3]+3) B)*(*(a+3)+3) C)*&a[3][3] D)(*(*a+3))+3 64.下列程序执行后的输出结果是______。 A〕6 B) 8C) 10 D) 12 #define MA(x) x*(x-1) main() {int a=1, b= 2 ;printf("%d\n",MA(1+a+b));} 提示:参照11题和55题。MA(1+a+b) = 1+a+b*(1+a+b-1)= 8 已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是______。 A) 字符A B) 字符a C) 字符e D) 非法的常量 提示:1*8*8+0*8+1=65, 65.以下非法的赋值语句是______。 A) n=(i=2,++i); B) j++; C) ++(i+1); D) x=j>0; 提示:(i+1) 非变量,不能进行++ 操作。 66.若有以下定义: char a; int b; float c; double d; 则表达式a*b+d-c值的类型为 A) float B) int C) char D) double 提示:在算术运算中结果总是按照参与运算的变量中精度最高的变量来存放。这里的double. 67.表示关系x<=y<=z的c语言表达式为 A) (X<=Y)&&(Y<=Z) B) (X<=Y)AND(Y<=Z) C) (X<=Y<=Z) D) (X<=Y)&(Y<=Z) 提示:B 总的AND 非法,C中的结果错误(先计算X<=Y, 其结果为0 或者1,然后再去跟Z比较。所以等价于(X<=Y&&1<=Z)|| (X>Y&&0<=Z). D 错误,&是位操作运算符。 68.下列程序执行后的输出结果是: A)G B)H C)I D)J main() {int x=?f?;printf(”%c\n”,?A?+(x-?a?+1));} 69.下列程序的运行结果是: A)a=%2,b=%5 B)a=2,b=5C)a=d,b=d D)a=%d,b=%d #Include<stdio.h> main() {int a=2,c=5 ; printf("a=%d,b=%d\n",a,c); } 70.C语言中用于结构化程序设计的三种基本结构是 A) 顺序结构、选择结构、循环结构 B) if、switch、break C) for、while、do-while D) if、for、continue 71.下列关于单目运算符++、--的叙述中正确的是 A) 它们的运算对象可以是任何变量和常量 B) 它们的运算对象可以是char型变量和int型变量,但不能是float型变量 C) 它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D) 它们的运算对象可以是char型变量、int型变量和float型变量 提示:原则上,只要是变量,(整型,浮点型,指针变量,都可以使用上述运算法。 72.若i,j已定义为int类型,则以下程序段中内循环体的总的执行次数是 for (i=5;i;i--) for(j=0;j<=4;j++){...} A) 20 B) 25C) 24 D) 30 提示:外循环执行5次(i=5,4,3,2,1),内循环执行5*5=25次(j=0,1, 2, 3, 4)。73.若有以下定义: float x; int a,b; 则正确的switch语句是 A) switch(x) B) switch(x) { case .0:printf("*\n"); { case 1,2:printf("*\n"); case 2.0:printf("**\n"); case 3:printf("**\n"); } } C)switch(a+b)D) switch(a+b); { case 1:printf("\n");{ case 1:printf(."*\n"); case 1+2:printf("**\n"); case 2:printf("**\n"); } } 74.有以下程序段, 程序在执行了c=&b;b=&a;语句后,表达式:**c的值是 main() { int a=5,*b,**c; c=&b; b=&a; …… } A)变量a的地址B)变量b中的值C)变量a中的值D)变量b的地址 75.有以下程序,程序运行后的输出结果是 #include main() { char str[][20]={"Hello","Beijing"},*p=str; printf("%d\n",strlen(p+20)); A)0 B)5 C)7D)20 提示:str 是二维字符数组,其每个元素str[n] 是一个长度为20的字符数组。p=str, 则p指向str 的首地址,也即p=str[0]。P+20 = str[1] 的地址,str[1] 存放“Beijing”。 76.以下程序运行后,输出结果是 A) 84B) 99 C) 95 D) 44 int d=1; fun(int p) { int d=5; d+=p++; printf("%d",d); } main() {int a=3; fun(a); d+=a++; printf("%d\n",d); } 提示:fun 函数输入的是形式参数,fun(a)内的运算对原值a 不会有任何影响。但是fun(a) 运算时,变量d 有两处定义,作为全局变量(也即在整个程序中发挥作用)和函数fun 中的内部变量。这里要注意的是。当函数内部和全局变量重名时,函数内部运算总是使用内部变量。所以在调用fun(a) 后,输出8,但是全局变量d 的值还没有改变,仍然为1,a 的值也没变,仍然为3。d+=a++ 应该分解为,d+=a;a ++,所以d=4. 这时输出4,结合起来就是84. 77.以下程序的输出结果是 A) 6 9 9 B) 6 6 9 C) 6 15 15D) 6 6 15 int d=1; fun(int p) { static int d=5; d+=p; printf("%d ",d); return(d); } main( ) { int a=3; printf("%d \n",fun(a+fun(d))); } 提示:这里,d 有两处定义,作为全局变量的d=1, 以及作为fun 函数内部变量的static int. 同学们要注意,static 类型的变量有两个特点,首先,其值需要初始化(这里的d=5而且只初始化一次(也就是仅在第一次调用该函数时d=5), 第二次调用时会绕过“d=5”这条语句。其次,每次函数调用完后,static 类型的内部变量值得以保存,再次调用函数时,其值是在前一次调用的基础上进行改变。 如fun(a+fun(d)) 涉及到两次调用,第一次调用fun(d) 即fun(1)后,fun 内部的static int d 值为6,返回6,第二次调用fun(3+6) 时,static int d的值变化为; d+=9, 即在原来6的基础上加9,所以其内部的d=15. 有以下程序,执行后输出结果是 main( ) { char a[]="abcdefg",b[10]="abcdefg"; printf("%d%d\n",sizeof(a),sizeof(b)); } A) 7 7 B) 8 8 C) 8 10 D) 10 10 提示:char a[]="abcdefg" 是字符串,sizeof(a)还应包括字符串后面的’\n’,总共8个字节。b[10] 是包含10个元素的字符数组,长度为10. 78.以下程序输出的结果是 main() { char w[ ][10]={"ABCD","EFGH","IJKL","MNOP"},K; for (k=1;k<3;k++) printf("%s\n",&w[k][k]); } A) ABCD B) ABCD C) EFG D) FGH FGH EFG JK KL KL IJ O M 提示:上述语句只执行两次循环,k=1, k=2. 79.以下程序的输出结果是 main() { char ch[3][5]={"AAAA","BBB","CC"}; printf("\"%s\"\n",ch[1]); } A) "AAAA" B) "BBB" C) "BBBCC" D) "CC" 提示:ch 是二维字符数组,其每个元素都是一个长度为5的一维字符数组(可看作字符串),ch[1] 指向“BBB”。 80.以下程序的输出结果是 main() { int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf("%d\n",t); } A) 3 B) 4 C) 1 D) 9 填空题 81.设x和y均为int型变量,且x=1,y=2,则以下表达式的值为【1.0】。 1.0+x/y 提示:1.0 + 1/2 = 1.0+0 = 1.0,这里注意两个整型数相除得整型数。 82.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是【5.0,4,c=3】。 int b,c;float a; scanf("%f,%d,c=%d",&a,&b,&c); 83.设有以下变量定义,并已赋确定的值 char w;int x;float y ;double z; 则表达式:w*x+z-y所求得值的数据类型为【double】 提示:输出结果的数据类型,在通常情况下,总是向精度最高的参与运算的值靠。84.若有定义:int a=10,b=9,c=8;接着顺序执行下列语句后,变量b中的值是[3] 。 c=(a-=(b-5)); c=(a%11)+(b=3); 提示:采取自右向左的计算步骤。 85.设y是int型变量,请写出判断y为奇数的关系表达【(Y%2)= =1】。 86.已知字符A的ACSII码值为65,以下语句的输出结果是【B 66】 char ch=’B’; printf("%c %d\n",ch,ch); 87.有以下语句段 int n1=10,n2=20; printf("【n1=%d\nn2=%d】",n1,n2); 要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20 88.若有语句 int i=-19,j=i%4; printf("%d\n",j); 则输出的结果是【-3】。 89.若有程序,要求给i赋10,给j赋20,则应该从键盘输入【i=10,j=20】。 main() { int i,j; scanf("i=%d,j=%d",&i,&j); printf("i=%d,j=%d\n ",i,j); } 90.下面程序的功能是:计算1到10之间的奇数之和及偶数之和,请填空。 #include< Stdio.h> main() { int a, b, c, i; a=c=0; for(i=0;i<=10; i+=2 ) { a+=i; 【b=i+1或b=1+i】; c+=b; } printf("偶数之和=%d\n”,a); printf("奇数之和=%d\n”,c-11); } 91.下面程序的功能是:输出 100以内能被 3整除且个位数为 6的所有整数,请填空。 #include<stdio.h> main() { int i, j; for(i=0;【i<=9或i<10或9>=i或10>i】; i++) { j=i *10+6; if (【j%3!=0或j%3】) continue; printf("%d", j); } } 92.若输入字符串:abcde<回车>,则以下while循环体将执行【0】次。 While((ch=getchar())=='e') printf("*"); 93.执行以下程序后,输出'#'号的个数是【6】。 #include main() { int i,j; for(i=1; i<5; i++) for(j=2; j<=i; j++) putchar('#'); } 94.设i,j,k均为int型变量,则执行完下面的for循环后,k的值为【10】。 for(i=0,j=10;i<=j;i++,j--) k=i+j; 提示:++,-- 相互抵消,k 在整个循环中值不变为10. 95.有以下定义和语句,则sizeof(a)的值是【10】,而sizeof(a.share)的值是【4】struct date{ int day; int month; int year; union{int share1 float share2; }share; }a; 96.以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。 struct st { char name[20]; double score; }; main() { struct st ex; printf("ex size: %d\n",sizeof( 【struct st 或ex】 )); } 97.若有如下结构体说明: struct STRU { int a, b ; char c; double d: struct STRU p1,p2; }; 请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型 【struct STRU】t[20]; 98.以下程序的输出结果是【8,17】int fun(int x,int y) { static int m=0,i=2; i+=m+1; m=i+x+y; return m } main() { int j=4,m=1,k; k=fun(j,m); printf("%d,",k); k=fun(j,m); printf("%d\n",k); } 99.函数pi的功能是根据以下近似公式求π值: (π*π)/6=1+1/(2*2)+1/(3*3)+..+1/(n*n) 现在请你在下面的函数中填空,完成求π的功能。 #include "math.h" double pi(long n) { double s=0.0; long i; for(i=1;i<=n;i++)s=s+【1.0/(i*i)】 ; return(sqrt(6*s)); } 100.以下函数的功能是计算s=1+1/2!+1/3!+……+1/n!,请填空。 double fun(int n) {double s=0.0,fac=1.0; int i; for(i=1;i<=n;i++) {fac=fac【*(1.0/i)】; s=s+fac; } return s; } 101.以下程序的功能是调用函数fun计算:m=1-2+3-4+…+9-10,并输出结果。请填空。 int fun( int n) { int m=0,f=1,i; for(i=1; i<=n; i++) { m+=i*f; f=【-f】 ; } return m; } main() { printf("m=%d\n",【f(10)】); } 102.请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。 【double max】( double,double); main() { double x,y; scanf("%lf%lf",&x,&y ); printf("%lf\n",max(x ,y)); } double max(double a,double b) { return(a>b ? a:b); } 103.以下函数的功能是:求x的y次方,请填空。 double fun( double x, int y) { int i; double z; for(i=1, z=x; i return z; } 104.以下函数用来在w数组中插入x,w数组中的数已按由小到大顺序存放,n所指存储单元中存放数组中数据的个数,插入后数组中的数仍有序。请填空: void fun (char *w,char x,int *n) { int i,p; p=0; while (x>w[p]) 【p++ 或 ++p 或 p=p+1 或p+=1或p=1+p; 】 for(i=*n;i>p;i--)w[i]= 【w[i-1]; 或 *(w+i-1) ;】 w[p]=x; ++ *n; } 105.以下程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串,请填空。 #include"stdio.h" main() { char str[81],*sptr; int i; for(i=0;i<80;i++) { str[i]=getchar(); if(str[i]==‘\n') break; } str[i]=【’\0' 或0】; sptr=str; while(*sptr) putchar(*sptr【++】); } 106.以下fun函数的功能是:累加数组元素的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。请填空。 fun(int b[ ],int n,int *x) { int k, r=0; for(k=0;k 【*x】=r; } 107.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。 int add(int x,inty, 【int *z】) { 【*z】 =x+y;} 108.若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是【P[5]或*(p+5)】。 int w[10]={23,54,10,33,47,98,72,80,61}, *p=w; 109.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。 Strcen(char a[], char b[]) { int num=0,n=0; while(*(a+num)!=【‘\0'或0】) num++; while(b[n]){*(a+num)= b[n]; num++;【n++或n+=1或n=n+1】;} return(num); } 110.设有以下程序,执行该程序后,a的值为【0】,b的值为【7】。 main() { int a, b, k=4, m=6, *p1=&k, *p2=&m; a=p1==&m; b=(*p1)/(*p2)+7; printf("a=%d\n",a); printf("b=%d\n",b); } 111.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。 int mystrlen(char *str) { int i; for(i=0; 【*(str+i)或str[i]】!=‘\0';i++); return(【i】); } 112.以下sstrcpy( )函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。 void sstrcpy(char *s,char *t) { while(*s++=【*t++】);} main( ) { char str1[100],str2[]="abcdefgh"; sstrcpy(str1,str2); printf("%s\n",str1); } 113.以下函数的功能是删除字符串s中的所有数字字符。请填空。 viod dele(char *s) { int n=0,i; for(i=0;s[i];i++) if(【!(s[i]>='0'&&s[i]<='9')】) s[n++]=s[i]; s[n]=【'\0'】; } 114.以下程序的功能是:从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。请填空。 main( ) { float x[1000], sum=0.0, ave, a; int n=0, i; printf("Enter mark:\n");scanf("%f",&A) ; while(a>=0.0&&n<1000) { sum+【=a】; x[n]=【a】; n++; scanf("%f",&A); } ave=【sum/n】; printf("Output:\n"); printf("ave=%f\n",ave); for (i=0; if 【x[i] } 115.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请填空。 #include main() { char str[100],str2[100],c; int i,s; printf("\n input string 1:\n"); gest(str1); printf("\n input string 2:\n"); gest(str2); i=0; while((strl[i]==str2[i]&&(str1[i]!=【'\0'或0】)) i++; s=【strl[i]-str2[i]】; printf("%d\n",s); } 116.下面程序的功能是:将字符数组a中下标值为偶数的元素从小到大排列,其它元素不变。 请填空。 #include #include main() { char a[]="clanguage",t; int i,j,k; k=strlen(a); for(i=0;i<=k-2;i+=2) for(j=i+2;j if (【a[i]>a[j]】) { t=a[i]; a[i]=a[j]; a[j]=t;} puts(a); printf("\n"); } 118.若fp已正确定义为一个文件指针,d1.dat为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen(【”d1.fat”,”rb”】);。 119.下面程序把从终端读入的10个整数以二进制的方式写到一个名为bi.dat的新文件中。请填空。 #include FILE *fp; main( ) { int i,j; if((fp=fopen("【bi.dat】","wb"))==NULL) exit(0); for(i=0;i<10;i++) { scanf("%d",&j); fwrite(&j,sizeof(int),1,【fp】); } fclose(fp); } 阅读程序, 1.以下程序的输出结果是_______________。 main() { int a=0 a+=(a=8); printf("%d\n",a); } 提示:先计算a=8, 然后a += a, 得到a=16. 2.以下程序输出的结果是_______________。 main() { int a=5,b=4,c=3,d; d=(a>b>c); printf("%d\n",d); } 提示:因为a>b, 所以a>b 为1,(a>b>c)=(1>c)= 0. d=0. 3.以下程序的输出结果是_____2,1__________。 main() { int a=1, b=2; a=a+b; b=a-b; a=a-b; printf("%d,%d\n", a, b ); } 4.下列程序的输出结果是________16.00_______。 main() { int a=9, b=2; float x= 6.6 , y=1.1,z; z=a/2+b*x/y+1/2; printf("%5.2f\n", z ); } 5. 若从键盘输入58,则以下程序输出的结果是_______585858________。 main() { int a; scanf("%d",&a); if(a>50) printf("%d",a); if(a>40) printf("%d",a); if(a>30) printf("%d",a); } 6. 有以下程序,执行后输出结果是_______-4________。 main( ) { int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf("%d\n",x); } 7. 有以下程序,程序运行时输入:12<回车>,执行后输出结果是_______12 ________。#include main( ) { char ch1,ch2; int n1,n2; ch1=getchar(); ch2=getchar(); n1=ch1-…0?; n2=n1*10+(ch2-…0?); printf("%d\n",n2); } 8. 下列程序段的输出结果是________ passwarn _______。 int n='c'; switch(n++) { default: printf("error");break; case 'a':case 'A':case 'b':case 'B':printf("good");break; case 'c':case 'C':printf("pass"); case 'd':case 'D':printf("warn"); } 9. 若有以下程序,执行后输出结果是__________1_____。 main() { int p,a=5; if(p=a!=0) printf("%d\n",p); else printf("%d\n",p+2); } 10. 若有以下程序,执行后输出结果为_______5 0 3________。 main() { int a=4,b=3,c=5,t=0; if(a if(a printf("%d %d %d\n",a,b,c); } 11. 设有以下程序: 程序运行后,如果从键盘上输入1298;则输出结果为__________8921_____。 main() { int n1,n2; scanf("%d",&n2); while(n2!=0) { n1=n2%10; n2=n2/10; printf("%d",n1); } } 12. 以下程序的输出结果是______5_________。 main() { int s,i; for(s=0,i=1;i<3;i++,s+=i) printf("%d\n",s); } 13. 以下程序运行后的输出结果是__________1 3 2_____。 main() { int i,m=0,n=0,k=0; for(i=9; i<=11;i++) switch(i/10) { case 0: m++;n++;break; case 10: n++; break;