Ctest题库(ans)
更新时间:2024-03-30 09:52:01 阅读量: 综合文库 文档下载
- class CTest推荐度:
- 相关推荐
2003-2005年上海市高等学校计算机等级考试试卷
二级(C程序设计)
试题一(每小题4分)
解答下列各小题,把正确的解答写在答卷纸的对应栏内。
(1) 假设对n(n>0)个学生按下列方法进行分班:每班k(k>0)个学生,最后一个班若不足
k人也单独编成一个班。试用C语言中的条件表达式表示所编班级个数。
(2) 设有变量定义:
struct rec{ int x; int y;
}s[]={{4,28},{9,36}},*p=s;
计算表达式(p->y/p->x*s[1].x+s[1].y)的值。
(3) 写出下列程序的输出结果。
#include
char s[]=\ for(i=0;c=s[i];i++){ switch(c-'0'){ case 2:
case 3:putchar(c+4);continue; case 4:putchar(c+4);break; case 5:putchar(c+3); default:putchar(c+2); }
putchar(?\\n?); } }
(4) 分别写出下列4个指针变量p1,p2,p3,p4的含义。
int *p1,*p2[5],(*p3)(),(*p4)[5];
(5) 写出程序的输出结果(假定类型unsigned int的字长为16位)。
#include
unsigned int u1=0x958,u2,u3; u2=(u1 & 0xFF)<<4; u3=(u1 & 0xFF00)>>4;
printf(\}
(6) 阅读如下程序段,把其中的switch语句改写成先进等价的条件语句。
int x,y;
scanf(\switch(x!=0){
case 0:y=0;break; case 1:switch(x>0){ case 1:y=1;break; case 0:y=-1; } }
(7) 描述函数conv()的功能,并写出下列程序的输出结果。
void conv(int m){ if(m>=2) conv(m/2);
printf(\}
void main(){ conv(13); }
(8) 设有变量说明:
int a=5,b=4,c=3,r1,r2;
请写出执行下列语句后r1和r2的值。 r1=a>b>c;
r2=a>b&&b>c;
(9) 试写出下列算式的C语言表达式。
asin75?
x?log2y(10) 执行下列程序后,i,j,k的值是多少?
for(i=k=0,j=6;i (11) 执行下列程序后,b和c的值各为多少? #include printf(\} (12) 设有如下程序: #include int clock;float f;char cpu[20]; scanf(\ printf(\ %.0f %s\\n\} 13假设输入数据流为200015.0 P4 is GOOD!,请写执行该程序后的输出结果。 (13) 下列程序的输出结果是什么? #include int c1=0,c2=0,c3=0,c4=0; char *p=\ while(*p){ switch(*p){ case '1':c1++;break; case '2':c2++; case '3':c3++;break; default:c4++; } p++; } printf(\} (14) 执行下列程序后,s的值为多少? #define sq(X) X*X void main(){ int s=15,a=2,b=1; printf(\} (15) 设int a=12,试写出计算表达式a+=a/=a-=a*a以后的值。 (16) 设:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};int (*p)[4]=a;求*(*(p+2)+1) (17) 设有变量定义: struct num {int x;int y;}sa[]={{2,32},{8,6}}; struct num *p=sa; 试计算表达式p->y/sa[1].x*++p->x的值。 (18) 写出如下程序段的输出结果。 int a=0,b=0,c=0,x; x=(a=50)&&(b=0)&&(c=100); printf(“%d,%d,%d,%d\\n”,x,a,b,c); (19) 执行下面程序段以后,数组a的成员值各为多少? int a[4]={1,3,5,7}; a[3]=--a[0]?++a[1]:a[2]--; (20) 下列程序的输出结果是什么? main(){ int x=1,y,a=0,b=0; switch(x) {case 1: for(y=0;y<10;y++) switch(y) {case 0:a++;break; case 1:b++;break; case 2:a++;b++;break;}} printf(“a=%d,b=%d”,a,b); } (21) 下列程序的输出结果是什么? main(){ int a=3,b=8; a=a+b;b=a-b;a=a-b; printf(“a=%d,b=%d”,a,b); } 试题二(每小题6分) 阅读下列程序并回答问题,把答案写在答卷纸的对应栏内。 (1) [程序2.1] #include for(i=0;i if(a[i]>a[j])t=a[i],a[i]=a[j],a[j]=t; } delsame(int x[],int n){ int i,j,m=n; for(i=0;i while(x[i]==x[i+1]){ for(j=i;j return m; } void main(){ int x[]={74,4,35,4,65,65,72,74,35},i,m,n; n=sizeof(x)/sizeof(x[0]); sort(x,n); m=delsame(x,n); for(i=0;i (a)函数sort()的功能是什么?(b)函数delsame()的功能是什么?(c)程序的输出是什么? (2) [程序2.2] #include \#define M 4 void main() { int i,j,k,m,a[4]; printf(\ for(i=0;i for(j=M-1;j>0;j--)a[j]=a[j-1]; a[0]=k; for(m=0;m 设一维数组a的4个输入整数是1,2,3,4,则程序的输出是什么? (3) [程序2.3] #define N 6 void main(){ int i,j,a[N]; for(i=1;i for(j=i-1;j>1;j--) a[j]+=a[j-1]; for(j=1;j<=i;j++) printf(\ printf(\ } } (4) [程序2.4] #include *s=(*s-'0'+3)+'0'; ++s; } } void main(){ char a[]=\ fun(a+3); for(i=0;i<3;++i) printf(\} (5) [程序2.5] #define exch1(x,y) {int t=x;x=y,y=t;} exch2(int x,int y) {int t=x;x=y,y=t;} exch3(int *x,int *y) {int t=*x;*x=*y,*y=t;} main() {int a=2,b=1; exch1(a,b); printf(“a=%d b=%d\\n”,a,b); exch2(a,b); printf(“a=%d b=%d\\n”,a,b); exch3(&a,&b); printf(“a=%d b=%d\\n”,a,b); } (6) [程序2.5] #include {int b=20;static int s=10; b+=a++; s+=b+c; printf(\} main() {int b=6,c=7; sub(10); sub(a+c); printf(\} 试题三(12分,每小题6分) 改错。下列程序中都有三个错误,按原来程序的要求,纠正错误,并以“将#XX行改为YYYY”的形式进行解答,代码左边的“#01”、“#02”、…是附加的行号。 (1) 程序3.1输入10个正整数,计算其中的素数之和并输出结果(不考虑溢出情况)。 [程序3.1] #01 #include \#02 int sum(int *b,int m){ #03 int s=0,is_prime(long); #04 while(m--) #05 if(is_prime(*b++))s+=*b; #06 return s; #07 } #08 int is_prime(long m){ #09 #10 #11 #12 #13 #14 #15 #16 #17 #18 #19 #20 int k; if(m<=1)return 0; if(m==2||m==3)return 1; for(k=2;k*k<=m;k++) if(m%k==0)return 0; else return 1; } void main(){ int x[10],i; for(i=0;i<10;i++)scanf(\printf(\} (2) 程序3.2计算字符串s中最后一次出现子串t的地址,通过函数值返回,在主函数中 输出此地址开始的字符串;若未找到,函数返回NULL(例如字符串s为“456712345678abcd”,当子串t为“567”时,输出为“5678abcd”;当t为“789”时,输出“Not found!”)。 #01 #include (3) 程序3.1功能是输入一个字符串,并将其中的字符?a?用字符串”shu”替代后输出。如 输入为”123abcaHello”,则输出为”123shubcshuHello”。 [程序3.1] #01 #include #03 #04 #05 #06 #07 #08 #09 #10 #11 (4) { int i;char line[81]; scanf(\ for(i=0;line[i]!='\\n';i++) if(line[i]=='a') printf(\ else printf(\} 程序3.2实现对输入的长度小于100的英文字母串(空格表示结束)进行头尾相接,围成一个环,输出按顺时针方向出现的相邻两个递增字母及其个数(如下图中的HI,IJ,ST,总共出现3次)。 H T T S V W I J A T #01 #02 #03 #04 #05 #06 #07 #08 #09 #10 #11 #12 #13 #14 #15 #16 #17 #01 #02 #03 #04 #05 #06 #07 #include char s[100]; int k,len,no; scanf(\ len=strlen(s); s[len]=s[0]; s[len++]='\\0'; for(k=0;k printf(\ no++; } printf(\} #include {char *name[5]={\VRIABLE\ \ char temp; int i; (5) 在5个字符串中求最小字符串并输出结果。 #08 #09 #10 #11 #12 #13 temp=name[0]; for(i=1;i<5;i++) if(temp>*name[i]) temp=name[i]; printf(\} 于0的元素个数不统计),并求数组中所有元素的平均值。本题约定:平均值通过函数返回,其余两个统计结果通过形式参数的方法返回。 (6) 以下程序中,main函数调用aver函数统计某数组中值大于0和小于0的元素个数(等 试题四(18分,每小题9分) 按指定的要求编写C程序段,把解答写在答卷纸的对应栏内,不要求写完整的程序,也不必定义语句中出现的变量。 (1) π的值可以使用下公式计算 ?2?1?112123???????? 335357请编写函数compute_pi(double eps)计算π的近似值,当公式中某一项的值小于eps(例如,eps=1e-5)时,停止计算并返回结果。 (2) 编写函数fun,它的功能是:对于输入字符串s,先将s中的字符逆序放到字符串t 中(t的初始值为空串),再把字符串s正序连接到字符串t后面(例如,若s为“ABCDE”,则最后生成的字符串t为“EDCEAABCDE”)。 试题五(15分,每空3分) 阅读下列问题描述和相应的C程序,把应填入其中 (n) 处的内容写在答卷纸的对应栏内。 (1) 输入任意一个三位数d(要求d不等于495且其百位、十位、个位不全相等,否则重复输入),求出由此数的百位、十位、个位三个数字组成的最大数max和最小数min(百位数可以为0),再求出新三位数max-min,即max和min的差(如结果小于100,则百位数视为0);只要该数不等于495,重复以上运算,则经过有限次计算后,必定得到495。在程序中,函数get_maxmin()计算由三位数的百位、十位、个位所组成的最大数和最小数。 例如,对于输入792,有下列计算过程: 972-279=693->963-369=594->954-459=495 对于输入202,有下列计算过程: 202-22=198->981-189=192->972-279=693->963-369=594->954-459=495 [程序5.1] #include void get_maxmin(int a,int b,int c, (1) ){ int t; if(a if(b void main(){ int a,b,c,max,min,d; do{scanf(\ a=d/100; b=d0/10; c=d; }while( (4) ); while(d!=495){ get_maxmin( (5) ); d=max-min; a=d/100; b=d0/10; c=d; } printf(\} (2) 不断地从键盘输入字符,直到输入EOF(Control+Z)为止。对于输入的小写字符,先 转换为相应的大写字符,其他字符不变,然后逐个输出到文件text.txt中,行结束符回车(‘\\n’)也作为一个字符对待,最后统计文件中的字符个数和行数。 [程序5.2] #include char c,str[256]; int i=0,no=0,line=0; if((fp=fopen(\ (1) ))==NULL) {printf(\ exit(0); } printf(\ while((c=getchar())!=EOF) {if(c>='a'&&c<='z') (2) ; fputc( (3) ,fp); } fclose(fp); if((fp=fopen(\ {printf(\ exit(0); } while(!feof(fp)) {c= (4) ; no++; if( (5) )line++; } printf(\ fclose(fp); } (3) 已知一维数组a和b均为整型数组,以下程序的功能是从一维数组a中挑选出互不 相同的数,并按从小到大的顺序转存于一维数组b中。 #define L sizeof(a)/sizeof(a[0]) int a[]={5,7,5,6,4,3,4,6,7,2},b[L]; main() {int i,j,k,t,low,mid,high; k=0; for(i=0;i while( (1) ) {mid=(low+high)/2; if(a[i] (2) ; else if(a[i]>b[mid]) (3) ; else {low=mid; break; } } if((a[i]!=b[low])||(low>=k)) {for( (4) ) b[j+1]=b[j]; (5) ; k++; } } for(j=0;j 试题六(15分,每空3分) 阅读下列问题描述和相应的C程序,把应填入其中 (n) 处的内容写在答卷纸的对应栏内。 (1) 给出两个链表,按交替的顺序轮流从这两个链表中取其成员归并成为一个新的链表, 如其中一个链表的成员取完,另一个链表的多余成员依次接到新链表的尾部,并把指向新链表的指针作为函数值返回。例如,若两个链表成员分别是{1,2,3,8,10,15}和{7,13,1},则链接成的新链表是{1,7,2,13,3,1,8,10,15}。结果 [程序6.1] #include struct node *next; }; struct node *createlink(struct node *list,int x){ struct node *u=list,*p; p= (1) ; (2) ; p->next=NULL; if(list==NULL)list=p; else{while(u->next!=NULL)u=u->next; u->next=p;} return list; } struct node *ShuffleMerge(struct node *a,struct node *b){ struct node dummy; struct node *tail=&dummy; dummy.next=NULL; while( (3) ){ if( (4) ){ tail->next=b; break; } else if(b==NULL){ tail->next=a; break; } else{ /*轮流从两个链表中取其成员链接到新链表的尾部 tail->next=a;tail=a;a=a->next; tail->next=b;tail=b;b=b->next;} } return( (5) ); } */ void main(){ int x; struct node *alist=NULL,*blist=NULL,*list=NULL; do{scanf(\ /* 建立alist链表 */ if(x<0)break; alist=createlink(alist,x); }while(x>0); do{scanf(\ /* 建立blist链表 */ if(x<0)break; blist=createlink(blist,x); }while(x>0); list=ShuffleMerge(alist,blist); } (2) 本程序中的函数convert(int n,int d)采用“除d取余法”,将十进制整数n转换 成d进制数的字符串,其中的字符序列用字符链表表示。具体方法是将先求得的余数放在链表的尾部,循环求余数直至商为零为止,最后输出字符链表中的每一个结点字符。 假设n=20,d=3,则调用上述函数以后生成的链表输出结果为202。结果 [程序6.3] #include struct node *next; }; main() {struct node *p,*head; int n,d; struct node *convert(int n,int d); do {printf(\ scanf(\ }while(d<2||d>16); head=convert(n,d); for(p=head;p!=NULL;p=p->next) printf(\ printf(\} void insert(struct node **h,char ch) {struct node *p; p= (1) ; p->val=ch; (2) ; (3) ; } struct node *convert(int n,int d) {char letter[]=\ int m=n<0?-n:n; struct node *h; h=NULL; while(m!=0) {insert( (4) ); m/=d; } if(n<0)insert( (5) ,'-'); return h; } 答案: 试题一: (1) n%k==0?n/k:n/k+1或n%k?n/k+1:n/k (2) 28/4*9+36=99 (3) 68 9 7 (4) p1:指向整型变量的指针变量 p2:指针数组,有5个指向整型变量的指针元素 p3:函数指针,指向整型函数 p4:数组指针,指向长度为5的一维整型数组 (5) 580 90 590 (6) int x,y; scanf(\if(x==0)y=0; else if(x>0)y=1; else y=-1; 或:y=x==0?0:(x>0?1:-1); (7) 函数conv()的功能:使用递归调用把十进制整数m(通过参数提供)转换成对应二 进制数并输出;输出结果:1101 (8) r1=0,r2=1 (9) pow(a,1.0/3.0)*sin(75.0*3.1415926/180.0)/fabs(x-log(y)/log(2)) (10) i=3,j=3,k=-63 (11) b=6,c=5 (12) 2000 15 P4 (13) c1=2 c2=3 c3=7 c4=5 (14) s=7 (15) a=2 (16) 10 (17) 12 (18) 0,50,0,0 (19) 0 3 4 5 (20) a=2,b=2 (21) a=8,b=3 试题二: (1) (a)函数sort()的功能:对整型数组a[](第一个参数)的前n(第二个参数) 个数据进行从小到大排序;(b)函数delsame()的功能:删除一个已排序的整型数组x[](第一个参数)的前n(第二个参数)个数据中重复的数据,产生一个新的序列,并返回新序列中元素的个数;(c)程序输出: 4 35 65 72 74 (2) 程序的输出: 4 1 2 3 (3) 3 4 1 2 2 3 4 1 1 2 3 4 程序的输出: (4)(5)(6)试题三(1)(2)(3)(4)(5)试题五(1)(2)1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 程序的输出: 1 9 1 程序的输出: a=1 b=2 a=1 b=2 a=2 b=1 程序的输出: 11,30,45 11,30,80 3,6 将#05行改为:if(is_prime(*b++))s+=*(b-1); 将#14行改为:return 0; 将#18行改为:for(i=0;i<10;i++)scanf(“%d”,x+i); 或:for(i=0;i<10;i++)scanf(“%d”,&x[i]); 将#02行改为:char *fun(char *s,char *t){ 将#04行改为:a=NULL; 将#08行改为:if(*r==*p){r++;p++;} 将#05行改为:scanf(%s”,line); 将#06行改为:for(i=0;line[i]!=?\\0?;i++) 将#10行改为:printf(“%c”,line[i]); 将#09行改为:s[++len]=?\\0?; 将#11行改为:if(s[k]+1==s[k+1]) 将#13行改为:printf(“%c %c\\n”,s[k],s[k+1] 将#06行改为:char *temp; 将#10行改为:if(strcmp(temp,name[i])>0) 将#12行改为:printf(\ int *max,int *min *max=a*100+b*10+c (3) (4) (5) (1) (2) (3) (4) (5) (1) *min=c*100+b*10+a d==495||a==b&&b==c a,b,c,&max,&min \c=c-32 c fgetc(fp) c=='\\n'||c==EOF low<=high (2)(3)(4)(5)试题六(1)(2)(3)(4)(5)(1)(2)(3)(4)(5)high=mid-1 low=mid+1 j=k-1;j>=low;j— b[low]=a[i] (struct node *)malloc(sizeof(struct node)) p->data=x 1 a==NULL dummy.next 返回 (struct node *)malloc(sizeof(struct node)) p->next=*h *h=p &h,letter[m%d] &h 返回
正在阅读:
Ctest题库(ans)03-30
小学六年级毕业考试语文试卷4 - 图文06-24
血液科工作总结11-22
12016年北师大版一年级数学上册第五单元测试卷及答案 - 图文09-09
电磁场复习题20102011109-15
新人教版数学五年级下册分数同分母分数加减法教案 - 图文03-29
第十章 黑客常用的攻击方法 作业10-10
现货白银投资新手六大看盘技巧06-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 题库
- Ctest
- ans
- 兰州资源环境职业技术学院2015级第三章作业
- 2016.1教科版四年级科学上册期末试卷
- 2013年甘肃省一万名考试最新冲刺练习题及答案(马哲)
- 超静定结构受力分析及特性
- 八年级课外文言文阅读训练及答案
- 美英法中列强是如何瓜分非洲的
- 公正,该如何是好?
- 单据样本 - 图文
- 关于微博使用状况的调查报告
- 新疆2016年上半年教师资格证认定教育知识与能力考试试题
- FANUC数控车床的基本操作教案
- 东北大学15春学期《机械设计》在线作业2
- 外科系统护士长工作综合考评标准 - 图文
- 某公园日常保洁服务实施方案 - 图文
- 实测实量及分户、交付验收实施管理办法
- 框架结构可行性研究报告 - 图文
- 仪器分析实验的课后习题答案及讨论
- 五年级下册音乐教案(渗透法制)
- 2011年全国硕士研究生入学统一考试考研数学一真题及答案
- 中考二轮复习物理电现象 - 图文