c语言 指针讲义 复习资料

c语言 指针讲义 复习资料
c语言 指针讲义 复习资料

第十章指针 (10学时)

学习目的与要求:

1 、理解地址和指针的概念;

2 、重点掌握指针变量的定义和引用;

3 、重点掌握指向数组的指针和通过指向数组的指针操纵数组;

4 、重点掌握指向字符串的指针和通过指向字符串的指针操纵字符串;

5 、理解指向指针的指针、指针数组等概念。

重点:

1 、指针变量的定义和引用;

2 、指向数组的指针和通过指向数组的指针操纵数组;

3 、指向字符串的指针和通过指向字符串的指针操纵字符串

第1讲

知识归纳:

1、地址和指针的概念:

(1) 地址:内存区的每一个字节的编号;

(2) 指针:一个变量的地址称为该变量的指针,即地址就是指针,指针就是地址;

2、指向变量的指针变量:

(1) 指针变量:是指专门用来存放变量地址的一类变量;

(2) 注意区分指针和指针变量的概念;

指针是地址;指针变量是存放地址的变量;

平时所说的定义一个指针,实际上是指定义一个指针变量;

3、指针变量的定义和引用:

(1) 定义指针变量格式:基类型* 指针变量名;

(2) 如何确定指针变量的类型?

要定义的指针准备指向什么类型变量,该指针就是什么类型;

(3) 如何让一个指针指向一个变量?将变量的地址赋值给指针变量;

& -----取地址运算符;

如:int a =5 ;

int * pa ;

int pa = &a ;

(4) 指针变量的引用:

*-----取内容运算符,该运算符与指针变量结合,表示指针所指向的变量的内容;

如:printf (“ % d ,%d\n “, * pa, a ) ;

下面是错误的:

int * pa ;

printf (“ % d \n “, * pa) ;

//一个指针在没有指向一个确切的存储空间时,是不能使用* pa

4、指针总结:

int a = 5 ;

int * pa =&a ;

在定义指针,并指向某个变量后,我们可以得出如下结论:

(1) *pa等价于a

(2) pa 等价于&a

(3) & * pa 等价于&a 、pa

(4) * &a 等价于a

基础训练(A)

一、选择题

1、已知:int *p,a;则语句“p=&a;”中的运算符“&”的含义是()。

A)位与运算B)逻辑与运算C)取指针内容D)取变量地址

2、已知:double d;希望指针变量pd指向d,下面对指针变量pd的正确定义是()。A)double pd; B)double &pd C)double *pd D)double *(pd)

3、若x为整型变量,p是指向整型数据的指针变量,则正确的赋值表达式是( )。

A)p=&x B)p=x C)*p=&x D)*p=*x

二、填空题

1、要使指针变量与变量之间建立联系,可以用运算符来定义一个指针变量,用运算符来建立指针变量与变量之间的联系。

2、已知:int a=10,*p=&a;则“printf("%d,%d\n",a,*p);”的输出结果是。

3、已知:float f1=3.2,f2,*pf1=&f1;现在希望变量f2的值为3.2,可使用赋值语句或。

4、已知:int b=5,*p=&b;并且b的地址为4000,则“printf("%d,%d",p,*p);”的输出结果是。

三、阅读程序,回答问题。

1、main()

{ int var, *p;

var=100; *p=&var;

var=*p+10;

printf("%d",var);

}

运行结果:

2、# include

void prtv(int *x)

{ printf("%d\n",++*x);

}

main()

{ int a=25;

prtv(&a);

}

运行结果:

能力提高(B)

一、选择题

1、已知:int a,*p=&a;则下列函数调用中错误的是()。

A)scanf("%d",&a); B)scanf("%d",p);

C)printf("%d",a); D)printf("%d",p);

2、已知:int i=0,j=1,*p=&i,*q=&j;错误的语句是()。

A)i=*&j; B)p=&*&i; C)j=*p; D)i=*&q;

3、函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是()。

A)funa(int *x,int *y)

{ int *p;

*p=x; *x=*y; *y=*p;

}

B)funb(int x,int y)

{ int t;

t=x; x=y; y=t;

}

C)func(int *x,int *y)

{ *x=*y; *y=*x;

}

D)fund(int *x,int *y)

{ int t;

t=*x; *x=*y; *y=t;

}

二、阅读程序,写出运行结果

1、# include

main()

{ int a,b;

a=5;b=10;

printf("before swap a=%d,b=%d\n",a,b);

swap(a,b);

printf("after swap a=%d,b=%d\n",a,b);

}

swap(int x,int y)

{ int temp;

temp=x; x=y; y=temp;

printf("in swap x=%d,y=%d\n",x,y);

}

运行结果:

2、# include

main()

{ int a,b;

a=5;b=10;

printf("before swap a=%d,b=%d\n",a,b);

swap(&a,&b);

printf("after swap a=%d,b=%d\n",a,b);

}

swap(int *px,int *py)

{ int temp;

temp=*px; *px=*py; *py=temp;

printf("in swap x=%d,y=%d\n",*px,*py);

}

运行结果:

比较上面两个程序,试说明两者的区别?

第2讲

知识归纳:

1、指针变量做实参:

(1)指针变量做实参,实质传的是指针所指向的变量的地址-----即传地址调用;

(2) 指针变量做实参,形参必须是指针,即通过形参指针操纵主调函数中的变量;

2、指向数组的指针变量:

(1) 定义一个指向数组元素的指针变量的方法,与定义指向变量的指针变量相同;

(2) 使指针指向数组首地址:将数组名赋值给已定义的指针变量;

使指针指向数组的某一元素:将数组元素地址赋值给已定义的指针变量;

如:int arr[ 10 ];

int * p ; //定义指针变量,类型与将要指向的数组类型一致;

p = arr ; //p 指针指向arr数组的首地址;等价于p = & arr[0];

p = &a [ 9] ; // p 指针指向arr数组的最后一个元素arr[9] ;

3、通过指针引用数组元素:

int arr[ 10 ];

int * p = arr ;

在定义指针,并指向某个数组的首地址后,我们可以得出如下结论:

(1) (1)p + i =arr + i = &arr[ i ] ,均表示arr数组的第i 个元素的地址;

指针变量加1 ,即在指针当前所指向的元素的地址基础上+ 一个数组元素的字节数;即p + i*d //d是一个数组元素的字节数;

(2)(2)*(p+i) = *(arr + i) = arr[i] , 均表示arr 数组的第i 个元素; (3)数组元素的两种表示方法:

下标法:arr[ i ] , p [ i ] // 均表示arr数组的第i 个元素;

指针法:* ( p+i) , * (arr+i) //均表示arr数组的第i 个元素;

4、在使用指向数组的指针变量时,应注意的问题:

int arr[ 10 ];

int * p = arr ;

在定义指针,并指向某个数组的首地址后:

(1) p ++ ; 正确;但arr++ ; 不正确;

因为arr 表示数组名,是常量,不能执行arr = arr + 1 ;

(2) 要注意指针变量的当前值;

(3) ) ( * p ) ++ ----表示p所指向的元素值加一;即arr [ 0] ++ ;

* p ++ 、* ( p ++ ) ------ 先取指针所指向空间的内容, 即arr[0] , 然后指针pa 下移一个存储空间, 指向arr[1] ;

(4) * ++pa ------指针pa 先下移一个存储空间,然后取指针所指向空间的内容;

基础练习(A)

一、选择题

1、已知:int a[10],*p=a;则下面说法不正确的是()。

A)p指向数组元素a[0] B)数组名a 表示数组中第一个元素的地址

C)int a[10],*p=&a[0];与上述语句等价D)以上均不对

2、已知:int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则不能表示数组a中元素的表达式是()。A)*p B)a[10] C)*a D)a[p-a]

二、填空题

1、在C语言中,指针变量的值增1,表示指针变量指向下一个,指针变量中具体增加的字节数由系统自动根据指针变量的决定。

2、已知:int a[5],*p=a;则p指向数组元素a[0],那么p+1指向。若“ printf("%d",p);”的输出结果是200,那么:“ printf("%d",p+1);”的输出结果是。

3、对数组元素的引用方法有两种:和。设int a[10],*p=a;则对a[3]的引用可以是或。

4、在C程序中,可以通过三种运算来移动指针:、、。

5、设有如下定义:

int a[5]={0,1,2,3,4},*p1=&a[1],*p2=&a[4];则p2-p1的值为______ ,*p2-*p1的值为。

三、阅读程序,写出运行结果

1、main()

{ int a[10],i,*p;

*p=a;

for (i=0; i<10; i++)

scanf("%d",&a[i]);

for (;p

printf("%d",*p);

}

执行程序,输入:0 1 2 3 4 5 6 7 8 9

运行结果:

2、main()

{ int a[10],*p;

p=&a[0];

for (;p

scanf("%d",p);

p=a;

for (p=a+9; p>=a; p--)

printf("%d",*p);

}

执行程序,输入:0 1 2 3 4 5 6 7 8 9

运行结果:

能力提高(B)

一、选择题

1、已知:int a[]={1,2,3,4},y,*p=&a[1];则执行语句"y=*p++;"之后,变量y的值为()。

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

2、已知:int a[]={1,2,3,4},y,*p=&a[0];则执行语句"y=++(*p);"之后,下面()元素的值发生了变化。

A) a[0] B) a[1] C) a[2] D) 都没发生变化

3、已知:int x[]={1,3,5,7,9,11},*ptr=x;则能够正确引用数组元素的语句是()。

A) x B) *(ptr--) C) x[6] D) *(--ptr)

4、若有以下语句并且0<=k<6,则正确表示数组元素地址的语句是()。

int x[]={1,3,5,7,9,11},*ptr=x,k;

A) x++ B) &ptr C) &ptr[k] D)&(x+1)

5、已知:int a[]={1,2,3,4,5,6},*p=a;则值为3的表达式是()。 .

A) p+=2,*(p++) B) p+=2,*++p C) p+=3,*p++ D) p+=2,++*p

6、若第一个printf语句的输出为194,则第二个printf语句的输出为()。

int a[10],*p=a;

printf("%x",p);

printf("%x",p+9);

A) 203 B) 212 C) 1a6 D)19d

二、阅读程序,写出运行结果

1、# include

main()

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

int x,y,*p;

p=&a[0];

x=*(p+2);

y=*(p+4);

printf("*p=%d,x=%d,y=%d\n",*p,x,y);

}

运行结果:

2、# include

main()

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

int *p;

p=a;

printf("%d,",*p);

printf("%d,",*(++p));

printf("%d,",*++p);

printf("%d,",*(p--));

p+=3;

printf("%d,%d\n",*p,*(a+3));

}

运行结果:

三、程序填空

1、下面的程序实现从10个数中找出最大值和最小值.

int max,min;

find_max_min(int *p,int n)

{ int *q;

max=min=*p;

for (q= ; ; q++)

if ( ) max=*q;

else if ( ) min=*q;

}

main()

{ int i,num[10];

printf("input 10 numbers:\n");

for (i=0; i<10; i++)

scanf (%d",&num[i]);

find_max_min(num,10);

printf("max=%d,min=%d\n",max,min);

}

四、编程

1、编写两个函数,分别完成一维数组的输入和输出.

main()

{ int a[10];

input(a,10);

output(a,10);

}

void input(int *p,int n)

{

}

void output(int *p,int n)

{

}

第3讲

知识归纳:

1、数组、指针和函数的结合应用:

2、二维数组的地址问题:

int a [3][4] = { 1,2 ,3,4,5,6,7,8,9,10,11,12} ;

int * p = a ;

(1) (1)a ------数组名表示数组的首地址;等价于*( a + 0 ) 、* a

(2) (2)a [ i ] ------表示数组的第i行的行地址,即第i行第一个元素的地址;

等价于*( a + i ) 、* ( p + i ) ;

(3) (3)&a [ i ][ j ] ------表示数组的第i行j 列元素的地址;等价于*( a + i ) +j

和*( p + i ) +j

(4) (4)a [ i ][ j ]-----表示数组的第i行j 列元素;等价于* ( *( a + i ) +j ) ;

和* ( *( p + i ) +j ) ;

3、指向二维数组的行指针:

int a [3][4] = { 1,2 ,3,4,5,6,7,8,9,10,11,12} ;

int ( * p )[4 ] = a ;

(1) (1)int ( * p )[4 ] = a ;

表示p 是一个指向二维数组(一行有四个元素的)行地址的行指针;

(2) p + 1 ;行指针加1 ,是加一行元素的字节数的和;

p = p + 1 ; 行指针从当前行指向下一行;

基础练习(A)

一、选择题

1、已知:int a[3][4],*p=a;则p表示()。

A) 数组a的0行0列元素B) 数组a的0行0的地址

C) 数组a的0行首地址D) 以上均不对

2、已知:int a[3][4],*p;若要指针变量p指向a[0][0],正确的表示方法是()。

A) p=a B) p=*a C) p=**a D) p=a[0][0]

3、已知:double b[2][3],*p=b,下面哪个不能表示数组b的0行0列元素()。

A) b[0][0] B) **p C) *p[0] D) *p

4、设有说明int (*ptr)[M];其中的标识符ptr是()。

A) M个指向整型变量的指针

B) 指向M个整型变量的函数指针

C) 一个指向M个整型元素的一维数组的指针

D) 具有M个指针元素的一维指针数组,每个元素都只能指向整型变量

二、填空题

1、已知:下面程序段中第一个printf语句的输出是200,则第二个printf语句的输出是,第三

个printf语句输出是。

int a[3][4],*p=a;

printf("%d",a);

printf("'%d",p);

printf("%d",p+1);

2、已知:int a[2][3]={1,2,3,4,5,6},*p=&a[0][0];则表示元素a[0][0]的方法有指针法: ,数组名法: 。*(p+1)的值为。

三、阅读程序,写出运行结果

1、main()

{ int a[2][3]={0,1,2,3,4,5},*p1,*p2;

p1=a; p2=&a[0][0];

printf("%d,%d\n",p1,p2);

printf("%d,%d\n",*p1,*p2);

printf("%d,%d\n",p1+1,p2+1);

printf("%d,%d\n",*(p1+1),*(p2+1));

}

假设数组a的首地址为3000,则运行结果为:

能力提高(B)

一、选择题

1、已知:int i,x[3][4];则不能把x[1][1]的值赋给变量i的语句是()。

A) i=*(*(x+1)+1) B) i=x[1][1] C) i=*(*(x+1)) D) i=*(x[1]+1}

2、已知:static int a[2][3]={2,4,6,8,10,12};正确表示数组元素地址的是()。

A) *(a+1) B) *(a[1]+2) C) a[1]+3 D) a[0][0]

二、阅读程序,写出运行结果

1、main()

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

int m,*ptr;

ptr=&a[0][0];

m=(*ptr)*(*(ptr+2))*(*(ptr+4));

printf("%d\n",m);

}

2、main()

{ int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,13};

int (*ptr)[4]; int sum=0,i,j;

ptr=a;

for (i=0;i<3;i++)

for (j=0;j<2;j++)

sum+=*(*(ptr+i)+j);

printf("%d\n",sum);

}

运行结果:

三、程序填空

1、下面程序通过指向整型的指针将数组a[3][4]的内容按3行*4列的格式输出,请给printf()填入适当的参数,使之通过指针p将数组元素按要求输出.

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},*p=a;

main()

{ int i,j;

for (i=0; i<3; i++ )

for (j=0; j<4; j++ )

printf("%4d", );

第4讲

知识归纳:

1、指向字符串的指针变量:

(1) 定义指向字符串的指针:

char * 指针名= 字符串;

如char * ps = “I am a teacher .” ;

//这里是将字符串的首地址存放在字符指针中,而不是将字符串中的字符存入指针;

(2) 比较:

char * p s = “I am a teacher .” ; √

分开:char *ps ;

ps = “I am a teacher .” ; √

//因为可以将字符串的首地址存放在指针中;

char s [ 20 ] = “I am a teacher .” ; √

分开:char s [20 ] ;

s = “I am a teacher .” ; ×

//因为s 表示字符数组的首地址,是常量,不能在赋值号的左端,不能将字符串的首地址赋值给数组名;

(3) 再比较:

char s [20] ;

sc anf ( “%s” , s ) ; √

变换:char * ps ;

scanf ( “%s” , ps ) ; ×

// 错在字符指针没有指向任何存储空间,不能给他输入字符串;

改成:char s [20] , * ps ;

ps = s ;

scanf ( “%s” , ps ) ; √

//字符指针在没有指向一个确切的字符数组时,不能使用%s格式符,输入字符串;

2、字符串指针作函数参数:

传地址调用

基础练习(A)

一、选择题

1、已知:char str[]="OK!";对指针变量ps的说明和初始化是()。

A) char ps=str; B) char *ps=str;

C) char ps=&str; D) char *ps=&str;

2、下面不正确的字符串赋值或赋初值的方式是()。

A) char *str; str="string";

B) char str[7]={'s','t','r','i','n','g'};

C) char str[10]; str="string";

D) char str1[]="string",str2[20]; strcpy(str2,str1);

3、已知:char b[5],*p=b;则正确的赋值语句是()。

A) b="abcd"; B) *b="abcd"; C) p="abcd"; D) *p="abcd"

4、已知:char s[20]="programming",*ps=s;则不能引用字母o的表达式是()。

A) ps+2 B) s[2] C) ps[2] D) ps+=2,*ps

5、下列对字符串的定义中,错误的是()。

A) char str[7]="FORTRAN";

B) char str[]="FORTRAN";

C) char *str="FORTRAN";

D) char str[]={'F','O','R','T','R','A','N','\0'};

6、已知:char c[8]="beijing",*s=c; int i;则下面的输出语句中,错误的是()。

A) printf("%s\n",s); B) printf("%s\n",*s);

C) for (i=0; i<7;i++) D) for (i=0; i<7; i++)

printf("%c",c[i]); printf("%c",s[i]);

7、已知:char s1[4]="12"; char *ptr;则执行下面语句后输出为()。

ptr=s1;

printf("%c\n",*(ptr+1));

A) 字符'2' B) 字符'1' C) 字符'2'的地址D) 不确定

二、阅读程序,写出运行结果

1、# include

main()

{ char a[]="language";

char *ptr=a;

while (*ptr!='\0')

{ printf("%c",*ptr);

ptr++;

}

}

运行结果:

2、#include

main()

{ char *str="abcde";

printf("%c,",*str);

printf("%c,",*str++);

printf("%c,",*++str);

printf("%c,",(*str)++);

printf("%c\n",++*str);

}

运行结果:

能力提高(B)

一、选择题

1、已知:char s[10],*p=s;则在下列语句中,错误的语句是()。

A)p=s+5; B)s=p+s; C)s[2]=p[4]; D)*p=s[0];

2、已知:char s[100]; int i=10;则在下列引用数组元素的语句中,错误的表示是()。

A)s[i+10] B)*(s+i) C)*(i+s) D)*((s++)+i

3、已知:int i; char *s="a\045+045\'b";执行语句“for ( i=0; *s++; i++) ;”之后,变量i的结果是()。

A)7 B)8 C)9 D)以上均是错误的

4、已知:char *s="a\089+089\'b";则执行语句“for(i=0;*s++; i++);”之后,变量i的结果是()。A)7 B)8 C)9 D)1

二、填空题

1、已知:char *s1="abc\\\"de",*s2="abc\101+101\'de",*s3="abc\089+980\\";则语句“printf("%s\t%s\t%s\n",s1,s2,s3);”的结果是。

2、若:char *s1="China\\\bBeijing\t",*s2="123\078\0x5",*s3="123\087\0xa";则语句“printf("%d,%d,%d\n",strlen(s1),strlen(s2),strlen(s3));”的结果是。

三、阅读程序,写出运行结果

1、# include

# include

main()

{ char *p1="abc",*p2="ABC",str[50]="xyz";

strcpy(str+2,strcat(p1,p2));

printf("%s\n",str);

}

运行结果:()

2、# include

main()

{ char a[]="Program",*ptr;

for (ptr=a; ptr

putchar (*ptr);

}

运行结果:()

3、# include

main()

{ char a[]="language";

char *ptr=a;

while (*ptr)

{ printf("%c",*ptr-32);

ptr++;

}

}

运行结果:LANGUAGE

4、以下程序段的输出为()。(选做)

static char a[]="Basic";

char *ptr;

for (ptr=a; ptr

printf("%s\n",ptr);

A) Basic B) c C) B D) Basic

asic ci a

sic sic s

ic asic I

c Basic c

四、写出函数实现的功能

1、已知函数定义如下:

abcd ( char *s1,char *s2)

{ while (*s2++=*s1++);

}

函数abcd的功能是()。

A)串复制B)求串长C)串比较D)串反向

2、已知函数定义如下:

int f(char *s)

{ char *p=s;

while (*p!='\0') p++;

return (p-s);

}

函数f的功能是()。

A)串比较B)求串长C)串复制D)以上均不对

五、编程题

1、写一个函数,求一个字符串的长度。在主函数中输入字符串,并输出字符串长度,用指针法处理。

第5讲

知识归纳:

1、指针数组:

(1) (1)概念:一个数组,其元素均为指针类型数据,称为指针类型;

指针数组中的每一个元素都相当于一个指针变量;

(2) (2)格式:类型名* 数组名[ 常量] ;

如:char * str[3 ] ={ “China”,”America”,”Canada”} ;

//三个字符串的首地址依次放入str[0] , str[1] , str[2] 中;

2、指向指针的指针:

(1) (1)概念:专门用来存放指针变量地址的指针变量,称为指向指针的指针;

(2) (2)定义格式:int a =5 ;

int * pa = & a ;

int * * pp = &pa ;

printf ( “%d , %d , %d \n” , a , *pa , **pp) ;

所以,a , *pa , **pp等价;

3、指针的总结和综合应用

基础练习(A)

一、选择题

1、已知:double *p[6];它的含义是()。

A)p是指向duoble型变量的指针B)p是double型数组

C)p是指针数组D)p是数组指针

2、已知:char *aa[2]={"abcd","ABCD"};则以下说法正确的是()。

A)aa数组元素的值分别是"abcd"和"ABCD"

B)aa是指针变量,它指向含有两个数组元素的字符型一维数组

C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址

D)aa数组的两个元素中各自存放了字符'a'和'A'的地址

3、与定义“int *p[4]”等价的是()。

A)int p[4] B)int *p C)int *(p[4]) D)int (*p)[4]

二、填空题

1、对于“int a[4];”可理解为数组a有4个元素,每个元素都是整型数据,那么,对于“int *a[4];”的理解就是数组a有4个元素,每个元素都是,又因为指针变量可指向与其同类型的变量,故每个元素都只能指向变量。

2、访问变量的方式有两种:和,指向指针的指针采用的是“二级间址”方法。现定义一个指向指针数据的指针变量,其基类型是字符型:。

能力提高(B)

一、阅读程序,写出运行结果

1、# include

main()

{ char *name[5],a1[20],a2[20],a3[20],a4[20],a5[20];

int i;

gets(a1); gets(a2); gets(a3); gets(a4); gets(a5);

name[0]=a1; name[1]=a2; name[2]=a3; name[3]=a4; name[4]=a5;

for (i=0; i<5; i++)

printf("%s\n",name[i]);

}

运行程序,输入:aababcabcdabcde表示回车)

运行结果:

2、# include

main()

{ char *name[5]={"Follow me","BASIC","Great Wall","FORTRAN","Computer"};

char **p=name;

int i;

for (i=0; i<5; i++)

printf("%s\n",*p++);

}

运行结果:

3、main()

{ int a[5]={2,4,6,8,10},*p,**k;

p=a;

k=&p;

printf("%d",*p++));

printf("%d\n",**k);

}

运行结果:

二、程序填空(选做)

1、下面程序完成的功能是对一批程序设计语言名从小到大进行排序并输出。

# include

# include

sort ( char *book[], int num)

{ int i,j;

char *temp;

for (j=1; j<=num-1; j++ )

for (i=0; ; i++ )

if (strcmp(book[i],book[i+1])>0)

{ temp=book[i];

book[i]=book[i+1];

book[i+1]=temp;

}

}

main()

{ int i;

char *book[]={"FORTRAN","PASCAL","BASIC","COBOL","C","Smalltalk"}; sort( );

for ( i=0; i<6; i++ )

printf("%s\n",book[i]);

}

链接二级考试

一、一、选择题

1、若有以下调用语句,则不正确的fun函数的首部是( )。

A) void fun(int m, int x[]) B) void fun(int s, int h[41])

C) void fun(int p, int *s) D) void fun(int n, int a)

main()

{ …

int a[50],n;

fun(n, &a[9]);

} (2000年4月)

2、设已有定义: char *st="how are you"; 下列程序段中正确的是( ) 。

A) char a[11], *p; strcpy(p=a+1,&st[4]);

B) char a[11]; strcpy(++a, st);

C) char a[11]; strcpy(a, st);

D) char a[], *p; strcpy(p=&a[1],st+2);

(2000年4月)

3、有如下说明

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

则数值为9的表达式是( )。

A) *P+9 B) *(P+8) C) *P+=9 D) P+8

(2000年9月)

4、有如下程序

main()

{ char s[]=”ABCD”, *P;

for(p=s+l; p

}

该程序的输出结果是( ) 。

A) ABCD B) A C) B D) BCD

BCD B C CD

CD C D D

D D

(2000年9月)

5、有如下程序

main()

{ char ch[2][5]={“6937”,”8254”},*p[2];

int i,j,s=0;

for(i=0;i<2;i++) p[i]=ch[i];

for(i=0;i<2;i++)

for(j=0;p[i][j]>?\0?;j+=2)

s=10*s+p[i][j]-…0?;

printf(“%d\n”,s);

}

该程序的输出结果是( )。

A) 69825 B) 63825 C) 6385 D) 693825 (2000年9月)

6、下列程序段的输出结果是( ) 。

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

void fun(int *x, int *y)

{ printf(“%d ,%d”, *x, *y); *x=3; *y=4;}

main()

{ int x=1,y=2;

fun(&x,&y);

printf(“%d %d”,x, y);

}

(2001年4月)

7、下列程序的输出结果是( )。

A) 非法B)a[4]的地址C)5 D)3

main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;

printf(“%d”,*--p);

} (2001年4月)

8、下列程序的运行结果是( )。

A) 6 3 B) 3 6 C) 编译出错D) 0 0

void fun(int *a, int *b)

{ int *k;

k=a; a=b; b=k;

}

main()

{ int a=3, b=6, *x=&a, *y=&b;

fun(x,y);

printf(“%d %d”, a, b);

} (2001年4月)

9、下面程序的输出结果是( )。

A) 0 B) 1 C) 10 D) 9

main()

{ int a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;

p=a;

printf(“%d\n”,*p+9);

} (2001年4月)

10、以下程序的输出结果是( ) 。

char cchar(char ch)

{

if(ch>=‘A’&&ch<=‘Z') ch=ch-‘A'+‘a';

return ch;

}

main()

{ char s[]="ABC+abc=defDEF",*p=s;

while(*p)

{ *p=cchar(*p);

p++;

}

printf("%s\n",s);

}

A) abc+ABC=DEFdef B) abc+abc=defdef

C) abcaABCDEFdef D) abcabcdefdef

(2002年4月)

11、以下程序调用findmax函数返回数组中的最大值( ) 。

findmax(int *a,int n)

{ int *p,*s;

for(p=a,s=a; p-a

if ( ) s=p;

return(*s);

}

main()

{ int x[5]={12,21,13,6,18};

printf("%d\n",findmax(x,5));

}

在下划线处应填入的是

A) p>s B) *p>*s C) a[p]>a[s] D) p-a>p-s

(2002年4月)

12、若有以下定义和语句:

int s[4][5],(*ps)[5];

ps=s;

则对s数组元素的正确引用形式是( )。

A) ps+1 B) *(ps+3) C) ps[0][2] D) *(ps+1)+3

(2002年4月)

13、以下程序的输出结果是( ) 。

#include

#include

main()

{ char b1[8]="abcdefg",b2[8],*pb=b1+3;

while (--pb>=b1) strcpy(b2,pb);

printf("%d\n",strlen(b2));

}

A) 8 B) 3 C) 1 D) 7

(2002年4月)

14、若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是( )。

A) p=q; B) *p=*q; C) n=*q; D) p=n;

(2002年9月)

15、有以下程序

void fun(char *c,int d)

{ *c=*c+1;d=d+1;

printf(“%c,%c,”,*c,d);

}

main()

{ char a=?A?,b=?a?;

fun(&b,a); printf(“%c,%c\n”,a,b);

}

程序运行后的输出结果是( )。

A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b

(2002年9月)

16、有以下程序

#include

main()

{ char *p=“abcde\Ofghjik\0”;

printf(“%d\n”,strlen(p));

}

程序运行后的输出结果是( ) 。

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

(2002年9月)

17、有以下程序

void ss(char *s,char t)

{ while(*s)

{ if(*s==t) *s=t-…a?+?A?;

s++;

}

}

main()

{ char str1[100]=“abcddfefdbd”,c=?d?;

ss(str1,c); printf(“%s\n”,str1);

}

程序运行后的输出结果是( ) 。

A) ABCDDEFEDBD B) abcDDfefDbD

C) abcAAfefAbA D) Abcddfefdbd

(2002年9月)

18、有以下程序

int *f(int *x,int *y)

{ if(*x<*y)

return x;

else

return y;

}

main()

{ int a=7,b=8,*p,*q,*r};

}

执行后输出结果是( )。

A) 7,8,8 B) 7,8,7 C) 8,7,7 D) 8,7,8

(2003年4月)

19、有以下程序

main()

{ char *s[]={"one","two","three"},*p;

p=s[1];

printf("%c,%s\n",*(p+1),s[0]);

}

执行后输出结果是( )。

A) n,two B) t,one C)w,one D) o,two

(2003年4月)

20、有以下程序

main()

{ int x[8]={8,7,6,5,0,0},*s;

s=x+3

printf("%d\n",s[2]);

}

执行后输出结果是( ) 。

A) 随机值B) 0 C) 5 D) 6

(2003年4月)

21、阅读以下函数

fun(char *s1,char *s2)

{ int i=0;

while(s1[i]==s2[i]&& s2[i]!=…\0?)i++;

return(s1[i]== && s2{i}!==…\0?);

}

此函数的功能是( ) 。

A) 将s2所指字符串赋给s1

B) 比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C) 比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0

D) 比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0

(2003年4月)

22、有以下程序

void fun(char *a, char *b)

{ a=b; (*a)++; }

{ char c1="A", c2="a", *p1, *p2;

p1=&c1; p2=&c2; fun(p1,p2);

printf(“&c&c\n”,c1,c2);

}

程序运行后的输出结果是( ) 。

A) Ab B) aa C) Aa D) Bb

(2003年9月)

23、若程序中已包含头文件stdio.h, 以下选项中,正确运用指针变量的程序段是( )。

A) t *i=NULL; B) float *f=NULL;

scanf("&d",f); *f=10.5;

C) char t="m", *c=&t; D) long *L;

*c=&t; L=…\0?;

(2003年9月)

24、有以下程序段

main()

{ int a=5, *b, **c;

c=&b; b=&a;

……

}

程序在执行了c=&b:b=&a;语句后,表达式:**c的值是( )。

A) 变量a的地址B) 变量b中的值C) 变量a中的值D) 变量b的地址

(2003年9月)

25、已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!=…\0?){p1++;p2++; } }

函数的功能是( )。

A) 将p1所指字符串复制到p2所指内存空间

B) 将p1 所指字符串的地址赋给指针p2

C) 对p1和p2两个指针所指字符串进行比较

D) 检查p1和p2两个指针所指字符串中是否有‘\0’

(2003年9月)

二、二、填空题

1、以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的

字符串为:556,则输出十进制整数366。请填空。

#include

main()

{ char *p, s[6];

int n;

p=s;

gets(p);

n=*p-'0';

while(__________!='\0')n=n*8+*p-'0';

printf("%d \n",n);

} (2000年4月)

2、下列程序的输出结果是。

void fun(int *n)

{ while( (*n)--);

printf(“%d”,++(*n));

}

main()

{ int a=100;

} (2001年4月)

3、以下程序的输出结果是。

main()

{ int arr[ ]={30,25,20,15,10,5}, *p=arr;

p++;

printf(“%d\n”,*(p+3));

} (2001年4月)

4、设有以下程序:

main()

{ int a, b, k=4, m=6, *p1=&k, *p2=&m;

a=pl==&m;

b=(*p1)/(*p2)+7;

printf(“a=%d\n”,a);

printf(“b=%d\n”,b);

}

执行该程序后,a的值为,b的值为。

(2001年9月)

5、以下程序运行后的输出结果是。

main()

{ char s[ ]=“9876”,*p;

for ( p=s ; p

}

(2001年9月)

6、以下程序的输出结果是。

main()

{ char *p="abcdefgh",*r;

long *q;

q=(long*)p;

q++;

r=(char*)q;

printf("%s\n",r);

}

(2002年4月)

7、以下程序的输出结果是。

main()

{ int x=0;

sub(&x,8,1);

printf("%d\n",x);

}

sub(int *a,int n,int k)

{ if(k<=n) sub(a,n/2,2*k);

*a+=k;

} (2002年4月)

8、下面程序的运行结果是:。

void swap(int *a,int *b)

{ int *t;

t=a; a=b; b=t;

}

main()

{ int x=3,y=5,*p=&x,*q=&y; swap(p,q);

printf(“%d%d\n”,*p,*q);

} (2002年9月)

c语言程序设计期末试题A(含答案)

c语言程序设计期末试题A(含答案) 一、单项选择题(选择一个最佳答案,每题2分,共20分) 1. 一个C程序的执行是从(A )。 A) 本程序的main函数开始,到main函数结束 B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C) 本程序的main函数开始,到本程序文件的最后一个函数结束 D) 本程序文件的第一个函数开始,到本程序main函数结束 2. 下列选项中,不能用作标识符的是(D )。 A) _1234_ B) _1_2 C) int_2_ D) 2_int_ 3. 以下定义语句中正确的是( C)。 A) char a='A'b='B'; B) float a=b=10.0; C) int a=10,*b=&a; D) float *a,b=&a; 4. 设有以下定义:#define d 2 int a=0; double b=1.25; char c=’A’; 则下面语句中错误的是(B)。 A) a++; B) b++ C) c++; D) d++; 5. 以下4个选项中,不能作为一条C语句的是(D)。 A) {;} B) a=0,b=0,c=0; C) if(a>0); D) if(b==0) m=1;n=2; 6. 有以下定义语句double a,b; int w; long c; 若各变量已正确赋值,则下列选项中正确的表达式是( C)。 页脚内容1

A) a=a+b=b++ B) w%(int)a+b) C) (c+w)%(int)a D) w=a==b; 7. 设有定义:int n=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是(D)。 A) p=1; B) *q=2; C) q=p; D) *p=5; 选D. A.p是一个指针,不能给它赋一个整型的值1 B.*q仍然是一个指针,*q就是p.所以也不能给它赋一个整型的值. C.q=p;q是个二级指针,p是一级指针,不能把一级指针赋给二级指针. *p=5,即给n赋值为5,正确. 8. 设有定义:int a,*pa=&a; 以下scanf语句中能正确为变量a读入数据的是( A)。 A) scanf(“%d”,pa) ; B) scanf(“%d”,a) ; C) scanf(“%d”,&pa) ; D) scanf(“%d”,*pa); 9. 若有说明:char *language[]={”FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};则表达式 *language[1]>*language[2]比较的是(A)。 A)字符B和字符P B) 字符串FORTRAN和字符串BASIC C)字符F和字符B D) 字符串BASIC和字符串PASCAL 10. 执行语句for(i=1;i++<4;);后变量i的值是(C )。 A) 3 B)4 C) 5 D) 不定 一、填空题(每空2分,共18分) 1. 若有定义:int a=7;float x= 2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为2.5。 页脚内容2

C语言程序设计期末考试选择题题库

第一章1、一个C程序可能出现的错误有(A)A,以上都包括 B,逻辑错误 C,运行错误 D,语法错误 2、C程序中一般可以包含几个函数(D) A.1个 B.多个 C.0个 D.至少一个 3.C语言属于程序设计语言的哪个类别(B) A.机器语言 B.高级语言 C.面向对象语言 D.汇编语言 4.以下关于C语言描述错误的是(B) A.一个C程序总是从main函数开始执行 B.一个C程序可以包含多个main函数 C.每个语句的最后必须有一个分号 D.C语言的注释符是以"/*"开始并以"*/"结束

5、在调试过程中,逻辑错误是指(C) A.所书写的语句,不符合C的语法。 B.在从obj生成exe文件的过程中,如果函数名书写错误,可能产生的错误。 C.程序的运行结果不符合题目要求。 D.在exe文件的执行过程中,产生运行异常。 第二章 1、16位的二进制数可以表示的整数的范围是(C) A.[-32768,32768] B.[-32767,32768] C.[-32768,32767] D.[-32767,32767] 2、C语言中的实型数据包括(A) A.float和double B.int和float C.float和char D.int和double 3、以下不合法的字符常量是(C) A.'2' B.'A' C.'ab'

4、在以下各组标识符中,均是合法的C语言标识符是(A) A.abc,A_4d,_student,xyz_abc B.auto,12-a,a_b,ab5.x C.A_4d,_student,xyz_abc,if D.abc,a_b,union,scan 5、若有定义:chara;intb;floatc;doubled; 则表达式a*b+d-c值的类型为(A) A.char B.float C.double D.int 6、类型修饰符unsigned不能修饰(D) A.char B.longint C.int D.float 7、若有定义:doublex=1,y; 执行语句,则y的值是(B) A,1 B,2.0

c语言程序设计期末试题B(含答案)

c语言程序设计期末试题B(含答案) 一单项选择题(每小题1分,共10分) 1. A 2. C 3. D 4. A 5. B 1.以下4组用户定义标识符中,全部合法的一组是() A)_total clu_1 sum B)if -max turb C)txt REAL 3COM D)int k_2 _001 2.以下程序的输出结果是() #include main( ) { int a = 1, b = 2, c = 3; printf(“%d”, c>b>a); } A) 2 B) 1 C) 0 D) 3 3.以下正确的叙述是() A) 在C语言中,main函数必须位于文件的开头 B) C语言每行中只能写一条语句 C) C语言本身没有输入、输出语句 D) 对一个C语言进行编译预处理时,可检查宏定义的语法错误 4.设有定义:int a,*pa=&a; 以下scanf语句中能正确为变量a读入数据的是() A)scanf("%d",pa); B)scanf("%d",a); C)scanf("%d",&pa); D)scanf("%d",*pa); 5.若有以下程序段, int c1=1,c2=2,c3; c3=1.0/c2*c1; 则执行后,c3中的值是() A) 0 B) 0.5 C) 1 D) 2 6. D 7. D 8. A 9. C 10. D 6.能正确表示逻辑关系:“a≥=10或a≤0”的C语言表达式是() A) a>=10 or a<=0 B)a>=0|a<=10 C)a>=10 &&a<=0 D)a>=10‖a<=0 7.执行下面的程序时,将1、2、3、4分别赋给a、b、c、d,正确的输入是() main( ) { int a,b,c,d; scanf(“%d,%d,%d%d”,&a,&b,&c,&d); … } A)1 2 3 4 B)1 2 3,4 C) 1,2,3,4 D) 1,2,3 4

C语言程序设计期末考试试题及答案知识分享

C语言程序设计试题 (2008 /2009 学年第二学期) 一.选择题(满分30分,每题2分) 1.若a、b、c都定义为int类型且初值为0,则以下不正确的赋值语句是 D 。 A. a=b=c+8; B. a+=y+3; C. c++; D. a+b+c 2. 已知int j,i=1;执行语句“j=i++;”后,变量i的值是 B 。 A. 1 B. 2 C. –1 D. -2 3.执行下面程序: #include "stdio.h" void main() { int a=1,b=2,c=3; c=(a+=a+2),(a=b,b+3); printf(“%d,%d,%d”,a,b,c); } 则输出结果是: A 。 A. 2,2,4 B. 4,2,3 C. 5,5,3 D. 4,2,5 4.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为 D 。 A. a< >0 B. !a C. a=0 D. a 5. for (j=0;j<11;j++);循环结束后,j的值是 B 。 A. 12 B. 11 C. 10 D. 9 6. C语言中函数返回值的类型由 D 决定的。 A. return语句中的表达式类型 B. 调用该函数的主调函数的类型 C. 调用函数时临时决定 D. 定义函数时所指定的函数类型 7. 下列说法中正确的是 B 。 A 在调用用户自定义函数时,必须对其进行声明。 B 函数可以返回一个值,也可以什么值也不返回。 C 说明函数时,必须明确参数的类型和返回值。 D 在程序设计中空函数没有什么作用。8. 若int i=10;执行下列程序后,变量i的正确结果是 D 。 switch ( i ) {case 0: i+=1; case 10: i+=1; case 11: i+=1; default: i+=1; } A. 10 B. 11 C. 12 D. 13 9. 下列语句中不正确的字符串赋值或初始化的是 C 。 A. char str[10]={"strings"}; B.char str[8]={'s','t','r','i','n ','g','s','\0'}; C. char str[10]; str= "strings"; D. char str[]= "strings"; 10. 有如下程序: #include void main() { int a=1,b=0,c=0; if (a

C语言程序设计期末考试样卷

2008年C语言程序设计期末考试样卷 一、填空题 1、C语言程序从函数开始执行。 2、关系运算的结果得一个整数值:或者。 3、已知int a[ ]={0,1,2,3,4,5}; ,则它的最大下标是。 4、结构化程序的3种基本结构是,和。 5、若a1和a2都是double型变量,且a1的初值为3.0,a2的初值为2.0,则表达式pow(a2,fabs(a1))的值为。 6、表达式“8.2-2/3”的计算结果是。 7、若有定义:int a=25, b=14, c=19; 则表达式(a=bb?c:d):c)的值是。 8、设有以下结构体定义 struct emp { char name[8]; int age; char sex; }staff; 则用户定义的结构体类型名为。 9、表达式5>3&&2||8<4-!1的值。 10、已知int a[10]; ,则a占用内存个字节的存储单元,代表他们的首地址是 。 11、将str定义为字符数组并初始化为“Lei”的语句是。 12、设有定义:int n, *k=&n; ,以下语句利用指针变量k读写变量n中的内容,请将下列语句补充完整。scanf(“%d”, ); printf(“%d\n”, ); 13、设y是int型变量,请写出判断y为奇数的关系表达式:。 14、设有以下变量定义,并已赋确定值 char w; int x; float y; double z; 则表达式w*x+z-y所求得的数据类型为。 15、设i、j、k均为int型变量,则执行完下面的for循环后,k的值为。 for(i=0, j=10; i<=j; i++, j--) k=i+j; 16、语句:x++; ++x; x=x+1; x=1+x; 执行后都使变量x中的值增1,请写出一条相同功能的赋值语句(不得与列举的相同):。 17、设a,b,c均为整型数,且a=1,b=2,c=3,则语句a-=a+(++b)+(c--);被执行后a的值是。 18、若有定义“int a[2][3] = {1,3,5,7,9,11}; ”则a[1][0]的值是,*(*(a +1)+2))的值是。 19、设X为int型变量,请写出描述“X是偶数”的表达式是:。 20、C语言提供的三种逻辑运算符是、和!; 二、选择题 (1) 以下非法的赋值语句是 A) n=(i=2,++i); B)j++; C) ++(i+1); D)x=j>0; (2) 设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是

C语言程序设计期末考试及答案

第一次试验1.编写一个程序,求出给定半径r的圆的面积和周长,并且输 出计算结果。其中:r的值由用户输入,用浮点型数据处理。 #include<> voidmain() { floatPI=; floatr,area,perim; printf("请输入圆的半径:\n"); printf("r="); scanf("%f",&r); } 2.给一百分制成绩,要求输出成绩等 级’A’、’B’、’C’、’D’、’E’。90分以上 为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 #include<> voidmain() { intiNum; printf("请输入分数:"); scanf("%d",&iNum); switch(iNum/10) { case10: case9:printf("学生成绩A\n");break; case8:printf("学生成绩B\n");break; case7:printf("学生成绩C\n");break; case6:printf("学生成绩D\n");break; default:printf("学生成绩E\n");break; } }

3. 输入两个正整数m 和n ,求其最大公约数和最小公倍数。 #include<> intmain() { intp,r,n,m,temp; 4. printf("请输入两个正整数n,m:");.a (n 个a )之值,其中a 是一个数字。例如:2+22+222+2222+22222(此时n=5),n 由键盘输入。 #include<> intmain(void) { intsum=0; intsun=0; inta; intn; inti=0; printf("请入入a 值(整数):\n"); printf("a="); scanf("%d",&a); printf("请入入n 值:\n"); printf("n="); scanf("%d",&n); while(i

C语言程序设计期末考试试卷(A卷)

一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是。 A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是 A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由。 A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是 A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为 A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是。 A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是。#include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是。 A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是。 #include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9

C语言程序设计期末考试试题(含答案)

C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是( ) 。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123 C、45 D、345 8、若有以下定义int a,b; float x,则正确的赋值语句是( ) A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是( )

#include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是( ) #include main() { char c1='A',c2='Y'; printf("%d,%d\n",c1,c2); A、A,Y B、65,65 C、65,90 D、65,89 11、下列运算符中优先级最高的是( ) A、< B、十 C、% D、!= 12、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0是( ) 。 A、’x’&&’y’ B、x<=y C、x||y+z&&y-z D、!((x<y)&&!z ||1) 13、判断char型变量cl是否为小写字母的正确表达式为( ) A、’a’<=c1<=f’z’ B、(c1>=a)&&(c1<=z) C、(‘a’>=c1) (‘z’<=c1) D、(c1>=’a’)&&(c1<=’z’) 14、字符串"a"在内存中占据的字节个数为( ) A、0 B、 1 C、 2 D、 3 15、下面有关for循环的正确描述是( ) A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 16、下面程序的运行结果是( ) #include main() {int num=0; while(num<=2) {num++; printf(“%d ,num); } } A、 1 B、 1 2 C、 1 2 3

C语言程序设计期末考试试题及答案

C 语言程序设计 试 题 (2008 /2009 学年 第 二 学期) 一. 选择题(满分30分,每题2分) 1.若a 、b 、c 都定义为int 类型且初值为0,则以下不正确的赋值语句是 D 。 A. a=b=c+8; B. a+=y+3; C. c++; D. a+b+c 2. 已知int j ,i=1;执行语句“j=i++;”后,变量i 的值是 B 。 A. 1 B. 2 C. –1 D. -2 3.执行下面程序: #include "stdio.h" void main() { int a=1,b=2,c=3; c=(a+=a+2),(a=b,b+3); printf(“%d,%d,%d ”,a,b,c); } 则输出结果是: A 。 A. 2,2,4 B. 4,2,3 C. 5,5,3 D. 4,2,5 4.若要求在if 后一对圆括号中表示a 不等于0的关系,则能正确表示这一关系的表达式为 D 。 A. a< >0 B. !a C. a=0 D. a 5. for (j=0;j<11;j++);循环结束后,j 的值是 B 。 A. 12 B. 11 C. 10 D. 9 6. C 语言中函数返回值的类型由 D 决定的。 A. return 语句中的表达式类型 B. 调用该函数的主调函数的类型 C. 调用函数时临时决定 D. 定义函数时所指定的函数类型 7. 下列说法中正确的是 B 。 A 在调用用户自定义函数时,必须对其进行声明。 B 函数可以返回一个值,也可以什么值也不返回。 C 说明函数时,必须明确参数的类型和返回值。 D 在程序设计中空函数没有什么作用。 8. 若int i=10;执行下列程序后,变量i 的正确结果是 D 。 switch ( i ) {case 0: i+=1; case 10: i+=1; case 11: i+=1; default: i+=1; } A. 10 B. 11 C. 12 D. 13 9. 下列语句中不正确的字符串赋值或初始化的是 C 。 A . char str[10]={"strings"}; B.char str[8]={'s','t','r','i','n ','g','s','\0'}; C. char str[10]; str= "strings"; D. char str[]= "strings"; 10. 有如下程序: #include void main() { int a=1,b=0,c=0; if (a

C语言程序设计期末考试试题(含答案)

C语言程序设计期末考试试题(含答案) 一、单项选择题(本大题共20题,每题2分,共40分) 1、以下不是C语言的特点的是() A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是() A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由() A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是() A、有零个或多个输入 B、有零个或多个输出 C、有穷性

D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为() A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是() A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后(表示回车),x的值是()。 #include main(){ int x; float y; scanf("%3d%f",&x,&y); } A、12345 B、123

C、45 D、345 8、若有以下定义int a,b;float x,则正确的赋值语句是() A、a=1,b=2 B、b++; C、a=b=5 D、b=int(x); 9、以下程序的执行结果是() #include { int i=10,j=10; printf("%d,%d\n",++i,j--); } A、11,10 B、9,10 C、11,9 D、10,9 10、巳知字母A的ASCII码是65,以下程序的执行结果是() #include main() { char c1='A',c2='Y';

C语言程序设计期末考试题及答案

装订线

装订线

装订线

订 线

庄子云:“人生天地之间,若白驹过隙,忽然而已。”是呀,春秋置换,日月交替,这从指尖悄然划过的时光,没有一点声响,没有一刻停留,仿佛眨眼的功夫,半生已过。 人活在世上,就像暂时寄宿于尘世,当生命的列车驶到终点,情愿也罢,不情愿也罢,微笑也罢,苦笑也罢,都不得不向生命挥手作别。 我们无法挽住时光的脚步,无法改变人生的宿命。但我们可以拿起生活的画笔,把自己的人生涂抹成色彩靓丽的颜色。 生命如此短暂,岂容随意挥霍!只有在该辛勤耕耘的时候播洒汗水,一程风雨后,人生的筐篓里才能装满硕果。 就算是烟花划过天空,也要留下短暂的绚烂。只有让这仅有一次的生命丰盈充实,才不枉来尘世走一遭。雁过留声,人过留名,这一趟人生旅程,总该留下点儿什么! 生活是柴米油盐的平淡,也是行色匆匆的奔波。一粥一饭来之不易,一丝一缕物力维艰。 前行的路上,有风也有雨。有时候,风雨扑面而来,打在脸上,很疼,可是,我们不能向生活低头认输,咬牙抹去脸上的雨水,还有泪水,甩开脚步,接着向前。 我们需要呈现最好的自己给世界,需要许诺最好的生活给家人。所以,生活再累,不能后退。即使生活赐予我们一杯不加糖的苦咖啡,皱一皱眉头,也要饮下。 人生是一场跋涉,也是一场选择。我们能抵达哪里,能看到什么样的风景,能成为什么样的人,都在于我们的选择。 如果我们选择面朝大海,朝着阳光的方向挥手微笑,我们的世界必会收获一片春暖花开。如果我们选择小桥流水,在不动声色的日子里种篱修菊,我们的世界必会收获一隅静谧恬淡。 选择临风起舞,我们就是岁月的勇者;选择临阵脱逃,我们就是生活的懦夫。 没有淌不过去的河,就看我们如何摆渡。没有爬不过去的山,就看我们何时启程。 德国哲学家尼采说:“每一个不曾起舞的日子,都是对生命的辜负。”让我们打开朝着晨光的那扇窗,迎阳光进来,在每一个日出东海的日子,无论是鲜衣怒马少年时,还是宠辱不惊中年时,都活出自己的明媚和精彩。 时间会带来惊喜,只要我们不忘记为什么出发,不忘记以梦为马,岁月一定会对我们和颜悦色,前方也一定会有意想不到的惊喜。 人生忽如寄,生活多苦辛。 短暂的生命旅程, 别辜负时光,别辜负自己。 愿我们每一个人自律、阳光、勤奋,

C语言程序设计期末考试及答案

第一次试验 1.编写一个程序,求出给定半径r的圆的面积和周长,并且 输出计算结果。其中:r的值由用户输入,用浮点型数据处理。 #include <> void main( ) { float PI=; float r,area,perim; printf("请输入圆的半径:\n"); printf("r="); scanf("%f",&r); } 2.给一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。 90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 #include <> void main() { int iNum; printf("请输入分数:"); scanf("%d", &iNum); switch (iNum / 10) { . case 10: case 9 : printf("学生成绩A\n");break; case 8 : printf("学生成绩B\n");break; case 7 : printf("学生成绩C\n");break; case 6 : printf("学生成绩D\n");break; default: printf("学生成绩E\n");break; } } 3.输入两个正整数m和n,求其最大公约数和最小公倍数。#include <> )

int main() { int p,r,n,m,temp; 4. printf("请输入两个正整数n,m:");.a (n 个a )之值,其中a 是一个数字。例如:2+22+222+2222+22222(此时n=5),n 由键盘输入。 #include<> int main(void) { int sum = 0; int sun = 0; int a; int n; int i = 0; printf("请入入a 值(整数):\n"); printf("a = "); scanf("%d", &a); printf("请入入n 值:\n"); printf("n = "); scanf("%d", &n); while (i main()

大学大一C语言程序设计期末考试试卷及标准答案

大学大一C语言程序设计期末考试试卷及答案

————————————————————————————————作者:————————————————————————————————日期:

四川师范大学计算机科学学院 2012~2013学年度第二学期期末考试 C 语言程序设计试卷 试卷A 答卷说明: 1、 本试卷共6页,答题纸3页,4个大题,35个小题,满分100分,120分钟 完卷。 2、 闭卷考试,所有的答案都必须写在答题纸上,判卷以答题纸上答案为准。 3、 本试卷适用于2011级1、2、3班。 题号 一 二 三 四 总分 总分人 分数 得分 评卷人 壱、 单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的 序号填在题干的括号内。每小题1分,共20分) 1、 在C 语言中,下列标识符中合法的是( ) A). -int B). in1_3 C). A_B!D D). const 2、 不属于C 语言基本数据类型的是( ) A). int B). union C). char D). unsigned 3、 下面是对宏定义的描述。不正确的是( ) A). 宏不存在类型问题,宏名无类型,它的参数也无类型 B). 宏替换不占用运行时间 C). 宏替换只是字符串的简单替代 D). 宏替换时先检查类型,类型一致时才可以替换 4、 C 语言中,″\\xfds″在内存中占用的字节数是( ) A).3 B).4 C).5 D).6 5、 设int x;则执行printf(″%x \n″,~x^x);的结果是( ) A). ffffffff B). ff C). 0 D). 1 6、 对于while 语句,错误的说法是( ) A).用条件控制循环体的执行次数 B).循环体至少要执行一次 C).循环体有可能一次也不执行 D).循环体中可以包含若干条语句 __________________学院__________级___________班 姓名_______________ 学号_______________ ………………………………(密)………………………………(封)………………………………(线)……………………………… 密 封 线 内 答 题 无 效

大学大一C语言程序设计期末考试试卷及答案

四川师范大学计算机科学学院 2012~2013学年度第二学期期末考试 C 语言程序设计试卷 试卷A 答卷说明: 1、本试卷共6页,答题纸3页,4个大题,35个小题,满分100分,120分钟完卷。 2、闭卷考试,所有的答案都必须写在答题纸上,判卷以答题纸上答案为准。 3、本试卷适用于2011级1、2、3班。 一、 单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的 序号填在题干的括号内。每小题1分,共20分) 1、 在C 语言中,下列标识符中合法的是( ) A). -int B). in1_3 C). A_B!D D). const 2、 不属于C 语言基本数据类型的是( ) A). int B). union C). char D). unsigned 3、 下面是对宏定义的描述。不正确的是( ) A). 宏不存在类型问题,宏名无类型,它的参数也无类型 B). 宏替换不占用运行时间 C). 宏替换只是字符串的简单替代 D). 宏替换时先检查类型,类型一致时才可以替换 4、 C 语言中,″\\xfds ″在内存中占用的字节数是( ) A).3 B).4 C).5 D).6 5、 设int x;则执行printf(″%x \n″,~x^x);的结果是( ) A). ffffffff B). ff C). 0 D). 1 6、 对于while 语句,错误的说法是( ) A).用条件控制循环体的执行次数 B).循环体至少要执行一次 __________________学院__________级___________班 姓名_______________ 学号_______________ ………………………………(密)………………………………(封)………………………………(线)……………………………… 密 封 线 内 答 题 无 效

C语言程序设计期末考试及答案

第一次试验 1.编写一个程序,求出给定半径r的圆的面积与周长,并且 输出计算结果。其中:r的值由用户输入,用浮点型数据处理。 #include void main( ) { float PI=3、1415; float r,area,perim; printf("请输入圆的半径:\n"); printf("r="); scanf("%f",&r); //输入半径r perim=2*PI*r; //周长=2πr area=PI*r*r; //面积=πr^2 printf("周长:%f\n面积:%f\n",perim,area); //输出周长与面积、、 } 2.给一百分制成绩,要求输出成绩等 级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。 #include void main() { int iNum; printf("请输入分数:"); scanf("%d", &iNum); switch (iNum / 10) { case 10: case 9 : printf("学生成绩A\n");break; case 8 : printf("学生成绩B\n");break; case 7 : printf("学生成绩C\n");break; case 6 : printf("学生成绩D\n");break; default: printf("学生成绩E\n");break; } }

3.输入两个正整数m与n,求其最大公约数与最小公倍数。#include int main() { int p,r,n,m,temp; printf("请输入两个正整数n,m:");//请用空格隔开 scanf("%d%d,",&n,&m); if (n #include #include int i,a[4]; char t; int main() { printf("请输入字符串"); for(i=0;;i++) { scanf("%c",&t); if(t=='\n')break; else if(t>='A'&&t<='Z') a[0]++; else if(t>='a'&&t<='z')a[0]++; else if(t==' ')a[1]++;

C语言程序设计期末考试复习题及答案

C语言考试期末考试复习题及答案 一、选择题 (1) 一个C语言程序总是从(C )开始执行 A) 书写顺序的第一个函数 B) 书写顺序的第一条执行语句 C) 主函数main() D) 不确定 (2) 设int x=3,y=4,z=5,则下列表达式中的值为0的是 ( D ) A) ‘x’&&’y’B) x||y+z&&y-z C) x<=y D) !((x

C语言程序设计期末考试卷及答案

C 语言程序设计期末考试卷及答案 一、单项选择题。从A 、B 、C 、D 四个选项中,选择一个最佳答案填入括号内(每小题1分,共计30分)。 1.一个C 语言程序的执行是从()。 A )本程序文件的第一个函数开始,到 本程序文件的最后一个函数结束 B )本程序的main 函数开始,到main 函数结束 C )本程序的main 函数开始,到本程 序文件的最后一个函数结束 D )本程序文件的第一个函数开始,到 本程序的main 函数结束 2.下列选项中不属于... C 语言关键字的 是()。 A )switch B )printf C ) default D )case 3.设有语句inta=4;,则执行了语句 a+=a-=a*a;后,变量a 的值是()。 A )24 B )-24 C )4 D )16 4.已知inti;floatd;,则正确的表达 式是()。 A )(intd) B )int(d)%i C )(int)d%i D )int(d%i) 5.已知 inti,a;,执行语句 i=(a=3*9,a/5),a+11;后,变量i 的值是()。 A )5 B )16 C )27 D ) 38 6.下列选项中合法的字符型常量是()。 A )"a" B )'\n' C ) 7.下面程序的运行结果是()。 #include voidmain() {intk=15; printf("k=%d,k=%o,k=%x\n",k,k,k); } A )k=15,k=15,k=15 B )k=15,k=17,k=17 C )k=15,k=017,k=0xf D )k=15,k=17,k=f 8.已知a,b,c 为int 类型,执行语句: scanf ("%d%d%d",&a,&b,&c );使得a 为10,b 为20,c 为30,以 下不正确... 的输入形式是()。 A )10B )10C )10,20,30D )1020 20203030 30 9.已知intx=1,y=2,z=3;,执行下列程序段后,输出的结果是()。 if(x>y)z=x;x=y;y=z; printf("%d,%d,%d",x,y,z); A )1,2,3 B )2,3,3 C )2,3,1 D )2,3,2 ------------------------------------------第----------------------------2----------------------------装---------------------------------------线--------------------------------------------- 班级姓名 学号 ------------------------------------------第----------------------------1----------------------------装---------------------------------------线--------------------------------------------

相关文档
最新文档