1、C语言程序设计形成性作业一一、选择题1 .在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为(A)。A. main B. MAIN C. name D. funtion. C语言原程序文件的缺省扩展名为(D)。A. cppB. exeC. objD. C.由C语言Fl标文件连接而成的可执行的缺省扩展名为(B)。A. cppB. exeC. objD. C.程序运行中需要从键盘输入多于一个数据时,各数据之间应使用(D)符号作为分隔符。A.空格或逗号 B.逗号或回车C.回车或分号D.空格或回车.每个C语言程序的编译错误分为(B)类。A. 1 B. 2 C. 3 D. 4.设x和y均为逻辑
2、值,那么x&y为真的条件是(A)。A.它们均为真 B.其中一个为真C.它们均为假 D.其中一个为假.设有语句“inta=12;a+=a*a;,那么执行结束后,a的值为(6A. 12 B. 144 C. 156 D. 288. x0&xv=10的相反表达式为(A)oA. x10 B. x10 C. x=0 | x0 & x10.字符串“a+b=12n”的长度为(B)。A. 6 B. 7 C. 8 D. 9.在以下符号常量定义中。错误的定义语句格式为(C)。A. const MI = 10;B. const int M2=20; C. const M3 10 D. const char mark=
3、 * 3.带有随机函数的表达式rand()%20的值在(C)区间内,A. 119 B. 120 C. 019 D. 020.当处理特定问题时的循环次数时,通常采用(A)循环来解决。A. for B. while C. do-while D. switch.在switch语句的每个case块中,假定都是以break语句结束的,那么此swilch语句容易 被改写为(B)语句。A. for B. if C. do D. while. for语句能够被改写为(D)语句。A.复合 B. if C. switch D. while.下面循环语句执行结束后输出的i值为(B)。for(int i=0;in/2
4、)coutiendl;break;A. n/2 B. n/2+1 C. n/2-1 D. n-l14 .在下面循环w语句中内层循环体S语句的执行次数为(D)。fbr(int i=0;in;i+)for(int j=i:jn;j+)S;A. n2 B. (n+|)/2 C. n(n-l)/2 D. n(n+l)/215 .在下面的do循环语句中,其循环体被执行的次数为(A )。int i=0;do i+;while(i*i10);A. 4 B. 3 C. 5 D. 2二、填空题C语言中的每条简单语句以 作为结束符。1. C语言中的每条复合语句以作为结束符。#includcconst int M=
5、2,N=3;double Mcan(doublc aMN, int m,int n )double v=0;for(int i=0;im;i+)for(int j=O;jn;j+) v+=aifjl;return v/(m*n);/*void main()(double a23= 1,2,3,4,5,6);prinlf(Hn”,Mean(a23); */2. 编写一个递归函数“int FF(int a , int n)”,求出数组a中所有元素n个元素之根并返回。#includeint FF(int a, int n) in( mul=l;if(n=l)niul*=aO;else mul=an-
6、l*FF(a,n-l); return mul;)/*void niain()|int a6= 1,2,345,6;printf(%dn,FF(a,6); */3. 编写一个主函数,利用while循环,求出并显示满足不等式1+1/2+1/3+l/n5的最 小n值。#includevoid main() (double sum=0;int n=l;while(true) (if(sum + l/(double)n 5)break;elsesum += l/(double)n;n+;Iprintf(%d, %lfn,n,suin);)5. 编写一个主函数,求满足不等式22+42+n2vl000的最
7、大n值,假定分别用i 和s为取偶数值和累加值的变量,并限定使用do循环编程。#include void inain() (int s=0,i=2; do (s+=i*i;if(s+(i+2)*(i+2)= 1 OOO)break;else i+=2;while(true);printf(i=%d,s=%d,i,s);6. 编写一个主函数,计算并输出n的值,其中n值由键盘输入。#includevoid main()(int s=0,n;printf(请输入n的值:”);scanf(%d&n);for(int i=l;i=n;i+)s+=i*i;piintf(n=%d,s=%d,n,s);)C语言
8、程序设计形成性考核册参考答案作业三.在下面的(C)函数声明语句存在语法错误。A. AA(int a,int b); B. AA(int ,int) C. AA(int a;int b) D. AA(int a,int).在下面的(C)不能作为函数的返回类型。A. void B. int C. new D. long.下面正确的函数原型语句是(B)。A. int Funciion(void a); B. void Funclion(in();C. int Function(a);D. void int(double a);4.函数调用func(expl.exp2),exp3*exp4-exp5)
9、中所含实参的个数为(B)个。A. 1 B. 2 C. 4 D. 55.下面的标识符中,(C)是文件级作用域。A.函数形参 B.语句标号C.电脑商场特别版1变量p的正确语句为(B )。A. double p=&k;B. double *p=&k;C. double &p=*k;D. char *p= Thank you!w ;13 .假定一条定义语句为“int a10,x,*pa=a/;假设要把数组a中下标为3的元素赋值给x, 那么不正确的语句为(DA. x=pa3; B. x=*(a+3); C. a=a3; D. x=*pa+3;14 .假定有定义“intbIO;inl*pb;,那么不正确的
10、赋值语句为(C )。A. pb=b; B. pb=&bO; C. pb=b+2; D. pb=b5;.假定指针变量p定义为“int*p=ncwint(l(X);,要释放p所指向的动态内存,应使用语 句(D )。A. dclctcp; B. delete *p; C. delete &p; D. delete p;16.假定指针变量p定义为“int *p=calloc(30,sizeof(in。);,要释放p所指向的动态内存, 应使用语句(D )oA. deletep; B. deldete(p); C. freep; D. free(p);.在C语言中,一个函数由函数头和函数体 组成。1 .在
11、函数外定义的变最称为全局变显,假设没有被初始化那么系统隐含对它所赋的初值为 0 0.如果一个函数只允许同一程序文件中的函数调用,那么应在访函数定义前加上的C保存字 为 为static。2 .如果一个函数直接或间接地调用自身,这样的调用被称为递归 调用。3 .调用系统函数时,要先使用#由日同6命令包含该函数的原型语句所在_头_文件。4 .函数形参的作用域是该函数的内部o.假定p所指对象的值为25, p+1所指对象的值为46,贝U*p+的值为_25。5 .假定p所指对象的值为25, p+1所指对象的值为46,那么*+p的值为_46。6 .假定p所指对象的值为25, p+1所指对象的值为46,那么执
12、行“*(p+);“语句后,p所指 对象的值为_46 o.假定a是一个指针数组,那么a+1所指对象的地址比a地址大_4一字节。7 .假设要把一个整型指针p转换为字符指针,那么采用的强制转换表达式为_(char*)p。8 .假定一个数据对象为int*类型,那么指向该对象的指针类型为 o.假定p是一个指向整数对象的指针,那么用_&p_表示指针变量p的地址。9 .假设p指向x,那么*p与x的等价的。10 . NULL是一个符号常量,通常作为空指针值,它值为_ () (ASCH码0)。三、写出以下每个程序运行后的输出结果#includevoid SB(char ch)switch (ch)case A:
13、case a:printf(WW);break;case B:case b:prinlf(GG);break;case Cease c:printf(PP);break;default:printf(BB);break;)void main()charal=b,a2=Ca3=f;SB(al);SB(a2); SB(a3);SB(A);printf(n);I输出结果为:GGPPBBWWPress any key to continue1. #include#includcdouble SD(int a,in( b,char op) double x;svvitch(op) case +:x=a+
14、b;bieak; case ,-,:x=a-b;break; case *:x=a*b;break;case 7:if(b)x=(doublc)a/b;else exit(1); break;default:(运算符错! n);exit(l);) )return x;void main()int x=20.y=8;printf(%3.21f,SD(x,y, printf(,%3.21f,SD(x,y;*);printf(%3.2If,SD(x,y,/);)输出结果为:12.0() 160,(X) 2.50Press any key to continue2. #include void WF(
15、in( x,inl y) x=x+y;y=x+y;printf(subs:x,y=%d,%dn,x,y);)void main()int x=18,y=23;prinlf(main:x,y=%d,%dn,x,y); WF(x,y);x=2*x;printf(main:x,y=%d.%dn,x,y);)输出结果为:main:x,y= 18,23subs:x,y=41,64niain:x,y=36,23Press any key to continue3. #includc#include void fun(char ss); void main()char s15=567891234;fun(s
16、);printf(%sn,s);)void fun(char ssl)int i,n=strlcn(ss);for(i=0;in/2;i+)char c=ssi; ssi=ssn-l-i;ssn-l-i=c;)输出结果为:432198765Press any key to continue4. #include void InsertSort(int a,int n) (int i,j,x;for(i=l;i=O;j-)/?9 x顺序向前寻找合适的插入位置 if(xaj)aj+1=aj;else break;aj+l=x;) void main()(int i;int a6=20,15,32,
17、47,36,28);Inser(Sorl(a,6);for(i=0;i6;i+)printf(%d ,ai);printfCn);输出结果为:47 36 32 28 20 15Press any key to continue5. #includevoid main()int a8=3,5,7,9,11,13,15,17);int i,*p=a; for(i=0;i8;i+); printf(%5d ”,*p+);if( (i+l)%4=0 )printf(n); )输出结果为:357911131517Press any key to continue6. #includeint LA(int
18、 *a.int n) int i,s=0;for(i=0;in;i+) s+=a1ij;return s;Ivoid main()int a= 5,10,15,20,25,30;int b=LA(a,4);int c=LA(a+2,3); printf(%d %dnn,b,c);输出结果为:50 60Press any key to continue#includeint LB(int *a,int n) int i,s=l;for(i=0;in;i+)s*=*a+; return s;void main()int a= 1,23,4,2,4,5,2;int b=LB(a,4)+LB(&a3,
19、4); piintf(b=%dn,b);)输出结果为:b=184Press any key to continue 四、写出以下每个函数的功能1. #includeint WB(int a,int n,int x)for(int i=O;in;i+)if(ai=x)rcturn 1;return 0;)函数功能为:根据整型数组元索中是否能找到整数x,返回I或0#includeint WC(int ajnt n,int k)int c=0;for(int i=0;i=k)c+;return c;函数功能为:返回数组中前n个其值大于等于k的元素之和#include#include#includec
20、onst int N=l();int ff(int x,int y)int z;prinif(”d + %d = *x,y);scanf(%d,&z);if(x+y=z)return 1 ;else return 0;)void main()(int i,a,b,c=0;srand(time(0); 初始化随机数系列for(i=0;iN:i+)a=rand()%20+l; /rand90函数产生0-32767之间的一个随机数b=rand()%20+l;c+=ff(a,b);)printf(得分:%dnM,c*10);)函数功能为:函数ff让两个数相加,要求输入其和,判断结果是否正确。在主函数中
21、用随机函数产生两 个20以内的随机整数,通过10次调用这个函数,算对一次得10分,计算所得分 4. int fun6(int in,int n,int b=2) (if(mb & nb)rcturn m*n;else if(m%b=0 & n%b=O)return b*fun6(m/b,n/b,b);else return fun6(m,n,+b);函数功能为: 此函数带有一个默认参数,假设使用默认值,那么通过递归调用,返回前2参数的最小公倍数; 不使用默认值时,假设最后一个参数不小于前2个参数,那么返回前2参数之乘积; 否那么,通过递归调用,返回前2参数最小公倍数的n倍数。5. #inclu
22、de#includevoid LI(int n)int * a=电脑商场特别版 2 malloc(n*sizeof(int);int i;for(i=0;i=O;i-)printf(%d *(a+i);printf(n);free(a);函数功能为:将从键盘输入的n个整数逆序输山6. #includeint LK(double a,int n)double s=O;int i,m=0;for(i=0;in;i+)s+=alil;s/=n;for(i=0;i=s)m+;return m;函数功能为:求不小于数组元素之平均值的各元素之和(前n个)C语言程序设计形成性考核册参考答案作业四假定有 Ms
23、truct BOOKchar litle40;floal price;struct BOOK *book/; 那么不正确的 语句为(A)。A. struct BOOK *x=malloc(book); B. struct BOOK x= C+ Programming” ,27.0;C. struct BOOK *x=nialloc(sizeof(BOOK); D. struct BOOK *x=&book;1. 假定有 “struct BOOKchar【iUe40;floal price; book;,那么正确的语句为(B)。A. struct BOOK x=&book;B. struct B
24、OOK *x=&book;C. struct BOOK x=calloc(BOOK);D. struct BOOK *x=BOOK;3 .表示文件结束的符号常量为(C)。A. eof B. Eof C. EOF D. feof. C语言中系统函数fopen()是(D) 一个数据文件的函数。A.读取 B.写入 C.关闭 D.翻开.从一个数据文件中读入以换行符结束的一行字符串的函数为(B)。A. gets() B. fgets() C. getc() D. fgetc().向一个二进制文件写入信息的函数fwrite()带有(D)参数。A. 1B. 2C. 3D. 4.假定一个结构类型的定义为“st
25、ruct Aint a,b;A*c;,那么该类型的大小为12 字节。1 .假定一个结构类型的定义为“struct Bint a5,char那么该类型的大小为24字节。2 .假定一个结构类型的定义为 Mstruct Dint a;unionint b;double c;);struct D* d2;n 那么该 类型的大小为2()字节。3 .假定要动态分配一个类型为struct Worker的具有n个元素的数组,并由r指向这个动态 数组,那么使用语句的表达式为 struct Worker* r=(Workcr*)malloc(n*sizcof(Worker);。4 .假定要访问一个结构x中的由a指
26、针成员所指向的对象,那么表示方法为.假定要访问一个结构指针p所指向对象中的b指针成员所指的对象,那么表示方法为*(p-b)一.与结构成员访问表达式(*fp).score等价的表达式是fp-score。三、写出以下每个程序运行后的输出结果#includestruct Workerchar name 5; 姓名int age; 年龄float pay; 工资;void main()struct Worker x= wanghua,52,23.50;struct Worker y,*p;y=x;p=&x;printf(%s %d %6.2fn,y.name,y.age,y.pay);printf(%
27、s %d %6.2fn,p-name,p-age,p-pay);)输出结果为:wanghua 52 23.50wanghua 52 23.50 Press any key to continue1. #include#includestruct Workerchar name 15; 姓名int age; 年龄float pay; 工资);void main()struct Worker x;char *l=louling;int d=38;float f=493:slrcpy(x.name,t);x.age=d;x.pay=f;x.age+;x.pay*=2;printf(%s %d %6.
28、2fn,x.name,x.age,x.pay);输出结果为:louring 39 986.00Press any key to continue2. #include#includcstruct Workerchar namc 15; 姓名int age; 年龄float pay; /工资;int Less(struct Worker rl,struct Worker r2)if(r 1 .ager2.age)return 1;else return 0;)void main()struct Worker a4=”abc”,25,420,“deF,58,638,”ghi”,49,560,“jk
29、l”,36,375);struct Worker x=a0;int i;for(i= 1 ;i4;i+)if(Less(x.ai|)x=ail;printf(%s %d %6.2fn,x.name,x.age,x.pay);输出结果为:def 58 638.00Press any key to continue四、写出以下每个函数的功能. void QA(struct Worker aj,int n)int i;for(i=0;in;i+)scanf(%s %d %f,&ail.name,ai.age,ail.pay);I假定结构struct Worker的定义如下:#include#incl
30、ude#includestruct Workerchar name5; 姓名int age; 年龄float pay; 工资;函数功能为:输入struct Worker类型的对象an的各个元素的值. struct StrNode *QB(int n)StrNode *f,*p;if(n=O)return NULL:f=(StrNode*) malloc(sizeof(struct StrNode);scanf(%s,f-name);P=f;while(-n).在C语言程序的每个程序行后面或单独一行的开始使用注释的标记符为1 .单行或多行注释的结束标记符为_*/o.在一个C程序文件中,假设要包含
31、另外一个头文件或程序文件,那么应使用以_#inchide一 标识符开始的预处理命令。2 .命令中所包含的头文件,可以是系统定义的头文件,也可以是一用户一定义的头文件。3 . 一个函数定义由_函数头 和函数体两局部组成。4 .用于输出表达式的标准输出函数是_printf().当不需要函数返回任何值时,那么应使用_void 标识符定义函数类型。5 .执行“printf(d-%d=%d”,43,18,43-18); ”语句后得到的输出结果为_43-18=25.6 .每个C程序文件在编译时可能出现有警告性错误,其对应的标识符为一warning.每个C程序文件在编译时可能出现有致命性错误,其对应的标识符
32、为_error7 .十进制数25表示成符合C语言规那么的十六进制数为_0xl9_。8 .在C语言中,转义字符序列n表示一个换行符。9 .执行“printf( “%c, F -2);”语句后得到的输出结果为_D 。10 .AZ的ASCH码为65-90,当执行“int x=C+5;”语句所x的值为72.11 .假定一个枚举类型的定义为“enum RBab,ac=3,ad,aex=ad;”,那么x的值为4.12 . char类型的大小为_1一个字节。13 . int类型的大小为_4一个字节。14 . floal类型的大小为_4_个字节。15 .十进制数28类型为int。16 .十进制数3.26类型为
33、double一。17 .假设需要定义一个符号常量,并且使C语言能够进行类型检查,那么应在定义语句的开始使用保存字 const一。18 .使用const语句定义一个符号常量时,那么必须对它同时进行_定义类型和赋初值一。19 .执行“intx=45,y=13;printf( d,x%y);”语句序列后得到的输出结果为一6一。20 .假定x=5,那么表达式2+X+的值为_7_。21 .表达式(float)25/4 的值为6.25。22 .表达式(int)l4.6%5的值为4。23 .表达式x=x+l表示成增量表达式为_x+o.增昌表达式+y表示成赋值表达式为_y+=i_o24 .关系表达式(x!=0
34、)的等价表达式为x_o.假定不允许使用逻辑非操作符,那么关系表达式x+y5的相反表达式为x+yb | b=5的相反表达式为_a5 | by 逻辑值为false。26 .假设 x=5,y=10,那么 *ncxt=(StrNodc*)malloc(sizcof(struct StrNodc); scanf(%s.p-name);)p-nexl=NULL; return f;)假定结构struct StrNode的定义如下:struct StrNode !char name51;struct StrNode *ncxt;;函数功能为:建立一个具有n个结点,每个结点的类型是StrNode的链表3. s
35、truct InlN(xle* FindMax(struct IntNode *f) |struct IntNode *p=f;if(!f)return NULL;f=f-ncxt;while(f)if(f-data data)p=f;f=f-next;) return p;)假定结构struct StrNode的定义如下:struct IntNodeint data;struct IntNode * next;;函数功能为:在一个具有n个结点,每个结点的类型是IntNode的链表中寻找data值最大的结点 4. int Count(struct IntNode *f) (int c=0:wh
36、ile(f)C+; f=f-next;) return c;)假定结构struct StrNode的定义如下:struct IntNodeint data;struct IntNode * next;I;函数功能为:计算一个具有n个结点,每个结点的类型是IntNode的链表的结点数struct IntNode* Input(int n) (struct IntNodef=(In(Node*)malloc(sizeof(strucl IniNode);if(n=O)return NULL:f-next=NULL;printf(从键盘输入%d个整数:”,n);while(n-)scanf(%d,&
37、(f-data);p=f;f=(IntNode*)malIoc(sizeof(struct IntNode); f-next=p;) return f-next;)假定结构struct StrNode的定义如下:struct IntNodcint data;struct IntNode * next;);函数功能为:在类型为IntNode的链表后输入n个结点的数据#include#include#includc void JA(char* fname) (FILE* fout=fopen(fname,w);char a20;printfC*);while(l)scanf(%s,a);if(st
38、rcmp(a,end)=O)break;fputs(a,fout); fpulc(n,fout);) fclose(fout);)void main() (char *p=d:xxkxuxk 1 .txt;JA(p);函数功能为:在已经存在的d:xxk文件夹下(如不存在此文件夹程序运行会出错)翻开 xuxkl.txt文件,并向其中输入一系列长度小于20的字符串,直到输入字符串end结束。附录资料:不需要的可以自行删除Abstract: Based on the comprehensive analysis on the plastic parts structure service requi
39、rement, mounding quality and mould menu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction and multi-combination core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of t
40、he mould was introducedC语言详解-枚举类型注:以下全部代码的执行环境为VC+ 6.0在程序中,可能需要为某地整数定义一个别名,我们可以利用预处理指令#define来完成这 项工作,您的代码可能是:# dcfinc MON 1define TUE 2# define WED 3define THU 4# define FRI 5define SAT 6# define SUN 7在此,我们定义一种新的数据类型,希望它能完成同样的工作。这种新的数据类型叫枚举型。1 .定义一种新的数据类型一枚举型以下代码定义了这种新的数据类型一枚举型enum DAYMON=LTUE, WED
41、, THU, FRI, SAT, SUN;(I)枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号, 隔开。DAY是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。(3)第一个枚举成员的默认值为整型的0,后续枚举成员的值在前一个成员上加1。(4)可以人为设定枚举成员的值,从而自定义某个范围内的整数。(5)枚举型是预处理指令#define的替代“(6)类型定义以分号;结束。2 .使用枚举类型对变量进行声明新的数据类型定义完成后,它就可以使用了。我们已经见过最基本的数据类型,如:整型int, 单精度浮点型float,双精度浮点型double,字符型c
42、har,短整型short等等。用这些基本数据 类型声明变量通常是这样:chara; 变量a的类型均为字符型charcharletter;inix,y,z; 变量x,y和z的类型均为整型int int number;double m, n;double result; 变量result的类型为双精度浮点型double 既然枚举也是一种数据类型,那么它和基本数据类型一样也可以对变量进行声明。方法:枚举类型的定义和变量的声明分开enum DAY (MON= 1, TUE, WED. THU, FRI, SAT, SUN ; enum DAY yesterday;enum DAY today;enum DAY tomorrow; 变量 tomorrow 的类型为枚举型 enum DAYenum DAY good_day, bad_day; 变量 good_day 和 bad_day 的类型均为枚举型 enum DAY 方法二:类型定义与变量声明同时进行:enum跟第一个定义不同的是,此处的标号DAY省略,这是允许的。 Saturday, sunday = 0, monday, luesday, Wednesday, thursday, friday workday; 变量wor