C语言复习题整理 下载本文

四、编程题

1.编一程序,用简单选择排序方法对10个整数排序(从大到小)。排序思路为:首先从n个整数中选出值最大的整数,将它交换到第一

个元素位置,再从剩余的n-1个整数中选出值次大的整数,将它交换到第二个元素位置,重复上述操作n次后,排序结束。

2.编写一程序,实现两个字符串的连接(不用strcat( )函数)。 5.2 习题解答

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

1.答案是:1 2 3 4 2 2 3 4 5 6 2.答案是:

1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 3.答案是:s=0 4.答案是:place=6 5.答案是:s=1234 6.答案是:123 四、编程题

1.编一程序,用简单选择排序方法对10个整数排序(从大到小)。排序思路为:首先从n个整数中选出值最大的整数,将它交换到第一个

元素位置,再从剩余的n-1个整数中选出值次大的整数,将它交换到第二个元素位置,重复上述操作n次后,排序结束。

/*xt5_1.c*/ #include #define N 10

void smp_selesort(int r[ ],int n)/*简单选择排序*/ { int i,j,k; int temp; for(i=0;i

for(j=i+1;j

temp =r[i]; r[i]=r[j]; r[j]= temp; } } } main( ) {

int i,a[N];

printf(\请输入%d个整数:\\n\ for(i=0;i

scanf(\

smp_selesort(a,N); /*调用排序函数*/ printf(\排序后的输出为:\\n\ for(i=0;i

printf(\}

2.编写一程序,实现两个字符串的连接(不用strcat( )函数)。

/*xt5_2.c*/ #include main( ) {

char str1[50],str2[50]; int i=0,j=0;

printf(\请输入字符串1:\ scanf(\

printf(\请输入字符串2:\ scanf(\

while(str1[i]!='\\0') i++;

while((str1[i++]=str2[j++])!='\\0'); printf(\连接后的字符串为:%s\} }

题解6 指 针

6.1 习题 一、选择题

1.若已定义int a=8, *p=&a; ,则下列说法中不正确的是( D )。

A.*p=a=8 B.p=&a C.*&a=*p D.*&a=&*a

2.若已定义short a[2]={8,10},*p=&a[0];,假设a[0]的地址为2000,则执行p++后,指针p的值为( C )。

A.2000 B.2001 C.2002 D.2003 3.若已定义int a[8]={0,2,3,4,5,6,7,8 };*p=a;,则数组第2个元素“2”不可表示为( C )。

A.a[1] B.p[1] C.*p+1 D.*(p+1) 4.若已定义int a,*p=&a,**q=&p;,则不能表示变量a的是( C )。

A.*&a B.*p C.*q D.**q 5.设已定义语句\ *p[10], (*q)[10];\,其中的p和q分别是( D )。

① 10个指向整型变量的指针 ② 指向具有10个整型变量的函数指针 ③ 一个指向具有10个元素的一维数组的指针 ④ 具有10个指针元素的一维数组

A.②、① B.①、② C.③、④ D.④、③

6.若已定义int a[2][4]={ { 80, 81, 82, 83 }, { 84, 85, 86, 87 } }, (*p)[4]=a;则执行p++;后,**p代表的元素是(A.80 B.81 C.84 D.85 7.执行语句\;*p=a;后,(p+4)的值是( B )。

C )。

A.\ B.'\\0' C.'d' D.不能确定 8.设已定义int a[3][2]={10,20,30,40,50,60};和语句(*p)[2]=a;,则*(*(p+2)+1)的值为( A )。

A.60 B.30 C.50 D.不能确定 9.以下程序的运行结果是( C )。

#include main( ) {

int a[4][3]={ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12}; int *p[4], i; for(i=0; i<4; i++) p[i]=a[i];

printf(\}

A.4, 4, 9, 8 B.程序出错 C.4, 2,12,11 10.以下各语句或语句组中,正确的操作是( C )。

A.char s[4]=\ B.char *s; gets(s);

C.char *s; s=\ D.char s[5]; scanf(\

11.以下程序的运行结果是( A )。

#include main ( ) {

char *s=\ int a, b, c, d; a=b=c=d=0;

for ( ; *s ; s++ ) switch ( *s ) {

case 'c': c++; case 'b': b++;

default : d++; break; case 'a': a++; }

printf(\}

(a='a'的个数、b='b','c'的个数、c='c'的个数、d=非'a'的个数)

A.a=1,b=5,c=3,d=8 B.a=1,b=2,c=3,d=3 C.a=9,b=5,c=3,d=8 D.a=0,b=2,c=3,d=3

12.若有以下程序:

#include

D.1, 1, 7, 5 main ( int argc, char *argv[ ] ) {

while ( --argc )

printf ( \ printf ( \}

该程序经编译和连接后生成可执行文件S.EXE。现在如果在DOS提示符下键入S AA BB CC后回车,则输出结果是( C )。

A.AABBCC B.AABBCCS C.CCBBAA D.CCBBAAS

13.若有定义char *language[ ]={\ 则language[2]的值是:

A.一个字符 B.一个地址 C.一个字符串 D.不定值

14.若有以下定义和语句,则对a数组元素地址的正确引用是( C )。

int a[2][3], (*p)[3]; p=a;

A.*(p+2) B.p[2] C.p[1]+1 D.(p+1)+2

15.若有int max( ), (*p)( );,为使函数指针变量p指向函数max,正确的赋值语句是( A )。

A.p=max; B.*p=max; C.p=max(a, b); D.*p=max(a, b);

16.若有定义int a[3][5], i, j; (且0≤i<3, 0≤j<5),则a[i][j]不正确的地址表示是( D )。

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

17.设先有定义:

char s]10]; char *p=s;

则下面不正确的表达式是( B )。

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

18.设先有定义: char **s;

则下面正确的表达式是( B )。

A.s=\ B.*s=\C.**s=\ D.*s='c'

二、程序填空

1.定义compare ( char *s1, char *s2 )函数,实现比较两个字符串大小的功能。以下程序运行结果为-32,请用正确答案填空。

#include main ( ) {

printf ( \}

compare ( char *s1, char *s2 ) {

while ( *s1 && *s2 && 【1】*s1==*s2 )