一、单项选择题(选择一个最佳答案,每题2分,共20分) 1. 一个C程序的执行是从( )。 A) 本程序的main函数开始,到main函数结束 B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C) 本程序的main函数开始,到本程序文件的最后一个函数结束 D) 本程序文件的第一个函数开始,到本程序main函数结束 2. 下列选项中,不能用作标识符的是( )。 A) _1234_ B) _1_2 C) int_2_ D) 2_int_ 3. 以下定义语句中正确的是( )。 A) char a='A'b='B'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a; 4. 设有以下定义:#define d 2 int a=0; double b=1.25; char c=’A’; 则下面语句中错误的是( )。 A) a++; B) b++ C) c++; D) d++; 5. 以下4个选项中,不能作为一条C语句的是( )。 A) {;} B) a=0,b=0,c=0; C) if(a>0); D) if(b==0) m=1;n=2; 6. 有以下定义语句 double a,b; int w; long c; 若各变量已正确赋值,则下列选项中正确的表达式是( )。 A) a=a+b=b++ B) w%(int)a+b) C) (c+w)%(int)a D) w=a==b; 7. 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是( )。 A) p=1; B) *q=2; C) q=p; D) *p=5; 8. 设有定义:int a,*pa=&a; 以下scanf语句中能正确为变量a读入数据的是( )。 A) scanf(“%d”,pa) ; B) scanf(“%d”,a) ; C) scanf(“%d”,&pa) ; D) scanf(“%d”,*pa); 9. 若有说明:char *language[]={”FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则表达式*language[1]>*language[2]比较的是()。 A)字符B和字符P B) 字符串FORTRAN和字符串BASIC C)字符F和字符B D) 字符串BASIC和字符串PASCAL 10. 执行语句for(i=1;i++<4;);后变量i的值是( )。 A) 3 B)4 C) 5 D) 不定 一、填空题(每空2分,共18分) 1. 若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为 。 2. 有程序段:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5]; 则b中的值是 。 3. 函数swap(int x,int y)实现对x和y值的交换。则执行语句{int a[2]={1,2}; swap(a[0],a[1]);}后,a[0]= ,a[1]= 。 4. 设有以下宏定义:#define f(z) z*z,执行赋值语句k=f(4+4)/f(2+2);(k为int型变量)后,k的值是 。 5. 书写语句求a, b两个数的最大值max。 ? : ; 6. 若x为int型变量,则执行x=7; x+=x-=x+x; 语句后,x的值是 。 二、读程序写结果(每题6分,共24分) 1. 有以下程序 int f(int a) { int b=0; static c=3; b=b+1;c=c+1; return(a+b+c); } void main() { int a=2,i; for(i=0;i<3;i++) printf(“%2d”,f(a)); } 执行后输出的结果是 。 2. 有以下程序 void f(int y,int *x) { y=y+*x; *x=*x+y;} void main( ) { int x=2,y=4; f(y,&x); printf(“x=%d,y=%d\n”,x,y); } 执行后输出的结果是 。 3. 有以下程序 #define LETTER 1 #include <stdio.h> void main() { char str[20]="C Language", c; int i=0; while((c=str[i])!='\0') { i++; #ifdef LETTER if(c>='a' &&c<'z') c=c+1; else if(c=='z') c=c-25; #else if(c>='B'&&c<='Z') c=c-1; else if(c=='A') c=c+25; #endif printf("%c",c); } } 执行后输出的结果是 。 4. 有以下程序 void fun(int *a,int i,int j) { int t; if(i<j) { t=a[i];a[i]=a[j];a[j]=t; i++; j--; for(i=0;i<4;i++) printf("%2d",a[i]); fun(a,i,j); } } void main() { int x[]={2,6,1,8},i; fun(x,0,3); for(i=0;i<4;i++) printf("%2d",x[i]); printf("\n"); } 执行后输出的结果是 。 四、程序填空(每空1分,共8分) 下面程序的功能是:计算从命令行中输入的第2个参数开始的所有参数中是回文字符串的参数个数。(顺读和倒读都一样的字符串称为“回文”,如“level”就是回文)请填空。 #include <stdio.h> 【1】 int sumhw( char **p,int n); char jughw(char *str); void main(int argc,char *argv[]) { int s; if (argc<2) printf("请输入有效参数"); else { s=sumhw( 【2】 ,argc-1); printf("共有%d个回文串\n",s); } } int sumhw(char **p,int n) { char flag; int i,sum=0; for(i=0;i<n;i++) { flag=jughw( 【3】 ); if ( 【4】 ) sum++; } return sum; } char jughw(char *str) { char *p1,*p2; int n; n=strlen(str); p1=str; p2= 【5】 ; while( 【6】 ) { if(*p1!=*p2) break; else {p1++; 【7】 ;} } if( 【8】 ) return('N'); else return('Y'); } 五、编程题(30分) 1. 用指针和数组两种方法实现如下功能:将一个字符串按逆序存放。(18分) 要求(1)主函数中完成输入和输出字符串。 (2)逆序存放功能用子函数完成。 2. 一个整型数组有10个元素,编写程序删除所有值为n的元素。(12分) 要求(1)主函数完成n的输入,数组元素输入以及删除后数组元素的输出。 (2)删除功能用子函数完成。 C语言模拟试卷一参考答案 一、单项选择题(选择一个最佳答案,每题2分,共20分) 1、A | 2、D | 3、C | 4、B | 5、D | 6、C | 7、D | 8、A | 9、A | 10、C | | | | | |
二、填空题(每空2分,共18分) 1、2.500000 2、9 3、1 2 4、28 5、(a>b) max=a max=b 6、-14 三、读程序写结果(每题6分,共24分) 1、 7 8 9 2、 x=8,y=4 3、 C Lbohvbhf 4、 8 6 1 2 8 6 1 2 四、程序填空(每空1分,共8分) 【1】#include<string.h> 【2】argv+1 【3】*(p+i) 【4】flag= =’Y’ 【5】str+n-1 【6】p1<p2 【7】p2-- 【8】p1<p2 五、编程题(共30分) 1. (1)数组法(9分) #include <string.h> #include <stdio.h> #define N 20 void inv(char str[],int n); void main() {char str[N]; gets(str); inv(str,strlen(str)); puts(str); } void inv(char str[],int n) {int i,j,temp; for(i=0,j=n-1;i<=j;i++,j--) {temp=str[i]; str[i]=str[j]; str[j]=temp;} } (2)指针法(9分) #include <string.h> #include <stdio.h> #define N 20 void inv(char *str,int n); void main() {char str[N]; gets(str); inv(str,strlen(str)); puts(str); } void inv(char *str,int n) {char *i,*j,temp; for(i=str,j=str+n-1;i<=j;i++,j--) {temp=*i; *i=*j; *j=temp;} } 2.(12分) #include <stdio.h> int m; void del_element(int num[],int n); void main() {int num[10]; int i,n; m=10; for(i=0;i<10;i++) scanf("%d",&num[i]); printf("please input n\n"); scanf("%d",&n); del_element(num,n); for(i=0;i<m;i++) printf("%d ",num[i]); } void del_element(int num[],int n) {int i,j; for(i=0;i<m;i++) if(num[i]==n) { for(j=i+1;j<m;j++) num[j-1]=num[j]; m--; i--; } } c语言程序设计期末试题B(含答案) | 一 单项选择题(每小题1分,共10分) 1.以下4组用户定义标识符中,全部合法的一组是( ) A)_total clu_1 sum B)if -max turb C)txt REAL 3COM D)int k_2 _001 2.以下程序的输出结果是( ) #include <stdio.h> main( ) { int a = 1, b = 2, c = 3; printf(“%d”, c>b>a); } A) 2 B) 1 C) 0 D) 3 3.以下正确的叙述是( ) A) 在C语言中,main函数必须位于文件的开头 B) C语言每行中只能写一条语句 C) C语言本身没有输入、输出语句 D) 对一个C语言进行编译预处理时,可检查宏定义的语法错误 4.设有定义:int a,*pa=&a; 以下scanf语句中能正确为变量a读入数据的是( ) A)scanf("%d",pa); B)scanf("%d",a); C)scanf("%d",&pa); D)scanf("%d",*pa); 5.若有以下程序段, int c1=1,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3中的值是( ) A) 0 B) 0.5 C) 1 D) 2 6.能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是( ) A) a>=10 or a<=0 B)a>=0|a<=10 C)a>=10 &&a<=0 D)a>=10‖a<=0 7.执行下面的程序时,将1、2、3、4分别赋给a、b、c、d,正确的输入是( ) main( ) { int a,b,c,d; scanf(“%d,%d,%d%d”,&a,&b,&c,&d); … } A)1 2 3 4 B)1 2 3,4 C) 1,2,3,4 D) 1,2,3 4 8.有以下程序段 main( ) { int k=0; while(k=1) k++; } 则while循环执行的次数是( ) A) 无限次 B) 有语法错,不能执行 C) 一次也不执行 D) 执行1次 9.以下程序的输出结果是( ) #include <stdio.h> main( ) { int a = 5, b = 4, c = 6, d; printf(“%d”,d=a>b?(a>c?a:c): b); } A) 5 B) 4 C) 6 D) 不确定 10.下面是对数组a的初始化,其中不正确的是( ) A)a[5]={"ABCD"} B)a[5]={'A','B','C','D'} C)a[5]="" D)a[5]="ABCDE" 二、填空题(每空2分,共32分) 1.结构化程序设计中的三种基本结构是 [1] 、 [2] 、 [3] 。 2.C程序的基本组成单位是 [4] 。 3.标识符的第一个字符必须是 [5] 或 [6] 。 4.实常数123.457的规范化指数表示形式是 [7] 。 5.表达式7/2的结果是 [8] 。表达式7%2的结果是 [9] 。 6.定义一个整型数组a[10],则下标最大的数组元素为 [10] 。 7.在函数的递归调用过程中,要使递归过程不是无限制进行下去,必须具有 [11] 。 8.C语言提供了 [12] 命令用来实现“文件包含”的操作。 9.已知:char c[ ]={“china”};将字符数组c中整个字符串一次输出的语句书写格式为 [13] 。 10.表达式4>3 && 7<5-!0的值为 [14] 。 11.按照变量在函数中作用域不同,可以将变量分为 [15] 和 [16] 。 三、计算题(要求写出步骤)(每题4分,共8分) 1. 设int a=12,求出表达式a+=a-=a*a运算后a的值. 2. 设a=2,b=3,x=3.5,y=2.5 求算术表达式(float)(b-a)/2+(int)x%(int)y的值 四、读下列程序,写出程序的运行结果(4×3=12) 1.已知字符A的ACSII码值为65,写出以下语句的输出结果 main( ) { char ch=‘A’; printf("%c,%d",ch,ch+3); } 2. main( ) { int a = 10; printf(“%d ”, ++a); printf(“%d ”, a--); } 3.main( ) { int t=1; for(i=1 ; i<5 ; i++) t=t*i; printf("%d",t); } 4. f(int *a, int b) {b=b+*a; *a=*a+b;} main( ) { int x=2,y=4; int *p; p=&x; f(p,y); printf("%d ,%d",x,y); } 五、程序填空(每空2分,共14分) 1.下列程序段以函数swap( )调用的形式实现两个变量值的互换,请填空完善程序。 swap(int * m,int * n) { int temp; temp= [1] ; [2] ; *n= [3] ; } main( ) { int x,y; scanf(“%d,%d”,&x,&y); swap( [4] ); printf(%d,%d”,x,y); } 2.下面程序是计算1-3+5-7+…… -99+101的值,请填空完善程序。 main( ) { int i,m,t=1,s=0; for (i=1;i<=101; [5] ) { [6] ; s=s+m ; [7] ;} printf(“%d\n”,s); } 六、编程题:(共24分) 1.编程求1!+2!+3!+……+50!的值。(6分) 2.用函数的递归调用方法求下列函数式的值(要求n由用户输入),递归公式为:(8分) 1 (n=1) total(n)= total(n-1)+n+1 (n>1) 3.编写程序输出下列形式的杨辉三角形的前10行。(10分) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …… C语言模拟试卷二答案及评分标准 一、单项选择题(每小题1分) 1. A 2. C 3. D 4. A 5. B 6. D 7. D 8. A 9. C 10. D 二、填空题(每空2分) 1. 顺序结构、选择结构、循环结构。 2. 函数 3. 字母、下划线 4. 1.23457e2或1.23457E2 5. 3、1 6. a[9] 7. 使递归结束的条件 8. #include 9. printf(“%s”,c) 10. 0 11. 全局变量、局部变量 三、计算题(要求写出步骤)(每题4分) 1. a-=a*a a=a-a*a a=12-144= -132 a+=-132 a=a+(-132) a=-132-132= -264 2. 1.0/2+3%2=0.5+1=1.5 四、读下列程序,写出程序的运行结果(每题3分) 1. 1. A,68 2. 2. 11 11 3. 3. 24 4. 4. 8,4 五、程序填空:(每空2分) 1.*m 2.*m=*n 3. temp 4. x,y 5. i=i+2 6. m=i*t 7. t=-t 六、编程题 1. main() { int i; float t=1,s=0; for(i=1;i<=50;i++) { t=t*i; s=s+t; } printf("s=%e\n",s); } 2. total(int n) { int c; if (n==1) c=1; else c=total(n-1)+n+1; return(c); } main() { int n; scanf(“%d”,n); printf(“%d”,total(n)); } 3. main( ) { int a[10][10],i,j; for(i=0;i<10;i++) { for(j=0;j<=i;j++) { if((j= =0)||(i= =j)) a[i][j]=1; else a[i][j]=a[i-1][j-1]+a[i-1][j]; printf("%d",a[i][j]); } printf("\n"); } } | |
C语言程序设计期末试题C | 一、选择题:(20分,每题2分) 1.以下不正确的C语言标识符是( )。 A. ABC B. abc C. a_bc D. ab.c 2.C程序是由 构成的。 A. 主程序与子程序 B. 主函数与若干子函数 C. 一个主函数与一个其它函数 D. 主函数与子函数 3.以下说法中正确的是: 。 A. 在C语言中,实参与其对应的形参各占独立的存储单元; B. 在C语言中,实参与其对应的形参共占同一个存储单元; C. 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元; D. 在C语言中,形参是虚拟的,不占存储单元。 4.设n=3;则n++的结果是( )。 A. 2 B. 3 C. 4 D. 5 5.设整型变量n=10,i=4,则赋值运算n%=i+1执行后,n的值是( )。 A. 0 B. 1 C. 2 D. 3 6.凡是函数中未指定存储类别的局部变量其隐含的存储类别是( )。 A. 自动(auto) B. 静态(static) C. 外部(extern) D. 寄存器(register) 7.在while(x)语句中的x与下面条件表达式等价的是: 。 A. x= =0 B. x= =1 C. x!=1 D. x!=0 8.若有以下说明和语句: struct worker { int no; char *name; }work, *p=&work; 则以下引用方法不正确的是( )。 A. B. (*p).no C. p->no D. work->no 9.以下对二维数组进行正确初始化的是( )。 A. int a[2][3]={{1,2},{3,4},{5,6}}; B. int a[][3]={1,2,3,4,5,6}; C. int a[2][]={1,2,3,4,5,6}; D. int a[2][]={{1,2},{3,4}}; 10.二维数组a有m列,则在a[i][j]之前的元素个数为: 。 A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+1 二、给出下列程序的运行结果:(20分,前四题每题3分,后两题每题4分) 1.#include<stdio.h> main() { int i=16,j,x=6; j=i+++1; x*=i=j; printf(“%d,%d\n”,j,x); } 运行结果是: 2.#include<stdio.h> #include<math.h> main() { int a=1,b=4,c=2; float x=10.5,y=4.0,z; z=(a+b)/c+sqrt((double)y)*1.2/c+x; printf(“%f\n”,z); } 运行结果是: 3.#include<stdio.h> main() { int a,b,c,d; a=c=0; b=1; d=20; if(a) d=d-10; else if(!b) if(!c) d=25; else d=15; printf(“d=%d\n”,d); } 运行结果: 4.main() { int i=10; switch(i){ case 9: i+=1; case 10: i+=1; case 11: i+=1; default : i+=1; } printf(“%d”,i); } 运行结果: 5.#include<stdio.h> main() { int a[]={1,2,3,4},i,j,s=0; j=1; for(i=3;i>=0;i--) { s=s+a[i]*j; j=j*10; } printf("s=%d\n",s); } 运行结果: 6.func(int x) { x=20; } main() { int x=10; func(x); printf(“%d”,x); } 运行结果: 三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(20分,每空2分) 1.已知能被4整除而不能被100整除的或者能被400整除的年份是润年,则判断某一年是否是润年的程序如下: main() { int year,leap; scanf(“%d”,&year); if( ) leap=1; else leap=0; if( ) printf(“是润年”); else printf(“不是润年”); } 2.将100至200间不能被3整除的数输出: main() { scanf输入整型数组int n; for(n=100;n<=200;n++) { if(n%3==0) ; printf(“%d ”,n); } } 3.判断m是否是素数 #include <math.h> main() { int m,i,k; scanf(“%d”,&m); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0) ; if(i>=k+1) printf(“%d is a prime number\n”,m); else printf(“%d is not a prime number\n”,m); } 4.给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。 main() { int i,j,row=0,colum=0,max; static int a[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}}; ; for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) { max=a[i][j]; ; ; } printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); } 5.下面函数的功能是将两个字符串s和t连接起来。 char *conj(char *s, char *t) { char *p=s; while(*s) ; while(*t) { *s= ; s++; t++; } *s=’\0’; ; } 四、编程(40分) 1.计算1-1/2+1/3-1/4+…+1/99-1/100+…,直到最后一项的绝对值小于10-4为止。(13分) 2.输入一行字符,分别统计求出其中英文字母、空格、数字和其他字符的个数并输出结果。(13分) 3.任意从键盘输入10个整数,按从小到大的顺序排序,并输出结果。(14分) | |
C语言程序设计期末试题C答案 | 答案 一、选择题 1、D,2、B,3、A,4、B,5、A, 6、A,7、D,8、D,9、B,10、B 二、给出下列程序的运行结果 1、17,102 2、13.700000 3、d=20 4、13 5、s=1234 6、10 三、阅读程序,在标有下滑线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。 1、 (year%4= = 0 && year%100 !=0)|| year%400= =0) leap 2、 continue 3、 break 4、 max = a[0][0] row = i +1 colum = j +1 5、 s++ *t return(p) 四、编程 1、 #include<stdio.h> main() { int i; float sum,sign; i=1; sum=0; sign=1.0; while((1.0/i)>=1e-4) { sum += sign / i ; i++; sign = - sign; } printf("sum=%.4f",sum); } 2、 #include<stdio.h> main() { char str[81]; int i ; int letter,space ,num ,other ; char c; printf ("Please enter a string : "); gets(str); letter=space=num=other=0; for( i= 0;str[i]!='\0'; i++) { c=str[i]; if((c>= 'A'&&c<='Z')|| (c>='a'&& c<='z')) letter ++; else if (c>='0' && c<='9') num++; else if ( c== ' ') space++; else other ++; } printf("In this string : letter =%d,space=%d ,num=%d,other=%d",letter ,space,num,other); } 3、 #include<stdio.h> main() { int num[10]; int i,j,k; int temp; printf("Please enter 10 numbers :\n"); for(i=0;i<10;i++) scanf("%d",&num[i]); for (i=0;i<9;i++) { k= i ; for (j=i+1;j<10;j++) { if (num[k]>num[j]) k=j; if(k!=i) { temp=num[i]; num[i]=num[k]; num[k]=temp; } } printf("After sorted :\n"); for (i=0;i<10;i++) printf ("%5d",num[i]); } } | |
|
发表评论