2022年程序设计方案部内部习题与答案.docx
精选学习资料 - - - - - - - - - 程序设计部内部习题一、填空题如有如下说明,且int 类型占两个字节,就正确的表达为(A )struct st int a ; int b2 ;a;A.结构体变量 a 与结构体成员 a 同名,定义是合法的 st 安排储备空间 B.程序只在执行到该结构体时才为结构体 C.程序运行时为结构体 st 安排 8 字节储备单元 D.类型名 struct 可以通过 extern 关键字提前引用【解读】此题主要考查结构体的用法:结构体变量a 与结构体成员a 同名,定义合法:在程序编译的时候结构的定义并不会使系统为该结构安排内存空间,只有在说明结构变量时才安排内存空间;int a 占 2 个字节 int b2 占 4 个字节;共6 个;类型名shmct st不行以通过extem 关键字提前引用;C);2、语句“printf ”yboun ”;” 的输出结果是(A. abhow'are'ybou ybou C. how'are'you D. ahow'are'ybou 【解读】“b ” 格式符表示退格,功能是将它后面的字母把它前面的字母掩盖,导致“ b” 格式符前面的字母不能输出;“ '” 格式符表示输出单引号字符;“” 格式符表示 输出反斜线字符;3、字符串 "%"ABCDEF""的长度是(B)A.11 B.10 C.5 D.3 【解读】此题涉及字符串最基本的 但不包括字符串终止符:以反斜杆2 个概念:字符串的长度是指字符串中字符的个数,v 开头的特别字符序列,意思是把反斜杆后面的字符序列转换成特定的含义,而不是原先的含义,不包含在字符串长度之内,''连同后面的 字符为一个长度;而 %也是如此;4、有以下程序 #include<stdio.h> void main char a30,b30 ;名师归纳总结 - - - - - - -第 1 页,共 8 页精选学习资料 - - - - - - - - - scanf"%s",a ;getsb;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<stdio.h> main int b33=0,1,2,0,1,2,0,1,2,i,j,t=0;fori=0 ; i<3;i+ forj=2 ; j>=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<stdio.h> main int x=1,y=0,a=0,b=0 ;switchx case 1: switchy 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 结构的内容;在Ccasecase标号的内容后breakcase 常量表达式只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.freadb,sizaeofstruct a,10,fp ;B.fori=0 ;i<10;i+ freadbi,sizeofstruct a,1,fp ;C.fori=0 ;i<10;i+ freadb+i,sizeofstruct a,1,fp ;D.fori=0 ;i<5 ;i+=2 freadb+i,sizeofstruct a,2,fp ;【考点】文件【解读】数据块输入 /输出函数的调用格式为:freadbuffer,size , count , fp ,其中:“ buffer ” 是一个指针,对于 fread 来说,它是读入数据的存放地址;“size” 是要读写的字 节数; “ count” 是要进行读写多少个 size 字节的数据项;“ fp” 是指文件型指针;选项 B 中 bi 是一个数组,不是指针,需改为 &bi ;二:填空题1、/* 请补充函数proc,该函数的功能是:把ASCII 码为偶数的字符从字符串str 中删除,结果仍旧储存在字符串str 中,proc;字符串 str 从键盘输入,起长度作为参数传入函数例如:输入 "verybook", 输出 "eyook"*/ #include<stdlib.h> #include<stdio.h> #define M 80 void procchar str,int n int i,j ;j=0;fori=0 ; i<n;i+ 名师归纳总结 - - - - - - -第 4 页,共 8 页精选学习资料 - - - - - - - - - ifstri%2.=0 strj+=stri ; strj='0' ; void main int i=0,strlen=0 ;char strM ;system"CLS" ;printf"nInput a string:n";getsstr;whilestri.='0' strlen+;i+ ; procstr,strlen ;printf"n*display string *n" putsstr; 4、以下程序运行后的输出结果是()#include<stdio.h> void main int a;a=intdouble3/2+0.5+int1.99*2;printf"%dn",a ; 【解读】由于 3/2 的结果等于 1,再进行强制类型转换为双精度型,其值等于 1.0,再加上0.5 等于 1.5;对于 int1.99*2 来说,先把 1.99 进行类型转换为整型,得到 1,再乘以 2,得 到 2,再与前面的 1.5相加等于 3.5,再进行整型转换得到 3;5、以下程序段是从键盘输入的字符中统计小写字母的个数,用换行符终止循环;请填空 int n=0,c ;c=getchar ;whilec.= n ;if n+; 名师归纳总结 - - - - - - -第 5 页,共 8 页精选学习资料 - - - - - - - - - 【解读】小写字母在内存中以ASCII 的形式存入,且从a 到 z 一次增加,所以直接用c> z判定从 a 到 z 的字母, c.=判定用换行符终止循环6、4、下面程序的功能是依据近似公式:#include double pilong n double s=0.0;long i ;fori=1 ;i<=n ;i+ s=s+ ;return ; 2/6 1/12+1/22+1/32+ +1/n2,求 值;【解读】答案: 1.0/floati*i sqrt6*s 7、下面程序通过指向整型的指针将数组 printf 填入适当的参数,使之通过指针 #include a34 的内容按行× 列的格式输出,请给 p 将数组元素按要求输出;int a34=1,2,3,4,5,6,7,8,9,10,11,12, *p=a ;main int i,j ;fori=0 ;i<3;i+ forj=0 ;j<4;j+ printf"M ", ; 【答案】 *p+4*i+j 【注释】 p 是一个一级指针,赋值后储存二维数组a 的首地址 ,做加法运算加1 时,实际地址增加一个它所指向的数据类型的长度;在C 语言中,多维数组在运算机中是按行储备的,所以在此题中要通过指针拜访二维数组中的数据,必需将二维下标转换为一维下标;7、编程题1、将一个正整数分解质因数;例如:输入90,打印出 90=2*3*3*5 ;名师归纳总结 程序分析:对n 进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:第 6 页,共 8 页1假如这个质数恰等于n,就说明分解质因数的过程已经终止,打印出即可;2假如 n<>k ,但 n 能被 k 整除,就应打印出k 的值,并用n 除以 k 的商 ,作为新的正整数你- - - - - - -精选学习资料 - - - - - - - - - n,重复执行第一步;3假如 n 不能被 k 整除,就用 #include "stdio.h" #include "conio.h" main int n,i ;k+1 作为 k 的值 ,重复执行第一步printf"nplease input a number:n" ;scanf"%d",&n ;printf"%d=n",n ;fori=2 ; i<=n ;i+ whilen.=i ifn%i=0 printf"%d*",i;n=n/i; else break; printf"%d",n ;getch;*/ 2、/* 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 #include "stdio.h" #include "conio.h" main char c;int letters=0,space=0,digit=0,others=0 ;printf"please input some charactersn" ;whilec=getchar.='n' ifc>='a'&&c<='z'|c>='A'&&c<='Z' letters+;else ifc=' ' space+;else ifc>='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 页