东师C程序设计19春在线作业21答案

有以下程序

#include <stdio.h>

#include <stdlib.h>

int fun(int n)

{ int *p;

p=(int*)malloc(sizeof(int));

*p=n; return *p;

}

main()

{ int a;

a = fun(10); printf("%d\n",a+fun(10));

}

程序的运行结果是

A)0

B)10

C)20

D) 出错


正确答案:C


以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是

A.main( ) { int *p; fun(p); ┆ } int fun(int *p) { int s; p=&s;}

B.main( ) { int *p; fun(&p); ┆ } int fun(int **p) { int s; *p=&s;}

C.#include<stdlib.h> main( ) { int *p; fun(&p); ┆ } int fun(int **p) { *p=(int*)malloc(2);}

D.#include<stdlib.h> main( ) { int *p; fun(p); ┆ } int fun(int *p) { p=(int*)malloc(sizeof(int));}


正确答案:D


若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是

A.p=2*(int*)malloc(sizeof(int));

B.p=(int*)mall0c(2*sizeof(int));

C.p=(int*)malloc(2*2);

D.p=(int*)calloc(2,sizeof(int));


正确答案:A
解析:本题考核的知识点是manoc()函数的应用。该函数的调用格式是“malloc(n)”,作用是申请n个字符的存储单元并把该存储区的首地址作为返回值,实际调用的时候可在前面加上“(类型说明符*)”,以转换成需要的类型的地址。选项D多了一个参数,不符合malloc()函数的调用格式;整型变量在有的计算机系统里占4个字节,并不一定在所有的计算机系统里都是两个字节,所以选项C不正确;选项A中是申请一个整型的存储空间并把该存储空间的首地址乘以2,这样的做法是不正确的,其存储空间为没乘以2之前的存储空间的2倍的连续存储空间的地址,选项A不正确。所以,4个选项中B为所选。


若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元 int *p p=______malloc(sizeof(int)); 则应填入______。

A.int

B.int*

C.(*int)

D.(int*)


正确答案:D
解析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。


以下程序段中,能够通过调用函数fun(),使main()函数中的指针变量p指向一个合法的整型单元的是( )。

A.main() {int*p; fun(p); … } int fun(int*p) {int s; p=&s; }

B.main {int*p fun(&p); … } iht fun(int**p) {int s; *p=&s;}

C.main() {int*p; fun(&p); } int fun(int**p) {*p=(int*)malloc(2);}

D.main() {int*p; fun(p); } int fun(int*p) {p=(int*)malloc(sizeo(int));}


正确答案:C
解析:在选项A中,main()函数中定义了一个指针变量p,调用fun()函数时把p传给形参p,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s将被释放,因此无法实现让实参p指向一个整型单元,故选项A错误。选项B中实现的也是让实参p,指向一个在函数fun()中定义的局部变量s,因此也是错误的;选项C在函数fun()中分配了两个字节的内存单元并把首地址赋值给形参p指向的变量,即main()函数的指针变量p中,由于整型变量占两个字节,因此,选项C是正确的;选项D在主函数中定义了一个指针地址变量p,并把指针变量的值传给形参变量p,在fun()函数中分配了一个整型单元并把首地址赋值给行参指针变量p,由于C语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项D也是错误的。所以,C选项为所选。


C程序设计19春在线作业2-0003试卷总分:100 得分:0一、 单选题 (共 20 道试题,共 60 分)1.不能把字符串:Hello!赋给数组b的语句是()A.char b10=H,e,l,l,o,!;B.char b10;? b=Hello!;C.char b10;? strcpy(b,Hello!);D.char b10=Hello!;正确答案:B2.若k为整型,则下列while循环 k=2; while(k=0) printf(“%d”,k); k-; printf(“n”); 执行多少次?()A.2B.9C.0D.1正确答案:C3.若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元: int *p; p=_ malloc( sizeof(int); 则应填入()A.intB.*intC.(*int)D.(int *)正确答案:D4.设 int a=12; 表达式a+=a-=a*=a的值是()A.12B.144C.0D.132正确答案:C5.下列标识符中,不能作为合法的C用户定义标识符的是()A.a3_b3B.voidC._123D.IF正确答案:B6.以下选项中属于C语言的数据类型是()A.复合型B.双精度型C.逻辑型D.集合型正确答案:A7.设有以下宏定义: #define H 30 #define LEN H+20 则执行赋值语句v=LEN*10;后,v的值是()A.60B.230C.500D.0正确答案:B8.有以下程序段: main() int a=5,*b,*c; c=&b; b=&a; 程序在执行了c=&b;b=&a;语句后,表达式*c的值是()A.变量a的地址B.变量b的地址C.变量a的值D.变量b的值正确答案:C9.以下能正确定义一维数组的选项是()A.int num ;B.#define N 100 int num N;C.int num0.100;D.int N=100; int numN;正确答案:B10.以下程序: main( ) int a=011; printf(“%dn”, a); 的输出结果是()A.12B.11C.10D.9正确答案:D11.为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与哪个if组成配对关系?()A.缩排位置相同的ifB.在其之前未配对的ifC.在其之前未配对的最近的ifD.同一行上的if正确答案:C12.下面程序 main() char ch7= 65ab21; int i,s=0; for(i=0;chi=0 & chi,=,=,=运算。A.错误B.正确正确答案:B6.getchar()函数没有参数。A.错误B.正确正确答案:B7.C程序中,一行上可以写多个语句。A.错误B.正确正确答案:B8.宏定义的宏名一定要大写,否则无效。A.错误B.正确正确答案:A9.表达式 0195 是一个八进制整数。A.错误B.正确正确答案:A10.如果一个函数不需要参数,则函数名后的括号可以省略。A.错误B.正确正确答案:A11.在赋值语句=中,当表达式的类型和变量的类型不一致时,以表达式的类型为准。A.错误B.正确正确答案:A12.int i=20; switch(i/10) case 2:printf(A); case 1:printf(B); 的输出结果为A。A.错误B.正确正确答案:A13.逻辑运算符的优先级为&|!。A.错误B.正确正确答案:A14.联合变量与结构变量的最大区别在于,联合变量的所有成员占用同一段内存,而结构变量的成员占用不同的内存。A.错误B.正确正确答案:B15.假设有int? a10,? *p;? 则p=&a0与p=a等价。A.错误B.正确正确答案:B16.C语言规定数组元素的下标从0开始。A.错误B.正确正确答案:B17.一个函数中只允许有一条return语句。A.错误B.正确正确答案:A18.若有形参定义:int a10;则a+是合法的表达式。A.错误B.正确正确答案:A19.在对某一函数进行多次调用时,系统会对相应的自动变量重新分配存储单元。A.错误B.正确正确答案:B20.不允许对二维数组的部分元素赋初值。A.错误B.正确正确答案:A

若要用下面的程序片段指针变量p指向一个存储整型变量的动态存储单元int *p;p=______ malloc (sizeof (int));则应填入 ______。

A.int

B.int*

C.(*int)

D.(int*)


正确答案:D
解析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型*)。


设pl和p2是指向一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是( )。

A.k=*pl+*p2

B.p2=k;

C.pl=p2;

D.k=*pl*(*p2.;


正确答案:B
本题主要考查了一维数组指针的赋值和用指针引用数组元素进行运算。选项B)中p2为指向int型变量的指针,而k为int型变量,不能将int型变量直接赋值给指向int型变量的指针,所以选项B)错误,应该为p2=&k。


若指针p已正确定义,要使p指向两个连续的整型动态存储单元,则正确语句是( )

A.p=2 *(int *)malloc(sizeof(int));

B.p=(int*)calloc(2*sizeof(int));

C.p=(int*)malloc(2* sizeof(int));

D.p=2 *(int*)calloc(sizeof(int));


正确答案:C


以下程序的输出结果是______。 fun(int**p,int a[2][3]) {**p=a[1][2]; } main() { int a[2][3]=}1,3,5,7,9,11},*p; p=(int*)malloc(sizeof(int)); fun(&p,a) ; printf("%d\n",*p); }

A.9

B.7

C.1

D.11


正确答案:D
解析:主函数中指针变量指向两字节的存储空间,这两个字节可以存放 int型数据,函数fun是将实参数组a中的元素a[1][2]的值11赋给指针变量p所指的存储空间,程序输出该空间的值。本题函数fun中形参p是二级指针变量,它指向实参指针变量p。


有以下程序#include <stdio.h>#include <stdlib.h>int fun(int t){ int *p; p=(int*)malloc(sizeof(int)); *p=t; return *p;}main(){ int a; a = fun(8); printf("%d\n", a+fun(10));}程序的运行结果是A.0 B.10 C.18 D.出错


正确答案:C
本题考查函数的调用。题目给出的程序可以分为两个部分,一个是函数fun,另一个是主函数main。fun函数的功能是输入一个整型变量t,设置一个指向该整型变量的指针p,并将该指针所指向的值返回给main函数。main函数中两次调用了fun函数,第一次变量t的值为8,第二次变量t的值为10,第一次返回值8,使得a=8,第二次返回值10,使得a+fun(10)=18。

更多 “东师C程序设计19春在线作业21答案” 相关考题
考题 若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是______。A.p=2*(int*)malloc(sizeof(int));B.p=(int*)mallet(2*sizeof(int));C.p=(int*)malloc(2*2);D.p=(int*)calloc(2, sizeof(int));正确答案:A解析:本题考查malloc函数和calloc函数的应用。C语言中库函数malloc和calloc的功能都是向系统申请分配内存空间。其中函数malloc的调用为:malloc(size),其中size是一个无符号整数,表示向系统申请多大的存储空间;calloc(n,size)表示向系统申请n个大小为size的存储空间。新标准C提供的malloc和calloc函数的类型规定为void*类型,使用时根据需要进行强制类型转换。选项B、C、D都能满足p指向两个连续的整型存储单元的要求,其中(int*)表示强制类型转换。

考题 单选题若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是()。A p=2*(int*)malloc(sizeof(int));B p=(int*)malloc(2*sizeof(int));C p=(int*)malloc(2*2);D p=(int*)calloc(2,sizeof(int))。正确答案:D解析:暂无解析

考题 有以下程序 include include int fun(int n) {int *有以下程序 #include <stdio.h> #include <stdlib.h> int fun(int n) {int *p; p=(int*)malloc(sizeof(int)); *p=n; return *p; } { int a; a=fun(10); printf("%d\n",a+fun(10)); } 程序的运行结果是______。A.0B.10C.20D.出错正确答案:C解析:malloc(sizeof(int))的作用是开辟一个长度为sizeof(int)存储空间,并通过强制类型转换(int*)将此存储空间的地址赋给了—个整型的指针变量p。然后执行语句“*p=n”,使得*p的值为10,并通过返回此值,在主函数中输出a+10的值,即输出20。

考题 动态分配一整型数据长度的空间,使指针p指向该存储空间,则下列空缺处应填入的正确语句是( )。 int*p; p=______malloc (sizeof(int));A.intB.int*C.(*int)D.(int*)正确答案:D

考题 以下程序运行后,输出结果是 ( ) fut(int * * s,int p[2][3]) { * * s=p[1][1];} main( ) { int a [2] [3]= {1, 3, 5, 7, 9, 11}, * p; p=(int * )malloc (sizeof(int)); fut(&p,a); printf("%d\n",* p); }A.1B.7C.9D.11正确答案:C

考题 设p1和p2是指向一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是A.k=*p1+*p2B.p2=k;C.p1=p2;D.k=*p1*(*p2);正确答案:B解析:本题主要考查了一维数组指针的赋值和用指针引用数组元素进行运算。选项B)中p2为指向int型变量的指针,而k为int型变量,不能将int型变量直接赋值给指向int型变量的指针,所以选项B)错误。

考题 假定指针变量p定义为“int *p=malloc(sizeof(int));”,要释放p所指向的动态存储空间,应调用的函数为()。Afree(p)Bdelete(p)Cfree(*p)Dfree(&p)A略

考题 若要用下面的程序片段使指针变量p指向—个存储整型变量的动态存储单元 int *p; p=______malloc(sizeof(int)); 则应填入______。A.intB.int*C.(*int)D.(int*)正确答案:D解析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之为在型一致,强制类型转换的格式为(数据类型*)。

考题 若要用下面的程序片段使指针变量p指向一个存储字符型变量的动态存储单元,则应填入; char * p;p= ( ) malloc (sizeof (char));A.charB.char *C.(* char)D.(char *)正确答案:D

考题 以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是A.main() { int *p; fun(p); … } int fun(int *p) { ints; p=&s;}B.main() { int *p; fun(&p); … } int fun(int **p) { int s; *p=&s;)C.#include main() { int *p; fun(&p); … } int fun(int **p) *p=(int*)malloc(2);}D.#include main() { iht *p; fun(p); … } iht fun(iht *p) { p=(int*)malloc(sizeof(int)); }正确答案:C解析:本题考核的知识点是指针变量作为函数的参数以及变量的作用域。在选项A中,main()函数中定义了一个指针变量p,调用fun()函数时把p传给形参p,在函数中让p指向局部变量s,由于函数调用返回后,局部变量s将被释放,因此无法实现让实参p指向一个整型单元,故选项A错误.选项B中实现的也是让实参p,指向一个在函数fun()定义的局部变量s,因此也是错误的;选项C在函数fun()中分配了两个字节的内存单元并把首地址赋值给形参p指向的变量,即main()函数的指针变量p中,由于整型变量占两个字节,因此,选项C是正确的;选项D在主函数中定义了一个指针地址变量p,并把指针变量的值传给形参变量p,在fun()函数分配了一个整型单元并把首地址赋值给行参指针变量p,由于C语言中变量作为参数是传值的,所以并没有改变对应实参指针变量的值,因此选项D也是错误的.所以,C选项为所选。