作业A:
一、单项选择题
1、如果要把常量327存入变量a中,a不能定义的类型是哪一个?()
A)int B)char C)long D)float
2、若x 为unsigned int 型变量,则执行下列语句后x值为()
x = 65535;
printf(“%d\n”,x);
A)65535 B)1 C)无定值D)-1
3、有以下程序
main()
{int a=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a
printf(″%d,%d\n″,k,m);
}
程序运行后的输出结果是()
A)0,0 B) 0,1 C)1,0 D)1,1
4、在C语言中,如果下面的变量都是int类型,则输出的结果是()。
sum=pad=5; pAd=sum + + ,pAd + +, + + pAd;
printf("%d\n",pad);
A) 7 B) 6 C) 5 D) 4
5、以下程序的输出结果是()。
main()
{ int a=4,b=5,c=0,d;
d=!a&&!b||!c;
printf("%d\n",d);
}
A)1 B)0 C)非0的数D)-1
6、当执行以下程序段时()。
x=-1;
do{
x=x*x;
}while(!x);
A)循环体将执行一次B)循环体将执行两次
C)循环体将执行无限次D)系统将提示有语法错误
7、全局变量的存储类型可以定义为()。
A)auto或static B)extern或register
C)auto或extern D)extern或static
8、定义全局变量时,若变量的的存储类别缺省,则默认的存储类型是()。
A)auto B)register
C)extern D)static
9、已知:int a, x; 则正确的赋值语句是()。
A)a=(a[1]+a{2})/2; B)a*=*a+1;
C)a=(x=1, x++, x+2); D)a="good";
10、已知:int a, *p=&a; 则下列函数调用中错误的是()。
A)scanf("%d", &a); B)scanf("%d", p);
C)printf("%d", a); D)printf("%d", p);
11、下述程序的输出结果是()。
#include
void main( )
{ struct complex
{ int x ;
int y;
} cnum[2]={1,3,2,7};
printf(“%d”, cnum[0].y/cnum[0].x*cnum[1].x) ;
}
A)0 B)1 C)3 D)6
12、下述程序的输出结果是()。
#include
void main( )
{ union
{ unsigned char c ;
unsigned int i[4];
}z ;
z.i[0]=0x39 ;
z.i[1]=0x36;
printf(“%c”,z.c);
}
A)6 B)9 C)0 D)3
13、下述关于C语言文件操作的结论中,()是正确的。
A)对文件操作必须先关闭文件
B)对文件操作必须先打开文件
C)对文件操作顺序无要求
D)对文件操作前必须先测试文件是否存在,然后再打开文件
14、以下程序的输出结果是()。
main()
{ char ch[3][4]={"123","456","78"},*p[3];
int i;
for (i=0;i<3;i++)
p[i]=ch[i];
for (i=0;i<3;i++)
printf("%s",p[i]); }
A)123456780 B)123 456 780 C) 12345678 D) 147
15、对于所定义的二维数组a[2][3],元素a[1][2]是数组的第( )个元素。
A)3 B)4 C)5 D)6
二、判断题
1、赋值运算符的优先级低于关系运算符()。
2、条件运算符的结合方向是“自左向右”()。
3、C语句的循环语句中循环体如果包含一个以上的语句,必须以复合语句形式出现()。
4、C程序中的函数不能嵌套调用,但可嵌套定义()。
5、若自定义函数要求函数名返回一个值,则该函数体中必须要有return语句()。
6、当形式参数为指针变量名时,实际参数可为指针变量名、数组名或其它类型变量的首地址()。
7、若有说明:static int a[3][4];,则数组a中各数组元素可在程序的编译阶段得到初值0()。
8、若用数组名作为函数调用时的实参,则实际上传递给形参数组的是数组的第一个元素的值()。
9、利用指针和结构体类型可以构成表、树等复杂的数据结构()。
10、共用体变量的地址和它的各成员的地址都是同一地址()。
11、printf函数中的“%0”格式参数表示用来输出unsigned型数据()。
12、在一个C程序中,所有要使用的变量和要调用的函数都必须在main( )函数中定义()。
13、赋值运算符的结合性是“自右至左”()。
14、一个C程序可以由多个源程序文件组成()。
15、do-while语句构成的循环,当while语句中的表达式的值为零时结束循环()。
三、写出下面各程序的运行结果
1、#include
main ( )
{int i=0, j=0, k=0, m;
for (m=0; m<4; m++)
switch (m)
{case 0: i=m++;
case 1: j=m++;
case 2: k=m++;
case 3: m++;
}
printf(“\n%d, %d, %d, %d”, i, j, k, m);
}
2、#include
main ( )
{int i=1;
while (i<=15)
if (++i% 3!=2)
continue;
else
printf(“%d”, i);
}
3、#include
add1(int a[ ], int n)
{ int i;
for(i =0;i } main() { static int array[ ]={0,1,2,3,4,5,6,7,8,9}; int j; add1(array,10); for(j=0;j<10;j++) printf(“%d”,array[j]); } 4、union data { long w; float x; int y; char z; } beta; main( ) { beta.w=123456; beta.y=888; beta.x=3.14; beta.z=?x?; printf(“%c”,beta.y); } 5、# include typedef struct student{ char name[10]; long sno; float score; }STU; main( ) { STU a={"zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d; d=a; if(strcmp(https://www.doczj.com/doc/3c2836316.html,,https://www.doczj.com/doc/3c2836316.html,)>0) d=b; if(strcmp(https://www.doczj.com/doc/3c2836316.html,,https://www.doczj.com/doc/3c2836316.html,)>0) d=c; printf("%ld%s\n",d.sno,p->name); } 四、程序填空 1、以下程序是从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结 束输入,请将缺省语句填上。 main ( ) {float x, amax, amin; scanf (“%f”, &x); amax=x; amin=x; while ( ①) {if ( ②) amax =x; if ( ③) amin =x; scanf (“%f”, &x); } printf(“amax=%f, amin=%f\n”, amax, amin); } 2、下面的程序是用指针来交换两个数据,请将缺省语句填上。 void exchange( int *p ,int *q) { int t; t=*p; *p=*q; *q=t;} main() { int a,b,*x,*y; a=10;b=20; x=&a;① ② printf(“%d %d\n”,*x, *y); } 五、程序设计题 有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数。 2、用自定义函数和数组求n个数的平均值,并用主函数调用 参考答案: 一、单项选择题 1、B 2、D 3、C 4、C 5、A 6、A 7、D 8、C 9、C10、D 11、D 12、B 13、B 14、C 15、D 二、判断题 (√)2、(×)3、(√)4、(×)5、(×) 6、√) 7、(√) 8、(√) 9、(√)10、(√) 11、(×)12、(×)13、(√)14、(√)15、(√) 三、写出程序的运行结果 1、答案是:0,1,2,5 2、答案是:2 5 8 11 14 3、答案是:12345678910 4、答案是:x 5、答案是:2002Shangxian 四、程序填空 1、答案是:①x>=0 ②x>amax ③x 2、答案:①y=&b; ②exchange(x,y); 五、程序设计题 1、参考答案: #define N 10 struct student { char num[6]; char name[8]; int score[4]; float ave; } stu[N]; main() { int i,j,max,maxi,sum; float average; /*输入*/ for ( i=0; i { printf(“\nInput scores of student %d,\n”,i+1); printf(“No.:”); scanf(“%s”,stu[i].num); printf(“name:”); scanf(“%s”,stu[i].name); for(j=0;j<3;j++) { printf(“score %d:”,j+i); scanf(“%d”,&stu[i].score[j]); } } /*计算*/ average=0; max=0; maxi=0; for(i=0; i { sum=0; for(j=0; j sum+=stu[i].score[j]; stu[i].avr=sum/3.0; average+=stu[i].avr; if (sum>max) { max=sum; maxi=i; } } average/=N; /*打印*/ printf(“NO. name score1 score2 score3 average\n”); for(i=0; i { printf(“%s%10s”, stu[i].num , stu[i].name); for(j=0; j<3; j++) printf(“%9d”,stu[i].score[j]); printf(“%8.2f\n”,stu[i].avr); } printf(“average=%6.2f\n”,average); printf(“The highest score is : %s, score total: %d”, stu[maxi].name,max); } 2、参考答案: float average( float a[ ], int n) { float aver=0; int j; for(j=0;j aver=aver+a[j]; aver=aver/n; return aver; } main() { float x[10],y; int j; for(j=0;j<10;j++) scanf(“%f”,&x[j]); y=average(x,10); printf(“aver=%.2f\n”,y); } 作业B: 一、单项选择题 1、逗号表达式2,4,6,8的值为()。 A )2 B)4 C)6 D)8 2、以下选项中非法的表达式是( ) A)0<=x&&x<100 B)i=j = =0 C)(char)(65+3) D)x+1=x+1 3、若定义float a;现要从键盘输入a的数据,其整数位为3位,小数位为2位,则 选用()。 A)scanf(“%f”,&a); B) scanf(“%5.2f”,a); C) scanf(“%6.2f”,&a); D) scanf(“%f”,a); 4、下列程序的运行结果是() main() {int a=3, b=2, c=1, k=4; printf("%d\n", k } A) 4 B) 3 C) 2 D) 1 5、以下程序中,while循环的循环次数是()。 main( ) { int i=0; while(i<10) { if(i<1) continue; if(i==5) break; i++; } } A)1 B)10 C)6 D)死循环,不能确定次数 6、执行语句:for(i=1;i++<4;)后;变量i的值是()。 A)3 B)4 C)5 D)不定 7、有关函数参数,下列说法不正确的是()。 A)实参可以将数据传给形参; B)实参和形参是不同的变量; C)形参可以将数据传给实参; D)实参和形参必须个数相等,类型一致。 8、C语言中,变量和函数具有两个属性是()。 A)作用域和生存期B)类型和存储类别 C)作用域和类型D)作用域和存储类别 9、说明语句“int (*p)( ):”的含义是()。 A)p是一个指向一维数组的指针变量 B)p是指针变量,指向一个整型数据 C)p是一个指向函数的指针,该函数的返回值是一个整型 D)以上都不对 10、说明语句"int *(*p);"的含义是()。 A)p是一个指向int 型数组的指针 B)p是指针变量,它构成了指针数组 C)p是一个指向函数的指针,该函数的返回值是一个整型 D)p是一个指向函数的指针,该函数的返回值是一个指向整型的指针 11、下述程序的执行结果是()。 #include { int i; char c[2]; }; void main( ) { union un x; x.c[0]=10; x.c[1]=1; printf(“\n%d”,x.i);} A)266 B)11 C)265 D)138 12、若程序中有如下的说明和定义: struct ex { int x, y ; } … struct ex x, y; 则会发生的情况是()。 A)编译时错B)程序能顺利编译、连接、执行 C)能顺利编译和连接,但不能执行D)能通过编译,但连接出错 13、C语言可以处理的文件类型是()。 A)文本文件和数据文件B)文本文件和二进制文件 C)数据文件和二进制文件D)数据代码文件 14、下面的for语句()。 for (x=0, y=0; (y!=123) && (x<4); x++) A)是无限循环B)循环次数不定C)循环执行4次D)循环执行3次 15、若有如下说明: struct { char ch; int i; double x; }arr[2][3]={{…a?,1,3.45},{…b?,2,7.89},{…c?,3,1.93}}; 则表达式()的值为2。 A)arr[0][1].ch B)arr[0][1].i C)arr[0][0].i D)arr[0][2].i 二、判断题 1、条件运算符的结合方向是“自左向右”()。 2、switch语句中每一个case的常量表达式的值必须互不相同()。 3、循环语句中循环体允许包含一个以上的语句,可以不以复合语句形式出现()。 4、构成C程序的源文件之间以及函数与函数之间,相互位置可以任意()。 5、C程序中的函数不能嵌套定义,但可嵌套调用()。 6、从变量的作用域角度来分,可以分为全局变量和局部变量()。 7、从终端输入一个字符串给字符数组,该字符串两端不必用双引号括起来()。 8、若有说明:int a[ ][4]={0,0};,则只有a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0()。 9、利用指针和结构类型不能构成更复杂的数据结构()。 10、共用体类型可以出现在结构体类型定义中()。 11、当一个case语句末包含break语句时,执行完该case语句后跳出switch结构()。 12、宏定义中的标识符可以用大写字母,也可以用小写字母()。 13、do-while语句构成的循环,当while语句中的表达式的值为非零时结束循环()。 14、用“%”作求余运算时,该运算符两侧均应为整型数据()。 15、一个逗号表达式可以与另一个表达式组成一个新的逗号表达式()。 三、写出程序的运行结果 1、#include main ( ) {int a=1, b=3, c=5, d=4; if (a if (c else if (a if (b else x=3; else x=6; else x=7; printf(“x=%d”, x); } 2、#include main ( ) {int k, j, m; for(k=5; k>=1; k- -) {m=0; for (j=k, j<=5; j++) m+=k*j; } printf (“m=%d\n”, m); } 3、#include 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); } 4、#include “stdio.h” main( ) { int a[ ]={1,2,3,4},i,j,s=0; j=1; for(i=3;i>=0;i--) { s=s+a[i]*j; j=j*10; } printf(“s=%d\n”,s);} 5、#include "stdio.h" #include "string.h" main( ) { char s1[ ]="som things"; char s2[ ]="test"; char s3[ ]="good"; printf("%s\n",strcat(strcpy(s1,s2),s3)); } 四、程序填空 1、下面程序输出100到200之间的素数,每行输出10个素数,请将缺省语句填上,使算法完整。 #include “math.h” main ( ) {int m, k, i, n=0; for (m=101; m<=200; m=m+2) {if ( ①) printf (“\n”); k=sqrt(m); for (i=2, i<=k; i++) if ( ②) break; if ( i>=k+1){printf(“%d”, m); n=n+1;} } } 2、一个函数days,实现求某月某日是该年的第多少天。由主函数将年、月、日传递给days函数,计算 后将日数传回主函数输出,请将缺省语句填上,使算法完整。 struct y_m_d { int year; int month; int day; } date; main() { int days(int ,int ,int); int i,day_sum; printf(“input year,month,day:”); scanf(“%d,%d,%d”,&date.year,&date.month,&date.day); day_sum=days( ①); printf(“\n%d / %d is the %d th day in %d.”, date.month, date.day, day_sum,date.year); } days(int year, int month, int day) { int day_sum, i; int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; ② for(i=1; i day_sum+=day_tab[i]; day_sum+=day; if ((year%4==0&&year%100!=0||year%4==0) && month>=3) ③ return(day_sum); } 五、程序设计题 1,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在h所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。 #define N 16 typedef struct { char num[10]; int s; }STREC; int fun(STREC *a, STREC *b) { ………… } main() { STREC s[N]={{“GA05”,85},{“GA03”,76},{“GA02”,69},{“GA04”,85}, {“GA01”,91},{“GA07”,72},{“GA08”,64},{“GA06”,87}, {“GA015”,85},{“GA013”,96},{“GA012,64},{“GA014”,91}, {“GA011”,91},{“GA017”,64},{“GA018”,64},{“GA016”,72}; STREC h[N]; int i, n; n=fun(s,h); printf(“The %d lowest score:\n”,n); for(i=0; i printf(“%d %4d\n”,h[I].num, h[I].s); printf(“\n”); } 2、从键盘输入一批字符(回车键结束),存入一个磁盘文件abc.txt中 参考答案: 一、单项选择题 1、D 2、D 3、A 4、D 5、D 6、C 7、C 8、B 9、C10、D 11、A 12、A 13、B 14、C 15、B 二、判断题 1、(×) 2、(√) 3、(×) 4、(√) 5、(√) 6、(√) 7、(√) 8、(√) 9、(×)10、(√) 11、(√)12、(×)13、(×)14、(√)15、(√) 三、写出程序的运行结果 1、答案是:x=2 2、答案是:m=15 3、答案是:48 4、答案是:s=1234 5、答案是:testgood 四、程序填空 1、答案是:①n%10 = = 0 ②m%i= =0 2、答案是: ①date.year,date.month,date.day ②day_sum=0; ③day_sum+=1; 五、程序设计题 1、参考答案: STREC fun(STREC *a, char *b) { static STREC h={“”,-1}; int k; for(k=0; k if (!strcmp(a[k].num, b)) { h=a[k]; break; } return h; } 2、参考答案:main( ) { FILE *fp; char ch; fp=fopen(“abc.txt”,”w”); ch=getchar( ); while(ch!=?\n?) { fputc(fp, ch); ch=getchar(); } fclose(fp); } 作业C: 一、单项选择题 1、有定义语句:int x, y;,若值11,变量y得到数值12,下面四组输入要通过 scanf("%d,%d",&x,&y);语句使变量x得到数形式中,错误的是() A)11 12<回车> B)11, 12<回车> C)11,12<回车> D)11 ,<回车>12<回车> 2、若有语句int a=1,b=2,c=3;则以下值为0的表达式是() A)?a?&&?b? B)a<=b C)((a>b)||(b A)9,10 B)10,9 C)9,9 D)10,10 4、以下叙述正确的是()。 A)可以把define和if定义为用户标识符 B)可以把define定义为用户标识符,但不能把if定义为用户标识符 C)可以把if定义为用户标识符,但不能把define定义为用户标识符 D)define和if都不能定义为用户标识符 5、运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为()。 main() { int m,n; printf("Enter m,n:"); scanf("%d%d,&m,&n"); while(m!=n) { while(m>n) m-=n; while(n>m) n-=m; } printf("m=%d\n",m); } A)m=3 B)m=2 C)m=1 D)m=0 6、运行下面的程序运行后,如果从键盘上输人5,则输出结果是()。 main() { int x; scanf("%d",&x); if(x--<5) printf("%d"'x); else printf("%d"'x++); } A)3 B)4 C)5 D)6 7、定义函数时,若函数的类型缺省,则函数的默认类型是()。 A)char B)void C)float D)int 8、设有说明int (* prt)[M]; 其中的标识符prt是()。 A)M个指向整型变量的指针 B)指向M个整型变量的函数指针 C)一个指向具有M个整型元素的一维数组的指针 D)具有M个指针元素的一维指针数组,每个元素都只能指向整型变量 9、已知函数说明语句:void *fx( );则它的含义是()。 A)函数fx的返回值是一个空类型的指针 B)函数fx的返回值可以是任意的数据类型 C)函数fx无返回值 D)指针fx指向一个函数,该函数无返回值 10、对于下述定义,不正确的叙述是()。 union data { int i; char c; float f; }a, b; A)变量a所占内存的长度等于成员f的长度 B)变量a的地址和它的各成员地址都是相同的 C)可以在定义时对a初始化 D)不能对变量a赋值,故a=b非法 11、C语言库函数fgets(str, n, fp)的功能是()。 A)从文件fp中读取长度n的字符串存入 B)从文件fp中读取长度不超过n-1的字符串存入str指向的内存 C)从文件fp中读取n个字符串存入str指向的内存 D)从串str读取至多n个字符到文件fp 12、下述程序向文件输出的结果是()。 #include void main( ) { FILE *fp=fopen(“TEST”, “wb”); fprintf(fp, “%d%5.0f%c%d”, 58, 76273.0, ?-?, 2278); fclose(fp); } A)58 75273 - 2278 B)5876273.000000-2278 C)5875273-2278 D)因文件为二进制文件而不可读13、下面程序输出结果是()。 #define MAX 5 int a[MAX],k; main() { printf("\n"); fun1(); fun3(); printf("\t"); fun2(); fun3(); } fun1() { for (k=0; k a[k]=k+k;} fun2() { int a[MAX],k; for (k=0;k<5;k++) a[k]=k; } fun3() { int k; for (k=0;k printf("%3d",*(a+k)); } A) 0 2 4 6 8 0 2 4 6 8 B) 0 2 4 6 8 0 1 2 3 4 C) 0 1 2 3 4 0 2 4 6 8 D) 0 1 2 3 4 0 1 2 3 4 14、已知:int x;执行下面的程序段后,输出结果为()。 for (x=3; x 6; x++) printf ((x%2)? “**%d”: “##%d\n”, x); A)**3 B)##3 C)##3 D)**3##4 ##4 **4 **4##5 **5 **5 ##5 15、说明语句“int (*r)( ):”的含义是()。 A)r是一个指向一维数组的指针变量 B)r是指针变量,指向一个整型数据 C)r是一个指向函数的指针,该函数的返回值是一个整型 D)以上都不对 二、判断题 1、switch语句执行完一个case后面的语句后,流程控制转移到下一个case继续执行()。 2、if语句的条件表达式必须是逻辑表达式()。 3、C语句的一个循环体内允许又包含另一个完整的循环结构()。 4、C程序以函数为单位进行编译()。 5、由多个源文件组成一个程序时,主函数只能出现在一个源文件中()。 6、从变量的作用域角度来分,可以分为静态变量和动态变量()。 7、如果一个字符数组中包含一个以上结束符’\0’,则遇最后一个’\0’时输出才结束()。 8、gets( )函数的作用是从终端输入一个字符串到字符数组,并且将’\0’也装入该数组()。 9、不能将一个结构体变量作为一个整体进行输入和输出()。 10、在C编译中,对枚举元素按常量处理()。 11、C程序中的main( )函数必须放在程序的开始部分()。 12、switch后面括号内的表达式可以是整型表达式或字符型表达式()。 13、宏定义是用标识符代替一个字符串,只作简单的置换,不作语法检查()。 14、C语言中,“&”运算符作为单目运算符时表示的是取地址运算,作为双目运算符时表示的是按位与运算()。 15、do-while语句构成的循环必须用break语句才能退出()。 三、写出程序的运行结果 1、main ( ) {int i, j; float s; for (i=7; i<4 ; i - -) {s=0; for (j=i; j>3; j- -) s=s+i*j; } printf(“s=%f\n”, s); } 2、#include main ( ) {int k=1; char c=…A?; do {switch (c++) {case …A?: k++; break; case …B?: k - -; case …C?; k+=2; break; case …D?: k=k%2; continue; case …E?: k=k*2; break; default: k=k/3; } k++; } while (c<…F?); printf(“k=%d\n”, k); } 3、#include 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; https://www.doczj.com/doc/3c2836316.html,[0]='H'; https://www.doczj.com/doc/3c2836316.html,[1]='u'; student2.StuClass=990325; student2.sub.math=83; printf("%s,%c,%ld,%d,%d,%d\n",student2.n ame, student2.sex,student2.StuClass,student2 .sub.math, student1.sub.eng,https://www.doczj.com/doc/3c2836316.html,p); } 4、#include “stdio.h” main( ) { char str[ ]=”7a8b9c”; int i; for(i=0;str[i]!=?\0?;i++) if(str[i]>=?0? && str[i]<=?9?) printf(“%c”str[i]);} 5、#include “stdio.h” main( ) { int a[ ]={0,2,5,8,12,15,23,35,60,65}; int x=15, i,n=10,m; i=n/2+1;m=n/2; while(m!=0)