c语言期末试卷B卷(附答案)

更新时间:2024-03-21 12:11:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、单项选择题(每小题2分,共30分)

1. 下列关于C语言用户标识符的叙述中正确的是( B )

(A)用户标识符中可以出现在下划线和中划线(减号) (B)用户标识符中不可以出现中划线,但可以出现下划线

(C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头

(D)用户标识符中可以出现在下划线和数字,它们都可以放在用户标识符的开头

2. 在C语言中,合法的字符常量是( A )

(A)’\\087’ (B)’\\x43’ (C)’abe’ (D)”\\0”

3. x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是( B )

(A) INPUT x、y、z; B)scanf(“%d%d%d”,&x,&y,

(C) scanf(“%d%d%d”,x,y,z); (D)(scanf(“%d%d%d”,&x,y,&z); 4. 若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a

(A) 1 (B) 2 (C) 3 (D) 4 5. 设有:int a=3,b=2,c=6,d=4,m=2,n=3;执行 ((m=a>b) || (n=c>d)) 后n的值为 ( B )

(A) 0 (B) 1 (C) 2 (D) 3

6. 若a为int类型,且其值为3,则执行完a*=a+=a*a;后,a的值是 ( D )

(A) –3 (B) 9 (C) –12 (D) 144

7. 设int a=12,b=8;则a/b的结果为:( B )

(A) 1.5 (B) 1 (C) 3/2 (D) 2

8. 若定义:int a=511,*b=&a; 则printf(\的输出结果为(D)

(A) 无确定值 (B) a的地址 (C) 512 (D) 511

9. 在C语言中,引用数组元素时,其数组下标的数据类型允许是 ( C )

(A) 整型常量 (B) 整型表达式

(C ) 整型常量或整型表达式 (D) 任何类型的表达式

10. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( B )

(A) 地址传递 (B) 单向值传递

(C) 由实参传给形参,再由形参传回实参 (D) 传递方式由用户指定

11. 数字字符0的ASCII值为48,若有以下程序

main( )

{ char a='1',b='2'; printf(\ printf(\}

程序运行后的输出结果是( A )

(A)3,2 (B) 50,2 (C)2,2 (D)2,50 12. 以下函数值的类型是( D )

fun ( float x ) { float y;

y= 3*x-4; return y; }

1

(A) int (B) 不确定 (C) void (D) float

13. 以下能正确定义一维数组的选项是( B )

(A) int a[5]={0,1,2,3,4,5}; (B)int a[]={0,1,2,3,4,5}; (C) char a={'A','B','C'}; (D)int a[5]=\

14. 有以下程序,结果为: ( D )

main( )

{ int a[5]={1,2,3,4,5}; int *pa=&a[1];

printf(“%d”,pa[2]);

}

(A) 3 (B) 4 (C) 5 (D) 2 15. 假设

struct student { int num;

float score;

} stu1;

则下列赋值语句中正确的是( C )

(A) student.score=85; (B) student={1001,95}; (C) stu1.num=1001; (D) stu1->num=1001;

二、判断题(对的打“√”,错的打“×”,每小题1分,共10分)

1. 定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。√

2. C语言中,若函数定义未给出返回值类型,系统默认为返回值类型为int类型。×

3. 全局变量的作用域一定比局部变量的作用域范围大。×

4. 对字符串”c program”进行完整赋值的操作是: ×

char str[9]=”c program” ;

5. 在赋值表达式中,赋值号左边的变量和右边的表达式之值的数据类型可以不相同×。

6. 若有定义int a[4][5];排列在数组中的第11个元素是a[3][1]。√

7. 存储字符串”\\’acd1\\376”需要的字节数为7个。×

8. 存储字符数组中的最后一个字符必须是'\\0'。√

9. 在一个函数内定义的变量只能在本函数范围内有效。√

10.设int m=7; float n=3.5;执行m-=m-!n后, m的值是1。√

三、写出下列程序段的输出结果(每小题5分,共20分)

1. 有下列程序段,请写出运行结果。

#include main( )

2

{ int i=0,a=0; while(i<20) { for(;;)

{ if ((i)==0) break; else i--; }

i+=11; a+=i; }

printf(\}

2. 有下列程序段,请写出运行结果。

int f1(int x)

{ static int z=3; int y=0;

y++; z++;

return(x+y+z);

}

main( )

{ int a=1,k;

for(k=0;k<3;k++)

printf(“=”,f1(a)); }

程序运行后的输出结果是:

3. 有下列程序段,请写出运行结果。

main( )

{ char k; int i;

for(i=1;i<3;i++)

{ scanf(“%c”,&k); switch(k)

{ case ‘0’: printf(“another\\n”); case ‘1’: printf(“number\\n” ); } }

}

程序运行时,从键盘输入:01<回车>,程序执行后的输出结果是:

4.有下列程序段,请写出运行结果。

void swap(int x,int y) { int t;

t=x;x=y;y=t;

printf(\}

main( )

{ int a=3,b=4; swap(a,b);

printf(\}

程序运行后的输出结果是:

3

四、程序填空题(每空2分,共20分)

1.输入整数a和b,若a*a+b*b>100,则输出a*a+b*b的结果,否则输出a+b的结果。 main( )

{ int a,b,x,y;

scanf(“%d,%d”,__ ①_______); x=a*a+b*b;

if (____②________)

{ y=x;

printf(“\\n a*a+b*b>100,%d”,y);

}

else

printf(“\\n a*a+b*b<=100 %d”,_____ _③_______);

}

2.从键盘输入10个整数,统计其中整数,零和负数的个数并输出。 main( )

{ int a[10],i,s1,s2,s3;

s1=s2=s3=0;

for(i=0;i<10;i++)

scanf(“%d”,____ ④ _____); for(i=0;i<10;i++) if (a[i]>0) s1++;

else if (a[i]== 0)s2++;

else _____⑤___________;

printf(“\\npos==,zer0==,neg==”,s1,s2,s3); }

3. 将输入的十进制正整数n转换为二进制数,并将转换结果输出,转换方法采用”除二取余”法。 void transfer(int m)

{ int s[20],i;

for (i=0;m!=0;i++)

{ s[i]=_____ ⑥_______; m=m/2; }

for(;i!=0;i--)

printf(“%d”,____ ⑦______);

} main( ) { int n;

scanf(“%d”,&n);

_____⑧_____________ ;

} 4. mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。

int mystrlen(char str[ ]) { int i;

for(i=0; ⑨!=‘\\0';i++); return(⑩); }

五、编程题(20分)

1. 有数列sum=1!+2!+3!+4!+5!+6!+??,编程实现:

(1)编写一个函数,求sum的前n项和,例如: n=3时,sum=1+2+6=9。 (2)在主函数中输入n,调用上面的函数并输出结果。

2.从键盘输入十个整数存入数组a中,并编程实现:

4

(1)将最大值存入max中,将最小值存入min中,并输出它们的值。 (2)将数组a按从小到大排序,并输出排序后数组的值。

xxxx期末考试试卷( B 卷)

2005学年第1学期 考试科目: 程序设计

一、单项选择题(每小题2分,共30分) 1 B 2 B 3 B 4 6 11 D C 7 12 B A 8 13 D B 9 14 A C B 5 10 15 D B C 二、判断题(对的打“√”,错的打“×”,每小题1分,共10分) 1 × 2 √ 3 × 4 × 5 √ 6 × 7 √ 8 × 9 √ 10 × 三、写出下列程序段的输出结果(每小题5分,共20分) 1、

a = 32

评分细则:直接写32,给4分 2、

6 7 8

评分细则:写对一个数给1分,三个全对给5分。 3、

another mumber mumber

评分细则: 写在一起,没换行扣1 4、

4 3 3 ,4

评分细则:写对一行,扣3分

四、程序填空题(每空2分,共20分) 1、

① &a, &b ② x>100或a*a+b*b>100 2、

③ a+b

④ &a[i] ⑤ s3++

5

3、

⑥ m%2 ⑦ s[i-1]

⑧ transfer(n) 4、

⑨ str[i]

⑩ i

五、编程题(20分)

1、 10分 main() {

int sumall(int a); int n,sum;

printf(\ scanf(\ sum=sumall(n);

printf(\}

int sumall(int a) {

int i,s1=1,sum=0; for(i=1;i<=a;i++) {s1=s1*i;

sum=sum+s1;} return(sum); }

评分细则:第一问5分,第二问5分;

如程序都正确但没有使用函数形式则扣2分。

2、 10分 main()

{ int a[10],i,j,max,min,t;

printf(\ for (i=0;i<10;i++) scanf(\ max=min=a[0]; for (i=1;i<10;i++)

{ if (maxa[i]) min=a[i];}

printf(\ for (j=0;j<9;j++) for(i=0;i<9-j;i++) if (a[i]>a[i+1])

{ t=a[i];a[i]=a[i+1];a[i+1]=t;} printf (\ for (i=0;i<10;i++)

6

printf(“%d”,a[i]);}

三. 编程题 1.编程计算 2+4+6+8+…+96+98+100 的值 .

void main ( ) { int i, sum=0; for (i=0 ; i<100 ;i+=2) sum+=i; printf(“sum=%d\\n“ , sum); } 都行,只要完成功能就可以。 注:用 while、do-while 或 goto 都行,只要完成功能就可以。 、

2.从键盘输入 10 个数,编程实现将其中最大的数与最小的数位置对换后,再输出调整后的数组。 . 个数,编程实现将其中最大的数与最小的数位置对换后,再输出调整后的数组。 void main ( ) { int a[10] , max=0 ,min=0 , i, t; for (i=0 ; i<10 ;i++) scanf (“%d”, &a[i]); for(i=0 ; i<10 ;i++) { if ( a[max] < a[i]) max = i; if( a[min] > a[i]) min =i ; } t = a[min]; a[min] = a[max]; a[max] = t; for (i=0 ; i <10 ;i++) printf(“%d “ , a[i]); } 8

四、写出程序运行的输出结果(20分) 1. main()

{ int a=6,b=4; a = a+b; b = a?b; a = a-b;

printf(“a=%d, b=%d”, a, b); }

答案:a=4,b=6

2. main() { int m,n;

for (m=5;m<=10;m++) for (n=2;n<=m-1;n++) if (m%n==0)

printf(“%d\\t”,m); }

考察学生对循环结构嵌套、循环终止条件并非固定常数等知识的理解 答案:6 6 8 8 9 10 10 3.main()

{ int a[10]={1,2,3,4,5,6,7,8,9,10}; int i;

7

for (i=2;i<=8;i++)

{a[i]=a[10-i]; a[10-i]=a[i];} for (i=1;i<=9;i++) printf(“%d ”,a[i]);

}

考察学生对数组在内存中的存放、下标、变量值对调等知识的理解 答案:2 9 8 7 6 7 8 9 10 4. int func(int b) { int a; a=b+100; return (a); }

main() { int a,b;

a=1;

b=func(a);

printf(“a=%d,b=%d ”, a,b); }

考察学生对“局部变量”的理解。 答案:a=1,b=101

五、编程(20分)

1、 输入一个字符串(字符数不超过20),按照如下要求生成一个新的字符串:

1) 新生成的字符串只包含原字符串的英文字母; 2) 将原字符串的所有小写字母转换成大写字母; 最后输出新生成的字符串内容。 答案:

#include \main() {

char s1[21]; char s2[21]; int i,n=0;

printf(\ gets(s1);

for (i=0; i<=strlen(s1); i++) {

if ((s1[i]>='a' && s1[i]<='z') ||

(s1[i]>='A' && s1[i]<='Z') || s1[i]== '\\0')

s2[n++] = s1[i]; }

strupr(s2);

printf(\ printf(\}

2、有一个4X4的整数型二维数组所组成的矩阵,完成如下功能:

1)编写一个函数maxelement(),函数参数是该二维数组名,函数值是该数组所有元素中的

最大值。

2)完成主函数,先从键盘输入该数组的数值,然后调用上述函数求出该数组所有元素的最大值,最后在主函数输出结果。

8

答案:

int maxelement(int arr[][4]) {

int i,t; int max;

max = arr[0][0]; for(i=0;i<4;i++) {

for(t=0;t<4;t++) {

if(max

max = arr[i][t]; } } }

return max; }

main() {

int array[4][4]; int i,t;

for(i=0;i<4;i++) {

for(t=0;t<4;t++) {

scanf(\ } }

printf(\}

1.

一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是 ( ) A、 C语言简洁、紧凑

B、 能够编制出功能复杂的程序 C、 C语言可以直接对硬件进行操作 D、 C语言移植性好

2、以下不正确的C语言标识符是 ( ) A、 ABC B、 abc C、 a_bc D、 ab.c 3、一个C语言程序是由 ( ) A、 一个主程序和若干子程序组成 B、 函数组成

C、 若干过程组成 D、 若干子程序组成

4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是 ( ) A、 有零个或多个输入 B、 有零个或多个输出 C、 有穷性

9

D、 可行性

5、 设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为 ( ) A、 int B、 float C、 double D、 不确定

6、在C语言中,char型数据在内存中的存储形式是 ( ) A、 补码 B、反码 C、源码 D、ASCII码

7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是 ( ) 。 #include main(){ int x; float y;

scanf(\}

A、 12345 B、 123 C、 45 D、 345

8、若有以下定义int a,b; float x,则正确的赋值语句是 ( ) A、 a=1,b=2 B、 b++; C、 a=b=5 D、 b=int(x);

9、以下程序的执行结果是 ( ) #include {

int i=10,j=10;

printf(\}

A、 11,10 B、 9,10 C、 11,9 D、 10,9

10、巳知字母A的ASCII码是65,以下程序的执行结果是 ( ) #include main() {

char c1='A',c2='Y';

printf(\

A、 A,Y B、 65,65 C、 65,90 D、 65,89 11、下列运算符中优先级最高的是 ( ) A、 < B、 十 C、 % D、 !=

12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是 ( ) A、 ’x’&&’y’ B、 x<=y

C、 x||y+z&&y-z

D、 !((x<y)&&!z ||1)

13、判断char型变量cl是否为小写字母的正确表达式为 ( ) A、 ’a’<=c1<=f’z’ B、 (c1>=a)&&(c1<=z)

C、 (‘a’>=c1) (‘z’<=c1) D、 (c1>=’a’)&&(c1<=’z’) 14、字符串\在内存中占据的字节个数为 ( ) A、 0 B、 1 C、 2 D、 3

15、下面有关for循环的正确描述是( )

A、 for循环只能用于循环次数已经确定的情况 B、 for循环是先执行循环体语句,后判定表达式

10

C、 在for循环中,不能用break语句跳出循环体

D、 for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main()

{int num=0; while(num<=2) {num++;

printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3 D、 1 2 3 4

17、以下描述正确的是 ( )

A、 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句。

B、 do-while循环由do开始,用while结束,在while(表达式)后面不能写分号。

C、 在do-while循环体中,一定要有能使while后面表达式的值变成零(“假”)的操作。 D、 do-while循环中,根据情况可以省略while。 18、以下对一维整形数组a的正确说明是 ( ) A、 int a(10); B、 int n=10,a[n]; C、 int n; D、 int a[10]; scanf(“%d”,&n); int a[n];

19、以下对二维数组a的正确说明是 ( ) A、 inta[3][]; B、 float a(3,4);

C、 double a[1][4]; D、 float a(3)(4);

20、若二维数组a有m列,则在a[j]前面的元素个数为 ( ) A、 j*m+i B、 i*m+j C、 i*m+j-1 D、 i*m+j+1

二、填空题(本大题共10空,每空2分,共20分)

1、结构化设计中的三种基本结构是 ___________________

2、在C语言中的实型变量分为两种类型,它们是________ 和 _________ 3、当a=5,b=4,c=2时,表达式 a>b!= c的值是 _______ 4、下列程序运行后的输出结果是 _____________ #include main() {

int i,j;

for(i=4;i>=1;i--) {printf(\

for(j=1;j<=4-i;j++) printf(\

11

printf(\}

5、若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是___________ a[2][1]得到的初值是 ________________

6、在C语言中,二维数组元素的内存中的存放顺序是_______________

三、程序分析题(本大题共2题,每题4分,共8分,描述程序功能并写出程序执行结果) 1、#include main( )

{int a,s,n,count; a=2;s=0;n=1;count=1;

while(count<=7) {n=n*a; s=s+n; ++count;} printf(“s=%d”,s); }

2、#include main()

{int a=[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j; for (i=0;i<3;i++) for(j=0;j<3;j++)

if (i==j) sum=sum+a[j]; printf(“sum=%d\\n”,sum); }

四、编程题(本大题共4题,每题8分,共32分)

1、编写摄氏温度、华氏温度转换程序。要求:从键盘输入一个摄氏温度,屏幕就显示对应的华氏温度,输出取两位小数。转换公式:F=(C+32)×9/5 。

2、试编程判断输入的正整数是否既是5又是7的正倍数。若是,则输出yes;否则输出no。 3、判断数m是否为素数(只能被1和它本身整除的整数)? 4、对15个数进行排序,按从小到大的顺序输出。

《C语言程序设计》期末考试试卷(A卷)评分标准及标准答案

一、单项选择题(本大题共20题,每题2 分,共40分) 1、 B 2、 D 3、 B 4、 B 5、 C 6、 D 7、 B 8、 B 9、 A 10、D 11、C 12、D 13、D 14、C 15、D 16、C 17、C 18、D 19、C 20、B

二、填空题(本大题共10空,每空2分,共20分) 1、 顺序结构 分支结构 循环结构

2、 单精度型(或:float型) 双精度型(或;double型] 3、 1 4、 * * * * * * * * * * 5、 0 6

6、 按行主顺序存放

三、程序分析题(本大题共2题,每题4分,共8分)

能正确表达出题目的含义、要求,即可得分,部分正确可按比例得分,否则不得分。

12

1、功能:求S=0+2+4+8+16+32+64+128 和。 输出结果:s=254

2、功能:出矩形阵a的主对角线上的元素之和。 输出结果:27

四、编程题(本大题共4题,每题8分,共32分)

能正确表达出题目的含义、要求,且格式正确,即可得满分,不要求形式完全相同。部分正确可按比例得分,否则不得分。 1、 #include main()

{ float c,f;

printf(\?????????????????.2分 scanf(\?????????????????.2分

f= (c+32.0)*9.0/5.0; ?????????????????.2分 printf(\?????????????????.2分 }

2、#include main() {int x;

scanf(\?????????????????.2分 if(x%5==0&&x%7==0) ?????????????????.2分 printf(\?????????????????.2分 else

printf(\?????????????????.2分 }

3、 # include # include main()

{int m,i,k;

scanf(\

k=sqrt(m); ?????????????????.2分

for(i=2;i<=k;i++)?????????????????.2分 {if(m%i==0)

break; ?????????????????.2分 }

if(i>k)

printf(\?????????????????.2分 }

4、 # include main()

{int i,j,a[15],t;

printf(\for(i=0;i<15;i++)

13

scanf(\?????????????????.2分

for(j=0;j<15;j++)?????????????????.2分 for(i=0;i<15-j;i++)?????????????????.2分 if(a>a[i+1])

{t=a;a=a[i+1];a[i+1]=t;} ?????????????????.2分

for(i=0;i<15;i++) printf(\}

14

本文来源:https://www.bwwdw.com/article/73w8.html

Top