Category: 二级C语言 Secondary C

二级C语言 Secondary C

全国计算机二级C语言 # (19)程序填空题:赋值语句

a全国计算机二级C语言 # 程序填空题:赋值语句 给定程序中,函数f血m的功能是:找出100至x(x≤999)之间各位上的数字之和为15的所有整 数,然后输岀;符合条件的整数个数作为函数值返回。 例如,当n值为500时,各位数字之和为15的整数有:159、168、177、186、195、249、258、 267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、 483、492。共有26个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得岀正确的结果。 注意:源程序存放在考生文件夹下的BLAK1.C中,并且,要先打开 BLANK1.SLN文件再操作。 不得增行或刪行,也不得更改程序的结构! #include <stdio.h> int fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=__1__; t=100; /**********found**********/ while(t<=__2__) { s1=t%10; s2=(t/10)%10; s3=t/100; if(s1+s2+s3==15) { printf(“%d “,t); n++; } /**********found**********/ __3__; } return n; } main() { int x=-1; while(x>999||x<0) { printf(“Please input(0<x<=999): “); scanf(“%d”,&x); } printf(“\nThe result is: %d\n”,fun(x)); } [codesyntax lang=”php”] [微答案] (1) 0 (2)X(3)t++ [微分析] 填空1:变量x用于存放符合条件的整数的个数,应赋初值为0。填空2:根据题目要求,确定循环变里t的取值范围t<= xo 填空3:循环变里t自增1操作。 #include int fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=0; t=100; /**********found**********/ while(t<=x) { s1=t%10; s2=(t/10)%10; s3=t/100; if(s1+s2+s3==15) { printf(“%d “,t); n++; } /**********found**********/ t++; }...

全国计算机二级C语言 # (18)程序填空题:自加、自减和逗号运算符(1-14)

全国计算机二级C语言 # 程序填空题:自加、自减和逗号运算符(1-14) 41) 给定程序中,函数 fun 的功能是:找出 100 至 x (x <999) 之间各位上的数字之和为 15 的所有整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 n 值为 500 时,各位数字之和为 15 的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有 26 个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。 不得增行或删行,也不得更改程序的结构! #include <stdio.h> int fun(int x) { int n, s1, s2, s3, t; /**********found**********/ n=__1__; t=100; /**********found**********/ while(t<=__2__) { s1=t%10; s2=(t/10)%10; s3=t/100; if(s1+s2+s3==15) { printf(“%d “,t); n++; } /**********found**********/ __3__; } return n; } main() { int x=-1; while(x>999||x<0) { printf(“Please input(0<x<=999): “); scanf(“%d”,&x); } printf(“\nThe result is: %d\n”,fun(x)); } [codesyntax lang=”php”] 【微答案】 (1) 0 (2) X (3) t++ 【微分析】 填空 1: 变里 n 用于存放符合条件的整数的个数,应赋初值为 0。填空 2: 根据题目要求,确定循环变量...

全国计算机二级C语言 # (17)程序填空题:算术表达式(1-14)

全国计算机二级C语言 # 程序填空题:算术表达式(1-14) 41) 给定程序中,函数 fun 的功能是:找出 100~999 之间(含 100 和 999) 所有整数中各位上数字之和为 x (x 为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。 例如,当 x 值为 5 时,100~999 之间各位上数字之和为 5 的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有 15 个。当 x 值为 27 时,各位数字之和为 27 的整数是:999。只有 1 个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1. C 中,并且,要先打开 BLANK1. SLN 文件再操作。 不得增行或删行,也不得更改程序的结构! #include <stdio.h> int fun(int x) { int n, s1, s2, s3, t; n=0; t=100; /**********found**********/ while(t<=__1__){ /**********found**********/ s1=t%10; s2=(__2__)%10; s3=t/100; /**********found**********/ if(s1+s2+s3==__3__) { printf(“%d “,t); n++; } t++; } return n; } main() { int x=-1; while(x<0) { printf(“Please input(x>0): “); scanf(“%d”,&x); } printf(“\nThe result is: %d\n”,fun(x)); } [codesyntax lang=”c”] 【微答案】 (1) 999 (2) t/10 (3) x...

全国计算机二级C语言 # (16)程序填空题:实型变量(1-2)

全国计算机二级C语言 # 程序填空题:实型变量 41) 给定程序中,函数fum的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正 数) .作为函数值返回;并将大于平均值的数放在形参y所指数组中.在主函数中输出。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26, 平均值为: 30. 500000。主函数中输出: 46 32 40 45 48。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中,并且,要先打开BLANK1. SLN文件再操作。不得增行或删行,也不得更改程序的结构! #include <stdlib.h> #include <stdio.h> #define N 10 double fun(double x[],double *y) { int i,j; double av; /**********found**********/ av=__1__; /**********found**********/ for(i=0; i<N; i++) av = av + __2__; for(i=j=0; i<N; i++) /**********found**********/ if(x[i]>av) y[__3__]= x[i]; y[j]=-1; return av; } main() { int i; double x[N] = {46,30,32,40,6,17,45,15,48,26}; double y[N]; for(i=0; i<N; i++) printf(“%4.0f “,x[i]); printf(“\n”); printf(“\nThe average is: %f\n”,fun(x,y)); for(i=0; y[i]>=0; i++) printf(“%5.0f “,y[i]); printf(“\n”); } [codesyntax lang=”c”] [微答案] (1)0.0 (2)x[i]/N (3)j++ [微分析]...

全国计算机二级C语言 # (15)程序填空题:标识符、常量和变量(1-3)

全国计算机二级C语言 # 程序填空题:标识符、常量和变量 41) 定程序中,函数fm的功能是将形参指针所指结构体数组中的三个元素按num成员进行升序排列。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中,并且,要先打开BLANK1. SLN文件再操作。不得增行或删行,也不得更改程序的结构! #include <stdio.h> typedef struct { int num; char name[10]; }PERSON; /**********found**********/ void fun(PERSON ___1___) { /**********found**********/ ___2___ temp; if(std[0].num>std[1].num) { temp=std[0]; std[0]=std[1]; std[1]=temp; } if(std[0].num>std[2].num) { temp=std[0]; std[0]=std[2]; std[2]=temp; } if(std[1].num>std[2].num) { temp=std[1]; std[1]=std[2]; std[2]=temp; } } main() { PERSON std[ ]={ 5,”Zhanghu”,2,”WangLi”,6,”LinMin” }; int i; /**********found**********/ fun(___3___); printf(“\nThe result is :\n”); for(i=0; i<3; i++) printf(“%d,%s\n”,std[i].num,std[i].name); } [codesyntax lang=”php”] [微答案] (1)std[] (2)PERSON (3)std [微分析] 填空1:定义形参变量引用数组std,此时形参可以定义为指针变量,也可以定义为数组。由下文可知,程序是通过数组下标对数组元素进行操作的,因此形参应使用数组形式,而非指针形式。 填空2:程序使用变里temp交换结构体数组元素的值,因而temp应定义为ERS0N型。 填空3:程序通过函数fun对数组std进行操作,因此函数的实参应为stdo #include typedef struct { int num; char name[10]; }PERSON; /**********found**********/ void fun(PERSON *std) { /**********found**********/ PERSON temp; if(std[0].num>std[1].num) { temp=std[0]; std[0]=std[1]; std[1]=temp; } if(std[0].num>std[2].num) { temp=std[0];...

全国计算机二级C语言 # (14)选择题:结构体、共用体与文件(1-38)

全国计算机二级C语言 # 选择题:结构体、共用体与文件(1-38) 1. 若文件指针fp已指向打开的文件,则以下关于fclose(fp)函数的叙述正确的是答案:D A)只有对文件进行写操作之后,才需要调用fclose(fp)函数关闭文件 B)当程序中对文件的所有写操作完成之后,不一定要调用fclose(fp)函数关闭文件 C)只有对文件进行读操作之后,才需要调用fclose(fp)函数关闭文件 D)当程序中对文件的所有写操作完成之后,必须调用fclose(fp)函数关闭文件 题目解析:完成对文件的操作后,必须要关闭当前文件,以免文件数据的丢失,而且fopen(文件名, fp)与fclose(fp)必须成对出现,不管对该文件有没有进行对操作。 2. 标准库函数fgets( s,n,f )的功能是答案:B A)从文件f中读取长度为n的字符串存入指针s所指的内存 B)从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 C)从文件f中读取n-1个字符串存入指针s所指的内存 D)从文件f中读取n个字符串存入指针s所指的内存 题目解析:函数fgets(s,n,f)的功能是从f指向的文件中读取一个长度为n-1的字符串,将其存入s指向的存储区中。 3. 有以下程序 #include <stdio.h> typedef  struct{ char  name[10]; int   age; }  ST; main() {  ST  stud[10]={ “Adum”,  15, “Muty”,  16, “Paul”,  17, “Johu”,  14, }; } 程序运行时不能输出字符u的语句是答案:D A)printf(“%c “, stud[1].name[1] ); B)printf(“%c “, stud[3].name[3] ); C)printf(“%c “, stud[2].name[2] ); D)printf(“%c “, stud[0].name[3] ); 4. 以下叙述正确的是答案:B A)EOF只能作为二进制文件的结束标志 B)EOF只能作为文本文件的结束标志,其值为-1 C)EOF可以作为所有文件的结束标志 D)任何文件都不能用EOF作为文件的结束标志 题目解析:EOF为一符号常量,值为-1,在C语言中常被作为文本文件的结束标志,不能作为二进制文件的结束标志。 5. 以下叙述正确的是答案:D A)fopen函数的调用形式为:fopen(文件名) B)fopen函数的返回值必须赋给一个任意类型的指针变量 C)fopen函数的返回值为NULL时,则成功打开指定的文件 D)在C语言中调用fopen函数就可把程序中要读、写的文件与磁盘上实际的数据文件联系起来 题目解析:fopen()函数的调用格式为:”文件指针名=fopen(文件名,使用文件方式)”将文件指针指向磁盘上实际的文件地址,返回非NULL时才是成功打开指定的文件,文件指针必须为FILE类型的指针。 6. 以下不能对文件进行输出的库函数是答案:D A)fwrite B)fprintf C)fputc D)fread 题目解析:对文件进行输出的库函数有fprintf、fputc、fputs、fwrite等,没有名为fpout的函数。 7. 设有以下程序段 struct person { char name[10]; char sex; float weight; } zhangsan, *ptr; ptr = &zhangsan; 若要从键盘读入姓名给结构体变量zhangsan的name成员,以下选项中错误的是答案:C A)scanf(“%s”, ptr->name); B)scanf(“%s”, (*ptr).name); C)scanf(“%s”, zhangsan->name); D)scanf(“%s”, zhangsan.name); 题目解析:结构体变量对其成员变量的引用用”.”运算符,而结构体指针引用成员变量使用指向运算符”->”,选项D)对name这一成员变量的引用有错,应该使用”.”运算符。 8. 有如下程序 #include <stdio.h> struct person { char name[10]; int age; } main() { struct person room[4] = {{“Zhang”, 19}, {“Li”, 20}, {“Wang”, 17}, {“Zhao”, 18}}; printf(“%s:%d “, (room+2)->name, room->age); } 程序运行后的输出结果是答案:C A)Li:20 B)Wang:17 C)Wang:19 D)Li:19 题目解析:结构体为用户自定义的一种构造类型,其用法和C语言基本数据类型一致,所以(room+2)->name与room[2].name等价,room->age与room[0].age等价,输出结果为Wang:19。 9. 有如下程序 #include <stdio.h>...

全国计算机二级C语言 # (13)选择题:编译预处理(1-44)

全国计算机二级C语言 # 选择题:编译预处理(1-44) 1. 有以下程序 #include <stdio.h> main() { int  i=1, j=3; printf(“%d,” ,i++ ); {  int  i=0; i+=j*2; printf(“%d,%d,” ,i,j ); } printf(“%d,%d ” ,i,j ); } 程序运行后的输出结果是答案:B A)1,7,3,2,3 B)1,6,3,2,3 C)1,6,3,1,3 D)1,6,3,6,3 题目解析:不同作用域内若定义有同名的局部变量,则在其中一个局部变量的作用域内,其他同名的局部变量会被”屏蔽”,规则一般是作用域小的变量”屏蔽”作用域大的变量。在用{}引起来的复合语句块中,i值为6,输出结果为6,3,而在语句块外,i为2,输出结果为2,3。 #include <stdio.h> int fun(int a,int b) { static int m=0, i=2; i +=m+1;   m = i + a + b; return  m; } main() { int  k=4, m=1, p; p = fun( k,m );   printf(“%d,”, p); p = fun( k,m );   printf(“%d ” ,p ); } 程序运行后的输出结果是答案:A A)8,17 B)8,8 C)8,16 D)8,20 题目解析:静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,所以第一次调用fun(k,m)时,p=fun(4,1)=m=8,静态变量i=2+0+1=3,m=3+4+1=8;第二次调用fun(k,m)时,p=fun(4,1)=m=17,静态变量i=3+8+1=12,m=12+4+1=17;输出结果为8,17。 3. 有以下程序 #include <stdio.h> #define  F(x)      2.84+x #define  PR(a)     printf(“%d” ,(int)(a)) #define  PRINT(a)  PR(a);putchar(‘ ‘) main() { PRINT( F(5)*2 ); } 程序运行后的输出结果是答案:A A)12 B)15 C)11 D)13 题目解析:宏替换是使用宏名代替一个字符串,是一种机械、简单的置换,所以语句”PRINT(F(5)*2);”可用字符串”PR(F(5)*2);putchar(′′);”替换,而语句”PR(F(5)*2);”可以用字符串”printf(“%d”,(int)(F(5)*2))”,即为”printf(“%d” ,(int)(2.84+5*2)”,所以输出结果为12。 4. 有以下程序 #include <stdio.h> main() {  char  c=’A’; int   x=36, b; b= (x>>2) && ( c<‘a’ ); printf(“%d “, b ); } 程序运行后的输出结果是答案:B A)0 B)1 C)2 D)4 题目解析:逻辑与”&&”的运算规则是两个运算对象均为真(非零)时,该逻辑表达式的值才为真(1),表达式”x>>2″中x的二进制数值为00100100,运算结果为1001,对应十进制数值为9,表达式”c<‘a’”的值为1,而9&&1的结果为1。 5. 以下语句的输出结果是 printf(“%d “, strlen(” “5ÿ “));答案:C A)输出项不合法,无正常输出 B)14 C)5 D)8 题目解析:字符串” “5ÿ”中共有五个转义字符,分别是’ ‘、’ ” ‘、’5’、’ÿ’、”,各代表一个字符,strlen()计算的是字符串的实际长度(不包含结束标识符),所以输出结果为5。 6. 有以下程序 #include <stdio.h> #include <string.h> main() { char  s[]=”Beijing”; printf(“%d...

全国计算机二级C语言 # (12)选择题:指针(1-46)

全国计算机二级C语言 # 选择题:指针(1-46) 1. 有以下程序 #include <stdio.h> main() { int  a[10] = { 11,12,13,14,15,16,17,18,19,20 },*p=a,i=9 ; printf( “%d,%d,%d “,a[ p-a ], p[i],*( &a[i] ) ); } 程序运行后的输出结果是答案:A A)11,20,20 B)12,20,20 C)12,19,20 D)11,19,19 题目解析:a表示数组a的第一个元素的地址,*p=a则将p指向了数组a的第一个元素的地址,p-a=0,所以a[p-a]即为a[0],p[i]相当于a[i]即a[9],输出第一个结果为11、第二个结果为20。取地址运算符&和取值运算符*互为逆运算,所以*( &a[i] ) )的值仍为a[i]即a[9],输出第三个结果为20。 2. 有以下程序 #include <stdio.h> void fun( int  *s, int  t, int  *k ) {  int  p; for( p=0, *k=p; p<t; p++ ) if( s[p]>s[*k] ) *k = p; } main() { int  a[10] = { 11,12,13,14,15,16,20,18,19,10 },k ; fun( a,10,&k ); printf( “%d,%d “,k, a[k] ); } 程序运行后的输出结果是答案:B A)10,10 B)6,20 C)10,9 D)7,20 题目解析:该代码段的逻辑是循环判定s中的值,如果大于s[*k]则用*k记录当前的元素下标,所以k为数组a中值最大的元素的下标。 3. 有以下说明语句 char  *s = “”Name\Address “; 指针s所指字符串的长度是答案:B A)说明语句不合法 B)14 C)15 D)17 题目解析:该字符串中有三个转义字符′ ” ′、′\ ′、′′,分别代表一个字符,并且字符串长度不包含结束标识符,所以该字符串的长度为14。 4. 有以下程序 #include <stdio.h> main() { char  *s[6] = { “ABCD”, “EFGH”,”IJKL”,”MNOP”,”QRST”,”UVWX” }, **p ; int  i; p = s; for( i = 0; i<4; i++ )  printf( “%s”, p[i] ); printf( ” ” ); } 程序运行后的输出结果是答案:C A)ABCDEFGHIJKL B)ABCD C)ABCDEFGHIJKLMNOP D)AEIM 题目解析:语句”p=s”,将p指向指针数组s的首地址,则p[i]与s[i]等价,均是指向第i+1个字符串的首地址,输出语句” printf(“%s”,p[i]);”会将该字符串整体输出。所以main()函数输出的为字符串数组s的前4个字符串。 5. 若有以下程序段 char str[4][12] = {“aaa”,”bbbb”,”ccccc”,”dddddd”},*strp[4]; int  i; for( i=0; i<4; i++) strp[i]=str[i]; 则以下错误引用字符串的选项是(其中0≤k<4)答案:A A)strp B)str[k] C)strp[k] D)*strp 题目解析:指针strp为一个指针数组,str为一个二维数组名。语句”strp[i] = str[i];”将str数组中第i+1个字符串的首地址赋值给strp[i],所以str[i]与strp[i]、*(strp+i)、*(str+i)等价,而strp为指针数组所占内存的首地址,不能引用字符串。 6. 若有以下定义和语句 struct  st{ int  n; struct  st *next; }; struct st a[3] = { 5,&a[0], 6,&a[1], 7,&a[2] }, *p; p=&a[0]; 则值为6的表达式是(提示:运算符->的优先级高于++)答案:C A)p++ ->n B)(*p).n++ C)(++p)-> n D)p ->n++ 题目解析:语句”p=&a[0];”表示将指针p指向了结构体数组a的首地址,所以(++p)->n值为6,p++->n相当于p->n,p++,值为5,p->n++值为5,(*p).n++相当于p->n++,值为5。 7. 以下选项中,不能对主函数中变量i和j的值进行交换的程序是答案:C...