内容发布更新时间 : 2024/11/18 22:38:10星期一 下面是文章的全部内容请认真阅读。
四、编程题
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
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 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 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 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 printf ( \} compare ( char *s1, char *s2 ) { while ( *s1 && *s2 && 【1】*s1==*s2 )