《C程序设计》单元练习(基本概念、顺序结构)
一、选择题
1、C语言程序的基本单位
(1)程序行(2)语句(3)函数(4)字符
2、下列说法中正确的是
(1)C语言程序总是从第一个定义的函数开始执行。
(2)在C语言程序中要调用的函数必须在main()函数中定义
(3)C语言程序总是从main()函数开始执行
(4)C语言程序中的main()函数必须在程序的开始部分
3、设有语句int a=3,则执行语句a+=a-=a*a以后变量a的值是
(1)3 (2)0 (3)9 (4)-12
4、在C语言中,要求运算数必须是整数的运算符是
(1)% (2)/ (3)< (4)1
5、C语言中最简单的数据类型包括
(1)整型、实型、逻辑型(2)整型、实型、字符型
(3)整型、字符型、逻辑型(4)整型、实型、逻辑型、字符型6、C语言提供的合法的数据类型关键字是
(1)double (2)short (3)integer (4)char
7、合法的C语言字符常量是
(1)‘t’(2)“A”(3)65 (4)A
8、在C语言中,合法的字符常量是
(1)‘\084’(2)‘\X43’(3)‘ab’(4)“\0”9、设有语句cher a=‘\72’,则变量a是
(1)包含1个字符(2)包含2个字符
(3)包含3个字符(4)说明不合法
10、以下程序的输出结果是
main(){ int i=010 ,j=10;
printf(“%d,%d\n”,++i,j--);}
(1)11、10 (2)9、10 (3)010,9 (4)10,9 11、下面程序的输出是
main()
{ unsigned a=32768;
print(“a=%d\n”,a);}
(1)a=32768 (2)32767 (3)a=-32768 (4)a=-1 12、设X,Y,Z和K是int型变量,则执行表达式:X=(Y=4,Z=16,K=32)后,X的值为
(1)4 (2)16 (3)32 (4)52
13、设有如下定量定义:则下列符合C语言语法的表达式为
int i=8,K,a,b;
unsigned long w=5; double x=1.42,y=5.2;
(1) a+=A-=(b=4)*(a=3) (2) x%(-3) (3)a=a*3=2 (4) y=float(i) 14、若有如下定义变量:
int k=7,x=12;则能使值为3的表达式是
(1)X%=(K%=5)(2)X%=(K-K%5)
(3)X%=K-K%5 (4)(X%=K)-(K%=5)
15、以下叙述中正确的是
(1)输入项可以是一个实型常量例如:scanf(“%f”,3.5);
(2)只有格式控制,没有输入项,也能正确输入数据到内存。例如:scanf(“a=%d,b=%d”);
(3)当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf(“%7.2f”,&f);
(4)当输入数据时,必须指明变量的地址,例如:scanf(“%f”,&f);
16、执行以下语句:x+=y;y=x-y;x-=y;的功能是
(1)把x和y按从大到小排列(2)把x和y按从小到大排列(3)无确定结果(4)交换x和y中的值
17、以下程序的输出结果是
main()
{ int a=12, b=12;
printf(“%d %d\n”,--a,++b);}
(1)10 10 (2)12 12 (3)11 10 (4)11 13 18、若有以下程序段,其输出结果是
int a=0,b=0 C=0;
C=(C-=a-5),(a=b,b+3);
printf(“%d,%d,%d\n”,a,b,c)
(1)3,0,-10 (2)0,0,5 (3)-10,3,-10 (4)3,0,3 19、当运行以下程序时,在键盘上从第一列开始输入9876543210 main() { int a; float b,c; scanf(“%2d%3f%4f”,&a,&b,&c); printf(“\na=%d,b=%f,c=%f\n”,a,b,c); } (1)a=98,b=765,C=4321 (2)a=10,b=432,c=8765 (3)a=98,b=765.000000,c=4321.000000 (4)a=98,b=765,c=4321.0 20、若int 类型占两个字节,则以下程序段的输出结果是 int a=-1; printf(“%d,%u\n”,a,a); (1) –1,1 (2) –1,32767 (3) –1,32768 (4) –1,65535 21、以下程序段的输出结果是 main() { int a=2,b=5; printf(“a=%%d,b=%%d\n”,a,b); } (1) a=%2,b=%5 (2) a=2,b=5 (3) a=%%d,b=%%d (4) a=%d,b=%d 22、若a,b,c,d都是int类型变量且初值为O,以下选项中不正确的赋值 语句是 (1)a=b=c=100;(2)5++;(3)c+b; 4)d=(c=22)-(b++);23、以下合法的C语言赋值语句是 (1)a=b=58 (2)k=int(a+b);(3)a=58,b=58 (4)--i;24、以下程序的输出结果是 main() { int w=4,x=3,y=2,z=1; printf(“%d\n”,(w (1)1 (2)2 (3)3 (4)4 25、 下列程序的输出结果是 main() { double d=3.2; int x,y; x=1.2; y=(x+3.8)/5.0; printf("%d \n", d*y); } 1) 3 2) 3.2 3) 0 4) 3.07 26、 在C 语言中,合法的长整型常数是 1) OL 2) 4962710 3) 324562& 4) 216D 27、假定x 和y 为double 型,则表达式x=2,y=x+3/2的值是 1) 3.500000 2) 3 3) 2.000000 4) 3.000000 28、 设正x 、y 均为整型变量,且x=10 y=3,则以下语句的 输出结果是 pprintf("%d,%d\n",x--,--y); 1) 10,3 2) 9,3 3) 9,2 4)10,2 29、x 、y 、z 被定义为int 型变量,若从键盘给x 、y 、z 输入 数据,正确的输入语句是 1) INPUT x 、y 、z; 2) scanf("%d%d%d",&x,&y,&z); 3) scanf("%d%d%d",x,y,z); 4) read("%d%d%d",&x,&y,&z); 30、下列不正确的转义字符是 1)'\\' 2)'\" 3)'74' 4)'\ddd' 31、执行下面程序中的输出语句后,a 的值是 main( ) { int a; printf(“%d \n”,(a=3 * 5,a * 4,a + 5)); } ① 65 ② 20 ③ 15 ④ 10 32、在一个C 语言程序中 1) main 函数必须出现在所有函数之前 2) main 函数可以在任何地方出现 3) main 函数必须出现在所有函数之后 4) main 函数必须出现在固定位置 二、编制程序 1、若a=3,b=4,c=5,x=1.2,y=2.4,Z=-3.6,u=51274,n=128765,cl=’a ’, c2=’b ’。若想得到以下的输出格式和结果(见结论),请写出程序。 a=3 b=4 c=5 x=1.200000,y=2.400000,z=-3.600000 x+y=3.60 y+z=-1.20 z+x=-2.40 u=51274 n=128765 cl=ˊa ˊor97(ASCII) cl=ˊb ˊor98(ASCII) 2、输入一个华氏温度,要求输出摄氏温度。公式为: )32(95-= F c 输出要有文字说明,取2位小数。 班级: 姓名: 学号: 《C程序设计》单元练习(选择结构) 一、选择题 1、在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的 表达式为________ (1)a<>0 (2)!a (3)a=0 (4)a 2、以下程序段中不能根据x值正确计算出y值的是 (1)if(x>0) y=1; (2)y=0; else if(x==0) y=0; if(x>0) y=1; else y=-1; else if(x<0) y=-1; (3)y=0; (4)if(x>=0) if(x>=0); if(x>0) y=1; if(x>0) y=1 ; else y=0; 3、有以下程序 main() { int a=15,b=21,m=0; switch(a%3) { case 0:m++;break; case 1:m++; switch(b%2) { default:m++; case 0:m++;break; } } printf(“%d\n”,m); } 程序运行后的输出结果是 (1)1 (2) 2 (3) 3 (4)4 4、以下程序的输出结果是 main() { int a=4,b=5,c=0,d; d=!a&&!b||!c; printf("%d\n",d); } (1)1 (2)0 (3)非0的数(4)-1 5、表达式“0?(0?3:2):(10?1:0)”的值为。 (1)3 (2)2 (3)1 (4)0 6、若变量已正确定义,那么以下语句段的输出结果是 x=0;y=2;z=3; switch(x) { case 0: switch(y==2) { casa 1: printf(“*”);break; case 2: printf(“%”);break; } case 1: switch(z) { case 1: printf(“$”); case 2: printf(“*”);break; default: printf(“#”); } } (1)%$ (2)#* (3)*# (4)**$ 7、执行下列语句后,C的值是。 int a,b,c,m=1,n=0; a=(- -m= =n++)?- -m:++n; b=m++;c=- -n; (1)0 (2)1 (3)2 (4)-1 8、设实型变量为f1、f2、f3、f4的值分别为4,3,2,1整型变量ml、m2 的值为1。表达式“(ml=fl>f2)&&(m2=f3 (1)0 (2)1 (3)2 (4)出错 9、若执行以下程序时从键盘上输入3和4,则输出结果是。 main() { int a,b,s; scanf(“%d%d”,&a,&b); s=a; if(a s*=s; printf(“%d/n”,s);} (1)14 (2)16 (3)18 (4)20 10、下面的程序片段所表示的数学函数关系是。 y=-1; if(x!=0) if(x>0) y=1; else y=0; - 1(x<0) 1 (x<0) (1)y= 0 (x=0) (2)y= -1 (x=0) 1(x>0) 0 (x>0) 0(x<0)-1 (x<0) (3)y= -1 (x=0) (4)y= 1 (x=0) 1(x>0) 0 (x>0) 11、有如下条件表达式,若a=2、b=4、c=5 、d=7则表达式的值为。 a > b ? a : c > d ? c : d (1) 2 (2) 4 (3) 5 (4)7 12、有如下表达式,若a=2、b=3、c=5、d=4、m和n的原值为8,则m、n的 值分别为。 (m = a > b)&& (n = c > d) (1)8 8 (2)8 1 (3)0 8 (4)0 1 13、把下面数学表达式,表示成C语言表达式。 -5 ≤ x < 10 (1)-5 ≤ x < 10 (2)x ≥ -5 && x < 10 (3)x >= -5 && x < 10 (4)-5 =< x, x < 10 14、已知grade=’B’,则下列程序段的运行结果为。 switch(grade) {case …A? : printf (“85~100\n”); break; case ?B?: printf (“70~84”); case ?C?: printf (“60~69\n”); break; default: printf (“error\n”); } (1)70~84 (2)60~69 (3)85~100 (4)70~84 60~69 二、编程题 1、有一函数: x (-5 y= x-1 (x=0) x+1 (0 编写一程序,要求输入x的值(x为整型),输出y的值。 分别用(1)if语句(2)switch语句 2、从键盘输入一个年份,判断是否为闰年。 班级:姓名:学号: 《C程序设计》单元练习(循环结构) 一、选择题 1、对以下for循环,叙述正确的是 for(x=0,y=0;(y!=123)&&(x<4);x++,y++); (1) 是无限循环(2) 循环次数不定(3) 执行了4次(4) 执行了3次 2、若有程序段: x=99; while(x-2)x--;则循环结束时,x= 。 (1)99 (2)2 (3) 1 (4)0 3、下列程序段的执行结果是输出。 x=3; do { printf(″%2d″,x--); }while(!x); (1) 3 2 1 (2)3 (3)2 1 (4)2 1 0 4、执行下列程序后,i的值是。 int i,x; for(i=1,x=1;i<20; i++) {if (x>=10) break; if(x%2= =1) {x+=5; continue; } x-=3; } (1) 4 (2)5 (3)6 (4)7 5、以下程序段输出结果是 main() { int k,j,s; for(k=2;k<6;k++,k++) { s=1;for(j=k;j<6;j++) s+=j;} printf(“%d\n”,s);} (1)9 (2)1 (3)11 (4)10 6、以下程序段的输出结果是 int x=3 do { printf(“%3d”,X-=2);} while(!(--x)); (1)1 (2)3 0 (3)1 -2 (4)死循环7、以下正确的是 (1)do—while语句构成的循环不能用其它语句构成的循环来代替。 (2)do—while语句构成的循环只能用break语句退出 (3)用do—while语句构成循环时,只有在while后的表达式非零时结束循环 (4)用do—while语句构成循环时,只有在while后的表达式为零时结束循环 8、以下程序的输出结果是 main() { int x,i; for(i=1; i<=100; i++) { x=i; if(++x%2==0) if(++x%3==0) if(++x%7==0)printf(“%d”,x);} printf(“\n”); } (1)39 81 (2)42 84 (3)26 68 (4)28 70 二、填空题 1、执行语句:for(i=1;i++<4;);后变量i的值是 2、以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成 绩和最低成绩当输入负数时,结束输入,请填空。 main() { `float x ,amax,amin; scanf(“%f”,&x); amax=x;amin=x; while( ) { if(x>amax)amax=x; if( )amin=x; scanf(“%f”,&x);} printf(“\namax=%f\namin=%f\n”,amax,amin); } 3、PI函数可根据下面公式,计算精度满足eps时的值。请填空。 PI/2=1+1/3+1/3×2/5+1/3×2/5×3/7+1/3×2/5×3/7×4/9+…… main( ) { double s=0.0,t=1.0 , eps=1E-6 ; int n; for(;t>eps;n++) { s+=t;t= } printf ( “PI=%f ”,(2.0* ));} 4、有如下一段程序,下面程序的运行结果为________________. main() { int y=12; for(;y>0;y--) { if(y%3= =0) { printf(“%d,”,--y); continue;} } } 5、源程序如下,下面程序的运行结果为________________. main() {int i; for(i=10; i<100;i++) if(i%7= =0&&i%3!=0) printf(″%4d″,i);} 三、编程题: 1、请编写输出以下图案的程序 A BBB CCCCC DDDDDDD EEEEEEEEE 2、求 ∑=201!n n (即求1!+2!+3!+4!+。。。+20!) 3、打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数 字立方和等于该数本身。例如,153是一水仙花数,因为333351153++=。 班级: 姓名: 学号: 《C程序设计》单元练习(数组) 一、选择题 1.假设int 型变量占两个字节的存储单元,若有以下定义,则数组x在 内存中所占字节数为 int x[10]={0,2,4}; 3 6 ● 10 ? 20 2.若给出以下定义,则正确的叙述是 char m[ ]=”abcde”; char n[ ]={‘a’,’b’,’c’,’d’,’e’}; 数组m的长度大于数组n的长度 数组m和数组n的长度相同 ●数组m和数组n等价?数组m的长度小于数组n的长度 3.以下一维数组a的正确定义是 int a(10); int n=10, a[n]; ● int n;scanf(“%d”,&n);int a[n];? #define SIZE 10 int a[SIZE]; 4.在定义 int a[5][4]; 之后,对a的正确引用是 a[2][4] a[5][0] ● a[0][0] ? a[0,0] 5.若有定义语句:则输出结果是 char s[10]; s=”abcd”; printf(“%s\n”,s); 输出 abcd 输出 a ●出现编译错误?输出 bcd 6.以下程序段的输出结果是 char str[ ]=”ab\n\012\\\””; printf(“%d\n”,strlen(str)); 12 6 ● 4 ? 3 7. 调用函数strlen(“abcd\0ef\0g”)的结果是 4 6 ● 11 ? 7 8.下列程序的执行结果是 main( ) { int I,k,a[10],p[3]; k=5; for(I=0;I<10;I++) a[I]=I; for(I=0;I<3;I++) p[I]=a[I*(I+1)]; for(I=0;I<3;I++) k+=p[I]*2; printf(“%d\n”,k); } 20 21 ● 22 ? 23 9. 以下程序的执行结果是 #include “string.h” void main( ) { char s[20]=”hello\0\t\’\\”; printf(“%d %d\n”,strlen(s),sizeof(s)); } 9 9 5 20 ● 13 20 ? 20 20 二、填空题: 1.下列程序的执行结果是 #include main( ) { int a[ ]={1,2,3,4},m,n,s=0; n=1; for(m=3;m>=0;m--) { s=s+a[m]*n; n=n*10; } printf(“s=%d\n”,s); } 2、下列程序的执行结果是 #include void main( ) { int a[3][3]={1,2,3,4,5,6,7,8,9},i,m=1; for(i=0;i<=2;i++) m=m*a[i][i]; printf(“m=%d\n”,m); } 3、下列程序的执行结果是 void main( ) { int b[4][4]={{1,3,5},{2,4,6},{3,5,7}}; printf(”%d,%d,%d\n”,a[0][3],a[1][2],a[2][1],a[3][0]); } 4. 运行下面程序后,若从键盘输入: good↙ good?↙ 则程序的输出结果是 #include void main( ) { char s1[30],s2[30]; gets(s1);gets(s2); if(!strcmp(s1,s2)) printf(“*”); else printf(“#”); printf(“%d\n”,strlen(strcat(s1,s2))); } 5. 下列程序的输出结果是 #include void main( ) { char str[30]; strcpy(&str[0],”NEXT”); strcpy(&str[1],”OR”); strcpy(&str[2],”TICE”); printf(“%s\n”,str); } 6. 下列程序的输出结果是 #include void main( ) { char w[ ] [10]={ “ABCD”, “EFGH”, “IJKL”, “MNOP” }; int k; for (k=1;k<3;k++) printf(“%s\n”,&w[k][k]); } 7. 下列程序的输出结果是 #include void main( ) { char arr[2][4]; strcpy(arr, “you”); strcpy(arr[1], “me”); arr[0][3]=’&’; printf(“%s\n”,arr); } 8. 已知a数组中的数,按由小到大的顺序存放,下列程序把a数组中相同的 数删得只剩下一个,然后以每行5个数的形式输出a数组中的数,请填空。 #include #define MAX 20 void main( ) { int a[MAX],i,j,n; for(i=0;i n=i=MAX-1; while(i>0) { if(a[i]==a[i-1]) { for (j= ;j<=n;j++) a[ ]=a[j]; n--; } i--; } for(i=0;i<=n;i++) { if( ) printf(“\n”); printf(“%3d”,a[i]); } printf(“\n”); } 9. 下面程序的功能是将一个字符串按逆序存放,请填空。 #include #include void main( ) { char st[50],m; int i,j; gets(st); for( i=0;j=strlen(st);i< ;i++,j--) { m=st[i]; st[i]= ; =m; } printf(“%s\n”,st); } 10.下列程序是对从键盘输入的两个字符串进行比较,然后输出两个 字符串中第一个不相同字符的ASCII码之差,例如:输入的两个字符 串分别为:aab和aacc, 则输出-1.请填空。 #include void main( ) { char st1[50],st2[50],c; int n,diff; printf(“\n 请输入第一个字符串:\n”); gets(st1); printf(“\n 请输入第二个字符串:\n”); gets(st2); n=0; while((st1[n]==st2[n]) && (st1[n]!= )) n++; diff= ; printf(“%d\n”,diff); } 11.下面程序可以把输入的十进制数以十六进制数的形式输出, 请填空。 void main( ) { char b[17]={ “0123456789ABCDEF”}; int c[64],d,i=0,base=16; long n; printf(“Enter a number:\n ”); scanf(“%ld”,&n); do { c[i]= ; i++;n=n/base;} while(n!=0); printf(“Transmite new base:\n”); for(--i;i>=0;--i) { d=c[i]; printf(“%c”,b ); } printf(“\n”); } 三、编制程序 1、在歌手大奖赛中有10名评委打分,分数采用百分制,歌手的最后得分是: 班级:姓名:学号: 《C程序设计》单元练习(函数) 一、选择题 1、以下不正确的描述为 (1)不同函数中可以使用相同名字的变量; (2)形参是局部变量; (3)一个函数内部定义的变量只能在本函数范围内有效 (4)在一个内部的复合语句中定义的变量可以在本函数范围内有效 2、以下函数的类型是 fff(float x) { printf (“%d\n”,x*x);} (1)与参数X的类型相同(2)void型 (3)int类型(4)无法确定 3、以下函数调用语句中,含有的实参个数是 func((exp1,exp2),(exp3,exp4,exp5)); (1)1 (2)2 (3)4 (4)5 4、以下程序的输出结果是 func(int a,int b) { int c; c=a+b; return c;} main() { int x=6,y=7,z=8,r=0; r=func((x--,y++,x+y),z--); printf(“%d\n”,r);} (1)11 (2)20 (3)21 (4)31 5、以下程序的输出结果是 func(int a,int b,int c) { c=a*b;} main() { int c; fun(2,3,c); printf(“%d\n”,c);} (1)0 (2)1 (3)6 (4)无确定值 6、以下程序的输出是 double f(int n) { int i;double s;s=1.0; for(i=1;i<=n;i++)s+=1.0/i; return s;} main( ) { int i,m=3;float a=0.0; for(i=0;j (1)5.500000 (2)3.000000 (3)4.000000 (4)8.25 7、若x为int型变量,则以下函数fun的类型为() fun(x) { printf(“%d\n”,x);} (1) 返回值为void类型 (2) 无法确定返回值 (3) 返回值为int类型 (4) 无返回值 8、以下叙述正确的是 (1)C程序中各函数之间既允许直接递归调用,也允许间接递归调用;(2)C程序中各函数之间不允许直接递归调用,也不允许间接递归调用;(3)C程序中各函数允许直接递归调用,不允许间接递归调用; (4)C程序中各函数之间不允许直接递归调用,允许间接递归调用。 9、C语言中,形参缺省的存储类别是 (1)auto(自动)(2)static(静态) (3)register(寄存器)(4)extern(外部) 10、以下叙述中不正确的是 (1)一个变量的作用域完全取决于变量定义语句的位置 (2)全局变量可以在函数以外的任何部位进行定义 (3)局部变量的“生存期”只限于本次函数调用,因此不可能将局部变量的运算结果保存至下一次调用。 (4)一个变量说明为static存储类别是为于限制其它编译单位的引用。 11、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是(1)地址传递(2)单向值传递 (3)由实参传给形参,再由形参传回实参(4)传递方式由用户指定12、C语言中函数能否嵌套调用和递归调用? (1)二者均不可(2)前者可,后者不可 (3)前者不可,后者可(4)二者均可以 13、有以下程序 char fun(char x , char y) { if(x return y; } main( ) { int a='9',b='8',c='7'; printf("%c\n",fun(fun(a,b),fun(b,c))); } 程序的执行结果是 (1)函数调用出错(2)8 (3)9 (4)7 二、填空题: 1、以下程序的输出是 unsigned fun6(unsigned num) { unsigned k=1; do { K*=num%10;num/=10;} while(num); return k;} main(){ unsigned n=26; printf (“%d\n”,fun6(n);} 2、以下程序的输出结果是 double sub(double x,double y,double z) { y-=1.0; z=z+x; return z ;} main() { double a=2.5, b=9.0; printf(“%f\n”,sub(b-a,a,a)); } 3.以下程序段的输出结果是 fun1(int a,int b) { int c; a+=a;b+=b; c=fun2(a,b); return c*c; } fun2(int a,int b) { int c; c=a*b%3; return c; } main() { int x=11,y=19; printf(“%d\n”,fun1(x,y)); } 4、以下程序段的输出结果是 main(){ int i=2,p; p=f(i,i+1); printf(“%d”,p)} 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);} 三、编制程序 1、写一函数,使输入的一个字符串按反序存放,在主函数中输入和输出 字符串。 2、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数 调用这个函数,并输出结果,两个整数由键盘输入。 3、写一函数,使给定的一个二维数组(3*3)转置,既行列互换,主函数 中调用此函数,并完成输入、输出数组。 4、输入10个学生5门课的成绩,分别用函数求:①每个学生平均分; ②每门课的平均分;③找出最高的分数所对应的学生和课程。 5、一函数,用“起泡法”对输入的10个字符按由小到大顺序排列。 班级:姓名:学号: 《C程序设计》单元练习(指针) 一、选择题 1、若有定义: int X,*pb;则以下正确的赋值表达式是 (1)pb=&x (2)pb=x (3)*pb=&x (4)*pb=*x 2、以下程序的输出结果是 main(){ int k=2,m=4,n=6; int *pk=&k,pm=&m,*p; *(p=&n)=*pk*(*pm);printf(“%d\n”,n);} (1)4 (2)6 (3)8 (4)10 3、已知指针P的指向如下图所示,则执行*P++;后*P的值是 ↓ a[0] a[1] a[2] a[3] a[4] (1)20 (2)30 (3)21 (4)31 4、以下程序的输出结果是 void sub(int x,int y,int *z) { *z=y-x;} main() { int a,b,c; sub(10,5,&a);sub(7,a,&b);sub(a,b,&c); printf(“%d,%d,%d\n”,a,b,c);} (1)5,2,3 (2)-5,-12,-7 (3)-5,-12,-17 (4)5,-2,-7 5、以下程序的输出结果是 void prtv(int *x){ printf(“%d\n”,++*x);} main( ) { int k=25; prtv(&k):} (1)23 (2)24 (3)25 (4)26 6、以下程序的输出结果是 void fun(float *a,float *b) { float w; *a=*a+*a; w=*a; *a=*b; *b=w;} main() { float x=2.0,y=3.0; float *px=&x,*py=&y; fun(px,py); printf(“%2.0f,%2.0f\n”,x,y); } (1)4,3 (2)2,3 (3)3,4 (4)3,2 7、下程序的输出是 void sub(float x,float *y,float *z) { *y=*y-1.0; *z=*z+x;} main( ) { float a=2.5, b=9.0 *pa, *pb; pa=&a; pb=&b; sub(b-a,pa,pb);printf(“%f\n”,a);} (1)9.000000 (2)1.500000 (3)8.000000 (4)10.500000 8、以下程序的输出结果是 main() { int a[ ]={2,4,6,8},*p=a,i; for(i=0;i〈4;i++〉 a[i]=*p++;printf(“%d\n”,a[2]);〉(1)6 (2)8 (3)4 (4)2 9、以下程序段的输出结果是 char str[ ]=“ABCD”,*p=str; printf(“%d\n”,*(p+4)); (1)68 (2)0 (3)字符D地址(4)不确定的值10、若有说明 int i,j=7,*P=&i,则与i=j等价的语句是 (1)i=*P;(2)*P=*&j;(3)i=&j;(4)i=**P;11、设有以下语句,则不是对a数组元素的正确引用。 int a[10]={0,1,2,3,4,5,6,7,8,9 },*p=a,i; (1)a[p-a] (2)*(&a[i])(3)p[i] (4)*(*(a+i))12、以下程序的输出结果是 main() { int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(“%d\n”,*(p+2);) (1)3 (2)4 (3)1 (4)2 13、以下程序的输出结果是 main() { int a[ ]={2,4,6,8,10},y=1,x,*p; p=&a[1]; for(x=0;x〈3;x++) y+=*(p+x);printf(“%d\n”,y);} (1)17 (2)18 (3)19 (4)20 二、填空题: 1、以下程序的输出结果是 int ast (int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y;} main(){ int a,b,c,d; a=4;b=3;ast(a,b,&c,&d); printf(“%d %d\n”,c,d);} 2、下面程序的输出结果是 #include 〈stdio.h〉 void as(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y;} main() { int a=4,b=3,c,d;as(a,b,&c,&d); printf(“%d ,%d\n”,c,d);} 3、下面程序的输出结果是 #include 〈stdio.h〉 int a[ ]={2,4,6,8}; main() { int i; int *p=a; for(i=O;i〈4;i++〉a[i]=*p++;printf(“%d\n”,a[2]);) 4、设有如下一段程序: int *var,ab; ab=100;var=&ab;ab=*var+10;执行上面程序后,ab的值为 5、下面程序的输出结果是 main() { int a[5]={2,4,6,8,10},*p,**k; p=a;k=&p; printf(“%d”,*(p++)); printf(“%d\n”,**k);} 6、有以下语句,则使指针P指向值为36的数组元素的表达式是 int a[10]={19,23,44,17,37,28,49,36},*p;p=a; 7、下面程序的输出是 #define PR(ar) printf(“%d”,ar) main() { int j,a[ ]={1,3,5,7,9,11,13,15},*p=a+5; for (j=3;j;j- -) { switch(j) { case 1: case 2:PR(*p++):break; case 3:PR(*(--p));} } } 8、下面程序的输出是 main(){ int y=9; for(;y>0;y - -) { if(y%3= =0) { printf(“%d”,- -y);continue;} } } 9、以下程序的输出结是 main() { char s[ ]=“ABCD”,*p; for(p=s;p〈s+4;p++〉printf(“%s\n”,p); ) 10、以下程序的输出结果是 #include“stdio.h” void fun(char *w,int m) { char s,*p1,*p2; p1=w; p2=w+m-1; while(p1 { s=*p1++; *p1=*p2- -; *p2=s;} } 三、编制程序(要求用指针方法处理,程序请书写于背面) 1、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1)输入10个整数; 2)进行处理; 3)输出10个整数。 2、有N个整数,使前面各数顺序向后移M个位置,最后M个数变成最前面M个数。写一函数实现此功能,在主函数中输入N个数和输出调整后的N个数。 3、写一函数,求一个字符串的长度。在主函数中输入字符串并输出其长度。 4、写一函数,将一个3×3的矩阵转置。 班级:姓名:学号: 《C程序设计》单元练习(构造类型、文件) 一、选择题 1. 当定义一个结构体变量时系统分配给它的内存是____。 A. 各成员所需内存的总和。B. 变量第一个成员所需内存容量。C. 成员中占内存量大者所需的容量。D. 变量最后一个成员所需内存容。 2. 当定义一个共用体变量时系统分配给它的内存是____。 A. 各成员所需内存的总和。B. 变量第一个成员所需内存容量。C. 成员中占内存量大者所需的容量。D. 变量最后一个成员所需内存容。 3. C语言中的共用体变量在程序执行期间____。 A. 所有成员驻留在内存中。B. 只有一个成员驻留在内存中。C. 部分成员驻在内存中。D. 没有成员驻留在内存中。 4 以下对结构体变量stu1中成员age的非法引用是______。 struct student { char name[10]; int age ; } stu1 ,*p; p=&stu1; A. stu1.age B. p->age C. (*p).age *D. student.age 5. 设有以下语句 typedef struct S { int g; char h;} T; 则下面叙述中正确的是______。 A.可用S定义结构体变量 B. 可以用T定义结构体变量* C. S是struct类型的变量 D. T是struct S类型的变量 6. 以下程序的运行结果是______。 #include “stdio.h” main( ) { typedef union { long i; int k[5]; char c; } DA TE ; struct date {int cat ; DA TE cow ; double dog ; } too ; DA TE max; printf(“%d\n”, sizeof(struct date)+sizeof(max)); } A. 30 B. 25 C. 18 D. 8 7. 有以下程序,程序运行后的输出结果是____。 struct s { int x,y; } data[2]={10,100,20,200}; main() { struct s *p=data; printf("%d\n",++(p->x)); } A.10 B.11 C. 20 D. 21 8. C语言中文件的存取方式____。 A. 只能顺序存取B. 只能随机存取(或称直接存取)C. 可以顺序存取,也可随机存取*D. 只能从文件的开头进行存取 9.有以下结构类型说明和变量定义,则指针变量p在内存所占字节数是____。Struct stud { char num[6]; int s[4]; double ave; } a,*p; A. 2 * B. 24 C. 6 D. 8 10. C语言中,从计算机的内存中将数据写入文件,称为____。 A. 输入B. 修改C. 输出D. 删除 11. 若fp是某文件指针,且已读到文件尾,则表达式feof(fp)的返回值是____。 A. EOF B. -1 C. 非零值D. NULL 12. 若调用fputc函数输出字符成功,则其返回值是____。 A. EOF B. 1 C. 0 D. 输出的字符13. C语言中函数fgets(str,n,fp)的功能是____。 A. 从文件fp中读取长度n的字符串存入str指向的内存 B.从文件fp中读取长度不超过n-1的字符串存入str指向的内存* C.从文件fp中读取n个字符串存入str指向的内存 D.从串str读取至多n个字符到文件fp 14.若需要打开一个存在的非空文件file进行修改,正确的语句是______。 A. fp=fopen(“file”,”r”);B. fp=fopen(“file”,”a+”); C. fp=fopen(“file”,”w+”);D. fp=fopen(“file”,”r+”);* 15. 若fp指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值______。 *A . 0 B. 1 C. -1 D. 一个非0值 16. 下列关于C语言数据文件的叙述中正确的是______。 A.文件由ASCII码字符序列组成,C语言只能读写文本文件 B.文件由二进制数据序列组成,C语言只能读写二进制文件 C.文件由记录序列组成,可按数据存放形式分为二进制文件和文本文件 D.文件由数据流组成,可按数据存放形式分为二进制文件和文本文件* 二、填空题: 1. 有以下程序 #include main( ) { FILE *fp; int i,k=0,n=0; fp=fopen(“d1.dat”,”w”); for(i=1;i<4;i++) fprintf(fp,”%d”,i); fclose(fp); fp=fopen(“d1.dat”,”r”); fscanf(fp,”%d%d”,&k,&n);printf(“%d %d\n”,k,n); fclose(fp); } 执行后输出结果是______。 2、以下定义,能输出字母M的语句是 struct person{ char name[9];int age;}; struct person class [10]={“John”,17, “Paul”,19; “Mary”,18, “Adam”,16,};