C语言习题库(3)

2018-12-15 17:56

if( ) printf(―\\Nwell DNOE!!! \\n‖);

else printf)‖\\nSorry the correct answer is %d\\n‖,val); }

三、判断题

(1) C语言中,用户若需调用标准库函数,在调用前必须重新定义。 (2) C语言中不允许用户重新定义标准库函数。

(3) 在C程序中,函数的定义和调用都不允许嵌套。

(4) 如果用数组名作为函数调用的实际参数,则传递给形参的是数组的首地址。 (5) 形式能参数也是一种局部变量。 四、编程题

(1)已有变量定义和函数调用语句int a,b; b=sum(a);函数sum()用以求 k ,和数作为函数值返回。若a值为10,经函数sum 的计算后,b的值是55。请编写sum 函数。 Sum(int n)

{ }

(2)a是一个2*4的整型数组,且各元素均已赋值,函数 max_value 可求出其中的最大元素值 max,并将此值返回主调函数。今有函数调用语句 max=max_value(a);请编写 max_value 函数。 Max_value(int arr[ ][4]) { }

第八章 编译预处理命令 一、单选题 (1)请读程序:

#define ADD(x) x+x main() {

int m=1,n=2,k=3;

int sum=ADD(m+n)*k; printf(―sum=%d‖,sum); }

上面程序的运行结果是 。 A) sum=9 B) sum=10 C) sum=12 D) sum=18

(2) 以下程序的运行结果是 。 #define MIN(x,y) (x)<(y)? (x)+(y) main()

{int I=10,j=15,k; k=10*MIN(I,j); printf(―%d\\n‖,k);

} A)10 B)15 C)100 D)150

(3) 在宏定义#define PI 3.14159中,用宏名PI代替一个 。 A) 常量 B) 单精度数 C) 双精度数 D) 字符串

(4) 若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*x/2

则执行以下printf语句后,输出结果是 。 int a; a=Y;

printf(―%d\\n‖,Z); printf(―%d\\n‖,--a);

A)7 B)12 C)12 D)7 6 6 5 5

(5) 若有以下宏定义: #define N 2

#define Y(n) ((N+1)*n)

则执行语句z=2*(N+Y(5));后的结果是 。 A) 语句有错误 B) z=34 C) z=70 D) z无定值 二、填空题

(1)设有以下宏定义:#define WIDTH 80

#define LENGTH WIDTH+40

则执行赋值语句:v=LENGTH*20;(V为int型变量)后,v的值是((2)设有以下宏定义:#define WIDTH 80

#define LENGTH (WIDTH+40)

则执行赋值语句:k=LENGTH*20;(K为int型变量)后,k的值是((3)下面程序的运行结果是( )。 #define DOUBLE(r) r*r main()

。。 ) ) {int x=1,y=2, t; t=DOBLE(x+y); printf(―%d\\n‖,t); }

(4)下面程序的运行结果是( )。 #define MUL(z) (z)*(z) main() {

printf(―%d\\n‖,MUL(1+2)+3); }

(5) 下面程序的运行结果是( )。 #define POWER(x) ((x)*(x)) main() {int I=1;

while (I<=4) printf(―%d\\t‖,POWER(I++)); printf(―\\n‖); }

三、判断题

(1) 预处理命令行都必须以#号开始。

(2) 宏替换不占用运行时间,只占编译时间。 (3) C程序在执行过程中对预处理命令进行处理。 (4) 宏名必须用大写字母表示。

(5) 在文件包含预处理命令的使用形式中,当#include 后的文件名用<>括起来时,表示在

当前目录搜索被包含文件。 四、编程题

(1)输入两个整数,求它相除的余数。用带参的宏来编程实现。

(2)试用义一个带参的宏swap(x,y),以实现两个整数之间的交换,并利用它将一维数组a和b的值进行交换。

第九章 指针 一、选择题

(1) 以下程有错误,错误原因是 main()

{int *p,I; char *q,ch; p=&I; q=&ch; *p=40; *p=*q; …….. }

A) p和q的类型不一致,不能执行*P=*Q;语句

B) P中存放的是地址值,因此不能执行*P=40;语句 C) Q没有指向具体的存储单元,所以*Q没有实际意义

D) Q虽然指向了具体的存储单元,但该单元中没有确定值,所以不能执行*P=*Q;语

(2)已有定义int k=2; int *ptr1, *ptr2;且ptr1和ptr2均已指向变量K,下面不能正确执行的赋值语句是 .

A)k=*ptr1+*ptr2; B)ptr2=K;

C)ptr1=ptr2; D)k=*ptr1*(*ptr2);

(3)变量的指针,其含义是指该变量的________.

A)值 B)地址 C)名 D)一个标志

(4)若有语句int*point,a=4;和ponit=&a; 下面均代表地址的一组选项是_________. A) a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point

(5)下面能正确进行字符串赋值操作的是________.

A) char s[5]={―ABCDE‖};

B) char s[5]={?A‘,‘B‘,‘C‘,‘D‘,‘E‘}; C) char *S; s=‖ABCDE‖; D) char *S; scanf(―%s‖,s);

(6) 若有以下定义,则对A数组元素的正确引用是_______.

A)*&a[5] B)*a+2 C)*(P+5) D)*(a+2)

(7) 若有以下定义,则对a数组元素地址的正确引用是_______>

A) p+5 B) *a+1 C) &a+1 D) &a[0]

(8) 若有定义:int a[2][3];则对a数组的第I行第J列(假设I,J已正确说明并赋值)元素值的正

确引用为_______. A)*(*(a+I)+J) B)(a+I)[j] C)*(a+I+j) D)*(a+I)+j

(9)若有定义:int a[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为________.

A)*(a[i]+j) B)(a+i) C)*(a+j)

E) a[i]+j

(10)若有以下定义和语句,则对a数组元素地址的正确引用为_________.

Int a[2][3],(*p)[3] P=a; A)*(p+2) B) p[2] C) p[1]+1 D) (p+1)+2 二、填空题

(1)下面程序段的运行结果是() char s[80],*sp=‖HELLO!‖; sp=strcpy(s,sp); s[0]=‘h‘; puts(sp);

(2)下面程序段的运行结果是() char[a]=‖123456789‖,*p; int I=0; p=a;

while(*p)

{if(I%2==0) p=‘*‘; p++;I++; }

puts(a);

(3)若有以下语句和定义: int a[4]={0,1,2,3,},*p; p=&a[1];

则++(*p)的值是()

(4)若有定义:int a[2][3]={2,4,6,8,10,12};则(&a[0][0]+282+1的值是(),*(a[1]+2)的值是()。 三、判断题

(1)若有定义:int (*p)[4],则标识符p表示的是一个指向整型变量的指针。 (2)若有定义:int *p[4],则标识符p表示的是一个指针数组名。 (3)指针值就是地址值。

(4)若有定义int (*p)(),指针p可以表示函数返回值的类型。 (5)C语言允许main函数带形参,但形参名只能是argv和arvc。 四、编程题

(1)编一程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。请用指针完成。

(2)设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的N个数按逆序重新排列并输出新的完整数列。进行逆序处理时要赤使用指针方法。试编程。(例如:原数列为2,4,6,8,10,12,14,16,18,20,若要求把从第4个数开始的5个数按逆序重新排列,则得到新数列为2,4,6,16,14,12,10,8,18,20。)


C语言习题库(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2012年至2008年高考时态语态真题详解

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: