11 / 23
C.一个用于指向函数的指针变量 D.一个返回值为指针型的函数名
(19)若有以下说明和定义,在必要的赋值后,对fun函数的正确的调用语句是(D) int fun(int *c) {...} void main() {
int (*a)(int *)=fun,*b(),w[10],c; ... }
A.a=a(w); B.(*a)(&c); C.b=*b(w); D.fun(b);
(20)若指针p已正确定义,要使p指向两个连续的短整型动态存储单元,不正确的语句是(A)。
A.p=2*(shot*)malloc(sizeof(short)); B.p=(shot*)malloc(2*sizeof(short)); C.p=(shot*)malloc(2*2);
D.p= (shot*)calloc(2,sizeof(short));
(21)若有一下定和语句,则对s数组元素的正确引用形式是(B) int s[4][5],(*ps)[5]; ps=s;
A.ps+1 B.*(ps+3) C.ps[0][2] D.*(ps+1)+3
(22)有以下程序,若从键盘输入:abc def ,则输出结果是(A) void main() {
char *p,*q;
p=(char *)malloc(sizeof(char)*20);q=p; scanf(“%s%s”,p,q);printf(“%s %s\\n”,p,q); }
A. def def B.abc def C.abc abc D.def abc (23)有以下程序,程序运行后的输出结果是(B) void ss(char *s,char t) {
while(*s) {
if(*s==t) *s=t-‘a’+’A’; s++; } }
void main() {
char str1[100]=”abcddfefdbd”,c=’d’; ss(str1,c) printf(“%s\\n”,str1); }
A.ABCDDEFEDBD B.abcDDfefDbd C.abcAAfefAbA D.Abcddfefdbd (24)若定义了一下函数:
12 / 23
void f() {
*p=(double*)malloc(10*sizeof(double)); ... }
P是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是(C)
A.double *p B.float **p; C.double **p; D,float *p; (25)阅读程序,下面程序的输出结果是(A)
假设可执行文件名为:prog.exe,运行时键入的命令行为:prog-386 net #include
void main(int argc, char *argv[]) { int i,
for(i=0;i
A. -386 net B.prog.exe-386 net C.prog.exe -386 net D.prog -386 net
程序填空题
(1) mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空。 Int mystrlen(char *str) { int i;
for(i=0;str[i]!=’\\0’,i++) return(i ); }
(2)函数sstrcmp()的功能是对两个字符串进行比较,当s所指字符串和t所指字符串相等时,返回值为0,;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0;(功能同等于库函数受托strcmp()).请填空。 #include
int sstrcmp(char *s,char *t) {
while(*s&&*t&&*s==*t) {s++;t++;} return *s-*t; }
(3)以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度,请填空。 int strcen(char a[],char[]) {
int num=0,n=0;
while(*(a+num)!=’\\0’) num++;
13 / 23
while(b[n]){*(a+num)=b[n];num++; n++}
return(num); }
(4)函数expand(char *s,*t)在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义自字符,即用“\\n”表示换行符,用“\\t”表示制表符,请填空。 void expand(char *s,char *t) { int i,j;
for(i=j=0;s[i]!=’\\0’;i++) switch(s[i]) {
case ‘\\n’:t[i]=’\\’; t[j++]=’n’; break; case ‘\\t’:t[i]=’\\’; t[j++]=’t’; break;
default: t[j++]=s[i]; break; }
t[j]=’\\0’; }
习题10
选择题
(1) 以下叙述中不正确的是(D) A. 预处理命令都必须以#号开始
B. 在程序中凡是以#号开始的语句行都是预处理命令 C. C程序在执行过程中对预处理命令进行处理 D. 以下正确的宏定义 #define IBM_PC (2) 以下程序的运行结果是(B) #define MIN (x,y) (x)<(y)?(x):(y) void main() {
int i=0,j=15,k; k=10*MIN(i,j); printf(“%d\\n”,k); }
14 / 23
A.10 B.15 C.100 D.150
(3)以下叙述正确的是(C)
A.在程序的一行上可以出现多个有效的预处理命令 B.使用带参的宏时,参数的类型与宏定义一致 C.宏替换不占用运行时间,只占编译时间
D.在以下定义CR是称为“宏名”的标识符 #define C R 045 (4)以下程序运行的结果是(B) #define ADD(x) x+x void main() {
int m=1,n=2,k=3;
int sum=ADD(m+n)*k; //sum=m+n+m+n*k printf(“sum=%d”,sum); }
A. sum=9 B. sum=10 C. sum=12 D. sum=18 (5)程序中头文件typel.h的内容是: #define N 5
#define M1 N*3 程序如下:
#include”type1.h” #define M2 N*2 void main() { int i;
i=M1+M2;
printf(“%d\\n”,i); }
程序编译后运行的输出结果是(C)
A.10 B.20 C.25 D.30 (6)以下叙述正确的是(D)
A.可以把define和if定义为用户标识符
B.可以把define定义为用户标识符,但不能把define定义为用户标识符 C.可以把if定义为用户标识符,但不能把define 定义为用户标识符 D.define和if都不能定义为用户标识符
(7)若有以下说明和定义,则叙述正确的是(C) typedef int *INTEGER INTEGER p,*q;
A.p是int型变量 B.p是基类型为int的指针变量
C.q是基类型为int的指针变量 D.程序中可用INTEGER代替int类型名 (8)从下列选项中选择不会引起二义型的宏定义是(D)。 A.#define POWER(x) x*x B. #define POWER(x) (x)*(x) C. #define POWER(x) (x*x) D. #define POWER(x) ((x)*(x)) (9)以下程序运行的结果是(C)
15 / 23
#define X 5 #define Y X+1 #define Z Y*x/2 void main() {
int a=Y;
printf(“%d,%d”,Z,--a); }
A.7,6 B.12,6 C.12,5 D.7,5
习题11
选择题
(1) 在16位C语言编译系统上,当说明一个结构体变量时系统分配给它的内存是(C) A. 各成员所需内存量总和
B. 结构中第一个成员所需内存量 C. 成员中占内存量最大者所需的容量 D. 结构中最后一个成员所需内存量
(2) 设有以下说明语句,则下面的叙述不正确是(C) struct stu { Int a; flaot b; }stutype;
A. struct是结构体类型的关键字
B. struct stu 是用户定义的结构体类型 C. stutype 是用户定义的结构体类型名 D. a和b都是结构体成员名
(3) C语言结构类型名变量在程序执行期间(A)
A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中 C.部分成员驻留在内存中 D.没有成员驻留在内存中 (4)在16位IBM-PC机上使用C语言,若有以下定义: struct data { int i; char ch; double f; }b;
则结构体b变量所占用的内存的字节数是(D).
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言程序设计教程第七道第十二章课后练习题(3)在线全文阅读。
相关推荐: