热门搜索 :
考研考公
您的当前位置:首页正文

C语言程序设计形成性作业3-4

来源:伴沃教育


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

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

A.pb=b; B.pb=&b[0]; C.pb=b+2; D.pb=b[5];

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

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*i _字节。

11.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为_(char*)p _。

12.假定一个数据对象为int*类型,则指向该对象的指针类型为_ int**_。

13.假定p是一个指向整数对象的指针,则用_&p _表示指针变量p的地址。

14.若p指向x,则_*p _与x的等价的。

15.NULL是一个符号常量,通常作为空指针值,它值为_0_。

三、写出下列每个程序运行后的输出结果

1. #include

void SB(char ch){

switch (ch){

case 'A':case 'a':

printf(\"WW\");break;

case 'B':case 'b':

printf(\"GG\");break;

case 'C':case 'c':

printf(\"PP\");break;

default:printf(\"BB\");break;

}

}

void main(){

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

SB(a1);SB(a2); SB(a3);SB('A');

printf(\"\\n\");

}

GG PP BB WW

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\");exit(1);}

}

return x;

}

void main(){

int x=20,y=8;

printf(\"%3.2lf \

printf(\"%3.2lf \

printf(\"%3.2lf \

}

12.00 160.00 3.50

3. #include

void WF(int x,int y){

x=x+y;

y=x+y;

printf(\"subs:x,y=%d,%d\\n\

}

void main(){

int x=18,y=23;

printf(\"main:x,y=%d,%d\\n\

WF(x,y);

x=2*x;

printf(\"main:x,y=%d,%d\\n\

}

main: x,y=18, 23

subs: x,y=41, 64

main: x,y=36, 23

4. #include

#include

void fun(char ss[]);

void main(){

char s[15]=\"567891234\";

fun(s);

printf(\"%s\\n\

}

void fun(char ss[]){

int i,n=strlen(ss);

for(i=0;ichar c=ss[i];

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

ss[n-1-i]=c;

}

}

432198765

5. #include

void InsertSort(int a[],int n)

{

int i,j,x;

for(i=1;ix=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(\"%d \

printf(\"\\n\");

}

47 36 32 28 20 15

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(\"%5d \

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

}

}

3 5 7 9

11 13 15 17

7. #include

int LA(int *a,int n){

int i,s=0;

for(i=0;is+=a[i];

return s;

}

void main(){

int a[]={5,10,15,20,25,30};

int b=LA(a,4);

int c=LA(a+2,3);

printf(\"%d %d\\n\

}

50 60

8. #include

int LB(int *a,int n){

int i,s=1;

for(i=0;ireturn s;

}

void main(){

int a[]={1,2,3,4,2,4,5,2};

int b=LB(a,4)+LB(&a[3],4);

printf(\"b=%d\\n\

}

b=184

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

1. #include

int WB(int a[],int n,int x){

for(int i=0;iif(a[i]==x)return 1;

return 0;

}

从数组a中顺序查找值为x的元素,若查找成功则返回1,否则返回0。

2. #include

int WC(int a[],int n,int k){

int c=0;for(int i=0;iif(a[i]>=k)c++;

return c;

}

统计出数组a中大于等于值为k的元素个数并返回。

3. #include

#include

#include

const int N=10;

int ff(int x,int y){

int z;

printf(\"%d + %d = \

scanf(\"%d\

if(x+y==z)return 1;else return 0;

}

void main()

{

int i,a,b,c=0;

srand(time(0)); for(i=0;ia=rand()%20+1; b=rand()%20+1;

c+=ff(a,b);

}

//初始化随机数系列

//rand90函数产生0-32767之间的一个随机数

printf(\"得分:%d\\n\

}

让计算机产生出10道操作数为20以内随机整数的加法题供用户计算,每道题10分,计算完成后打印出得分。

4. int fun6(int m,int n,int b=2)

{

if(melse if(m%b==0 && n%b==0)return b*fun6(m/b,n/b,b);

else return fun6(m,n,++b);

}

一个递归函数过程,求出两个自然数m和n的最小公倍数。

5. #include

#include

void LI(int n){

int * a=(int *)malloc(n*sizeof(int));

int i;

for(i=0;ifor(i=n-1;i>=0;i--)printf(\"%d \

printf(\"\\n\");

free(a);

}

把从键盘上输入的n个整数按与输入的相反次序显示出来。

6. #include

int LK(double a[],int n){

double s=0;int i,m=0;

for(i=0;is/=n;

for(i=0;i=s)m++;

return m;

求出并返回数组a的n个元素中大于等于平均值的元素个数。

答案为隐藏文字 一、 选择题

2. 假定有“struct BOOK{char title[40];float price;};struct BOOK *book;”,则不正确的语句为(A)。

A.struct BOOK *x=malloc(book); B.struct BOOK x={“C++ Programming”,27.0}; C.struct BOOK *x=malloc(sizeof(BOOK)); D.struct BOOK **x=&book;

3. 假定有“struct BOOK{char title[40];float price;} book;”,则正确的语句为(B)。

A.struct BOOK x=&book; B.struct BOOK *x=&book;

C.struct BOOK x=calloc(BOOK); D.struct BOOK *x=BOOK;

3.表示文件结束的符号常量为(C)。

A.eof B.Eof C.EOF D.feof

4.C语言中系统函数fopen()是(D)一个数据文件的函数。

A.读取 B.写入 C.关闭 D.打开

5.从一个数据文件中读入以换行符结束的一行字符串的函数为(B)。

A.gets() B.fgets() C.getc() D.fgetc()

6.向一个二进制文件写入信息的函数fwrite()带有(D)参数。

A.1 B.2 C.3 D.4

二、填空题

1.假定一个结构类型的定义为“struct A{int a,b;A*c;};”,则该类型的大小为___12_______字节。

2.假定一个结构类型的定义为“struct B{int a[5],char *b;};”,则该类型的大小为___24_______字节。

3.假定一个结构类型的定义为“struct D{int a;union{int b;double c;};struct D* d[2];};”,则该类型的大小为___20_______字节。

4.假定要动态分配一个类型为struct Worker的具有n个元素的数组,并由r指向这个动态数组,则使用语句的表达式为r=__(Worker*)malloc(n*sizeof(Worker));_____。

struct

Worker*

5.假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为__x.(*a)___。

6.假定要访问一个结构指针p所指向对象中的b指针成员所指的对象,则表示方法为_____ *(p->b)___

7.与结构成员访问表达式(*fp).score等价的表达式是__fp->score______。

三、写出下列每个程序运行后的输出结果

1. #include

struct Worker{

char name[15]; //姓名

int age; //年龄

float pay; //工资

};

void main(){

struct Worker x={\"wanghua\

struct Worker y,*p;

y=x;p=&x;

printf(\"%s %d %6.2f\\n\

printf(\"%s %d %6.2f\\n\

}

输出结果为:

wanghua 52 23.50

wanghua 52 23.50

Press any key to continue

2. #include

#include

struct Worker{

char name[15]; //姓名

int age; //年龄

float pay; //工资

};

void main(){

struct Worker x;

char *t=\"louting\";

int d=38;float f=493;

strcpy(x.name,t);

x.age=d;x.pay=f;

x.age++;x.pay*=2;

printf(\"%s %d %6.2f\\n\

}

输出结果为:

louting 39 986.00

Press any key to continue

3. #include

#include

struct Worker{

char name[15]; //姓名

int age; //年龄

float pay; //工资

};

int Less(struct Worker r1,struct Worker r2){

if(r1.ageelse return 0;

}

void main(){

struct Worker a[4]={{\"abc\

struct Worker x=a[0];

int i;

for(i=1;i<4;i++)

if(Less(x,a[i]))x=a[i];

printf(\"%s %d %6.2f\\n\

}

输出结果为:

def 58 638.00

Press any key to continue

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

1.

void QA(struct Worker a[],int n){

int i;

for(i=0;iscanf(\"%s %d %f\

}

假定结构struct Worker的定义如下:

#include

#include

#include

struct Worker{

char name[15]; //姓名

int age; //年龄

float pay; //工资

};

函数功能为:

输入struct Worker 类型的对象a[n]的各个元素的值

2. struct StrNode *QB(int n){

StrNode * f,*p;

if(n==0)return NULL;

f=(StrNode*)malloc(sizeof(struct StrNode));

scanf(\"%s\

p=f;

while(--n){

p=p->next=(StrNode*)malloc(sizeof(struct StrNode));

scanf(\"%s\

}

p->next=NULL;

return f;

}

假定结构struct StrNode的定义如下:

struct StrNode{

char name[5];

struct StrNode *next;

};

函数功能为:

建立一个具有n个结点,每个结点的类型是StrNode的链表

3. struct IntNode* FindMax(struct IntNode *f)

{

struct IntNode *p=f;

if(!f)return NULL;

f=f->next;

while(f){

if(f->data < p->data)p=f;

f=f->next;

}

return p;

}

假定结构struct StrNode的定义如下:

struct IntNode{

int data;

struct IntNode * next;

};

函数功能为:

在一个具有n个结点,每个结点的类型是IntNode的链表中寻找data值最大的结点

4. int Count(struct IntNode *f)

{

int c=0;while(f){

c++;

f=f->next;

}

return c;

}

假定结构struct StrNode的定义如下:

struct IntNode{

int data;

struct IntNode * next;

};

函数功能为:

计算一个具有n个结点,每个结点的类型是IntNode的链表的结点数

5. struct IntNode* Input(int n)

{

struct IntNode *f,*p;

f=(IntNode*)malloc(sizeof(struct IntNode));

if(n==0)return NULL;

f->next=NULL;

printf(\"从键盘输入 %d 个整数:\

while(n--){

scanf(\"%d\

p=f;

f=(IntNode*)malloc(sizeof(struct IntNode));

f->next=p;

}

return f->next;

}

假定结构struct StrNode的定义如下:

struct IntNode{

int data;

struct IntNode * next;

};

函数功能为:

在类型为IntNode的链表后输入n个结点的数据

6. #include

#include

#include

void JA(char* fname)

{

FILE* fout=fopen(fname,\"w\");

char a[20];

printf(\"\");

while(1){

scanf(\"%s\

if(strcmp(a,\"end\")==0)break;

fputs(a,fout);

fputc('\\n',fout);

}

fclose(fout);

}

void main()

{

char *p=\"d:\\\\xxk\\\\xuxk1.txt\";

JA(p);

}

函数功能为:

在已经存在的d:\\xxk文件夹下(如不存在此文件夹程序运行会出错)打开xuxk1.txt文件,并向其中输入一系列长度小于20的字符串,直到输入字符串end结束。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top