哈工大Papersb.docx
- 文档编号:8869181
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:31
- 大小:30.21KB
哈工大Papersb.docx
《哈工大Papersb.docx》由会员分享,可在线阅读,更多相关《哈工大Papersb.docx(31页珍藏版)》请在冰豆网上搜索。
哈工大Papersb
班号
姓名
哈工大2008年春季学期
C语言试题
题号
一
二
三
四
五
六
七
八
九
创新实践分
卷面总分
分数
说明:
本试卷卷面满分为100分。
总成绩将按平时实验成绩、机考成绩和卷面笔试成绩各自所占比例折合后累加计算。
一、单项选择题:
(10分,每题2分)
1.以下不能对二维数组a进行正确初始化的语句是。
A)inta[2][3]={0};
B)inta[][3]={{1,2},{0}};
C)inta[2][3]={{1,2},{3,4},{5,6}};
D)inta[][3]={1,2,3,4,5,6};
2.有以下程序片断
floatfun(intx,inty)
{
return(x+y);
}
main()
{
inta=2,b=5,c=8;
printf("%3.0f\n",fun((int)fun(a+c,b),a-c));
}
程序运行后的输出结果是。
A)编译出错B)9C)21D)9.0
3.若有以下调用语句,则不正确的fun函数的函数原型是。
main()
{
inta[50],n;
……
fun(n,&a[9]);
……
}
A)voidfun(intm,intx[]);
B)voidfun(ints,inth[41]);
C)voidfun(intp,int*s);
D)voidfun(intn,inta);
4.
#defineMAX10
inta[MAX];
voidsub2()
{
inta[MAX],i,max=5;
for(i=0;i { a[i]=i; } } voidsub1() { inti; for(i=0;i { a[i]=i+i; } } voidsub3(inta[]) { inti; for(i=0;i { printf("%d",a[i]); } printf("\n"); } main() { sub1(); sub3(a); sub2(); sub3(a); } 上面程序片段的执行结果是。 A)024681012141618 012341012141618 B)01234 024681012141618 C)0123456789 01234 D)024681012141618 024681012141618 5.下列程序执行后的输出结果是。 #include main() { inta[3][3],*p,i; p=&a[0][0]; for(i=1;i<9;i++) { p[i]=i+1; } printf("%d\n",a[1][2]); } A)3 B)6 C)9 D)随机数 二、写出下列程序的运行结果。 (10分,每题2分) 1. #include main() { inti,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<3;j++) { if(j%2)continue; x++; } x++; } printf("x=%d\n",x); } 程序运行结果是: 2. #include structSTU { charnum[10]; floatscore[3]; }; main() { structSTUs[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s; inti; floatsum=0; for(i=0;i<3;i++) { sum=sum+p->score[i]; } printf("%6.2f\n",sum); } 程序运行结果是: 3. #include main() { chars[100]; charc,i; scanf("%c",&c); scanf("%d",&i); scanf("%s",s); printf("%d,%c,%s\n",c,i,s); } 已知字符’a’的ASCII码值为97,那么当程序输入: a<空格>97<空格>123<回车>,程序运行结果是: 4. #include inta=13,b=8; intmax(inta,intb) { intc; c=a>b? a: b; return(c); } main() { inta=5; printf("Max=%d\n",max(a,b)); } 程序运行结果是: 5.位式运算符是C语言作为中级语言的体现,可以实现以二进制比特位为单位的操作,其中“&”是“位式与运算符”,有如下程序: #include intfunc(unsignedintx) { inti,mask=1,total=0; for(i=1;i<=16;i++) { if((x&mask)==mask) total++; mask=mask*2; } returntotal; } main() { unsignedintinput; printf("pleaseinputannumber: "); scanf("%u",&input); printf("Theresultis: %d\n",func(input)); } 当用户输入为15时,程序运行结果是: 三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8分,每空1分) 1.由键盘输入一个班的某课程的学生成绩,计算其平均分然后输出。 #include #include main() { int*p=NULL,n,i,sum; printf("pleaseenterarraysize: "); scanf("%d",); p=(int*)malloc(n*sizeof(int)); if(p==NULL) { printf("noenoughmemory! \n"); ; } printf("pleaseenterthescore: "); for(i=0;i { scanf("%d",p+i); } ; for(i=0;i { ; } printf("aver=%d\n",sum/n); free(p); } 2.输入一个字符数小于100的字符串string,然后将string所保存字符串中的每个字符之间加一个空格。 #include #defineMAX100 voidInsert(chars[]); main() { charstring[MAX]; scanf("%s",string); Insert(string); printf("%s",string); } voidCopyString(charc[],chars[]) { inti; for(i=0;s[i]! ='\0';i++) { c[i]=s[i]; } ; } voidInsert(charsrcStr[]) { charstrTemp[MAX]; inti=0,j=0; CopyString(strTemp,srcStr); while() { srcStr[i]=strTemp[j]; i++; ; srcStr[i]=''; i++; } srcStr[i]='\0'; } 四、在下面给出的4个程序中,共有16处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。 (30分,每找对1个错误,加1分,每修改正确1个错误,再加1分。 只要找对15个即可,多找不加分。 ) 1.设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数。 该算法的基本思想是: 假设有两个整数m和n,通过连续运用求余运算,直到余数为0为止,最后非0的余数就是最大公约数。 #include intMaxCommonFactor(inta,intb) main() { inta,b,x; printf("Inputa,b: "); scanf("%d,%d",a,b); x=MaxCommonFactor(a,b); printf("MaxCommonFactor=%d\n",x); } intMaxCommonFactor(inta,intb); { intr; do{ r=a%b; a=b; b=r; }while(r! =0) returna; } 2.从键盘输入10个整型数据,放入数组a中,求其最大值、最小值及其所在元素的下标位置并输出。 #include main() { inta[10],n,max,min,maxPos,minPos; for(n=0,n<10,n++) { scanf("%d",a[n]); } max=min=a; maxPos=minPos=0; for(n=1;n<10;n++) { if(a[n]>max) { max=a[n]; maxPos=n; } elseif(a[n] { min=a[n]; minPos=n; } } printf("max=%d,pos=%d\n",max,maxPos); printf("min=%d,pos=%d\n",min,minPos); } 3.下面的函数MyStrcmp()用于实现函数strcmp()的功能,将两个字符串s和t进行比较,要求将两个字符串中第一个不相同字符的ASCII码值之差作为MyStrcmp()函数的返回值。 #include intMyStrcmp(chars[],chart[]); main() { charstr1[20],str2[20]; printf("Inputstring: "); gets(str1); printf("Inputanotherstring: "); gets(str2); if(MyStrcmp(str1[],str2[])>0) { printf("str1>str2\n"); } elseif(MyStrcmp(str1[],str2[])<0) { printf("str1 } else { printf("str1=str2\n"); } } intMyStrcmp(chars[],chart[]) { inti; for(i=0;s[i]==t[i];i++); { if(s[i]='\0')return0; } return(s[i]-t[i]); } 4.从键盘任意输入10个整数,用函数编程实现将其中最大数与最小数的位置对换后,再输出调整后的数组。 #include #defineARRSIZE10; voidMaxMinExchang(inta[],intn) { intmaxValue=a[0],minValue=a[0],maxPos,minPos; inti,temp; for(i=1;i { if(a[i]>maxValue) { maxValue=a[i]; maxPos=i; } elseif(a[i] { minValue=a[i]; minPos=i; } } temp=a[maxPos]; a[maxPos]=a[minPos]; a[minPos]=temp; } main() { inta[n],i,n; printf("Inputn(n<=10): "); scanf("%d",&n); printf("Input%dNumbers: \n",n); for(i=0;i { scanf("%d",&a[i]); } MaxMinExchang(a[],n); printf("AfterMaxMinExchange: \n"); for(i=0;i { printf("%4d",a[i]); } printf("\n"); } 五、编程(42分) 1.规定一个工人工作时间每个月160小时,每小时工资为5元,如果加班的话,每小时增加4元,请编程计算并打印此工人一个月的工资,要求由键盘输入工作时间(14分)。 2.编程计算并打印一元二次方程ax2+bx+c=0的根,a、b、c由键盘输入,其中a不等于0。 要求考虑一元二次方程根的所有情况(无根,有两个相等实数根,有两个不等实数根,有两个虚数根)。 (14分) 已知一元二次方程的求根公式为: 3.不用函数strcat(),编程实现字符串连接函数MyStrcat(char*dstStr,char*srcStr)将字符串srcStr连接到字符串dstStr的尾部,并编写主函数调用MyStrcat将用户输入的两个字符串相连接。 (14分) 参考答案与评分标准 一、单项选择题: (10分,每题2分,评分标准: 正确得2分,错误扣2分) 1.以下不能对二维数组a进行正确初始化的语句是 A)inta[2][3]={0}; B)inta[][3]={{1,2},{0}}; √C)inta[2][3]={{1,2},{3,4},{5,6}}; D)inta[][3]={1,2,3,4,5,6}; 2.有以下程序片断 floatfun(intx,inty) { return(x+y); } main(){ inta=2,b=5,c=8; printf("%3.0f\n",fun((int)fun(a+c,b),a-c)); } 程序运行后的输出结果是: A)编译出错√B)9 C)21D)9.0 3.若有以下调用语句,则不正确的fun函数的函数原型是 main() {… inta[50],n; … fun(n,&a[9]); … } A)voidfun(intm,intx[]); B)voidfun(ints,inth[41]); C)voidfun(intp,int*s); √D)voidfun(intn,inta); 4.下面程序片段的执行结果是: #defineMAX10 inta[MAX],i; main() { printf("\n"); sub1(); sub3(a); sub2(); sub3(a); } sub2() { inta[MAX],i,max=5; for(i=0;i } sub1() { for(i=0;i } sub3(inta[]) { inti; for(i=0;i printf("\n"); } A)024681012141618 012341012141618 B)01234 024681012141618 C)0123456789 01234 √D)024681012141618 024681012141618 5.下列程序执行后的输出结果是 #include main() { inta[3][3],*p,i; p=&a[0][0]; for(i=1;i<9;i++) { p[i]=i+1; } printf("%d\n",a[1][2]); } A)3 √B)6 C)9 D)随机数 二、写出下列程序的运行结果。 (10分,评分标准: 正确得2分,完全错误扣2分,如果部分错误,少一行或者多了一行,或者其他提示信息,则扣1分) 1. main() { inti,j,x=0; for(i=0;i<2;i++) { X++; for(j=0;j<3;j++) { if(j%2)continue; X++; } X++; } printf("x=%d\n",x); } 程序运行结果是: x=8 2. #include structSTU { charnum[10]; floatscore[3]; }; main() { structSTUs[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p=s; inti; floatsum=0; for(i=0;i<3;i++) { sum=sum+p->score[i]; } printf("%6.2f\n",sum); } 程序的运行结果是: 270.00 3. #include main() { chars[100]; charc,i; scanf("%c",&c); scanf("%d",&i); scanf("%s",s); printf("%d,%c,%s\n",c,i,s); } 已知字符’a’的ASCII码值为97,那么当程序输入: a<空格>97<空格>123<回车>,程序运行结果是: 97a123 4. #include inta=13,b=8; intmax(inta,intb) { intc; c=a>b? a: b; return(c); } main() { inta=5; printf("Max=%d\n",max(a,b)); } 程序运行结果是: Max=8 5.位式运算符是C语言作为中级语言的体现,可以实现以二进制比特位为单位的操作,其中“&”是“位式与运算符”,有如下程序: #include intfunc(unsignedintx) { inti,mask=1,total=0; for(i=1;i<=16;i++) { if((x&mask)==mask) total++; mask=mask*2; } returntotal; } main() { unsignedintinput; printf("pleaseinputannumber: "); scanf("%u",&input); printf("Theresultis: %d\n",func(input)); } 当用户输入为15时,程序运行结果是: Theresultis: 4 三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 (8分,评分标准: 每空1分,正确得1分,错误扣1分) 1.由键盘输入一个班的某课程的学生成绩,计算其平均分,然后输出。 (注: 使用动态数组实现) #include #include main() { int*p=NULL,n,i,sum; printf("pleaseenterarraysize: "); scanf("%d",&n); p=(int*)malloc(n*sizeof(int)); if(p==NULL) { printf("noenoughmemory! \n"); exit(0);//或者return; } printf("pleaseenterthescore: "); for(i=0;i { scanf("%d",p+i); } sum=0; for(i=0;i { sum=sum+*(p+i); } printf("aver=%d\n",sum/n); free(p); } 2.输入一个字符数小于100的字符串string,然后在string所保存字符串中的每个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈工大 Papersb