c语言期末考试练习题3.docx
- 文档编号:30582692
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:18
- 大小:52.53KB
c语言期末考试练习题3.docx
《c语言期末考试练习题3.docx》由会员分享,可在线阅读,更多相关《c语言期末考试练习题3.docx(18页珍藏版)》请在冰豆网上搜索。
c语言期末考试练习题3
一、单项选择题(6小题,每小题3分,共18分)
1、设有以下语句:
structst
{intn;
structst*next;
};
staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
以下表达式的值为6的是()
A、p++–>n
B、p–>n++
C、(*p).n++
D、++p–>n
2、以下程序的运行结果是()
#include
intmain()
{union{longa;
intb;
charc;
}m;
printf("%d\n",sizeof(m));
return0;
}
A、2B、4C、6D、8
3、下面程序的运行结果是()
#include
intmain()
{inta=28,b;
chars[10],*p;
p=s;
do{b=a%16;
if(b<10)*p=b+48
else*p=b+55
p++;
a=a/5;
}while(a>0);
puts(s);
return(0);
}
A、10B、C2C、C51D、\0
4、以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是()
A、voidstrcpy1(char*p1,char*p2)
{while((*pl++=*p2++)!
='\0');}
B、voidstrcpy1(char*p1,char*p2)
{while(*pl=*p2)!
='\0');{p1++;p2++;}}
C、voidstrcpy1(char*p1,char*p2)
{while(*p2)*p1++=*p2++;}
D、voidtrcpy1(char*p1,char*p2)
{while((*p1++=*p2++);)*p='\0';}
5、已知ch是字符型变量,下面不正确的赋值语句是()。
A、ch='a+b';B、ch='\0';C、ch='7'+'9';D、ch=5+9;
6、以下在任何情况下计算平方数时都不会引起二义性的宏定义是()
A、#definePOWER(x)□□x*x
B、#definePOWER(x)□□(x)*(x)
C、#definePOWER(x)□□(x*x)
D、#definePOWER(x)□□((x)*(x))
二、填空题(7小题,每小题3分,共22分)
1、已知以下矩阵:
其中矩阵B的各行元素值是矩阵A的相应行所有元素之和。
下面程序的功能是求出矩阵B的值。
请填空。
#include
intmain()
{floata[4][4]={{1,–0.2,0,0},
{–0.8,1,–0.2,–0.2},
{0,–0.8,1,–0.2},
{0,–0.8,–0.8,1}},
floatb[4];inti,j,k;
for(i=0;i<4;i++)
{b[i]=0;
for(j=0;j<4;j++)
()
}
for(k=0;k<4;k++)
printf("\nb[%d]=%–6.2f",k+l,());
return0;
}
2、下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。
请填空。
#incLude
intmain()
{inta[5],max,min,i,j=0,k=0;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
min=a[0];
for(i=1;i<5;i++)
if(a[i] max=a[0]; for(i=1;i<5;i++) if(a[i]>max){max=a[i];();} () printf("\nThepositionofminis: %3d\n",k); printf("Thepositionofmaxis: %3d\n",j); for(i=0;i<5;i++) printf("%5d",a[i]); return0; } 3、下面程序段的运行结果是()。 charch[]=''600";inta,s=0; for(a=0;ch[a]>='0'&&ch[a]<='9';a++) s=10*s+ch[a]–'0'; printf("%d",s); 4、已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch='a'+'8'–'3'的值为()。 5、若有定义语句: charc='\010';则变量c中包含的字符个数为()。 6、当调用函数read从磁盘文件中读数据时,若函数的返回值为10,则表明()若函数的返回值为0,则表示();若函数的返回值为–1,则意味着()。 7、将以下含有switch语句的程序段改写成对应的含有非嵌套if语句的程序段。 请填空。 •含有switch语句的程序段: intx,y,m; y=(int)(x/10); switch(y) {case10: m=5;break; case9: m=4;break; case8: m=3;break; case7: m–2;break; case6: m=1;break; default: m=0; } •含有非嵌套if语句的程序段 intx,m; if(())m=5; if(x<100)&&(x>=90))m=4; if(x<90)&&(x>=80))m=3; if(x<80)&&(x>=70))m=2: 讧(x<70)&&(x=60))m=1; if(())(); 三、编程题(6小题,每小题10分,共60分) 1、以下函数fun的功能是从3个红球(x)、5个白球(y)、6个黑球(z)中任意取出8个,且其中必须要有红球和白球。 请编写函数,输出所有方案。 #include intfun(intx,inty,intz) {inti,j,k,sum=0; (请在此处编写函数) } intmain() {intsum,x=3,y=5,z=6; sum=fun(x,y,z); printf("sum=%4d\n',sum); return(0); } 2、通过循环按行顺序为一个5×5的二维数组a赋1~25的自然数,然后输出该数组的左下三角。 试编程。 3、设文件number.dat中存放了一组整数。 请编写程序统计并输出文件中正整数、零和负整数的个数。 4、已知head指向双向链表的第一个结点。 链表中每个结点包含数据域(info)、后继元素指针域(next)和前趋元素指针域(pre)。 请编写函数print1用来从头至尾输出这一双向链表。 5、已知计算三角形面积的公式为: ,其中,这里a、b、c分别为三角形的三条边。 请编写程序: 定义两个带参的宏,分别实现上述两个公式,并引用所定义的宏计算三角形面积。 6、编写程序实现功能: 根据下表中的函数关系,对输入的每个x值,计算出相应的y值。 xy x<00 0 10 20 一、单项选择题(6小题,共18分) 1、设有以下语句: structst {intn; structst*next; }; staticstructsta[3]={5,&a[1],7,&a[2],9,'\0'},*p; p=&a[0]; 以下表达式的值为6的是() A、p++–>n B、p–>n++ C、(*p).n++ D、++p–>n 答案: D 2、以下程序的运行结果是() #include intmain() {union{longa; intb; charc; }m; printf("%d\n",sizeof(m)); return0; } A、2B、4C、6D、8 答案: B 3、下面程序的运行结果是() #include intmain() {inta=28,b; chars[10],*p; p=s; do{b=a%16; if(b<10)*p=b+48 else*p=b+55 p++; a=a/5; }while(a>0); puts(s); return(0); } A、10B、C2C、C51D、\0 答案: C 4、以下与库函数strcpy(char*p1,char*p2)功能不相等的程序段是() A、voidstrcpy1(char*p1,char*p2) {while((*pl++=*p2++)! ='\0');} B、voidstrcpy1(char*p1,char*p2) {while(*pl=*p2)! ='\0');{p1++;p2++;}} C、voidstrcpy1(char*p1,char*p2) {while(*p2)*p1++=*p2++;} D、voidtrcpy1(char*p1,char*p2) {while((*p1++=*p2++);)*p='\0';} 答案: D 5、已知ch是字符型变量,下面不正确的赋值语句是()。 A、ch='a+b';B、ch='\0';C、ch='7'+'9';D、ch=5+9; 答案: A 6、以下在任何情况下计算平方数时都不会引起二义性的宏定义是() A、#definePOWER(x)□□x*x B、#definePOWER(x)□□(x)*(x) C、#definePOWER(x)□□(x*x) D、#definePOWER(x)□□((x)*(x)) 答案: D 二、填空题(7小题,共22分) 1、已知以下矩阵: 其中矩阵B的各行元素值是矩阵A的相应行所有元素之和。 下面程序的功能是求出矩阵B的值。 请填空。 #include intmain() {floata[4][4]={{1,–0.2,0,0}, {–0.8,1,–0.2,–0.2}, {0,–0.8,1,–0.2}, {0,–0.8,–0.8,1}}, floatb[4];inti,j,k; for(i=0;i<4;i++) {b[i]=0; for(j=0;j<4;j++) () } for(k=0;k<4;k++) printf("\nb[%d]=%–6.2f",k+l,()); return0; } 答案: b[i]+=a[i][j];b[k] 2、下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。 请填空。 #incLude intmain() {inta[5],max,min,i,j=0,k=0; for(i=0;i<5;i++) scanf("%d",&a[i]); min=a[0]; for(i=1;i<5;i++) if(a[i] max=a[0]; for(i=1;i<5;i++) if(a[i]>max){max=a[i];();} () printf("\nThepositionofminis: %3d\n",k); printf("Thepositionofmaxis: %3d\n",j); for(i=0;i<5;i++) printf("%5d",a[i]); return0; } 答案: i=j=kk=ia[j]=max;a[k]=max; 3、下面程序段的运行结果是()。 charch[]=''600";inta,s=0; for(a=0;ch[a]>='0'&&ch[a]<='9';a++) s=10*s+ch[a]–'0'; printf("%d",s); 答案: 600 4、已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch='a'+'8'–'3'的值为()。 答案: f 5、若有定义语句: charc='\010';则变量c中包含的字符个数为()。 答案: 1 6、当调用函数read从磁盘文件中读数据时,若函数的返回值为10,则表明()若函数的返回值为0,则表示();若函数的返回值为–1,则意味着()。 答案: 读入了10个字符遇到了文件结束符读文件出错 7、将以下含有switch语句的程序段改写成对应的含有非嵌套if语句的程序段。 请填空。 •含有switch语句的程序段: intx,y,m; y=(int)(x/10); switch(y) {case10: m=5;break; case9: m=4;break; case8: m=3;break; case7: m–2;break; case6: m=1;break; default: m=0; } •含有非嵌套if语句的程序段 intx,m; if(())m=5; if(x<100)&&(x>=90))m=4; if(x<90)&&(x>=80))m=3; if(x<80)&&(x>=70))m=2: 讧(x<70)&&(x=60))m=1; if(())(); 答案: x<110&&x>=100(x<60)||(x>109)m=0 三、编程题(6小题,共60分) 1、以下函数fun的功能是从3个红球(x)、5个白球(y)、6个黑球(z)中任意取出8个,且其中必须要有红球和白球。 请编写函数,输出所有方案。 #include intfun(intx,inty,intz) {inti,j,k,sum=0; (请在此处编写函数) } intmain() {intsum,x=3,y=5,z=6; sum=fun(x,y,z); printf("sum=%4d\n',sum); return(0); } 答案: for(i=1;i<=x;i++) {for(j=1;j<=y;j++) {k=8–i–j; if(k>=0&&k<=z) {sum=sum+1; printf("%4d%4d%4d\n",i,j,k); } } returnsum; 2、通过循环按行顺序为一个5×5的二维数组a赋1~25的自然数,然后输出该数组的左下三角。 试编程。 答案: #include intmain() {inta[5][5],i,j,n=1; for(i=0,i<5;i++) for(j=0,j<5;j++) a[i][j]=n++; printf("Theresultis: \n"); for(i=0,i<5;i++) {for(j=0,j<=i;j++) printf("%4d",a[i][j]); printf("\n"); } return0; } 3、设文件number.dat中存放了一组整数。 请编写程序统计并输出文件中正整数、零和负整数的个数。 答案: #include FILE*fp; intmain() {intp=0,n=0,z=0,temp; fp=fopen("number.dat","r"); if(fp==NULL) if(fp==NULL) printf("Filecannotbefound! \n"); else {while(! feof(fp)) {fscanf(fp,"%d",&telnp); if(temp>0)p++; elseif(terpp<0)n++; elsez++; } fclose(fp); printf("positive: %3d,negtive: %3d,zero: %3d\n",p,n,z); } return0; } 4、已知head指向双向链表的第一个结点。 链表中每个结点包含数据域(info)、后继元素指针域(next)和前趋元素指针域(pre)。 请编写函数print1用来从头至尾输出这一双向链表。 答案: #include #include structstudent {intinfo; structstudent*pre; structstudent*next; }; voidprintl(structstudent*head) {structstudent*p; printf("\nthelinklistis: "); p=head; if(head! =NULL) do {printf("%d",p–>info); p=p–>next; } while(p! =NULL); printf("\n"); } 5、已知计算三角形面积的公式为: ,其中 ,这里a、b、c分别为三角形的三条边。 请编写程序: 定义两个带参的宏,分别实现上述两个公式,并引用所定义的宏计算三角形面积。 答案: /*计算三角形面积*/ #include #include #defineS(a,b,c)((a+b+c/2) #defineAREA(a,b,c)sqrt(S(a,b,c)*(S(a,b,c)–a)*(S(a,b,c)–b)*(S(a,b,c)–c)) intmain() {inta=3,b=4,c=5; printf("%f\n",AREA(a,b,c)); return0; } 6、编写程序实现功能: 根据下表中的函数关系,对输入的每个x值,计算出相应的y值。 x y x<0 0 0 x 10 10 20 –0.5x+20 答案: #include intmain() {intx; floaty; scanf("%d",&x); elseif(x>0&&x<=10)y=x; elseif(x>10&&x<=20)y=10; elseif(x>20&&x<40)y=–0.5*x+20; elsey=–1; if(y! =–l)printf("%f",y); elseprintf("error\n"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 期末考试 练习题