版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
班级:学号:姓名:PAGE18第1页(共10页)班号姓名哈工大2008年秋季学期C语言试题题号一二三四五六卷面总分分数说明:本试卷卷面满分为100分。总成绩将按平时实验成绩、机考成绩和卷面笔试成绩各自所占比例折合后累加计算。一、判断对错(6分,每题1分,对:√,错:×)1.函数的定义可以嵌套,但函数的调用不可以嵌套。()2.C语言程序总是从main函数第一条可执行语句开始执行,在main函数结束。()3.若用数组名作为函数的实参,传递给形参的是数组第一个元素的值。()4.C语言中,函数调用时,只有当实参与其对应的形参同名时,才共占同一个存储单元。()5.凡是函数中未指定存储类别的局部变量其隐含的存储类别是自动(auto)变量。()6.结构体类型所占用的内存字节数是所有成员变量占用的内存字节数的总和。()二、单项选择题:(10分,每题2分)1.若有定义int(*p)[4],则标识符p是一个。A)指向整型变量的指针变量B)指向函数的指针变量C)指向有四个整型元素的一维数组的指针变量D)指针数组名,有四个元素,每个元素均为一个指向整型变量的指针2.下列对字符串的定义中,错误的是:。A)charstr[7]="FORTRAN";B)charstr[]="FORTRAN";C)char*str="FORTRAN";D)charstr[]={'F','O','R','T','R','A','N',0};3.针对下面程序段,下面哪些说法是正确的?#include<stdio.h>voidSwap(int*x,int*y);main(){inta,b;a=5;b=9;Swap(&a,&b);printf("a=%d,b=%d",a,b);}voidSwap(int*x,int*y){int*pTemp;*pTemp=*x;*x=*y;*y=*pTemp;}A)程序运行结果为乱码;B)程序运行后将导致程序崩溃;C)程序编译时出错导致程序无法运行;D)程序执行了危险的操作;4.已知学生记录描述为:structstudent{ int no; char name[20]; char sex; struct { int year; char month[15]; int day; }birth;}; structstudents;设变量s中的生日是1984年11月11日,下列对生日的正确赋值方式是_____A)s.birth.year=1984;s.birth.month="11";s.birth.day=11;B)s.birth.year=1984;s.birth.month=11;s.birth.day=11;C)s.birth.year=1984;strcpy(s.birth.month,"11");s.birth.day=11;D)s.birth.year=1984;strcpy(s.birth.month,11);s.birth.day=11;5.要使下面程序输出1,2,34,则从键盘输入的数据格式应为。#include<stdio.h>main(){ chara,b;intc; scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%d\n",a,b,c);}A)1234 B)1,2,34C)’1’,’2’,34 D)1234三、写出下列程序的运行结果。(10分,每题2分)1.#include<stdio.h>main(){ inti,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<3;j++) { if(j%2)break; x++; } x++; }printf("x=%d\n",x);}程序运行结果是:2.#include<stdio.h>structdate{intyear;intmonth;intday;};structdatefunc(structdatep){p.year=2000;p.month=5;p.day=22;returnp;}main(){structdated;d.year=1999;d.month=4;d.day=23;printf("%d/%d/%d\n",d.year,d.month,d.day);d=func(d);printf("%d/%d/%d\n",d.year,d.month,d.day);}程序运行结果是:3.#include<stdio.h>main(){chara[]="Hello";char*p=NULL;for(p=a;p<a+5;p++){ printf("%s\n",p);}}程序运行结果是:4.#include<stdio.h>intfun(intx,inty){ returnx>y?x:y;}main(){inta=2,b=5,c=8;printf("%d\n",fun(fun(a+c,b),a-c));} 程序运行结果是:5.#include<stdio.h>voidFunc(void);main(){ inti; for(i=0;i<5;i++) { Func(); }}voidFunc(void){ staticinta=1; intb=2,c; c=a+b; a++; b++; printf("%d\n",c);}程序运行结果是:四、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(10分,每空1分)先按学号由小到大的顺序从键盘输入学生的学号和成绩,然后从键盘任意输入一个学生的学号,查找并打印具有该学号的学生的成绩。#include<stdio.h>#defineARR_SIZE40;main(){ floatscore[ARR_SIZE]; intn,i,pos; longnum[ARR_SIZE],x; printf("Pleaseentertotalnumber:"); scanf("%d",&n); printf("Pleaseenterthenumberandscore:\n"); for(i=0;i<n;i++) { scanf("%ld%f",&num[i],&score[i]); } printf("Pleaseenterthesearchingnumber:"); scanf("%ld",&x); pos=BinSearch(); if() { printf("score=%4.0f\n",score[pos]); } else { printf("Notfound!\n"); }}intBinSearch(longa[],intn,longx){ intlow,high,mid; low=0; high=n-1; while(low<=high) { mid=(high+low)/2; if(x>a[mid]) { low=; } elseif(x<a[mid]) { high=; } else { return(); } } return(-1);}2.输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。#include<stdio.h>#include<string.h>#defineARR_SIZE80main(){ charstr[ARR_SIZE]; intlen,i,letter=0,digit=0,space=0,others=0; gets(str); for(i=0;;i++) { if() letter++;elseif() digit++;elseif() space++;else others++;}printf("Englishcharacter:%d\n",letter);printf("digitcharacter:%d\n",digit);printf("space:%d\n",space);printf("othercharacter:%d\n",others);}五、在下面给出的4个程序中,共有18处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。(34分,每找对1个错误,加1分,每修改正确1个错误,再加1分。只要找对17处错误即可,多找不加分。)1.计算组合数(m≥n)#include<stdio.h>unsignedlongFactorial(unsignedintnumber);main(){ unsignedintm,n; doublep; do{ printf("Pleaseinputm,n:"); scanf("%d,%d",&m,&n); }while(m>=n); p=(double)Factorial(m)/Factorial(n)*Factorial(m-n); printf("p=%lf\n",p);}unsignedlongFactorial(unsignedintx){ unsignedlongi,result; for(i=2;i<=x;i++) result*=i; returnresult;}2.利用下面性质计算最大公约数:g(a,b)=g(a-b,b)a>bg(a,b)=g(a,b-a)a<bg(a,b)=a=ba=b#include<stdio.h>intMaxCommonFactor(inta,intb);main(){ inta,b,x; printf("Inputa,b:"); scanf("%d,%d",&a,&b); x=MaxCommonFactor(a,b); printf("MinCommonMultiple=%d\n",x);}intMaxCommonFactor(inta,intb);{ if(a<=0&&b<=0) return-1; while(a!=b) { if(a>b) { returna; } elseif(b>a) { returnb; } } } 3.输入一个字符数小于100的不带空格的字符串string,然后在string所保存字符串中的每个字符间加一个空格。#include<stdio.h>#defineMAX=100;voidCopyString(charc[],chars[]);voidInsert(chars[]);main(){ charstring[MAX]; scanf("%s",string); Insert(charstring[]); printf("%s",string);}voidCopyString(charc[],chars[]){ inti; for(i=0;s[i]!='\0';i++) { c[i]=s[i]; } c[i]='\0';}voidInsert(charsrcStr[]){ charstrTemp[MAX]; inti=0,j=0; CopyString(strTemp,srcStr); while(srcStr[i]!='\0') { srcStr[i]=strTemp[j]; i++; j++; srcStr[i]="";i++; }}4.下面函数实现两个字符串大小的比较,函数将两个字符串中第一个出现的不相同字符的ASII码值之差作为比较的结果返回,当两个字符串完全一样时,返回值为0。intMyStrcmp(char*p1,char*p2){ for(;*p1=*p2;p1++;p2++) { if(*p1='\0')return0; }returnp1-p2;}六、编程(30分)1.编程计算1!+2!+3!+……+10!的值。(12分)2.编程先输入某班30个学生某门课的成绩,对全班30个学生成绩进行由高到低排序,并打印输出排序结果,要求按照如下函数原型,用函数编程实现排序功能。(18分)voidSort(floatscore[],intn);参考答案与评分标准一、判断对错(6分,每题1分)1.函数的定义可以嵌套,但函数的调用不可以嵌套。(错)2.C语言程序总是从main函数第一条可执行语句开始执行,在main函数结束。(正确)3.若用数组名作为函数的实参,传递给形参的是数组第一个元素的值。(错)4.C语言中,函数调用时,只有当实参与其对应的形参同名时,才共占同一个存储单元。(错)5.凡是函数中未指定存储类别的局部变量其隐含的存储类别是自动(auto)变量。(正确)6.结构体类型所占用的内存字节数是所有成员变量占用的内存字节数的总和。(错误)二、单项选择题:(10分,每题2分,评分标准:正确得2分,错误扣2分)1.若有定义int(*p)[4],则标识符p是一个。A)指向整型变量的指针变量B)指向函数的指针变量√C)指向有四个整型元素的一维数组的指针变量D)指针数组名,有四个元素,每个元素均为一个指向整型变量的指针2.下列对字符串的定义中,错误的是:。√A)charstr[7]="FORTRAN";B)charstr[]="FORTRAN";C)char*str="FORTRAN";D)charstr[]={'F','O','R','T','R','A','N',0};3.针对下面程序段,下面哪些说法是正确的?#include<stdio.h>voidSwap(int*x,int*y);main(){inta,b;a=5;b=9;Swap(&a,&b);printf("a=%d,b=%d",a,b);}voidSwap(int*x,int*y){int*pTemp;*pTemp=*x;*x=*y;*y=*pTemp;}A)程序运行结果为乱码;B)程序运行后将导致程序崩溃;C)程序编译时出错导致程序无法运行;√D)程序执行了危险的操作;4.已知学生记录描述为:structstudent{ int no; char name[20]; char sex; struct { int year; char month[15]; int day; }birth;}; structstudents;设变量s中的生日是1984年11月11日,下列对生日的正确赋值方式是_____A)s.birth.year=1984;s.birth.month="11";s.birth.day=11;B)s.birth.year=1984;s.birth.month=11;s.birth.day=11;√C)s.birth.year=1984;strcpy(s.birth.month,"11");s.birth.day=11;D)s.birth.year=1984;strcpy(s.birth.month,11);s.birth.day=11;5.要使下面程序的输出1,2,34,则从键盘输入的数据格式应为。#include<stdio.h>main(){ chara,b;intc; scanf("%c%c%d",&a,&b,&c); printf("%c,%c,%d\n",a,b,c);}A)1234 B)1,2,34C)’1’,’2’,34 √D)1234三、写出下列程序的运行结果。(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=62.#include<stdio.h>structdate{intyear;intmonth;intday;};structdatefunc(structdatep){p.year=2000;p.month=5;p.day=22;returnp;}main(){structdated;d.year=1999;d.month=4;d.day=23;printf("%d/%d/%d\n",d.year,d.month,d.day);d=func(d);printf("%d/%d/%d\n",d.year,d.month,d.day);}程序的运行结果是:1999/4/232000/5/223.#include<stdio.h>main(){chara[]="Hello";char*p=NULL;for(p=a;p<a+5;p++){ printf("%s\n",p);}}程序运行结果是:Helloellolloloo4.#include<stdio.h>intfun(intx,inty){ returnx>y?x:y;}main(){inta=2,b=5,c=8;printf("%d\n",fun(fun(a+c,b),a-c));} 程序运行结果是:105.#include<stdio.h>voidFunc(void);main(){ inti; for(i=0;i<5;i++) { Func(); }}voidFunc(void){ staticinta=1; intb=2,c; c=a+b; a++; b++; printf("%d\n",c);}程序运行结果是:34567四、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(10分,评分标准:每空1分,正确得1分,错误扣1分)1.先按学号由小到大的顺序从键盘输入学生的学号和成绩,然后从键盘任意输入一个学生的学号,查找并打印具有该学号的学生的成绩。#include<stdio.h>#defineARR_SIZE40intBinSearch(longa[],intn,longx);main(){ floatscore[ARR_SIZE]; intn,i,pos; longnum[ARR_SIZE],x; printf("Pleaseentertotalnumber:"); scanf("%d",&n); printf("Pleaseenterthenumberandscore:\n"); for(i=0;i<n;i++) { scanf("%ld%f",&num[i],&score[i]); } printf("Pleaseenterthesearchingnumber:"); scanf("%ld",&x); pos=BinSearch(num,n,x); if(pos!=-1) { printf("score=%4.0f\n",score[pos]); } else { printf("Notfound!\n"); }}intBinSearch(longa[],intn,longx){ intlow,high,mid; low=0; high=n-1; while(low<=high) { mid=(high+low)/2; if(x>a[mid]) { low=mid+1; } elseif(x<a[mid]) { high=mid-1; } else { return(mid); } } return(-1);}2.输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。#include<stdio.h>#include<string.h>#defineARR_SIZE80main(){ charstr[ARR_SIZE]; intlen,i,letter=0,digit=0,space=0,others=0; gets(str); for(i=0;str[i]!='\0';i++) { if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') letter++;elseif(str[i]>='0'&&str[i]<='9') digit++;elseif(str[i]=='') space++;else others++;}printf("Englishcharacter:%d\n",letter);printf("digitcharacter:%d\n",digit);printf("space:%d\n",space);printf("othercharacter:%d\n",others);}五、在下面给出的4个程序中,共有18处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。(34分,每找对1个错误,加1分,每修改正确1个错误,再加1分。只要找对17个即可,多找不加分。)1.计算组合数(m≥n)(4个错)#include<stdio.h>unsignedlongFactorial(unsignedintnumber);main(){ unsignedintm,n; doublep; do{ printf("Pleaseinputm,n(m>=n):"); scanf("%d,%d",&m,&n);//"%u,%u" }while(m>=n);//应该为(m<n); p=(double)Factorial(m)/Factorial(n)*Factorial(m-n);//p=(double)Factorial(m)/(Factorial(n)*Factorial(m-n)); printf("p=%f\n",p);}unsignedlongFactorial(unsignedintx){ unsignedlongi,result;//result=1 for(i=2;i<=x;i++) result*=i; returnresult;}2.利用下面性质计算最大公约数:(5个错)g(a,b)=g(a-b,b)a>b;g(a,b)=g(a,b-a)a<b;g(a,b)=a=ba=b#include<stdio.h>intMaxCommonFactor(inta,intb);main(){ inta,b,x; printf("Inputa,b:"); scanf("%d,%d",&a,&b); x=MaxCommonFactor(a,b); printf("MinCommonMultiple=%d\n",x);}intMaxCommonFactor(inta,intb);//去掉;{ if(a<=0&&b<=0) //if(a<=0||b<=0) return-1; while(a!=b) { if(a>b) { returna;//a=a-b; } elseif(b>a) { returnb;//b=b-a; } } //returna;} 3.输入一个字符数小于100的不带空格的字符串string,然后在string所保存字符串中的每个字符间加一个空格。(5个错)#include<stdio.h>#defineMAX=100;//#defineMAX100voidCopyString(charc[],chars[]);voidInsert(chars[]);main(){ charstring[MAX]; scanf("%s",string); Insert(charstring[]);//Insert(string); printf("%s",string);}voidCopyString(charc[],chars[]){ inti; for(i=0;s[i]!='\0';i++) { c[i]=s[i]; } c[i]='\0';}voidInsert(charsrcStr[]){ charstrTemp[MAX]; inti=0,j=0; CopyString(strTemp,srcStr); while(srcStr[i]!='\0')//while(strTemp[j]!='\0') { srcStr[i]=strTemp[j]; i++; j++; srcStr[i]="";//srcStr[i]='';i++; } //srcStr[i]='\0';}4.下面函数实现两个字符串大小的比较,函数将两个字符串中第一个出现的不相同字符的ASII码值之差作为比较的结果返回当两个字符串完全一样时,返回值为0。(4个错)intMyStrcmp(char*p1,char*p2){ for(;*p1=*p2;p1++
;p2++)//for(;*p1==*p2;p1++
,p2++)两个错 { if(*p1='\0')return0;//if(*p1=='\0')return0; }returnp1-p2;//return*p1-*p2;}六、编程(30分)总的原则:每出现一处简单语法错误就扣1分,具体评分标准见各题。1.编程计算1!+2!+3!+……+10!的值。(12分)参考答案1:#include<stdio.h>main(){ longterm=1,sum=0;//2 inti; for(i=1;i<=10;i++)//2 { term=term*i;//3 sum=sum+term;//3 } printf("1!+2!+...+10!=%ld\n",sum);//2}参考答案2:#include<stdio.h>main(){ longterm,sum=0;//2 inti,j; for(i=1;i<=10;i++)//1 { term=1;//2 for(j=1;j<=i;j++)//1 { term=term*j;//2 } sum=sum+term;//2 } printf("1!+2!+…+10!=%ld\n",sum);//2}2.编程先输入某班30个学生某门课的成绩,对全班30个学生成绩进行由高到低排序,并打印输出排序结果,要求用函数编程实现排序功能。(18分)答案1:#include<stdio.h>//1voidSort(floatscore[],intn);//1main()//1{ floatscore[30],temp;//1 intn=30,i,j; //1 printf("Pleaseenterthenumberandscore:\n"); for(i=0;i<n;i++)//1 { scanf("%f",&score[i])
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《GBT 35405-2017 基于 ebXML 的运力预订和应答》专题研究报告
- 《GB-T 39534-2020金属和合金的腐蚀 液体中不锈钢和镍基合金均匀腐蚀速率测定方法》专题研究报告
- 《GB-T 11417.7-2012眼科光学 接触镜 第7部分- 理化性能试验方法》专题研究报告
- 《幼儿文学》课件-6.3幼儿图画故事创编
- 云存储运维服务协议
- 智能家居行业智能窗帘研发工程师岗位招聘考试试卷及答案
- 2025年《保教知识与能力》幼师资格真题试卷及答案
- 2025年城管协管考试题及答案
- 2025年盘园儿钢合作协议书
- 2025亚马逊物流(FBA)新手官方指南
- DB41T 990-2014 生产建设项目水土保持单元工程质量评定标准
- (2025秋新版)苏教版科学三年级上册全册教案
- 农商行法律培训课件
- 部编版小学二年级语文上册教学反思集体备课计划
- 执法用手机管理办法
- 双重管理安全员管理办法
- 2019-2025年中国鲜切水果行业市场调查研究及投资前景预测报告
- 染色体核型分析报告解读要点
- 2025年中国泵行业市场白皮书
- (高清版)DB1303∕T 357-2023 鲜食核桃果实主要病虫害防治技术规程
- 无人机集群技术-智能组网与协同 课件全套 第1-8章 绪论- 无人机集群任务分配
评论
0/150
提交评论