《2022年武汉大学-年上学期学分《C语言程序设计》期末试卷 .pdf》由会员分享,可在线阅读,更多相关《2022年武汉大学-年上学期学分《C语言程序设计》期末试卷 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、选择题(每小题2 分,共 34 分)1. 以下不合法的用户标识符是_C_。A、j2_KEY B、Double C、4d D、_8_ 复习要点:标识符的定义:首字符必须是字母或下划线;后续字符可以是字母、数字或下画线。C、4d 中用了 4做首字符,所以不合法2以下叙述中正确的是_A_。A、C程序中注释部分可以出现在程序中任意合适的地方B、花括号“ ”和“ ”只能作为函数体的定界符C、构成 C 程序的基本单位是函数,所有函数名都可以由用户命名(库函数)D、分号是C 语言之间的分隔符,不是语句的一部分复习要点:A、C程序中注释部分可以出现在程序中任意合适的地方。对,注释由/* */ 包含B、花括
2、号“ ”和“ ”只能作为函数体的定界符,不对。还可以用做复合语句的定界符,也可以做结构体的定界符C、构成 C程序的基本单位是函数,所有函数名都可以由用户命名(库函数),不对。库函数声明和主函数声明已经给定,只可以调用D、分号是C语言之间的分隔符,不是语句的一部分,不对。分号是语句的结束,是语句的组成部分3设 int a=12,则执行完语句a+=a-=a*a 后, a 的值是 _D_。A、0 B、 264 C、144 D、-264 原因:赋值运算赋” =” 和符合赋值运算赋都是右结合性,所以,先执行 a=12 然后执行a-=a*a,即 a=a-a*a, a 的值为 -132。最后执行a+=a,即
3、 a=a+a. 4假定 x 和 y 为 double 型,表达式x=2,y=x+3/2 的值是 _D_。A、3.500000 B、3 C、2.000000 D、3.000000 复习要点:各种类型数据运算后的数据类型在算术运算时,数据运算时的类型按照数据类型自动转换的原则进行。就这道体来说,3/2 是整数和整数相除,计算结果还是整数,且没有4 舍 5 入的概念。所以3/2 的结果为1。则 x+1 是 double 类型和 int 类型的和,结果的类型应该为double 类型。即2.0+1 的最后结果3.000000 5语句 :printf(%d,(a=2)&(b=-2);的输出结果是 _B_。
4、A、2 B、1 C、-4 D、-2 复习要点:逻辑运算符”&”是”与”运算,即只有两个操作数为真,结果才为真。在判断两个操作a 和 b 数的值时,都是非0,即 a 和 b 为真。运算结果为真用1 表示,故 B 对,6若变量c 为 char 类型,能正确判断出c 为小写字母的表达式是_D_。A、 a =c= a )|(c= z ) C、( a =c) D、(c= a )&(c= z ) 原因:A)错,不可能用两个运算符“=”表达一个数值的范围,学名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
5、- 第 1 页,共 7 页 - - - - - - - - - 生常常犯这个错误B)错,逻辑运算符” | ”是”或”运算, 即只要有一个操作数为真,结果为真,这里显然要两个操作数都为真,所以不可以用C)错, and 不是一个C语言运算符复习要点:逻辑运算符”&”是”与”运算,即只有两个操作数为真,结果才为真。7在嵌套使用if 语句时, C语言规定else 总是 _C_。A、和之前与其具有相同缩进位置的if 配对B、和之前与其最近的if 配对C、和之前与其最近的且不带else 的 if 配对D、和之前的第一个if 配对这道题出得不太好,正确回答应该是:在语法允许的情况下,和之前与其最近的且不带e
6、lse的 if 配对。例如: if(a) if(b a=1; else b=2; 这里 else 只能和 if(a) 配对。不可以和if(b,因为在语法上, if(b a=1; 是一条复合语句,语法上不可能和复合语句外的语句配对8以下循环体的执行次数是_C_。main() inti,j; for (i=0,j=1; i=j+1;i+=2,j-) printf(%d n,i); A、3 B、2 C、1 D、0 原因:循环控制表达式i=j+1 为假时,循环结束第一次判断: i=0, j=1:i=j+1 为真。执行1 次第二次判断: i=2, j=0:i=j+1 为假,退出9int a23=1,2,
7、3;, 则 a01 的值是 _D_。A1 B. 2 C. 3 D. 0 复习要点:数组的初始化,给部分数组元素赋值时,没有赋值的数组元素的值为0 10. 以下对二维数组a的正确说明是_B_。A. inta5; B. float a54; C. double a4; D. float a(5)(4); 复习要点:数组的定义:元素个数国定,类型相同的元素集合。即数组定义时,下标运算符中必须时整型常量表达式。所以: A 和 B 显然错,下标运算符中无值且没有初始化D. 错,下标运算符不可以用() 11有以下程序main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
8、 - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - inti,t3=9,8,7,6,5,4,3,2,1; for(i=0;i=0b=0)&(a0 b=0&b=0)&(a0&b0)&(a+b0 原因: A、错(a=0b=0)表示 a 和 b 不一定同时为正。(a0b0) 表示 a 和 b 二、填空题(每小题2 分,共 16 分)1表示条件 :10 x100 或 x0 的 C语言表达式是_(10 x&x100)| (x0)_ 。2. 若函数调用语句为f(a, b, f(a+b,a-b,b);, 则函数 f 的参
9、数个数是_3_。分别为 a, b 和 f(a+b,a-b,b)。第三个参数是一个函数调用3若有以下整型的a 数组: int a10=9,4,12,8,2,10,7,5,1,3; 则: aa9 的值为 _8_; aa4+a8 的值为 _8_。计算过程:a9 的值3 aa9 即为a3. 其值为 8 a4+a8 为 21 aa4+a8 即为a3,其值为 8 4若有以下程序段:int a5=2,4,6,8,10, *p, k, m; p = &a2; k = *(p-); m = *(p-); 则程序段执行完后k 的值为 _6_; m 的值为 _4_。计算过程:p = &a2; p 指向a2 k =
10、*(p-); p是后缀减。先把a2的值 6 赋给 k, 然后 p-,指向a1 m = *(p-); 这时,先把a1的值 4 赋给 m 5下面程序的功能是输出以下形式的金字塔图案是:* * * * 在下划线处填入的正确的表达式。main() inti,j; for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf( ); for(j=1;j=_2*i-1_;j+) printf(*); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页
11、,共 7 页 - - - - - - - - - * 的个数是随行变量i 每次增加2,填 2*i-1 6以下程序的功能是计算:1+12+123+1234+12345。请填空。Main() int t= 0,s=0,I; for (I=1;I=5;I+) t=I + _t*10_ ; s=s+t; printf(“ s=%dn” ,s); 当前项 t 得值为已经得到前一项值乘10 再加循环变量I 值 , t=t*10+I 7.下面的程序用指针变量输出数值,其中两条语句有语法错误,请在空格处填上正确语句。#include void main() int a =1,2,3,4,5,6,7,8,9,1
12、0,*p; *p=a; /* 语句错误 */ _p=a_ printf(%fn,*p+9); /* 语句错误 */ _ printf(%dn,*p+9); _ printf(%fn,*p+9); 改为 printf(%dn,*p+9); 格式符 d 用于输出整数8下面的程序采用辗转相除法与函数求两个整数的最大公约数,其中两条语句有语法或算法错误,请在空格处填上正确语句。#include void main() intgcd(int a, int b); inta,b,abd; printf(intput data a b:n); scanf(%d,%d,a,b); /* 语句错误 */ _ s
13、canf(%d,%d,&a,&b); _ abd=gcd(a,b); printf(abd=%dn,abd); intgcd(intx,int y) int t; if(xy) t=x;x=y;y=t; while(y!=0) t=x%y;x=y;x=t; /* 语句错误 */ _y=t_ return x; 三、程序分析题(每题5 分,共 25 分)1.写出下面程序的运行结果。#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - -
14、- - - - int a=10, b=20; a+=b; b=a-b; a-=b; printf(a=%d,b=%dn,a,b); 2. 写出下面程序的运行结果。#include main() inti; for(i=1;i7;i+) if(i%2) printf(*); else continue; printf(#); printf($n); 3. 写出下面程序的运行结果。main( ) int a33=1,2,3,4,5,6,7,8,9; int x=0,y=0; for(i=0;i3;i+) for(j=0;j3;j+) if(i=j) x +=aij; for(i=0;i=0;j-
15、) if(i+j=2) y +=aij; printf(x=%d,y=%dn,x,y); 4. 写出下面程序的运行结果。#include int a=100; fun() staticint a =20; a+; printf(%dn,a); void main() inti; for(i=1;i=3;i+) a+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - printf(%d,a); fun(); 5. 写出下面程序的运
16、行结果。main() int a=1,2,3,4,5,6,7,8,9,10,*p; p=a; *(p+3)+=2; printf(%d,%dn,*p,*(p+3); p+=3; printf(%d,%dn,*p,*(p+3); 四、程序设计(共25 分)1、编写函数fun( int m)求 1000 以内所有m 的倍数之和,m 为一个正整数;并编写main函数调用该函数。 (12 分) 。2、编写一个输出20 行以内的杨辉三角形函数,yanghui(int n), 其中 n 为需要输出杨晖三角形的行数,并编写main 函数调用该函数。注:main 函数首先输入需要输出杨辉三角形的行数,并判断所输入的行数是否小于20。 (13 分) 。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 ,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -