2022年程序设计方案部内部习题与答案 .pdf
程序设计部内部习题一、填空题若有如下说明,且int 类型占两个字节,则正确的叙述为(A)struct st int a 。 int b2 。a。A.结构体变量a与结构体成员a同名,定义是合法的B.程序只在执行到该结构体时才为结构体st分配存储空间C.程序运行时为结构体st分配 8字节存储单元D.类型名 struct 可以通过extern 关键字提前引用【解读】本题主要考查结构体的用法:结构体变量a 与结构体成员a 同名,定义合法:在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;int a 占 2个字节 int b2 占 4 个字节。共6 个;类型名shmct st不可以通过extem 关键字提前引用。2、语句“ printf( ”yboun ” );”的输出结果是(C)。A. abhowareybou ybou C. howareyou D. ahowareybou 【解读】“b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致“b”格式符前面的字母不能输出;“”格式符表示输出单引号字符;“”格式符表示输出反斜线字符。3、字符串 %ABCDEF的长度是(B)A.11 B.10 C.5 D.3 【解读】本题涉及字符串最基本的2 个概念:字符串的长度是指字符串中字符的个数,但不包括字符串结束符:以反斜杆v 开头的特殊字符序列,意思是把反斜杆后面的字符序列转换成特定的含义,而不是原来的含义,不包含在字符串长度之内,连同后面的字符为一个长度;而%也是如此。4、有以下程序#include void main() char a30,b30 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 8 页scanf(%s,a) 。gets(b)。printf(%sn%sn,a,b) 。 输入 how are you? I am fine ,程序的运行结果是( C)A. how are you? B. how I am fine are you? I am fine C. how are you ? I am fine D. how are you? I ok 【知识点】考查数组5、有以下程序#include main() int b33=0,1,2,0,1,2,0,1,2,i,j,t=0。for(i=0 。 i=i 。j-) t+=bij 。printf(%dn,t) 。 程序运行后的结果是( C )A.4 B.3 C.8 D.9 【知识点】循环结构【解读】这道题主要考查的是二维数组的有关知识。在两层for 循环语句中,累加上三角元素,所以程序执行的过程为t=b00+bO1+b02+b11+b12+b22=8。6、有以下程序#include main() int x=1,y=0,a=0,b=0 。switch(x) case 1: switch(y) case 0:a+。break。case 1:b+。break。 case 2:a+。b+。break。case 3:a+。b+。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 8 页printf(a=%d,b=%dn,a,b) 。 程序执行的结果是( D )A.a=1,b=0 B. a=2,b=2 C. a=1,b=1 D. a=2,b=1 【知识点】选择结构【解读】本题考查了switch 结构的内容。在Ccase标号的内容后breakcasecase 常量表达式只switch继续执行了外部switch 结构的 case 2分支。最后a和 b 的值分别为2和 1 7、若有定义int a5,*p=a ;则正确引用数组元素的是( D )A.*&a5 B.*a+2 C.*(p+5) D.*(a+2) 【知识点】指针【解读】本题考查通过指针引用数组元素。用指针引用数组有以3 种形式: (p+n)与(a+n)表示数组元素an的地址, *(p+n) 与 *(a+n) 表示数组元素an; pn=*(p+n) ,都表示数组元素 an。选项A)、B)没有这种引用形式;选项C), *(p+5) 是引用数组的第6 个元素,而数组一共有5 个元素,出现越界;选项D), *(a+2) 引用数组的第3 个元素。8、设有以下说明,则不正确的叙述式()union un int a。char b。float c。arr 。A.arr 所占的内存长度等于成员c 的长度B. arr 的地址和它的各成员的地址都是同一地址C. arr 可以作为函数参数D. 不能在定义arr时对它初始化【知识点】共用体【解读】本题主要考查联合体的内存使用:联合体所占用的内存空间为最长的成员所占用的空间, int 占 2 个字节, char 占 1 个字节, float 占 4 个字节,所以arr 所占的内存长度等于成员c 的长度: arr 的地址和它的各成员的地址都是同一地址;不能直接对arr 赋值,即不能在定义arr 时对它初始化:arr 也不可以作为函数参数。9、以下说法正确的是()。A.宏定义是C 语句,要在末行加分号精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 8 页B.可以使用 #undefine 提前结束宏名的使用C.在进行宏定义时,宏定义不能嵌套D.双引号中出现的宏名也要进行替换【考点】宏替换,文件包含(带参数的宏定义和不带参数的宏定义,中止宏定义)【解读】本题考查宏的使用规则:字符替换格式:#define 标识符字符串,行末不加分号;双引号中出现的宏名不替换;如果提前结束宏名的使用,程序中可以使用#undefine;在进行宏定义时,宏定义能层层置换,能够嵌套。E.struct a char number100 。int age。float p6 。 。定义一个数组:struct a number10 。假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b 中的是()A.fread(b,sizaeof(struct a),10,fp) 。B.for(i=0 。i10。i+) fread(bi,sizeof(struct a),1,fp) 。C.for(i=0 。i10。i+) fread(b+i,sizeof(struct a),1,fp) 。D.for(i=0 。i5。i+=2) fread(b+i,sizeof(struct a),2,fp) 。【考点】文件【解读】数据块输入/输出函数的调用格式为:fread(buffer,size , count , fp) ,其中:“buffer ”是一个指针,对于fread 来说,它是读入数据的存放地址。“size”是要读写的字节数; “count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B)中 bi 是一个数组,不是指针,需改为&bi 。二:填空题1、/*请补充函数proc(),该函数的功能是:把ASCII 码为偶数的字符从字符串str 中删除,结果仍然保存在字符串str 中,字符串 str 从键盘输入,起长度作为参数传入函数proc()。例如:输入 verybook, 输出 eyook*/ #include #include #define M 80 void proc(char str,int n) int i,j 。j=0。for(i=0 。 in。i+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 8 页 if(stri%2!=0) strj+=stri 。 strj=0 。 void main() int i=0,strlen=0 。char strM 。system(CLS) 。printf(nInput a string:n)。gets(str)。while(stri!=0) strlen+。i+ 。 proc(str,strlen)。printf(n*display string *n)。puts(str)。 4、以下程序运行后的输出结果是()#include void main() int a。a=(int)(double)(3/2)+0.5+(int)1.99*2)。printf(%dn,a) 。 【解读】因为3/2 的结果等于1,再进行强制类型转换为双精度型,其值等于1.0,再加上0.5 等于 1.5;对于 (int)1.99*2 来说,先把1.99 进行类型转换为整型,得到1,再乘以2,得到 2,再与前面的1.5相加等于3.5,再进行整型转换得到3。5、下列程序段是从键盘输入的字符中统计小写字母的个数,用换行符结束循环。请填空int n=0,c。c=getchar( )。while(c!= n )。if( ) n+。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 8 页【解读】小写字母在内存中以ASCII 的形式存入,且从a 到 z 一次增加,所以直接用c z判断从 a到 z 的字母, c!= 判断用换行符结束循环6、4、下面程序的功能是根据近似公式:2/6 1/12+1/22+1/32+ +1/n2,求值。#include double pi(long n) double s=0.0;long i ;for(i=1 ;i=n;i+) s=s+ ;return( ); 【解读】答案: 1.0/(float)(i*i) sqrt(6*s) 7、下面程序通过指向整型的指针将数组a34 的内容按行列的格式输出,请给printf( ) 填入适当的参数,使之通过指针p 将数组元素按要求输出。#include int a34=1,2,3,4,5,6,7,8,9,10,11,12, *p=a;main() int i,j ;for(i=0 ;i3;i+ ) for(j=0 ;j4;j+ ) printf(M , ); 【答案】 *(p+4*i+j) 【注释】 p 是一个一级指针,赋值后保存二维数组a 的首地址 ,做加法运算加1 时,实际地址增加一个它所指向的数据类型的长度。在C 语言中,多维数组在计算机中是按行存储的,所以在本题中要通过指针访问二维数组中的数据,必须将二维下标转换为一维下标。7、编程题1、将一个正整数分解质因数。例如:输入90,打印出 90=2*3*3*5 。程序分析:对n 进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果 nk,但 n 能被 k 整除,则应打印出k 的值,并用n 除以 k 的商 ,作为新的正整数你精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 8 页n,重复执行第一步。(3)如果 n 不能被 k 整除,则用k+1 作为 k 的值 ,重复执行第一步#include stdio.h #include conio.h main() int n,i 。printf(nplease input a number:n) 。scanf(%d,&n) 。printf(%d=n,n) 。for(i=2 。 i=a&c=A&c=0&c=9) digit+ 。 else others+。 printf(all in all:char=%d space=%d digit=%d others=%dn,letters, space,digit,others)。getch()。 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 8 页精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 8 页