中国石油大学《C语言程序设计》期末复习题及答案.doc_第1页
中国石油大学《C语言程序设计》期末复习题及答案.doc_第2页
中国石油大学《C语言程序设计》期末复习题及答案.doc_第3页
中国石油大学《C语言程序设计》期末复习题及答案.doc_第4页
中国石油大学《C语言程序设计》期末复习题及答案.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计期末复习题一、选择题1能将高级语言编写的源程序转换成目标程序的是( )A 链接程序 B. 解释程序 C. 编译程序 D.编辑程序2.设a为整型变量,则不能正确表达数学关系10a15的C语言表达式是( )。A. 10a10&a15 D.!(a=15)3当调用函数时,实参是一个数组名,则向函数传送的是( )。A. 数组的长度 B. 数组的首地址C. 数组每一个元素的地址 D. 数组每个元素中的值4执行下面的程序段后,k的值是()int k=1,n=325; do k*=n%10;n/=10;while(n);A. 3B. 30 C. 523D. 3255若有以下数组说明,则i=6;aai元素数值是()。int a12=1,4,7,10,2,5,8,11,3,6,9,12;A.3 B.8 C.6 D.56若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是()A. for(i=1,p=1;i=5;i+) p*=i;B. for(i=1;i=5;i+) p=1; p*=i;C. i=1;p=1;while(i=5)p*=i; i+;D. i=1;p=1;dop*=i; i+; while(i=5); 7若有:int a3=1,2,3,4,5,6,7,8; 则数组a的第一维的大小为: ( )A. 12 B. 3 C. 4 D.无确定值8设有如下程序段 ,则执行p=s;语句后,以下叙述正确的是( )。char s20= “Bejing”,*p; p=s; A可以用*p表示s0 Bs数组中元素的个数和p所指字符串长度相等 Cs和p都是指针变量 D数组s中的内容和指针变量p中的内容相等 9以下正确的函数定义是( )。Adouble sum(int x, int y) Bdouble sum (int x,y) z=x+y ; return z ; int z ; return z ;Csum (x,y) Ddouble sum (int x, int y) int x, y ; double z ; double z ;z=x+y ; return z ; z=x+y ; return z ; 10已知学生信息描述为struct student int no; char name20; char sex; structint year; int month; int day; birth; ; struct student s; 设变量s中的“生日”应是“1984年11月11日”,下列对“生日”的正确赋值方式是( )。A year=1984;month=11;day=11; B birth.year=1984;birth.month=11;birth.day=11; C s.year=1984;s.month=11;s.day=11;D s.birth.year=1984;s.birth.month=11;s.birth.day=11; 11. 下列数据中,为字符串常量的是( )。A. AB. How do you do.C. A D.$abc12.以下运算符中,优先级最高的运算符是( )。A. |B. % C. ! D.=13.执行以下程序段后,输出结果和a的值是( )。int a=10;printf(%d,+a);A.10和10 B.10和11 C.11和10 D.11和1114. 有定义语句:int x,y;若要通过scanf(%d%d,&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,正确的是( )。A. 11 12 B. 11,12 C. 11,12 D. 11, 1215. 下列定义数组的语句中,正确的是( )。A. int x0.10;B. int x ;C. #define N 10D. int N10; int xN; int xN;16. 若已定义x为int类型变量,下列语句中说明指针变量p的正确语句是( )。A. int p=&x; B.int *p=x; C. *p=*x; D. int *p=&x;17. 以下不是无限循环的语句为( )。A. for(y=0,x=1;x+y;x=i+) i=x;B. for(;x+=i);C. while(1)x+;D. for(i=10;i-) sum+=i;18. 有以下函数,函数的功能是( )。int fun(char *x, char *y) int n0;while ( (*x*y) & *x!0 ) x; y; n;return n ;A.将y所指字符串赋给x所指存储空间B.查找x和y所指字符串中是否有0C.统计x和y所指字符串中最前面连续相同的字符个数D.统计x和y所指字符串中相同的字符个数19. 语言中,定义结构体的保留字是( )。A.union B.structC.enumD.typedef20. 应用缓冲文件系统对文件进行读写操作,关闭文件的函数名为( )。A.open B.fopen C.close D.fclose21. 在C语言中,if语句后的一对原括号中,用以决定分支的流程的表达式( )。A.只能用逻辑表达式B.只能用关系表达式C.只能用逻辑表达式或关系表达式D.可用任意表达式22. 假设所有变量均为整型,表达式:a=2,b=5,ab?a+:b+,a+b的值是( )。A.7 B.8C.9 D.223. 若有如下代码,则a的值为( )。int a=1,b=2,c=3;if(ab)a=b;if(ac)a=c;A.1B.2C.3D.不一定24.假定所有变量均已正确定义,下列程序段运行后x的值是( )。k1=1;k2=2;k3=3;x=15;if(!k1) x-;else if(k2) x=4;else x=3;A.14B.4C.15D.325. 以下for循环的执行次数是 for(x=0,y=0;(y=123)&(x4);x+);( )。A.是无限循环B.循环次数不定C.4次D.3次26. 以下运算符中,优先级最高的运算符是( )。A. |B. % C. ! D.=27. 有定义语句:int x,y;若要通过scanf(%d,%d,&x,&y);语句使变量x得到数值11,变量y得到数值12,下面四组输入形式中,错误的是( )。A. 11 12 B. 11,12 C. 11,12 D. 11, 1228. char a10;不能将字符串abc存储在数组中的是( )。A.strcpy(a,abc);B.a0=0;strcat(a,abc);C.a=abc;D.int i;for(i=0;i3;i+)ai=i+97;ai=0;29. 以下程序段 char *alp=ABC,DEF,GHI; int j; puts(alp1);的输出结果是( )。A.AB.BC.DD.DEF30. 若执行fopen函数时发生错误,则函数的返回值是( )。A.地址值B.0C.1D.EOF二、读程序,写出程序的运行结果1以下程序的输出结果是( )。#include void main() int x=0,y=1,a=0,b=0;switch(x)case 0: switch(y)case 0: a+;case 1: b+;case 1: switch(y)case 0: a=a+5;case 1: b=b+5; printf(“a=%d,b=%dn”,a,b);2.以下程序的输出结果是( )#include void main()int x=-5,y=2,z=1; if(xy) if(y0) z=0; else z=z+1; printf(“%dn”,z);3以下程序的输出结果是:( )#includestdio.hvoid main( )int j,k, x44,y44;for(j=0;j4;j+) for(k=0;k4;k+) xjk=j+k;for(j=0;j4;j+) for(k=0;k4;k+) ykj=xjk;for(j=0;j4;j+) for(k=0;k4;k+) printf(%d ,yjk); printf(n);4以下程序的输出结果是:( )#include void main() int i,j;for(i=j=1;j10;j+,i+)if(j=5) break; if(i%2) continue;printf(i=%d,j=%dn,i,j);5若有以下程序段,则输出结果是( )。 #include void main() char s2=c:abc.dat; printf(“%sn”,s2); 6以下程序的输出结果是:( )#include int fun( int n) int s; if(n=1|n=0) s=5; else s=n+fun(n-1); return s;void main() printf(%ldn, fun(3);7以下程序的输出结果是:( )void main() int a=2,4,6,8,10; int y=120,x,*p; p=&a1; for(x=0;x3;x+) y+=*(p+x); printf(y=%dn,y);8以下程序的输出结果是:( )#includevoid sub(int s,int y) static int t=3;y=st; t-;void main() int a=1,2,3,4,i,x=0;for(i=0; i4; i+)sub(a,x); printf(“%d”,x);printf(“n”);9. 以下程序段运行后x的值是:( )k1=1;k2=0;k3=3;x=15;if(!k1) x-;else if(k2) x=4;else x=3;10. 以下程序的输出结果是:( )#include main() int s=0, n; for (n=0; n4; n+) switch(n) default: s+=5; case 1: s+=1; case 2: s+=2; case 3: s+=3; printf(%dn, s); 11. 以下程序段运行后sum的值是:( )int a33=3,5,8,9,12,35,i,sum=0;for(i=0;i3;i+) sum+=ai2-i;12. 以下程序的输出结果是:( )#include int main()int i=10,n=0,m=0;doif(i%2!=0)n=n+i;elsem=m+i;i-;while(i=0);printf(n=%d,m=%dn,n,m);return 0;13. 以下程序的输出结果是:( )#include void main()int a,b;for(a=1,b=1;a20) break;if(b%4=1)b=b+4;continue;b=b-5;printf(b=%dn,b);14. 以下程序的输出结果是:( )#include funa(int a) int b=0;static int c=4;a=c+,b+;return(a);main() int a=2,i,k;for(i=0;i2;i+)k=funa(a+);printf(%dn,k);15. 以下程序的输出结果是:( )#include void main(void) char a=ABCDEFGH,b=abcDefGh; char *p1,*p2;int k;p1=a; p2=b;for(k=0;k=7;k+)if (*(p1+k)=*(p2+k) printf(%c,*(p1+k);printf(n);16. 以下程序的输出结果是:( )#include #include int main()int i;char str130=abc,str235=defg,hij0,klm;for(i=1;ibc)a=b;else a=c;printf(%dn,a);19. 以下程序的输出结果是:( )int func(int x,int y)return(x+y);void main()int a=1,b=2,c=3,d=4,e=5; printf(%dn,func(a+b,b+c,c+a),(d+e); 20.下列程序执行后的输出结果是( )。void main()int a33, *p,i; p=&a00; for(i=0; i9; i+)pi=i+1;printf(%dn,a12);21. 以下程序的输出结果是:( )#include void fun(int a);void main()int i,a5=1,2,3;fun(a);for(i=0;i5;i+)printf(%5d ,ai);printf(n);void fun(int a)int i;for(i=0;i5;i+)ai+=5;22. 以下程序的输出结果是:( )#include void main( ) int i, f10; f0=f1=1; for(i=2;i10;i+) fi=fi-2+fi-1; for(i=0;i5;i+) printf(%d ,fi); 23. 以下程序的输出结果是:( )#includevoid main() int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r; printf(%d,%d,%d,%dn,m,n,*p,*q);24. 以下程序的输出结果是:( )#include #include int main()int i;char str20=abcdef;strcpy(str,opqrst);str5=0;for(i=0;istrlen(str)-1;i+)putchar(stri);printf(n);return 0;三、程序填空1. 任意输入一个非负的整数x,求该数的逆序数y,并判断x、y能否被17整除。#includeint main() int x, a,y,t; printf(请输入一个非负的整数n); scanf(%d,&x); t=x; 【1】 do a=x%10; /取得个位数字 【2】 ;/获得逆序数 x=x/10; /去掉个位数字 while( 【3】 ); if( 【4】 ) printf(x能被17整除n); else printf(x不能被17整除n); if(y%17=0) printf(y能被17整除n); else printf(y不能被17整除n); return 0;2. 有一行文字,要求删去某一个字符。此行文字和要删去的字符均由键盘输入,要删去的字符以字符形式输入(如输入 a表示要删去所有的 a字符)。 #include void main() /*str1表示原来的一行文字,str2表示删除指定字符后的文字*/char str1100,str2100; char ch;int i=0,k=0;printf(“please input an sentence:n”);gets( 【5】 ); scanf(%c,&ch); for (i=0; 【6】 ;i+) if (str1i!=ch) str2 【7】 =str1i; k+; str2 【8】 =0; printf(n%sn,str2); 3下面给定程序中函数fun的功能是:求k!,所求阶乘的值作为函数值返回。例如:若k = 10,则应输出:3628800。请按要求把程序补充完整,使它能得出正确的结果。#includelong fun ( int k) if (k 0) return ( 【9】 ); else if ( 【10】 ) return 1L;main() int k = 10 ; printf(%d!=%ldn, k, fun ( k ) ;4. 函数fun的功能是:逆置数组元素中的值。形参n给出数组中的数据的个数。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。请按要求把空白部分补充完整。void fun(int a, int n) int i, t;for (i=0; i 【11】 ; i+) t = ai; ai = an-1- 【12】 ; 【13】 = t;5下面的程序是输出1100之间的全部素数,其中函数prime的功能是判断一个数n是否是素数。当n是素数时,函数prime的返回值为1;当n不是素数时,函数prime的返回值为0。请按要求把程序补充完整。#include #include int prime(int n)int i; for(i=2;i=sqrt(n);i+) if( 【14】 ) return 0; return 1;int main()int i; for(i=2; 【15】 ;i+) if( 【16】 ) printf(%5d,i); printf(n); return 0;6下面程序的功能是:由键盘输入10个整数,计算这10个整数中的奇数和与偶数和。请按要求把程序补充完整。#include void main() int a,b,c,i; a=c=0; for(i=1;i=10;i+) scanf(%d,&b); if( 【17】 ) a=a+b; else 【18】 ; printf(偶数的和=%dn,a); printf(奇数的和=%dn,c);7下面给定程序的功能是:从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请按要求把程序补充完整。#includevoid main() int n=0,c; c=getchar(); while( 【19】 ) if( 【20】 ) n+; c=getchar(); printf( 【21】 个数字n,n);8. 程序的功能是:求矩阵的转置。请按要求把空白部分补充完整。#include #include void main() int a24=1,3,5,7,2,4,6,8,b42; int i,j; for(i=0;i2;i+) for(j=0;j4; 【22】 ) bji= 【23】 ; for(i=0;i 【24】 ;i+)printf(%2d %2dn,bi0,bi1);四、编程题1. 输入一百分制成绩,要求输出成绩等级A,B,C,D,E。90分及以上为A ,80-89分为B,70-79分为C,60-69分为D,60分以下为E。 2. 编程求方程3X+4Y=50的所有非负整数解。3. 求1!+2!+3!+100!。4. 有一分数序列,求出这个数列的前30项之和。5. 输出100以内能被3整除且个位数为6的所有正整数。6. 编写一个程序,统计出10个学生的平均成绩,最高分。例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出:平均成绩为77.9,最高分为92。7. 定义一个二维数组,任意输入200个学生的数学、语文、英语、物理、化学5门课程的成绩,计算并输出每一门课程的平均成绩和每一位学生的平均成绩。8. 已知一个3*3的整型二维数组,输出数组元素中的最小值及其位置(不用考虑有多个相等的最小值的情况)。要求:数组元素的初值在程序中初始化。例如:139023571最小值是0,其位置是第1行第0列。9. 若一个字符串正读和反读都一样,如level、madam,则称之为回文字符串。请编写程序,输入任意一个字符串,验证其是否为回文。10. 编写函数实现两个字符串的连接。要求不能使用 strlen, strcat, strcpy等字符串处理函数。函数原型void cat(char s1, char s2, char s3);主函数中完成两个串的输入,cat函数的调用,连接后的结果输出。11. 编写输入数据函数、排序函数、输出函数,完成10个整数的输入、排序和输出,在主函数中进行测试。输入函数的功能是程序运行时,通过键盘输入10个整数。输入函数原型void inputData(int a,int n);排序函数的功能是用冒泡排序或选择排序把10个整数从小到大排序。排序函数原型void sort(int a,int n);输出函数的功能是把排好序的10个整数在屏幕上输出。输出函数原型void outputData(int a,int n);12. 从键盘输入若干个整数,判断其是否为素数,直到输入50个素数为止,统计这50个素数的和。要求:1 定义函数isprime,判断任意一个正整数是否是素数2 定义函数main,输入若干正整数,通过调用函数isprime,判断是否是素数,求50个素数之和,并输出结果。 C语言程序设计期末复习题答案一、选择题12345678910CABBABCACD11121314151617181920CCDACDACBD21222324252627282930DBABCCACDB二、读程序,写出程序的运行结果1a=0,b=62230 1 2 31 2 3 42 3 4 53 4 5 64i=2,j=2i=4,j=45“c:abc.dat”6107y=13880000931025112112n=25,m=3013b=2114515DG16abchijklm1727.0000181191320621 6 7 8 5 5221 1 2 3 5231,2,2,124opqr三、程序填空【1】y=0;【2】y=y*10+a【3】x!=0【4】t%17=0【5】str1【6】str1i!=0或str1i!=0或str1i【7】k【8】k【9】k*fun(k-1)【10】k=0【11】n/2【12】i【13】an-1-i【14】n%i=0【15】i=0&c=9【21】%d【22】j+【23】aij【24】4四、编程题,请写出完整的C语言程序13. 输入一百分制成绩,要求输出成绩等级A,B,C,D,E。90分及以上为A ,80-89分为B,70-79分为C,60-69分为D,60分以下为E。 #include void main( ) int score,temp; char grade; scanf(%d,&score); if (score100)|(score0) printf(ndata errorn); else if(score= =100) temp=9; else temp=score/10; switch (temp) case 9 : grade=A;break; case 8 : grade=B;break; case 7: grade=C;break; case 6: grade=D ; break; case 5: case 4: case 3: case 2: case 1: case 0: grade=E ; printf(%d,%cn, score,grade); 14. 编程求方程3X+4Y=50的所有非负整数解。#includeint main()int x,y;for(x=1;x17;x+)for(y=1;y13;y+)if(3*x+4*y=50)printf(x=%2d,y=%2dn,x,y); return 0;15. 求1!+2!+3!+100!。#include void main()int i;double t,s;i=1;t=i; s=t;for(i=2;i=100;i+) t=t*i s+=t; printf(%ld ,s);16. 有一分数序列,求出这个数列的前30项之和。#includeint main()int i,a=1,b=2,k; /a: 分母,b:分子double t,sum=2/1.0;for(i=2;i=30;i+)/循环的初始值,确定循环条件k=a;a=b;b=b+k;t=(double)b/a; /强制类型转换 / t=1.0*b/a;sum=sum+t;printf(%.2fn,sum); return 0;17. 输出100以内能被3整除且个位数为6的所有正整数。#include stdio.hvoid main()int i,j; for(i=0;i10; i+) j=i*10+6; if(i%3!=0) continue;printf(%d ,j); 18. 编写一个程序,统计出10个学生的平均成绩,最高分。例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出:平均成绩为77.9,最高分为92。#include void main( ) float a10,ave,max,sum=0; int i=0; for(i=0;i10;i+) scanf(%f,&ai); max=a0; for(i=0;i10;i+)if(maxai) max=ai; sum=sum+ai; ave=sum/10; printf(ave=%fn,ave); printf(max=%fn,max);19. 定义一个二维数组,任意输入200个学生的数学、语文、英语、物理、化学5门课程的成绩,计算并输出每一门课程的平均成绩和每一位学生的平均成绩。#include #define N 200 /代表学生数#define M 5 /代表课程数void main()int scoresNM;int i,j,sum; /输入学生成绩for(i=0;iN;i+) printf(输入第%d个学生的数学、语文、英语、物理、化学5门课程的成绩:,i+1); for(j=0;jM;j+) scanf(%d,&scoresij);/输出学生成绩 printf(序号t数学t语文t英语t物理t化学t平均成绩n);for(i=0;iN;i+)sum=0;printf(%dt,i+1); /输出学生序号for(j=0;jM;j+)sum+=scoresij; /计算每一位学生的总成绩printf(%dt,scoresij);printf(%dn,sum/M); /输出每一位学生的平均成绩/计算并输出每一门课程的平均成绩printf(n平均t);for(j=0;jM;j+)sum=0;for(i=0;iN;i+)sum+=scoresij;printf(%dt,sum/N);printf(n);20. 已知一个3*3的整型二维数组,输出数组元素中的最小值及其位置(不用考虑有多个相等的最小值的情况)。要求:数组元素的初值初始化如下:139023571,最小值是0,其位置是第1行第0列。#includeint main()int a33=1,3,9,0,2,3,5,7,1;int i,j,row,col,min;min=a00;row=0;col=0;for(i=0;i3;i+) for(j=0;jaij) min=aij; row=i; col=j; printf(min=%d,row=%d,col=%dn,min,row,col); return 0;21. 若一个字符串正读和反读都一样,如level、madam,则称之为回文字符串。请编写程序,输入任意一个字符串,验证其是否为回文。(多种方法均可)法1:#include#includeint main()char s100;int i,n,m=1;scanf(%s,s);n=strlen(s);for(i=0;in/2;i+)if(si!=sn-1-i)m=0;break;if(m)printf(%s是回文n,s);else printf(%s不是回文n,s);return 0;法2:#include#include #define N 100void fc(char a ) int i, tmp, n;n=strlen( a );for(i=0;in;i+)tmp=ai;ai=an-i-1;an-i-1=tmp; int main()char aN,bN;gets(a);strcpy(b,a);fc(a);if(strcmp(a,b)= 0)printf(%s是回文串n,a);else printf(%s不是回文串n,a);return 0; 22. 编写函数实现两个字符串的连接。要求不能使用 strlen, strcat, strcpy等字符串处理函数。函数原型void cat(char s1, char s2, char s3);主函数中完成两个串的输入,cat函数的调用,连接后的结果输出。#includevoid cat(char s1, char s2, char s3)int i,j;for(i=0;s1i!=0;i+)s3i=s1i;for(j=0;s2j!=0;j+,i+)s3i=s2j;s3i=0;void main() char s140,s240,s380;printf(请输入第一个字符串:);gets(s1);printf(请输入第二个字符串:);gets(s2);cat(s1,s2,s3);printf(连接后的结果是:%sn,s3);23. 编写输入数据函数、排序函数、输出函数,完成10个整数的输入、排序和输出,在主函数中进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论