习题一 学号: 专业: 姓名: 一.填空题 1.i为int型变量,且初值是3,有表达式i++(3,则 该表达式的值是 ,变量i的值是 。 2.i为int 型变量,且初值是2,有表达式++i(3, 则 该表达式的值是 ,变量i的值是 。 3.i为int型变量,且初值是3,有表达式i=i+=i(5,则 该表达式的值是 ,变量i的值是 。 4.i为int型变量,且初值是3,有表达式i=(a=5,b=10)+(i+=b, b+=a), 则该表达式的值是 ,变量i,a,b的值分别是 。 5.i为int型变量,且的初值是3,有表达式i=(i+=i, i(=i), i(10, i%4,则 该表达式的值是 ,变量i的值是 。 6.说明变量为双精度的关键字是 。 7.在Turbo C中,整型数据的表示形式有 种。 二.选择题 1.若a, b, c, d都是int型变量且初值均为10,不正确的赋值语句是( )。 A.a=b=c=d; B.a=b++; C.a+b++; D.d=(a=b=125)(c++; 2.若a, b, c, d都是float型变量且初值为10.95,不正确的赋值语句是( )。 A.a=b=15; B.d=int(a+c); C.a=(int)(b+1); D.++a; 3.若a, b, c均为int型变量且有值,要交换变量a和b的值,正确的语句组是( )。 A.c=a, a=b, b=c; B.a=b; b=a; C.c=a; a=b; b=c ; D.c=a; b=a; a=c; 4.若a, b均为int型变量,x, y均为float型变量,正确的输入函数是( )。 A.scanf("%d%f",&a,&b); B.scanf("%d%f",&a,&x); C.scanf("%d%d",a,b); D.scanf("%f%f",x,y); 5.若x, y均为double型变量,正确的输入函数是( )。 A.scanf("%f%f",&x,&y); B.scanf("%d%d",&x,&y); C.scanf("%lf%lf",&x,&y); D.scanf("%lf%lf",x,y); 6.若x为char型变量,y为int型变量,x, y均有值,正确的输出函数是( )。 A.printf("%c%c",x,y); B.printf("%c%s",x,y); C.printf("%f%c",x,y); D.printf("%f%d",x,y); 7.若x, y均为int型变量且有值,要输出x, y的值,正确的输出函数是( )。 A.printf("%d%d",&x,&y); B.printf("%f%f",x,y); C.printf("%f%d",x,y); D.printf("%d%d",x,y); 8.x为int型变量,且值为2345,不正确的输出函数是( )。 A.printf("%d",x); B.printf("%3d",x); C.printf("%c",x) ; D.printf("%s",x); 习题二 学号: 专业: 姓名: 一.写出下列程序的运行结果 1.下面程序的运行结果是( )。 main( ) {int a, b; a=23; b=87; printf("%d%d\n",a,b); } A. 23 B.23,87 C. a=23 D.2387 87 b=87 2.下面程序的运行结果是( )。 main( ) {float x, y; x=12.34; y=0.00045; printf("%f,%f",x,y); } A.12.34,0.00045 B.12.340000,0.000450 C.12.34 0.00045 D.12.340000 0.000450 3.下面程序的运行结果是( )。 main( ) {int h=34, k=56; printf("h=%d\nk=%d\n",h,k); } A. h=34 B.h=34 k=56 C.34 56 D. 34 k=56 56 4.下面程序的运行结果是( )。 main( ) {float x=12.34567, y=345.2354; printf("x=%5.3 f, y=%5.3 f ",x,y); } A.12.346,345.235 B.x=12.346, y=345.235 C.12.345670,345.235000 D.x=12.34567, y=345.2354 5.下面程序的运行结果是( )。 main( ) {int s=(3, w=5; printf("%u, %u, %d, %d",s,w,s,w); } A.(3,5,(3,5  B.(3 5 (3 5  C.65533,5,(3,5  D.65533,65531,(3,5 习题二 学号: 专业: 姓名: 6.运行下面程序时若从键盘输入:123 45 6789 ( 输出结果是( )。 main( ) { int a, b, c; scanf("%3d%3d%3d",&a,&b,&c); printf("a=%d, b=%d, c =%d", a,b,c) ; } A.a=123, b=45, c=678 B.a=123 b=454 c=678 C.123, 45, 678 D.a=123, b=456, c=789 7.运行下面程序时若从键盘输入:123456789( 输出结果是( )。 main( ) {int a, b, c; scanf("%3d%3d%3d",&a,&b,&c); printf("a=%d, b=%d, c=%d",a,b,c); } A.a=123, b=45, c=678 B.a=123, b=456, c=789 C.123, 456, 789 D.a=123 b=456 c=789 8.以下程序若a=12, b=45, c=3467, 正确的数据输入方法是( )。 main( ) {int a, b, c; scanf("a=%dB=%dc=%d",&a,&b,&c); printf("%d, %d, %d\n",a,b,c); } A.a=12 b=45c=3467 B.12 45 3467 C.a=12B=45c=3467 D.a=12 b=45 c=3467 二.填空题 1.C语句的最后用 结束。 2.执行printf("%d",045); 函数的结果是 。 3.执行printf("%u\n",-0x2a); 函数的结果是 。 4.若x是整型,且x = (1,执行printf("%o\n", x ); 函数的结果是 。 5.若一个C程序包含若干个函数,程序的执行总是从 函数开始。 习题三 学号: 专业: 姓名: 1.设a=1, b=2, c=3,写出下列关系表达式的值 (1)(a<b)<(c<a+b) 。 (2)(c<b)>(a<c) 。 (3)a+b==c 。 (4)a+b>=c 。 2.设a=1, b=2, c=3, d=4写出下列逻辑表达式的值 (1)a && b && c 。 (2)a || !b || !c 。 (3)++a || b++ && ++c || d++ 。 (4)(!(a+b)+c(1)&& (b+c/2) 。 (5)a !=11 && b<4 。 3.设x=y=z=(1,则执行逻辑表达式++x || ++y && ++z后,x,y,z的值分别为 。 4.设x=y=z=1, 执行逻辑表达式++x && y(( || ++z后,x, y, z的值分别为 。 5.设a=1, b=2, c=3, d=4, x=1, y=1,则执行逻辑表达式(x=a>b) && (y=c>d)后,x,y的值分别为 。 6.在以下一组运算符中,优先级最高的运算符是( ) A.<= B.= C.% D.&& 7.以下程序的运行结果是 。 main( ) { int a=(1, b=4, k; k=(++a<0) && !(b((<=0); printf("%d,%d,%d\n",k,a,b); } 8.在C中,下列哪一个表达式能正确表示a (10或a ( 0( ) A.a>=10 or a<=0 B.a>=10 | a<=0 C.a>=10 || a<=0 D.a>=10 && a<=0 9.若a,b,c均为int型变量,则执行以下语句后,a,b,c的值分别为 。 a=b=c=1; ++a || ++b && ++c 习题三 学号: 专业: 姓名: 10.给出下列程序的输出结果 main( ) {int a, b, c; a='E'; b='J'; c='W'; if (a>b) if (a>c) printf("%c\n",a); else printf("%c\n",c); else if (b>c) printf("%c\n",b); else printf("%c\n",c); } 结果是: main( ) {int x=100, a=10, b=20, OK1=5, OK2=0; if (a<b) if (b!=15) if (!OK1) x=1; else if (OK2) x=10; x=(1; printf("%d\n",x); } 结果是: 运行两次下面的程序,如果分别从键盘上输入数值6和4,其运行结果分别为 main( ) {int x; scanf("%d",&x); if (x++>5) printf("%d", x); else printf("%d\n",x((); } 输入6时,结果是: 输入4时,结果是: 11.若有定义:float x; int a, b; 再有下面4个switch语句 A.switch(x) {case 1.0: printf("(\n"); case 2.0: printf("((\n");} B.switch(x) {case 1,2: printf("(\n";) case 3: printf("((\n");} C.switch(a+b); {case 1 : printf("(\n"); case 1+2: printf("((\n");} D.switch(a+b) {case 1: printf("(\n"); case 2: printf("((\n");} 正确的switch语句是( ),其它switch语句错在什么地方? 习题四 学号: 专业: 姓名: 1.下面程序若在运行时从键盘输入3.6 2.4 (,运行结果为( )。 #include"math.h" main( ) {float x,y,z; scanf("%f%f",&x,&y); z=x/y; while (1) {if (fabs(z)>1.0) {x=y; y=z; z=x/y;} else break; } printf("%f\n",y); } A.1.500000 B.1.600000 C.2.000000 D.2.400000 2.下面程序的输出是( )。 main( ) {int x=3,y=6,a=0; while (x++!=(y(=1)) {a+=1; if (y<x) break; } printf("x=%d,y=%d,a=%d\n",x,y,a); } A.x=4, y=4, a=1 B.x=5, y=5, a=1 C.x=5, y=4, a=3 D.x=5, y=4, a=1 3.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束,请填空。 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); } 习题四 学号: 专业: 姓名: 4.下面程序的输出是:   。 main( ) {int x=2; while (x((); printf("%d\n",x); } 5.下面程序的运行结果为: 。 main( ) {int i=0, sum=1; do {sum+=i++;} while (i<6); printf("%d\n",sum); } 6.C语句中,下列说法中正确的是( )。 A.不能使用do-while语句构成的循环; B.do-while语句构成的循环必须用break语句才能退出; C.do-while语句构成的循环,当while语句中的表达式值为非零时结束循环; D.do-while语句构成的循环,当while语句中的表达式值为零时结束循环。 7.下面程序的输出结果是: 。 main( ) {int y=9; for ( ; y>0; y(() if (y%3==0) {printf("%d",((y); continue; } } 8.若x是int型变量,且有下面的程序段,其运行结果为( )。 for (x=3; x<6; x++) printf((x%2)?("((%d"):("##%d\n"),x); A.((3 B. ##3 C. ##2 D. ((3##4 ##4 ((3 ((4##5 ((5 ((5 ##5 习题四 学号: 专业: 姓名: 9.以下程序的运行结果是( )。 main( ) {int i; for (i=1;i<=5;i++) {if (i%2) printf("("); else continue; printf("#"); } printf("$\n"); } A.(#(#(#$ B.#(#(#($ C.(#(#$ D.#(#($ 10.下面程序的功能是根据以下的公式,返回满足精度eps要求下的值,请填空。 main( ) {double s=0.0, t=1.0; int n; float eps; scanf("%f",&eps); for(( ;t>eps; n++) {s+=t; t=n(t/(2(n+1); } printf("pi=%f\n", ( ); } 习题五 学号: 专业: 姓名: 1.以下正确的叙述是( )。 A.C语言的主函数是无参函数 B.C语言的主函数最多允许有1个参数 C.C语言的主函数最多允许有2个参数 D.C语言的主函数可以有2个以上的参数 2.C语言中函数返回值的类型是由( )决定的。 A.return语句中的表达式类型 B.调用该函数的主调函数类型 C.调用函数时临时确定 D.定义函数时所指定的函数类型 3.以下不正确的描述是( )。 A.调用函数时,实参可以是表达式 B.调用函数时,简单变量的实参与形参可以共用内存单元 C.调用函数时,将为形参分配内存单元 D.调用函数时,实参与形参的类型必须一致 4.若x为int型变量,则以下函数fun的返回值类型为( )。 fun(x) …… {printf("%d\n",x);} A.返回值为void类型 B.无法确定返回值 C.返回值为int类型 D.没有返回值 5.C语言规定,调用一个函数时,实参变量与形参变量之间的数据传递是( ) A.地址传递 B.由实参传给形参,再由形参传回来给实参 C.值传递 D.由用户指定传递方式 6.填空 ① 变量存储类别,从作用域的角度分为 变量和 变量。 ② 局部静态变量在 时赋初值且只赋值一次。 7.判断以下说法的正误 ( 一个源文件由一个或多个函数组成, C程序是以一个源文件为编译单位的。( ) ( 局部静态变量在函数调用结束后仍存在,但其它函数不能引用它。 ( ) ( 自动(auto)变量是由编译系统自动处理的,对自动变量分配存储空间后,就赋值为0,执行函数后自动释放。 ( ) ( 由于全局变量的作用域增加了函数间数据联系的渠道,利用全局变量可以从函数得到一个以上的返回值,故建议在程序中尽量定义全局变量。 ( ) 8.在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量的存储类应该是( )。 A.extern B.register C.auto D.Static 习题五 学号: 专业: 姓名: 9.以下不正确的描述为( ) A.在函数之外定义的变量称为外部变量,外部变量是全局变量 B.在一个函数中既可以使用局部变量,又可以使用全局变量 C.外部变量定义和外部变量说明的含义不同 D.若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。 10.以下不正确的描述为( ) A.不同函数中可以使用相同名字的变量 B.形式参数是局部变量 C.在一个函数内部定义的变量只在本函数范围内有效 D.在一个函数内部的复合语句中定义的变量可以在本函数范围内有效 11.在C语言中,对于存储类型为( )的变量,只有在使用它们时才 占用内存单元。 A.static和auto B.静态(static) C.register和static D.auto和register 12.C语言中形参的缺省存储类别是( ) A.自动(auto) B.静态(static) C.寄存器(register) D.外部(extern) 13.下列程序的运行结果是: 。 unsigned fun3(unsigned num) {unsigned k=1; do {k(=num%10; num/=10; }while(num); return(k); } main( ) {unsigned n=26; printf("%d\n",fun3(n)); } 14.下列程序的运行结果是: 。 long fun4(int n) {long s; if ((n==1)||(n==2)) s=2; else s=n+fun4(n(1); return(s); } main( ) {long x; x=fun4(4);  printf("%ld\n",x); } 习题五 学号: 专业: 姓名: 15.下列程序的运行结果是: 。 # include "stdio.h" main( ) { int n=4,x=2,s; s=fun(x,n); printf("s=%d\n",s); } fun(int x,int n) { if (n==1) return(x); else return(x(fun(x,n(1)); } 16.下列程序的运行结果是: 。 int fun2(int x,int y) {int m=5; return(x(y(m); } main( ) {int a=7,b=5; printf("%d\n",fun2(a,b)); } 17.下列程序的运行结果是: 。 fun(int p) { int d=5; d+=p++; printf("%d ",d); } main( ) { int d=1,a=3; fun(a); d+=a++; printf("%d\n",d); } 18.下列程序的运行结果是: 。 fun(int n) { if (n==1) return(0); else if (n==2||n==3) return(1); else return(fun(n(1)+fun(n(2)+fun(n(3)); } main( ) { int x; x=fun(10); printf("x=%d\n",x); } 习题五 学号: 专业: 姓名: 19.下面程序的执行结果是: int x=3; main( ) { int i; for (i=1; i<4; i++) { ++x; f( ); } printf("%d\n",x); } f( ) { static int i; int x=10; x/=x++; printf("%d",x); } 20.下列程序的运行结果是: fun(int x) { static int a=3; a+=x; return(a); } main( ) { int k=3,m=2,n; n=fun(k); printf("n=%d\n",n); n=fun(m); printf("n=%d\n",n); }  21.下列程序的运行结果是: #include "stdio.h" f(int a) { int b=0; static int c=3; a=c++,b++; return(a); } main( ) { int a=2,i,k; for (i=0; i<2; i++) k=f(a++); printf("%d\n",k); } 22.下列程序的运行结果是: #include "stdio.h" int i=2,j=2; main( ) { int i=2; printf("i=%d,j=%d\n",i,j); i=(i+++j)+(j+++i); { int i=0; printf("i=%d,j=%d\n",i,j); } printf("i=%d,j=%d\n",i,j); } 习题六 学号: 专业: 姓名: 一、选择题 1.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用双引号(“ ”)括起时,寻找被包含文件的方式为( )。 A.直接按系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,再按系统设定的标准方式搜索 C.仅仅搜索源程序所在目录 D.仅仅搜索所在的当前目录 2.以下叙述中不正确的是( )。 #define IBM-PC A.预处理命令行都必须以#号开始 B.在程序中凡是以#号开始都是预处理命令行 C.C程序在执行过程中对预处理命令行进行处理 D.以上定义是正确的宏定义 3.以下叙述中正确的是( )。 #define CR 37.688 A.在程序的一行上可以出现多个预处理命令行 B.预处理行是C的合法语句 C.被包含的文件不一定以.h作为后缀 D.在以上定义中CR是称为“宏名”的标识符 4.以下有关宏替换的叙述中不正确的是( )。 A.宏替换不占用运行时间 B.宏名无类型 C.宏替换只是字符替换 D.宏名必须用大写字母表示 5.C语言的编译系统对宏命令的处理是( )。 A.在程序运行时进行的 B.在程序连接时进行的 C.和C程序中的其它语句同时进行编译的 D.在对源程序中其它成分正式编译之前进行的 6.以下程序的输出结果是( )。 #define ADD(X) (X)+(X) main( ) { int a=4, b=6, c=7; int d=ADD(a+b)(c; printf("d=%d",d); } A.d=70 B.d=140 C.d=280 D.d=80 习题六 学号: 专业: 姓名: 7.以下程序的输出结果是( )。 #define LETTER 0 main( ) { char str[20]="C Language",c; int i; i=0; while ((c=str[i])!='\0') { i++; #if LETTER if(c>='a'&&c<='z') c=c(32; #else if(c>='A'&&c<='Z') c=c+32; #endif printf("%c",c); } } 8.下面程序的输出结果是( )。 #include<stdio.h> #define SUB(X,Y) (X)(Y main( ) { int a=3, b=4; printf("%d\n",SUB(a++,b++)); } A.12 B.15 C.16 D.20 9.执行下面的程序后,a的值是( )。 #define SQR(X) X(X main( ) { int a=10, k=2, m=1; a/=SQR(k+m)/SQR(k+m); printf("%d\n",a); } A.10 B.1 C.9 D.0 习题六 学号: 专业: 姓名: 二、填空题 1 设有以下宏定义: #define WIDTH 80 #define LENGTH WIDTH+40 则执行赋值语句:v=LENGTH(20;(v为int型变量)后,v的值是 。 2.以下程序的输出结果是: 。 #define CIR(r) r(r main( ) { int a=1,b=2,t; t=CIR(a+b); printf("%d\n",t); } 3.以下程序的输出结果是: 。 #define MAX(a,b,c) ((a)>(b)? ((a)>(c)? (a):(c)):((b)>(c)?(b):(c))) main( ) { int x,y,z; x=1; y=2; z=3; printf("%d\n",MAX(x,y,z)); printf("%d\n",MAX(x+y,y,y+x)); printf("%d\n",MAX(x,y+z,z)); } 4.以下程序的输出结果是:   。 #define EXCH(a,b) {int t; t=a; a=b; b=t;} main( ) { int x=5, y=9; printf("x=%d,y=%d\n",x,y); EXCH(x,y); printf("x=%d,y=%d\n",x,y); } 5.以下程序的输出结果是: 。 #define PRINT(V) printf("V=%d\t",V) main( ) { int a, b; a=1; b=2; PRINT(a); PRINT(b); } 习题七 学号: 专业: 姓名: 一.选择题 1.若有定义:int a[4]={1,2,3};则数组a的每一个元素为( )组。 A.a[1]=1; a[2]=2; a[3]=3; a[4]=0; B.a[1]=1; a[2]=2; a[3]=3; C.a[0]=1; a[1]=2; a[2]=3; a[3]=0; D.a[0]=1; a[1]=2; a[2]=3; 2.若有定义:char a[]={"Hunan University"};则数组a的长度为( )。 A.5 B.6 C.16 D.17 3.下面程序的输出结果为( )。 main( ) {int f1=-1,f2=1,f,i=8,st[8]; while (--i) {f=f1+f2; f1=f2; f2=f; st[i]=f;} for (i=1; i<8; i++) printf("%3d",st[i]); printf("\n"); } A.8 5 3 2 1 1 0 B.1 2 3 4 5 6 7 8 C.0 1 1 2 3 5 8 D.2 3 4 5 6 7 8 二.阅读下列程序,写出运行结果 1.下面程序的运行结果是: #include <stdio.h> add1(a,n) int a[],n; { int i; for(i=0; i<n; i++) a[i]++; } main() {static int array[]={0,1,2,3,4,5,6,7,8,9}; int i; add1(array,10); for (i=0; i<10; i++) printf("%d ",array[i]); } 2.下面程序的运行结果是: #include <stdio.h> main( ) { int a[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i; for (i=0; i<3; i++) printf("%d",a[i][2(i]); } 习题七 学号: 专业: 姓名: 3.下面程序的运行结果是: 。 #include <stdio.h> int f(int b[], int n) { int i,r; r=1; for (i=0; i<=n; i++) r=r(b[i]; return(r); } main( ) { int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3); printf("x=%d\n",x); } 4.下面程序的运行结果是: 。 #include <stdio.h> main( ) { int i,j,row=0, colum=0,max; static int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; max=a[0][0]; for (i=0; i<=2; i++) for(j=0; j<=3; j++) if (a[i][j]>max) {max=a[i][j]; row=i; colum=j; } printf("max=%d,row=%d,colum=%d\n",max,row,colum); } 5.下面程序的运行结果是: 。 #include <stdio.h> main( ) { int a[4][5]={{1,2,3,4,0},{2,2,0,0,0},{3,4,5,0,6},{5,0,0,6,0}}; int i,j; for (i=0; i<4; i++) {for ( j=0; j<5; j++) {if (a[i][j]==0) break; printf("%d",a[i][j]); } } printf("\n"); } 6.下面程序的运行结果是: 。 #include <stdio.h> main( ) {char string1[]="I have a book"; char string2[]={'H','o','w',' ','a','r','e',' ','y','o','u'}; printf("%s\n",string1); printf("%s\n",string2); } 习题七 学号: 专业: 姓名: 7.下面程序的运行结果是: 。 #include <stdio.h> main( ) { int a[2][2]={1,3,5,7}; int i,j,b[2][2]; for (i=0; i<2; i++) for (j=0; j<2; j++) {b[i][j]=a[1(i][1(j]; printf("%d",b[i][j]); } } 8.下面程序的运行结果是: 。 #include <stdio.h> char fun(char c) { if (c<='Z' && c>='A') c(='A'('a'; return (c); } main( ) {char s[80]="Open Your BOOK."; int i; for (i=0; i<15; i++) putchar(fun(s[i])); putchar('\n'); } 9.下面程序在运行输入:abcdefg (,则输出是: 。 #include <stdio.h> main() {char str[100]; printf("输入字符串:\n"); scanf("%s",str); inverse(str); printf("轮换后的字符串是:%s\n",str); } inverse(str) char str[]; {char t; int i,j; for(i=0,j=strlen(str); i<strlen(str)/2; i++, j--) {t=str[i]; str[i]=str[j-1]; str[j-1]=t;} } 10.下面程序的运行结果是: 。 #include <stdio.h> #include <string.h> main() { int i, j; for (i=1,j=1; i<=50; i++) {if (j>=10) break; if (j%2==1) { j+=5; continue; } j(=3; } printf("i=%d\nj=%d\n",i,j); } 习题七 学号: 专业: 姓名: 三.填空题(在程序中的下划线处填入正确的语句并给出程序的运行结果) 1.从一维数组的数据中找出指定数据(k),显示其位置句。 #include <stdio.h> main( ) {int a[]={14,23,52,66,47,33,28,76,87,96}; int i, k, t=1; printf("What is k data?"); scanf("%d",&k); for (i=0; i<10; i++) {if (a[i]==k) {printf("Now begin search\n"); printf("Search point=%d\n",i); t=0; } } if (t) printf("The data of yours not exist!\n"); } 2.编写函数acopy( ),将数组a[]的内容赋值到b[]数组中。(以(999做结束标志) #include <stdio.h> void acopy(( ) {int i=0; while (a[i]!=(999) {( i++; } b[i]= ( } main( ) { int a[]={1,2,3,4,5,6,7,8,9,10,(999}; int b[100], i=0; ( while (b[i]!=(999) printf("%d",b[i++]); } 习题七 学号: 专业: 姓名: 3.把10个人的得分数据装入数组a[ ],求其总和与平均值并显示。(数组数据以(999作为结束标志)。 #include <stdio.h> main( ) {int ① ={73,82,66,74,58,59,69,56,75,84,(999}; int sum,ave,i; sum=0; i=0; while (② ) {sum=sum+a[i]; ③ } ave= ④ printf("Total=%d\n",sum); printf("ave=%d\n",ave); } 4.函数findmax返回数组s中最大元素的下标,数组中元数的个数由m传入。 findmax(int a[],int m) {int k,p; for (p=0,k=p;p<m;p++) if (a[p]>a[k]) return (k); } 5.找出并显示以字母’C’开头的姓名数据。 #include <stdio.h> main( ) {char name[][8]={"China","Japan","Canada","Germany"}; int i; for (i=0;i<4;i++) if ( ) printf("%s\n",name[i]); } 6.输入一字符串,将字符串从最后一个开始,按倒序显示在屏幕上。 #include <stdio.h> main( ) {char a[10]; int i; printf("Please imput yuor string:\n"); for (① ) scanf("%c",&a[i]); for (② ) printf("%c",a[i]); } 习题八 学号: 专业: 姓名: 一.选择题 1.以下选项中,对基类型相同的指针变量不能进行运算的运行符是( )。 A.( B.( C.( D.(( 2.若有以下定义和语句,且0 ( i(10,则对数组元素地址的正确表示是( )。 int a[ ]({1,2,3,4,5,6,7,8,9,0}, (p, i ; p(a; A.&(a(1) B.a(( C.&p D.&p[i] 3.若有以下定义和语句,且0( i(10,则对数组元素错误引用的是( )。 int a[ ]({1,2,3,4,5,6,7,8,9,0}, (p, i ; p(a; A.((a(i ) B.a[p(a] C.p(I D.((&p[i]) 4.与以下定义等价的是( )。 int (p[4]; A.int p[4]; B.int (p; C.int ((p[4]); D.int ((p)[4]; 5.若有定义:int a[4][10]; 则以下选项中对数组元素a[i][ j](此处0( i(4,0(j(10)错误引用的是( )。 A.((&a[0][0]+10(i+j) B.((a+i )[ j] C.((((a+i )+j) D.((a[i]+j) 6.若有定义:int a[4][3],b[3][4],((ptr)[3]; 且0( i(3,则正确的赋值语句是( )。 A.ptr(a; B.ptr(b; C.ptr(b[i]; D.ptr(a[i]; 7.若有定义:char (p1, (p2, (p3, (p4,ch; 则不能正确赋值的程序语句是( )。 A.p1(&ch; scanf("%c",p1); B.p2((char ()malloc(1); scanf("%c",p2); C.(p3(getchar( ); D.p4(&ch; (p4(getchar( ); 8.若有定义:int ((ptr)[3]; 则标识符ptr( )。 A.定义不合法 B.是一个指针数组名,每个元素是一个指向整型变量的指针 C.是一个指针,它指向一个具有三个元素的一维数组 D.是一个指向整型变量的指针 9.以下正确的定义和语句是( )。 A.int a[10], (p; char (s; p(a; s(a; B.double a[5][3], b[5][3], (s; s(a; b(a; C.float a[5][3], (p[3]; p[0](a[0]; p[2](a[4]; D.int a[5][3], ((pb)[5], ((pp)[3]; pb(a; pp(a; 10.若有定义:int a[5],(p(a; 则对a数组元素地址正确引用的是( )。 A.&a[5] B.p+2 C.a ++ D.&a 11.若有定义:int a[5], (p(a; 则对a数组元素正确引用的是( )。 A.((p+5) B.(p+2 C.((a+2) D.(&a[5] 12.若有以下定义和语句,则对a数组元素非法引用的是( )。 int a[2][3], ((pt)[3] ; pt=a; A.pt[0][0] B.((pt+1)[2] C.((pt[1]+2) D.((a[0]+2) 习题八 学号: 专业: 姓名: 13.下列程序段:char str[ ]= "ABCD", (p=str; printf("%d\n", ((p+4) ); 的出结果是( )。 A.68 B.0 C.字符"D"的地址 D.不确定的值 14.下列程序运行后的输出结果( )。 main( ) {static char s[10]="ABC"; char (p=s+1, (q, c; c=((++p+1); printf("%d\n",c); } A.‘A’ B.‘B’ C.‘C’ D.0 15.下列程序的输出结果是( )。 #include "stdio.h" void prt(int (x, int (y, int (z) {printf("%d,%d,%d\n",++(x, ++(y, ((z++) ); } int a=10, c=20, b=40; main( ) {prt(&a,&b,&c); prt(&a,&b,&c); } A. 11,42,31 B. 11,41,20 C. 11,21,40 D. 11,41,21 12,22,41 12,42,20 11,21,41 12,42,22 16.若有以下定义和语句,则对a数组元素都是正确引用的表达式组是( )。 (其中0( i(4,0( j(3) main( ) {int a[4][3]={0}, ((ptr)[3], i, j; ptr=a; ( } A.a[i][ j], a[i]+j, ((((a+i)+j) B.((ptr+i)[ j], ptr[i]+j, ((((ptr+i)+j) C.((ptr+i)[ j], ((a+i)[ j], ((ptr+i) D.ptr[i][ j], ((ptr[i]+j), ((a[i]+j) 17.若有以下定义和语句,则都是a数组元素地址的表达式组是( )。 (其中0( i(4,0( j(3) main( ) {int a[4][3]={0}, (p[4], ((pa, i, j; for (i=0; i<4; i++) p[i]=a[i]; pa= p; ( } A.&a[i][ j], p[i]+j, pa[i][ j] B.((pa+i)+j, p[i], ((p+i)+j C.&a[ j], &p[i], ((((pa+i)+j) D.((pa, a, p 习题八 学号: 专业: 姓名: 二.写出程序运行后的结果 1.下列程序运行后的输出结果是: 。 #include <stdio.h> main( ) {static char b[ ]= "Goodbye"; char (chp=&b[7]; while (((chp>=b[0]) putchar((chp); putchar(‘\n’); } 2.下列程序运行后的输出结果是: 。 #include <stdio.h> int a[ ]={1,5,7,9,11,13}; main( ) {int (p; p=a+3; printf("%d,%d,%d,%d\n", (p, (p++, ((p(2), ((a+4) ); } 三.填空题 1.若有以下定义和语句,则下面各个符号的正确含义是: (例如对于符号&a[2][1],应该写:是数组元素a[2][1]的地址) int a[3][4], ((p)[4]; p=a; ( p+1 。 ( ((p+2) 。 ( ((p+1)+2 。 ( (((p+2) 。 2.顺读和倒读都一样的字符串称为“回文”,如:LEVEL。下列程序判断输入的字符串是否为“回文”,若是“回文”,输出“YES”;否则输出“NO”。 #include <stdio.h> #include <string.h> main( ) {char s[81], cr, (pi, (pj; int i, j, n; gets(s); n=strlen(s); pi=( ; pj=( ; while ((pi==‘ ’) pi++; while ((pj==‘ ’) pj((; while ((( )&&( (pi==(pj)) { pi++; ( ; } if (pi<pj) printf("NO\n"); else printf("YES\n"); } 习题九 学号: 专业: 姓名: 一.选择题(请选择正确答案)。 1.若有下列定义:struct aa {float e[5]; double z; }x; 则变量x在内存中所占的字节为: A.4 B.8 C.12 D.28 2.若有下列定义:union bb {float a,b; char c[6]; }y; 则变量y在内存中所占的字节为: A.4 B.6 C.10 D.14 3.若有下列定义:struct date {int day; int month; int year; }; struct person {char name[12]; struct date birthday; char sex; }; struct person student; 则变量student在内存中所占的字节为: A.15 B.16 C.19 D.20 4.若有下列定义:struct a {char m[6]; int n; float b; char c; }; struct a x[2]={ "Hello",4,5.6,‘A’}; 请问:x[1]的值为( )。 A.不能确定。 B. x[1].m="Hello"; C. x[1].n=4; x[1].b=5.6; x[1].c=‘A’; 习题九 学号: 专业: 姓名: 二.阅读下列程序,写出运行结果 1.#include <stdio.h> main( ) {union Exa { struct {int a; int b; }out; int c; int d; }e; e.c=1; e.d=2; e.out.a=e.c(e.d; e.out.b=e.c+e.d; printf("%d %d",e.out.a,e.out.b); } 运行结果: 2.#include <stdio.h> struct score {int math; int eng; int comp; }; struct stu {char name[12]; char sex; long StuClass; struct score sub; }; main( ) {struct stu student1={"Li Ming",'M',990324,88,80,90}; struct stu student2; student2=student1; student2.name[0]='H'; student2.name[1]='u'; student2.StuClass=990325; student2.sub.math=83; printf("%s,%c,%ld,%d,%d,%d\n",student2.name, student2.sex,student2.StuClass,student2.sub.math, student1.sub.eng,student2.sub.comp); } 运行结果: 3. #include <stdio.h> union memb {float v; int n; char c; }; main( ) {union memb tag,Sval; tag.n=673; Sval=tag; printf("Sval is: %d",Sval.n); } 运行结果: 习题九 学号: 专业: 姓名: 4.#include <stdio.h> #include <conio.h> struct person {char name[12]; int age; char sex; char addr[40]; long telNo; }; main( ) {struct person doctor; printf("Please imput Name,Age,Sex,Addr,TelNo:\n"); scanf("%s%d%c%s%ld",doctor.name,&doctor.age,&doctor.sex, doctor.addr,&doctor.telNo); printf("%s,%d,%c,%s,%ld\n",doctor.name, doctor.age,doctor.sex,doctor.addr,doctor.telNo); } 运行后输入:Liming 18MEastRoad116 8375642 运行结果: 5.#include <stdio.h> union memb { double v; int n; char c; }; main( ) { union memb tag; tag.n=26; tag.c='A'; tag.v=48.7; printf("%6.2f\t %4d\t %c\t",tag.v,tag.n,tag.c); } 运行结果: 习题十 学号: 专业: 姓名: 一.选择题 1.fgets(str, n, fp)函数从文件中读入一个字符串,以下叙述中正确的是( )。 A.字符串读入后不会自动加入'\0' B.fp是file类型的指针 C.fgets函数将从文件中最多读入n (1个字符 D.fgets函数将从文件中最多读入n个字符 2.已知函数fread的调用形式为fread(buffer, size, count, fp),其中buffer代表的是( )。 A.存放读入数据项的存储区 B.一个指向所读入文件的文件指针 C.存放读入数据的地址或指向此地址的指针 D.一个整形变量,代表要读入的数据项总数 3.函数调用语句:fseek(fp,(10L ,2);的含义是( )。 A.将文件位置指针移到距离文件头10个字节处 B.将文件位置指针从当前位置向文件末尾方向移动10个字节 C.将文件位置指针从当前位置向文件末尾方向移动10个字节处 D.将文件位置指针从文件末尾处向文件头的方向移动10个字节处 二、填空题 1.feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为 ,否则为 。 2.函数调用语句:fgets(str , n, fp);从fp指向的文件中读入 个字符放到str字符数组中。函数值为 。 3.在C中,文件指针变量的类型只能是 。 4.为了从文本文件中读入数据,在打开文件时,应该指定的方式是 。 5.为了把新的数据加入一个二进制文件的末尾,在打开文件时,应该指定的方式是 。 6.用来把文件的位置指针移向文件的开头的函数是 。 7.文件结束标志EOF只可用于 文件。 习题十 学号: 专业: 姓名: 8.当结束对文件的输入、输出操作时,用来关闭文件的预定义函数是 。 9.下面程序用来统计文件中字符的个数,请填空。 #include<stdio> main( ) { FILE (fp; long num=0; if ((fp=fopen("fname.dat","r"))==NULL) { printf("Can't open file!\n"); exit(0); } while { fgetc(fp); num++; } printf("num=%d\n",num); fclose(fp); } 10.下面程序把从终端读入的文本(用@作为文本结束标志)复制到一个名为bi.dat的新文件中。请填空。 #include <stdio.h> main( ) { FILE (fp; char ch; if ((fp=fopen(( ))==NULL) exit(0); while ((ch=getchar( ))!='@') fputc(ch,fp); ( ; } C习题2002 (参考答案) 习题一 一.填空题 1.0 4 2.0 3 3.18 18 4.25 25, 5, 15  5.0 36 6.double 7.3   二.选择题 1.C 2.B 3.C 4.B  5.C 6.A 7.D 8.D   习题二 一.写出下列程序的运行结果 1.D 2.B 3.A 4.B  5.C 6.A 7.B 8.C  二.填空题 1.; 2.37 3.65494 4.177777 5.main( )   习题三 1.0 0 1 1 2.1 1 1 1 1 3.0, 0, (1 4.2, 0, 1  5.0, 1 6.2, 1, 1 7.0, 0, 4 8.C  9.C 10.(1) W  (2) (1  (3) 7 5 11.(4)   习题四 1.B 2.D 3.x>=0,x<amin 4.(1  5.16 6.D 7.852 8.D  9.A 10.n=1 s ( 2     习题五 1.C 2.D 3.B 4.C 5.C  6.( 全局,局部  ( 编译 7.((  ((  ((  (( 8.D  9.B 10.D 11.D 12.A 13.12  14.9 15.S=16 16.30 17.8 4 18.x=81  19.2226 20.n = 6 n = 8 21.4 22.i = 2, j = 2 i = 0, j = 3 i = 9, j = 3   习题六 一.选择题 1.B 2.C 3.C 4.D 5.D  6.D 7.c languge 8.A 9.B   二.填空题 1.880 2.5 3.3 3 5 4.x=5, y=9 x=9, y=5 5.V=1  V=2   习题七 一.选择题 1.D 2.D 3.A 二.阅读下列程序,写出运行结果。 1.1 2 3 4 5 6 7 8 9 10 2.357 3.x=120 4.max=10, row=2, colum=1 5.1234223455 6.I have a book 7.7531 How are you 8.open your book. 9.gfedcba 10.i=6 j=10 三.填空题 1.break; 2.(int a[],int b[] (b[i]=a[i]; (a[10];(或a[i];) (acopy(a,b); 3.(a[] (a[i]!=(999 (i++; (sum/10;(或sum/i;) 4.k=p; 5.name[i][0]==‘C’; 6.(i=0; i<10; i++ (i=9; i>=0; i(( 习题八 一.选择题 1.A 2.D 3.C 4.C 5.B 6.A  7.C 8.C 9.C 10.B 11.C 12.B  13.B 14.D 15.B 16.D 17.B   二.写出程序运行后的结果 1.eybdooG 2.11,9,5,11 三.填空题 1.(是数组元素a[1][0]的地址 (是数组元素a[2][0]的地址 (是数组元素a[1][2]的地址 (是数组元素a[0][2] 2.( s ( s+n(1 ( pi<pj ( pj(( 习题九 一.选择题 1.D 2.B 3.C 4.A 二.阅读下列程序,写出运行结果 1.4 8 2.Hu Ming,M,990325,83,80,90 3.Sval is: 673 4.Liming,18, ,MEastRoad116,8375642 5.48.70 — — (tag.n和tag.c的值为不可预料的) 习题十 一.选择题 1.C 2.C 3.D 二.填空题 1.1,0 2.n(1,str的首地址 3.FILE 4."w" 5."ab" 6.remind 7.文本 8.fclose() 9.(!feof()) 10.("bi.dat","w"  (fclose()