2017年电大电大C语言程序设计形成性考核册答案(-) 下载本文

if(rem<10)a[i]=48+rem;//'0'字符的ASCII码为48 else a[i]=65+rem; //'A'字符的ASCII码为55 i++; }while(x!=0);

while(i>0)printf(\ printf(\}

函数功能为:

将一个整数化成十六进制数

五、根据下列每个题目要求编写程序

1.编写一个函数,函数头格式为“void fun4(char *a , int b[])”,分别求出由字符指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组b的相应元素。 #include

void fun4(char* a,int b[]){ do{

if(*a>='0' && *a<='9')b[*a-48]++; }while(*a++); }

2. 编写一个函数,函数头格式为“double Mean(double a[M][N] , int m , int n)”,要求返回二维数组a[m][n]中所有元素的平均值,假定在计算过程是采用变量v存放平均值。 #include const int M=2,N=3;

double Mean(double a[M][N], int m,int n ){ double v=0;

for(int i=0;i

for(int j=0;j

3. 编写一个递归函数“int FF(int a[] , int n)”,求出数组a中所有元素n个元素之积并返回。 #include int FF(int a[] , int n){ int mul=1;

if(n==1)mul*=a[0];

else mul=a[n-1]*FF(a,n-1); return mul; }

4. 编写一个主函数,利用while循环,求出并显示满足不等式1+1/2+1/3+??+1/n>5的最小n值。 #include

void main() {

double sum=0; int n=1; while(true) {

if(sum + 1/(double)n > 5)break; else

sum += 1/(double)n; n++; }

printf(\}

5. 编写一个主函数,求满足不等式22+42+??+n2<1000的最大n值,假定分别用i和s为取偶数值和累加值的变量,并限定使用do循环编程。 #include void main() {

int s=0,i=2; do {

s+=i*i;

if(s+(i+2)*(i+2)>=1000)break; else i+=2; }while(true);

printf(\}

6. 编写一个主函数,计算并输出n 的值,其中n值由键盘输入。 #include void main() {

int s=0,n;

printf(\请输入n的值:\ scanf(\ for(int i=1;i<=n;i++) s+=i*i; printf(\}

C语言程序设计形成性考核册参考答案作业三

一、 选择题

1. 在下面的(C)函数声明语句存在语法错误。

A.AA(int a,int b); B.AA(int ,int) C.AA(int a;int b) D.AA(int a,int) 2.在下面的(C)不能作为函数的返回类型。

A.void B.int C.new D.long 3.下面正确的函数原型语句是(B)。

A.int Function(void a); B.void Function(int); C.int Function(a); D.void int(double a);

4.函数调用func(exp1,exp2),exp3*exp4-exp5)中所含实参的个数为(B)个。 A.1 B.2 C.4 D.5 5.下面的标识符中,(C)是文件级作用域。

A.函数形参 B.语句标号 C.外部静态类标识符 D.自动类标识符 6.下面的标识符中,(B)具有全局级作用域。

A.函数形参 B.全局变量 C.内部静态类标识符 D.自动变量符

7.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大( C )字节。 A.1 B.2 C.4 D.8

8.假定a为一个字符数组名,则a[8]的地址比该数组的首地址大( B )个字节。 A.4 B.8 C.16 D.32 9.假定a为一个数组名,则下面的( B )表示有错误。

A.a[i] B.*a++ C.*a D.*(a+1)

10.用calloc函数创建具有10个整型元素的一维数组的正确语句是( C )。 A.int *p=calloc(10,2); B.int *p=callo(10; C.int *p=calloc(10,4); D.int *p=malloc(10); 11.假定变量m定义为“int m=7;”,则定义p的正确语句为( B )。

A.int p=&m; B.int *p=&m; C.int &p=*m; D.int *p=m; 12.假定k是一个double类型的变量,则定义指向k的变量p的正确语句为( B )。 A.double p=&k; B.double *p=&k; C.double &p=*k; D.char *p=”Thank you!”;

13.假定一条定义语句为“int a[10],x,*pa=a;”,若要把数组a中下标为3的元素赋值给x,则不正确的语句为(A.x=pa[3]; B.x=*(a+3); C.a=a[3]; D.x=*pa+3;

14.假定有定义“int b[10];int *pb;”,则不正确的赋值语句为( C )。 A.pb=b; B.pb=&b[0]; C.pb=b+2; D.pb=b[5];

15.假定指针变量p定义为“int *p=new int(100);”,要释放p所指向的动态内存,应使用语句( D )。 A.delete[p]; B.delete *p; C.delete &p; D.delete []p;

16.假定指针变量p定义为“int *p=calloc(30,sizeof(int));”,要释放p所指向的动态内存,应使用语句( D )。 A.delete[p]; B.deldete(p); C.free[]p; D.free(p);

二、填空题

1.在C语言中,一个函数由函数头和___函数体_______组成。

2.在函数外定义的变量称为全局变量,若没有被初始化则系统隐含对它所赋的初值为___0______。

3.如果一个函数只允许同一程序文件中的函数调用,则应在访函数定义前加上的C保留字为为___static______。 4.如果一个函数直接或间接地调用自身,这样的调用被称为__递归_____调用。 5.调用系统函数时,要先使用#include命令包含该函数的原型语句所在__头___文件。

)。 D

6.函数形参的作用域是该函数的__内部___。

7.假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为__25______。 8.假定p所指对象的值为25,p+1所指对象的值为46,则*++p的值为__46______。

9.假定p所指对象的值为25,p+1所指对象的值为46,则执行“*(p++);”语句后,p所指对象的值为__46______。 10.假定a是一个指针数组,则a+1所指对象的地址比a地址大__4___字节。

11.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为___(char*)p______。 12.假定一个数据对象为int*类型,则指向该对象的指针类型为__int**______。 13.假定p是一个指向整数对象的指针,则用___&p___表示指针变量p的地址。 14.若p指向x,则___*p___与x的等价的。

15.NULL是一个符号常量,通常作为空指针值,它值为__ ’\\0’ (ASCII码0)___。

三、写出下列每个程序运行后的输出结果 1. #include void SB(char ch){ switch (ch){ case 'A':case 'a':

printf(\ case 'B':case 'b': printf(\ case 'C':case 'c': printf(\ default:printf(\ } }

void main(){

char a1='b',a2='C',a3='f';

SB(a1);SB(a2); SB(a3);SB('A'); printf(\}

输出结果为: GGPPBBWW

Press any key to continue

2. #include #include

double SD(int a,int b,char op){ double x; switch(op){ case '+':x=a+b;break; case '-':x=a-b;break; case '*':x=a*b;break; case '/':if(b)x=(double)a/b; else exit(1); break;

default:{(\运算符错!\\n\