超星C语言程序设计基础(II)_2答案(学习通2023题目答案)

超星C语言程序设计基础(II)_2答案(学习通2023题目答案)

第九周:指针

9.1 指针随堂测验

1、超星础对于:int a[] = { 5,语言程 15, 34, 54, 14, 2, 52, 72}; int *p = &a[5]; 则: p[-2]的值是?
A、编译出错,序设习通因为数组下标越界了
B、计基运行出错,答答案因为数组下标越界了
C、案学54
D、题目2

2、超星础如果:int a[] = ; int *p = a; 则以下哪些表达式的语言程结果为真?
A、p == a[0]
B、序设习通p == &a[0]
C、计基*p == a[0]
D、答答案p[0] == a[0]

3、案学以下变量定义: int* p,题目q; 中,p和q都是超星础指针。

4、对于:int a[] = { 5, 15, 34, 54, 14, 2, 52, 72}; int *p = &a[1]; 则: p[2]的值是?

9.2 指针运算随堂测验

1、对于以下代码段,正确的说法是:char *p; while (1) { p = malloc(1); *p = 0; }
A、最终程序会因为没有没有空间了而退出
B、最终程序会因为向0地址写入而退出
C、程序会一直运行下去
D、程序不能被编译

2、对于以下代码段:int a[] = { 1,2,3,4,5,}; int *p = a; int *q = &a[5]; printf("%d", q-p); 当sizeof(int)为4时,以下说法正确的是:
A、因为第三行的错误不能编译
B、因为第三行的错误运行时崩溃
C、输出5
D、输出20

3、使用malloc就可以做出运行时可以随时改变大小的数组

第十周:字符串

第二次单元测验

1、下面的代码段执行后,输出的结果是:int i=0; if ( i==0 ) { int i=3; } printf("%d\n", i);
A、0
B、3
C、1
D、2
E、4

2、下面哪个选项可以交换指针p和q所指的int型变量的值?
A、temp = *p; *p = *q; *q = temp;
B、temp = p; p = q; q = temp;
C、temp = p; *p = *q; q = temp;
D、temp = &p; *p = *q; q = *temp;

3、若有变量定义: int a = 5, *p = &a, *q = &a;则下面不能做的运算是:
A、p=a;
B、q=a;
C、p=q;
D、a=p-q;
E、a=(*p)*(*q);

4、若有变量定义 int x, y=5, *p=&x; 则能完成x=y的选项是:
A、*p=y;
B、x=y;
C、x=*p;
D、x=&y;
E、*p = &y;

5、若有变量定义: int a[][3] = { 1,2,3,4,5,6,7}; 则数组a的第一维的大小是:
A、3
B、2
C、4
D、5
E、6
F、7
G、1

6、若二维数组a有m列,则在a[i][j]之前的元素个数是
A、i*m+j
B、j*m+i
C、i*m+j-1
D、j*m+i-1

7、若有以下数组定义和函数调用,则函数fun的原型为:int a[3][4] = { 1}; fun(a);
A、fun(int a[][4]);
B、fun(int a[][]);
C、fun(int a[]);
D、fun(int a[3][]);

8、若函数的参数是数组,则传递给这个参数的值是:
A、数组的首地址
B、数组的第一个元素的地址
C、整个数组被拷贝过去
D、数组元素的个数
E、数组第一个元素的值

9、以下数组初始化错误的是:
A、int d[2][3] = { { 1,2},{ 3,4},{ 5,6}};
B、int a[2][3] = ;
C、int b[][3] = { { 1,2},};
D、int a[][3] = { 1,2,3,4,5,6};

10、假如int类型变量占据4个字节,变量 int x[10] = { 0,2,4}; 则x在内存中占据的字节数是:
A、40
B、sizeof(int)*10
C、sizeof(x)
D、12
E、4
F、3

11、若有数组: char x[] = "China"; 则x所占据的空间为:
A、6个字节
B、sizeof(x)
C、4个字节
D、5个字节
E、8个字节
F、7个字节

12、如果i是变量,而p是指向i的指针,则下列哪个表达式可以代替i?
A、*p
B、*&i
C、p
D、&i
E、&p
F、*&p
G、&*p
H、*i
I、&i
J、&*i

13、以下不能正确进行字符串初始化的语句是:
A、char str[5] = "good!";
B、char str[5] = { 'g', 'o', 'o', 'd', '!'};
C、char str[] = { 'g', 'o', 'o', 'd', '!'};
D、char str[] = "good!";
E、char str[8] = "good!";
F、char *str = "good!";
G、char str[8] = { 'g', 'o', 'o', 'd', '!'};

14、若有如下变量定义,则正确的叙述为:char x[] = "abcd"; char y[] = { 'a', 'b', 'c', 'd'};
A、数组x的长度大于数组y的长度
B、两个数组的长度相同
C、数组x的长度小于数组y的长度
D、数组x和数组y的值相同

15、如有以下定义: char str1[8], str2[8] = "good"; 则不能将str2的内容交给str1数组的是:
A、str1 = str2;
B、strcpy(str1, str2);
C、strncpy(str1,str2,6);
D、str1[0] = 0; strcat(str1, str2);

16、下列哪个表达式能判断str1和str2的内容是否相同?
A、strcmp(str1, str2)==0
B、strncmp(str1, str2, strlen(str1))==0
C、str1 == str2
D、str1 = str2
E、strcmp(str1, str2)

17、若有变量定义: int a = 512, *p = &a; 则*p的值为:
A、512
B、无确定值
C、0
D、变量a的地址

18、两个指针变量,所指的类型相同,则它们之间不能进行的运算是
A、+
B、>
C、<
D、==
E、!=
F、-

19、以下正确的函数原型是:
A、double fun(int x, int y);
B、double fun(int, int);
C、double fun(int x, int y)
D、double fun(int x; int y);
E、double fun(int x, y)

20、如果i是int型的变量,且p和q都是指向i的指针,那么下列哪个赋值是有效的:
A、p=q
B、*p=*q
C、p=&*q
D、p=i
E、*p=&i
F、&p=q
G、p=&q
H、p=&p
I、p=*q
J、*p=q

21、假如str是字符数组,下面哪个选项与其他选项不等价
A、strcat(str,"");
B、strcpy(str,"");
C、str[0] = '\0';
D、*str = 0;

第十一周:结构类型

11.1 结构随堂测验

1、有下列代码段,则输出结果是:struct { int x,y; } s[2] = { { 1,3}, { 2,7}, }; printf("%d\n", s[0].y/s[1].x);
A、0
B、1
C、2
D、3

2、有如下变量定义,则对data中的a的正确引用是:struct sk { int a; float b; } data, *p=&data;
A、(*p).data.a
B、(*p).a
C、p->data.a
D、p.data.a

3、以下两行代码能否出现在一起? struct { int x; int y; } x; struct { int x; int y; } y;

第十二周:程序结构

12.2 编译预处理和宏随堂测验

1、假设宏定义: #define DOUBLE(x) 2*x 则DOUBLE(1+2)的值是

2、假设宏定义如下: #define TOUPPER(c) ('a'<=(c)&&(c)<='z'?(c)-'a'+'A':(c)) 设s是一个足够大的字符数组,i是int型变量,则以下代码段的输出是: strcpy(s, "abcd"); i = 0; putchar(TOUPPER(s[++i]));

学习通C语言程序设计基础(II)_2

一、函数指针

函数指针是指向函数的指针变量,使用函数指针可以方便地调用函数。

定义函数指针的一般形式为:

返回类型 (*指针变量名)(参数列表);    

例如:

int (*func)(int, int);    

定义了一个返回类型为int,接受两个int类型参数的函数指针变量func。

函数指针有以下用处:

  • 通过函数指针调用函数
  • 作为函数参数传递
  • 作为函数返回值

例如:

int add(int a, int b) {         return a + b;    }    int minus(int a, int b) {         return a - b;    }    int (*func)(int, int);    func = &add;    printf(\d\\ (*func)(1, 2));  // 输出3    func = −    printf(\d\\ (*func)(1, 2));  // 输出-1    

这段代码定义了两个函数,一个实现加法,一个实现减法。然后定义了一个函数指针变量func,先指向add函数,然后调用func(1, 2),输出3;然后将func指向minus函数,调用func(1, 2),输出-1。

二、函数指针数组

函数指针数组是由函数指针组成的数组,使用函数指针数组可以方便地管理多个函数。

定义函数指针数组的一般形式为:

返回类型 (*指针变量名[元素个数])(参数列表);    

例如:

int (*funcs[2])(int, int);    funcs[0] = &add;    funcs[1] = −    printf(\d\\ (*funcs[0])(1, 2));  // 输出3    printf(\d\\ (*funcs[1])(1, 2));  // 输出-1    

这段代码定义了一个大小为2的函数指针数组funcs,其中每个元素都是一个返回类型为int,接受两个int类型参数的函数指针变量。然后将funcs[0]指向add函数,funcs[1]指向minus函数,分别调用funcs[0](1, 2)和funcs[1](1, 2),输出3和-1。

三、回调函数

回调函数是指作为参数传递给另一个函数的函数,用于在另一个函数完成任务后通知调用者。

例如,我们可以定义一个排序函数sort,它接受一个整型数组和一个比较函数指针作为参数。比较函数用于判断数组中两个元素的大小关系,这样sort就可以根据比较函数的返回值进行排序。

int compare(int a, int b) {         return a - b;    }    void sort(int *arr, int len, int (*comp)(int, int)) {         for (int i = 0; i < len - 1; i++) {             for (int j = i + 1; j < len; j++) {                 if ((*comp)(arr[i], arr[j]) >0) {                     int tmp = arr[i];                    arr[i] = arr[j];                    arr[j] = tmp;                }            }        }    }    int main() {         int arr[] = { 3, 1, 4, 2};        int len = sizeof(arr) / sizeof(int);        sort(arr, len, compare);        for (int i = 0; i < len; i++) {             printf(\d \ arr[i]);        }        printf(\n\        return 0;    }    

这段代码定义了一个compare函数用于比较两个数的大小,然后定义了一个sort函数用于对整型数组进行排序,sort函数接受三个参数,一个整型数组,一个数组长度,一个函数指针comp,用于比较数组中两个元素的大小。在main函数中,定义了一个整型数组,然后调用sort函数对数组进行排序,传递了compare函数的指针作为参数。

四、总结

函数指针和函数指针数组是C语言中非常重要的概念,使用它们可以方便地管理多个函数,并且在需要时动态调用函数。回调函数是一种非常实用的编程技巧,它可以使代码更加灵活、可扩展。


安全系统工程的研究内容包括:系统安全分析、系统安全预测、系统安全评价、

A.保护环境,节约能源,要从我做起,下列说法中需要改正的是
B.《所罗门之歌》中派拉特咏唱的“焦糖人”正是奶娃的( )。
C.相比于其他行业企业,酒店组织架构的设计可能更具灵活性特征。
D.施工现场临时配电系统中,零线(N)的配线颜色应为(  )。


()是实现人生价值的必由之路。

A.下列选项中正确的URL是()
B.神经干细胞可分化为( )。
C.医德修养的根本途径是接受医德教育。
D.极光的发生可能与太阳爆发所产生的高能带电粒子有关。


覆叠轨主要用于制作画中画和抠像效果

A.新exam听力4:请问音频中提到哪些食物
B.从社会心理看,哪种刑罚古人畏惧当代人并不担心
C.一个企业的资产总额与权益总额( )
D.原文Seeing is believing译文:眼见为____


我国产品质量监督管理机构主要包括

A.网络把许多计算机连接在一起,而互联网则把许多( )通过路由器连接在一起。
B.根据空间数据特征,空间数据主要类型主要有()。
C.晶状体是均质的嗜酸性结构,里面没有细胞成分。
D.耐酸耐酶的青霉素是 ( )。


瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。

A.升降压斩波电路中,输出电压实质来源哪个元件
B.属于个人主义人生观的是()
C.Canon属于打印机生产厂商的是
D.关于施工进度计划的编制和修订工作,说法错误的是( )。


任何个人和组织有( )行为的,将被依法追究法律责任。

A.按钮一般接在PLC的输出端。
B.月经周期只要提前七天以上就可以称之为月经先期。
C.任何复杂的程序都是由逆序结构、选择结构、循环结构这三种结构构成的。
D.以下哪种不属于拔罐方法( )


葡萄酒的典型性越强越好。( )

A.无穷限的反常积分都可以使用“偶倍奇零”的结论。
B.我国刑法中规定,同种数罪原则上是要并罚的。()
C.据《灵枢·天年》,在人体生命过程中,脏腑精气盛极而衰的年龄是( )
D.都江堰水利工程体现了道法自然、天人合一的深邃理念


人体共有多少块骨头组成()

A.根据两针面之间的不同配置,可分为分梳、剥取、提升作用。
B.轴、轴上零件及两端轴承、支座的组合称为轴组。
C.企业向员工定期提供奖金属于(   )。
D.在企业预算管理的过程中,在战略预算制定之后通常是制定


下列植物属于常绿木本花卉的是()。

A.以下不属于楼板按施工方式分类的是(
B.推动构建人类命运共同体的丰富内容有( )
C.下面哪一项是把主生产计划转换成关键工作中心负荷的过程()
D.后张法预应力构件需要设置预拱度时,其预留管道不必同时起拱。


一个程序中可以有多个函数,这个说法

A.密勒码解码功能由读写器完成
B.脾胃虛弱较甚者慎用山楂桂枝红糖粥。
C.橡胶的减震功能目前已经建筑防震中得到应用
D.禁止表格格子内的内容自动断行回卷的HTML代码是( )


用人单位应当为劳动者交纳的社会保险包括()

A.结构化的思维意味着对问题机械、简单地肢解。
B.某个电对与氢电极构成原电池时,氢电极都是负极。
C.适应不良的表现有三方面:认知上的,( )上的和行为上的。
D.生物膜的组成与活性污泥相同。


目前,我国的审计监督体系主要包括()

A.西餐中我们把刀下叉上的并排横放在餐盘里,就表示说,我吃完了,不想再吃了
B.采购调查的主要项目是()。
C.古希腊文明经过历史的变迁,已经转变成()。
D.又有统一意志,又有个人心情舒畅,生动活泼


按照双因素理论,下述哪一种因素属于激励因素

A.货币供给量增加使LM曲线右移表示()
B.衡量沟通结果就是看对方是否同意你,没能同意说明是无效沟通。
C.下列是丙类建筑的是()。
D.下列各项中,读音按“阴阳上去”排列的是( )


下列合同,甲有权以重大误解为由撤销的是

A.关于“早上好”这一问候语的三个子言语行为的说法,不正确的是 。
B.某淋病初产妇,29岁,足月顺产一活女婴.护士应为该女婴提供的护理措施是
C.社会组织要想与公众建立良好关系,靠的就是让利。( )
D.42.黑龙江省下辖的地级市行政辖区有哪些