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

printf(\

a=a+b;

b=a+b;

}

printf(\

}

输出结果为:

12358132134

Press any key to continue

四、写出下列每个函数的功能

1. #include int SA(int a,int b){ if(a>b)return 1;

else if(a==b)return 0;

else return -1;

}

函数功能为:

根据实参 a 大于、等于或小于实参 b,返回 1,0 或 -1

2. #include

int SC(int a,int b,int c){

if(a>=b && a>=c)return a;

if(b>=a && b>=c)return b;

return c; }

函数功能为:

返回实参 a、 b、c 中的最大数

3.double SF(double x,int n){ //n 为大于等于 0 的整数

double p=1,s=1;

for(i=1;i<=n;i++){

p*=x;

s+=p/(i+1);

}

return s; }

函数功能为:

计算 x+x2/2+x3/3+ ??+xn/(n+1) 的值

4. #include

int SC(int x){

int a=(int)sqrt(x);

int i=2;

while(i<=a){

if(x%i==0)break;

i++;

}

if(i<=0)return 0;else return 1; }

函数功能为:

判断一个整数是否是素数

5. #include void trans(int x) {

char a[10];

int i=0,rem;

do{

rem=x;

x=x/16;

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

v+=a[i][j];

return v/(m*n);

} 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,则不正确的语句为( D )。

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 命令包含该函数的原型语句所在

__头 ___文件。

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\

}

return x;

}

void main(){ int x=20,y=8;

printf(\

printf(\

printf(\

}

输出结果为:

12.00 160.00 2.50

Press any key to continue

3. #include

void WF(int x,int y){

x=x+y; y=x+y; printf(\ }

void main(){ int x=18,y=23;

printf(\

WF(x,y); x=2*x;

printf(\

}

输出结果为:

main:x,y=18,23

subs:x,y=41,64

main:x,y=36,23

Press any key to continue

4. #include

#include

void fun(char ss[]);

void main(){

char s[15]=\

fun(s);

printf(\ }

void fun(char ss[]){

int i,n=strlen(ss); for(i=0;i

char c=ss[i];

ss[i]=ss[n-1-i];

ss[n-1-i]=c;

}

}

输出结果为:

432198765

Press any key to continue

5. #include

void InsertSort(int a[],int n) {

int i,j,x;

for(i=1;i

x=a[i];

for(j=i-1;j>=0;j--)// 为 x 顺序向前寻找合适的插入位置

if(x>a[j])a[j+1]=a[j];

else break;

a[j+1]=x; } }

void main() {

int i;

int a[6]={20,15,32,47,36,28};

InsertSort(a,6);

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

printf(\ }

输出结果为:

47 36 32 28 20 15

Press any key to continue

6. #include

void main(){

int a[8]={3,5,7,9,11,13,15,17};

int i,*p=a;

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

printf(\

if( (i+1)%4==0 )printf(\

} }

输出结果为: 3 5 7 9

11 13 15 17