4. 程序改错
(1) 以下程序是显示[200,300]所有能被 7 整除的数,每行显示 5 个数,此程序有 5处错。 main() {
int i,n=0; /*n用来记录每行已打印数的个数*/ while(i<300) //while((i <= 300)&&(i >= 200)) { //i++;
if(i%7==0) //if(i%7!=0) break; //continue; printf(\ n=n+1;
if(n=5)/*满5个换行*/ //if(n == 5) {
printf(\ n=0; } } }
(2) 以下程序是求 1!+2!+3!+4!+5!+6!+7!的值,其中有 3 处错误。
main() {
int i,s,t=0; //long s = 0,t = 1; //int i; for(i=1;i<=7;i++) {
s=0; //去掉该语句 t=t*i; s=s+t; }
printf(\“sum=%ld”,s); }
第6章 函数习题 1. 单项选择题
(1)C 语言总是从 A 函数开始执行。
A. main B. 处于最前的 C.处于最后的 D. 随机选一个 (2)函数在定义时,省略函数类型说明符,则该函数值的类型为 A 。 A. int B. float C. long D. double (2)以下 B 函数,真正地没有返回值。
A. int a(){int a=2;return (a);} B. void b(){printf(\C. int a(){int a=2;return a;} D. 以上都是 (3)在 C 语言中,有关函数的说法,以下正确的是 C 。
A. 函数可嵌套定义,也可嵌套调用 B. 函数可嵌套定义,但不可嵌套调用
9
C. 函数不可嵌套定义,但可嵌套调用 D. 函数不可嵌套定义,也不可嵌套调用 (4)以下函数调用语句中,含有实参的个数为 B 。 fun((2,3),(4,5+6,7));
A. 1 B. 2 C. 5 D. 6 (5)函数调用可以在 D 。
A. 函数表达式中 B. 函数语句中 C. 函数参数中 D. 以上都是 (6)被调函数返回给主调函数的值称为 C 。
A. 形参 B. 实参 C. 返回值 D. 参数 (7) D ,可以不进行函数类型说明。
A. 被调函数的返回值是整型或字符型时 B. 被调函数的定义在主调函数定义之前时 C. 在所有函数定义前,已在函数外预先说明了被调函数类型 D. 以上都是 (8)被调函数通过 D 语句,将值返回给主调函数。 A. if B. for C. while D. return (9)被调函数调用结束后,返回到 B 。 A.主调函数中该被调函数调用语句处 B.主函数中该被调函数调用语句处
C.主调函数中该被调函数调用语句的前一语句 D.主调函数中该被调函数调用语句的后一语句
(10)以下对 C语言函数的有关描述中,正确的是 A 。
A. 在 C 中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可递归调用 C. 函数必须有返回值,否则不能使用函数
D. C程序中有调用关系的所有函数必须放在同一个源程序文件中 (11)C 语言中函数的隐含存储类型是 A 。
A. auto B. static C. extern D. 无存储类型
(12)能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是 A 。 A. return 这两个数 B. 形参用两个元素的数组 C. 形参用两个这种数据类型的指针 D. 用两个全局变量
2. 填空题
(1) 变量的作用域主要取决于变量 定义的位子 ,变量的生存期既取决于变量 存储类型 ,又取决于变量 存储方式 。 (2) 说明变量时,若省略存储类型符,系统默认其为 整形 存储类别,该存储类别的类型符为: int 。 (3) 静态型局部变量的作用域是 静态局部变量定义的复合语句或函数体内 ,生存期是 整个程序运行期内 。
(4) 函数中的形参和调用时的实参都是数组名时,传递方式为 地址传递 ,都是变量时,传递方式为 值传递 。
(5) 函数的形式参数的作用域为 整个函数体内 ,全局的外部变量和函数体内定义的局部变量重名时, 函数体内定义的局部 变量优先。
(6) 若自定义函数要求返回一个值,则应在该函数体中有一条 return 语句,若自定义函数要求不返回一个值,则应在该函数说明时加一个类型说明符 void 。
(7) 若函数的形式参数是指针类型,则实参可以是 数组名 、 地址 或 指针变量 。 (8) 函数的参数为 char *类型时,形参与实参结合的传递方式为 地址传递 。 (9) 函数的实参为常量时,形参与实参结合的传递方式为 值传递 。 (10) 对数组按值从大到小的顺序排序后输出,请填空。 #include
10
void main() {
float a[7]={2,6,3,8,3,12,9}; int i ;
void sort(float*,int); sort(a,7) ;
for(i=0;i<7;i++) printf(\ printf(\}
void sort( float *p, int n ) {
int i,j,k; float t; for(i=0;i k=i; for(j=i+1;j if( p[k] { t=*(p+i); *(p+i)=*(p+k); *(p+k)=t; } } } (11) 下列函数在 n 个元素的一维数组中,找出最大值、最小值并传送到调用函数,请填空。 #include void find(float *p, float *max, float *min, int n) { int k; float t; *max=*p; *min = *p; for(k=1;k t=*(p+k); if( t>*max ) *max=t; if(t<*min) *min=t; } } 3. 写出下列程序运行结果: (1) if(a>b) main() f=1; { else if(a==b) int i=1,p; f=0; p=fun(i,i+1); else printf(\ f=-1; } return f; int fun(int a,int b) } { int f; 输出:-1 11 (2)键盘输入 abcdef #include (4) #include func(int a , int b) { c=a*b ; a=b-1 ; b++ ; return (a+b+1) ; } char c ; void main( ) if((c=getchar( ))!='\\n') { fun( ) ; int b=2 , p=0 ; c=1 ; putchar(c); p=func(b , a) ; } printf(\void main( ) } { fun( ); } 输出:4,2,8,9 输出:fedcba (5) (3) unsigned fun6(unsigned num) #include #define C 5 unsigned k=1; int x=1,y=C; do { k*=num; num/=10; } void main( ) while(num); { return k; int x; } x=y++; printf(\void main( ) if(x>4) { { int x ; x=++y; printf(\ unsigned n=26; x+=y--; printf(\ printf(\} } 输出:12 输出:5 6 7 7 12 6 第7章 数组习题 1. 单项选择题 (1) int a[4]={5,3,8,9};其中 a[3]的值为( D )。 A. 5 B. 3 C. 8 D. 9 (2) 以下 4 个字符串函数中,( A )所在的头文件与其他 3 个不同。 A. gets B. strcpy C. strlen D. strcmp (3) 以下 4 个数组定义中,( D )是错误的。 A. int a[7]; B. #define N 5 long b[N]; C. char c[5]; D. int n,d[n]; (4) 对字符数组进行初始化,( B )形式是错误。 A. char c1[ ]={'1', '2', '3'}; B. char c2[ ]=123; C. char c3[ ]={ '1', '2', '3', '\\0'}; D. char c4[ ]=\(5) 在数组中,数组名表示( A )。 A. 数组第 1 个元素的首地址 B.数组第 2 个元素的首地址 C. 数组所有元素的首地址 D.数组最后 1 个元素的首地址 12
相关推荐: