C语言2作业3
一、判断题 (8分)
1. 静态局部变量只在本函数内可用。
2分
2. 外部变量是全局变量。
2分
3. 如果函数类型不定义为空类型,即使在return后面没有表达式,而实际上函数也是有一个不确定的返回值的.
2分
4. 在函数体内定义的变量称全局变量,可以被程序中的所有函数引用。 2
分
二、选择题 (10分)
1.以下程序的输出结果是______。 int f( )
{ static int i=0; int s=1; s+=i; i++; return s; }
main()
{ int i,a=0;
for(i=0;i<5;i++) a+=f( ); printf(\\}
[D]
A. 20 B. 24 C. 25 D. 15
2分
2.若有以下程序
#include
{ void f(int n); f(5); }
void f(int n)
{ printf(\
则以下叙述中不正确的是______。
[C]
2分
A. 若只在主函数中对函数f进行说明,则只能在主函数中正确调用函数f
B. 若在主函数前对函数f进行说明,则在主函数和其后的其它函数中都可以正确调用函数f
C. 对于以上函数程序,编译时系统会提示出错信息;提示对f函数重复说明
D. 函数f无返回值,所以可用void将其类型定义为无值型
3.以下程序的输出结果是______。 int x=3; main() { int i;
for(i=1;i incre() { static int x=1; x*=x+1; printf(\} [C] A. 3 3 B. 2 2 C. 2 6 D. 2 5 2分 4.设有以下函数; f(int a) { int b=0; static int c=3; b++;c++; return(a+b+c); } 如果在下面的程序中调用该函数,则输出结果是______。 main() { int a=2, i; for(i=0;i<3;i++) printf(\ } A) B) C) D) 7 7 7 7 8 9 10 7 9 11 13 7 [A] 2分 A. A) B. B) C. C) D. D) 5.若程序中定义了以下函数 double myadd(double a,double b) {return(a+b);} 并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______。 [A] 2分 A. double myadd(double a, b); B. double myadd(double,double); C. double myadd(double b, double a); D. double myadd(double x, double y); 三、程序填空题 (10分) 1. 功能:通过函数的递归调用计算阶乘。#include long f; if(n>1) f=__(1)__; else f=1; return(f); } void main() { int n; long y; scanf(\ y=__(2)__; printf(\} (1)答案 2分 power(n-1)*n (2)答案 2分 power(n) (3)答案 1分 y 5分 2. 功能:利用全局变量计算长方体的体积及三个面的面积。 5分 #include int vs(int a,int b,int c) { int v; v=__(1)__; s1=a*b; s2=__(2)__; s3=a*c; return v; } int main() { int v,l,w,h; printf(\:\ scanf(\ __(4)__; printf(\} (1)答案 2分 a*b*c (2)答案 1分 b*c (3)答案 1分 &l (4)答案 1分 v=vs(l,w,h) 四、程序设计题 (20分) 1. 统计整数中含某数字个数 10分 题目描述 编写函数int ndigit(int n,int k)统计整数n中含数字k的个数。 如:ndigit(38987,8)返回值为2, ndigit(24226,2)返回值为3, ndigit(24226,9)返回值为0。 在主函数中输入整数n和k,调用函数ndigit计算出n中含k的个数,并在主函数输出。如果输入的k值不是一位整整则输出error。 输入描述 输入一个整数和一个0~9的数字 输出描述 输出一个相应的 整数 样例输入 输入样例1: 345464 4 输入样例2: 0 0 输入样例3: 4565 -6 样例输出 输出样例1: 3 输出样例2: 1 输出样例3: error 【参考答案】 #include int ndigit(int n,int k) { int c=0; do { // 若用while语句,则在前面要加if(n==0&&k==0) return 1; if (n==k) c++; n/=10; }while(n!=0); return c; } void main() { int n,k; scanf(\ if(k>9||k<0) printf(\