c语言第六章习题
- 格式:pdf
- 大小:124.95 KB
- 文档页数:11
《C语言程序设计(Visual C++6.0环境)》习题答案习题六一、思考题1、编写程序,将10个整形数2、4、6,…18,20赋给一个数组,然后使用指针输出显示该数组各元素的值。
#include “stdio.h”main(){int i,*p;int a[10]={2,4,6,8,10,12,14,16,18,20};p=a;for(i=0;i<10;i++)printf(“%3d”,*(p+i));}2、编写程序,将两个字符串连接起来。
#include<stdio.h>#define N 120main(){ char s1[N+N],s2[N],*p,*q;printf("输入2个字符串\n");scanf("%s%s",s1,s2);for(p=s1;* p!='\0'; p++);for(q=s2;*p++=*q++;);printf("两字符串连接后:%s\n",s1);}3、输入5个字符串,按英文字典排序从小到大顺序输出。
#include "stdio.h"#include "string.h"void sort(char *name[],int count){char *temp;int i,j,min;for(i=0;i<count-1;i++){min=i;for(j=i+1;j<count;j++)if(strcmp(name[min],name[j])>0)min=j;if(min!=i){temp=name[i];name[i]=name[min];name[min]=temp;}}}main(){char *name[5]={"BASIC","FORTRON","PASAL","C","FOXBASE"};int i=0;sort(name,5);for(;i<5;i++)printf("%s\n",name[i]);}4、编一程序,输入月份号,输出该月的英文月名。
6.4 课后习题6.4.1 项目练习一.练习目的1.进一步巩固一维数组的定义与数组元素的引用方法2.进一步巩固二维数组的定义与数组元素的引用方法3.进一步巩固字符数组的定义与引用方法二.练习内容1.用起泡法对10个数由大到小进行排序。
分析:起泡法的算法思想是,n个数排序,将相邻两个数依次进行比较,将大数调在前头,逐次比较,直至将最小的数移至最后,然后再将n-1个数继续比较,重复上面操作,直至比较完毕。
可采用双重循环实现起泡法排序,外循环控制进行比较的次数,内循环实现找出最小的数,并放在最后位置上(即沉底)。
#include "stdio.h"main(){int a[10];int i,j,t;printf("请输入10个整数:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<9;i++)for(j=0;j<9-i;j++)if(a[j]<a[j+1]){ t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("排序后的数为::\n");for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");getch();}2.从键盘输入10个整数,检查整数3是否包含在这些数据中,若是的话,它是第几个被输入的。
#include "stdio.h"main(){int i,a[10];printf("请输入这10个整数:");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++){if(a[i]==3) printf("3包含于数列中,输入顺序号是:%d",i+1);elseprintf("3不包含于此数列中");}getch();}3.编程:一个3*5的数组,要求每行都进行降序排列,并求出每行的平均值。
C语言程序设计– 第六章课后习题电子13-02班王双喜一、选择题1. C语言中一维数组的定义方式为:类型说明符数组名(C)A. [整型常量]B. [整型表达式]C. [整型常量]或[整型常量表达式]D. [常量表达式]2. C语言中引用数组元素时,下标表达式的类型为(C)A. 单精度型B. 双精度型C. 整型D. 指针型3. 若有定义:int a[3][4];,则对a数组元素的非法引用是(D)A. a[0][3*1]B. a[2][3]C. a[1+1][0]D. a[0][4](解释:A、B、C均正确,D看起来引用不太妥当,但其亦有其意义(a[0][4]等价于a[1][0]))4. 若有定义:int a[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};,则a数组的第一维大小是(C)A. 1B. 2C. 3D. 4(解释:共9个元素,除以3即可得第一维大小是3;若有余数,则应加1)5. 若有定义:int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};,则值为5的表达式是(C)A. a[5]B. a[a[4]]C. a[a[3]]D. a[a[5]]6. 要求定义包含8个int类型元素的一维数组,以下错误的定义语句是(A)A. int N = 8;int a[N]; B. #define N 3while (a[2*N+2];C. int a[] = {0, 1, 2, 3, 4, 5, 6, 7};D. int a[1+7] = {0};(解释:数组的大小必须是整型常量或整型常量表达式)7. 若二维数组a有m列,则在a[i][j]前的元素个数为(A)A. i * m + jB. j * m + iC. i * m + i - 1D. i * m + j - 18. 下面是对数组s的初始化,其中不正确的是(D)A. char s[5] = {"abc"};B. char s[5] = {'a', 'b', 'c'};C. char s[5] = "";D. char s[5] = "abcdef";(解释:D中元素个数太多,算上'\0'共六个,非法)9. 下面程序段的运行结果是(B)char c[] = "\t\v\\\0will\n";printf("%d", strlen(c));A. 14B. 3C. 9D. 字符串中有非法字符,输出值不确定(解释:字符串中第四个是'\0'即结束标志,因此字符串长度是3)10. 判断字符串s1是否等于s2,应当使用(D)A. if (s1 == s2)B. if (s1 = s2)C. if (strcpy(s1, s2))D. if (strcmp(s1, s2) == 0)(解释:对于字符串来讲,其名字的内容是该字符串的起始地址,不能通过比较名字来比较相等,而应该用专用的函数进行逐字符匹配)二、写出程序的执行结果1. 程序一:# include <stdio.h>main(){int a[3][3] = {1, 3, 5, 7, 9, 11, 13, 15, 17};int sum = 0, i, j;for (i = 0; i < 3; i++)for (j = 0; j < 3; j++){a[i][j] = i + j;if (i == j) sum = sum + a[i][j];}printf("sum = %d", sum);}执行结果:打印sum = 6.(解释:a中各个元素的值是其行和列数字之和,sum内保存a中对角线元素之和,即sum = 0 + 2 + 4)2. 程序二:# include <stdio.h>main(){int i, j, row, col, max;int a[3][4] = {{1, 2, 3, 4}, {9, 8, 7, 6}, {-1, -2, 0, 5}};max = a[0][0]; row = 0; col = 0;for (i = 0; i < 3; i++)for (j = 0; j < 4; j++)if (a[i][j] > max){max = a[i][j];row = i;col = j;}printf("max = %d, row = %d, col = %d\n", max, row, col);}执行结果:打印max = 9, row = 1, col = 0.(解释:此程序的功能是逐行逐列扫描元素,总是将最大的元素赋给max,并保存该元素的行数和列数;因此执行完毕后,max是最大的元素(9),row是其行数(1),col是其列数(0))3. 程序三:# include <stdio.h>main(){int a[4][4], i, j, k;for (i = 0; i < 4; i++)for (j = 0; j < 4; j++)a[i][j] = i - j;for (i = 0; i < 4; i++){for (j = 0; j <= i; j++)printf("%4d", a[i][j]);printf("\n");}}执行结果:第一行打印0;第二行打印1 0;第三行打印2 1 0;第四行打印3 2 1 0。
C语言第六章数组习题第六章数组6、1 选择题[题]在C语言中,引用数组元素时,其数组下标的数据类型允许是_____、 A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式[题]以下对一维整型数组a的正确说明是_____。
A )int a(10);B)int n=10,a[n]; C)int n;D)#define SIZE10 scanf(\%d,&n);int a[SIZE]; int a[n];[题]若有说明:int a[l0];则对a数组元素的正确引用是_____。
A )a[10] B)a[3、5] C)a(5)D)a[10-10][题]在C语言中,一维数组的定义方式为:类型说明符数组名_____。
A )[常量表达式]B)[整型表达式] C)[整型常量]或[整型表达式]D)[整型常量][题]以下能对一维数组a进行正确初始化的语句是_____。
A )int a[l0]=(0,0,0,0,0); B)int a[l0]={}; C)int a ={0};D)int a[10]={10*1};[题]以下对二维数组a的正确说明是_____。
1 A)int a[3];B)float a(3,4); C)double a[1][4];D)float a(3)(4);[题]若有说明:int a[3][4];则对a数组元素的正确引用是_____。
A )a[2][4] B)a[1,3] C)a[1+1][0] D)a(2)(1) [题]若有说明:int a[3][4];则对a数组元素的非法引用是_____。
A )a[0][2*1] B)a[1][3] C)a[4-2][0] D)a[0][4] [题]以下不能对二维数组a进行正确初始化的语句是_____。
A )int a[2][3]={0}; B)int a[3]={{1,2},{0}}; C)int a[2][3]={{l,2},{3,4},{5,6}}; D)int a[3]={1,2,3,4,5,6};[题]若有说明:int a[3][4]={0};则下面正确的叙述是_____。
第6章练习与思考1.指针变量有哪几种运算类型?除了一般变量能做的它都能做以外,还有取地址和取内容运算。
2.有一个4x4的矩阵,试用指针变量按照4行4列格式,输岀矩阵中各元素的值。
#include "stdio.h"void main(){int 询4][4]={{1,1丄1},{1丄1,1},{1丄1,1},{1,1,1,1}};int *p=a;for(i=0;i<4*4;i++){ printf(n%3d",*(p+i));if((i+l)%4=0)printf(H\n H);}}3•输出一个字符串,将这个字符串屮大写字母改为小写字母,第一个字母变大写。
#include "stdio.h"void main(){char a[100],*p 二NULL;int i;printf(n Please input a string:\n H);gets(a);P=a;if(*p>=,a,&&*p<=,z,)*p=*p・32;for(i=l;a[i]!='\O f;i++){if(*(p+i)>='A '&&*(p+i)v=Z) *(p+i)=*(p+i)+32;}puts(a);}4.指向函数的指针有哪些特点?(1)可以通过调用指向函数的指针来调用函数。
(2)对于已定义的函数指针可以指向返回值类型相同的不同函数。
(3)函数指针可做函数的参数。
5.编写程序,在己知字符串str中截取一子串。
要求该子串是从血的第m个字符开始, 由n个字符组成。
#include "stdio.h"void main()char str[100],s[100];char *pl=str,*p2=s;int i,m,n;printf(n please input string:\n");scanf(n%s n,str);printf(”please input m,n:\n n);scanf("%d,%d",&m,&n);for(i=0;i<n;i++)*(p2+i)=*(pl+m+i);for(i=0;*(p2+i)U\0:i++) prin(f(”%c”,*(p2+i));}6.编写程序,利用指针将二维数组屮各元素输出。
第6章字符型数据三、编程题6.19请编写程序,输入一行字符(用回车结束),输出每个字符以及对应的ASCII 代码值,每行输出三对。
#include <stdio.h>void main(){char c;int i=0;while((c=getchar())!='\n'){printf("%c----%d ",c,c);i++;if(i%3==0) printf("\n");}printf("\n");}6.20编写程序,输入一行数字字符(用回车结束),每个数字字符的前后都有空格。
请编程,把这一行中的数字转换成一个整数。
例如,若输入(<CR>代表Enter 键): 2 4 8 3 <CR>则输出整数2483。
#include <stdio.h>void main(){char c;int n=0,m;while((c=getchar())!='\n'){ if(c!=' '){m=c-'0';n=n*10+m;}}printf("%d\n",n);}6.21请编写程序,统计输入的行数,用!号结束输入,!号所在行不计入行数。
#include <stdio.h>void main(){char c;int n=0;while((c=getchar())!='!'){ if(c=='\n') n++; }printf("行数为%d\n",n);}6.22请编写程序统计输入的一行中小写字母的个数。
#include <stdio.h>void main(){char c;int n=0;while((c=getchar())!='\n'){ if(c>='a' && c<='z')n++; }printf("小写字母个数为%d\n",n);}6.23请编写输出以下图案的程序,图案的行数由输入的整数值确定(每行中字符之间没有空格)。
第六章指针一、单项选择1.若已定义char s[10];则在下面表达式中不表示s[1]的地址是()。
A.&s[1]B.&s[0]+1C.s+1D.s++2.下面程序段的运行结果是()。
char a[ ]=”language” , *p ;p=a ;while (*p!='u') { printf(“%c”,*p-32); p++ ; }nguagengUAGENGUAGENG3.下面能正确进行字符串赋值操作的是( )A.char s[5]={'A','B','C','D','E'};B.char s[5]={"ABCDE"};C.char *s ; s="ABCDE" ;D.char *s; scanf("%s",s) ;4.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下能正确执行并得到有意义的结果的赋值语句是( )。
A.p2=c;B.c=*p1+*p2;C.p1=p2;D.c=*p1*(*p2);5.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是( )。
A.*p=max(a,b);B.*p=max;C.p=max;D.p=max(a,b);6.以下正确的叙述是( )。
A.C语言允许main函数带形参,且形参个数和形参名均可由用户指定B.当main函数带有形参时,传给形参的值只能从命令行中得到C.若有说明: int main(int argc,char **argv),则argc的值必须大于1D.C语言允许main函数带形参,形参名只能是argc和argv7.若有定义:int (*p)[4];则标识符p( )。
A.是一个指针数组名B.定义不合法C.是一个指向整型变量的指针D.是一个指针,它指向一个含有四个整型元素的一维数组8.设有程序段:char s[ ]="china"; char *p ; p=s ;则下面叙述正确的是()。
第6章指针及其应用6.3 实验实验任务1 指针的应用1(P194)1.验证性实验(1)输入并运行下面程序,回答题后问题。
# include <stdio.h>main (){ int a = 12 , b = 34 , s , *pa , *pb ;pa = &a ; pb = &b ; s = *pa + *pb ;printf ( " s = %d \n " , s ) ;}①程序的输出结果是s = 46。
②变量pa、pb与变量a、b的区别是pa、pb是指针变量。
③变量a的值是整数12,变量pa 的值是变量a的内存地址。
(2)输入并运行下面程序,回答题后问题。
# include <stdio.h>main (){ int a = 10 , b = 20 , *p = &a , *pa = &a , *pb = &b ;pa = pb ;printf ( " %d %d %d \n " , *p , *pa , *pb ) ;}①程序的输出结果是10 20 20。
②若把“pa = pb ;”改为“*pa = *pb ;”后,程序的输出结果是20 20 20。
(3)输入并运行下面程序,回答题后问题。
# include <stdio.h>main (){ int a[4] = {1 , 2 , 3 , 4 } , *p , i ; p = a ;for ( i = 0 ; i < 4 ; i ++ ){ * ( p + i ) = * ( p + i ) +1 ;printf ( " %d , " , a[i] ) ;}}①程序的输出结果是 2 ,3 ,4 ,5 ,。
②本例对数组的引用方法采用了指针变量指针法和数组名下标法。
(4)输入并运行下面程序,回答题后问题。
(1)A(2)A(3)B、C(4)D(1)5(2)8#include<stdio.h>void swap(int *p1,int *p2){int *p; int i;p=p1;p1=p2;p2=p; i=*p1;*p1=*p2,*p2=i; }int main(void){int a,b,*pt1,*pt2;scanf(“%d, %d”,&a,&b);pt1=&a;pt2=&b;if(a<b)swap(pt1,pt2);printf(“%d, %d\n”,*pt1,*pt2);return 0;}6.5(1)#include<stdio.h>int main(void){int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;printf("%d,%d\n",*p+2,*(p+2));return 0;}结果:2,2(2)#include<stdio.h>int main(void){int i;int a[10],*p=a;for(i=0;i<10;i++)*p++=2*i;for(i=0;i<10;i++)printf("%d ",a[i]); printf("\n");return 0;}结果:024681012141618 (3)#include<stdio.h>int main(void){int a[5]={0,1,2,3,4},*p;p=&a[3];printf("%d\n",*--p);return 0;}结果:2(4)#include<stdio.h>int main(void){int a[5]={1,3,5,7,9},*p,**k;p=a;k=&p;printf("%d,",*(p++));printf("%d,",**k);return 0;}结果:1,3,(5)#include<stdio.h>int main(void){static int a[]={1,3,5};int s,i,*p=NULL;s=1;p=a;for(i=0;i<3;i++) s*=*(p+i);printf("%d\n",s);return 0;}结果:15(6)#include<stdio.h>int main(void){static int a[]={1,2,3,4,5};int *p=NULL;p=a;printf("%d,",*p);printf("%d,",*(++p));printf("%d,",*++p);printf("%d,",*(p--));printf("%d,",++(*p));return 0;}结果:1,2,3,3,3(7)#include<stdio.h>int a[5]={1,2,3,4,5};int *p[5]={a,a+1,a+2,a+3,a+4};int **pp=p;int main(void){pp++;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);*pp++;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);*++pp;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);++*pp;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);pp=p;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);**pp++;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);*++*pp;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);++**pp;printf("%d, %d, %d\n",pp-p,*pp-a,**pp);return 0;}结果:1,1,22,2,33,3,43,4,50,0,11,1,21,2,31,2,4(8)#include<stdio.h>#include<string.h>int main(){char a[]="abcdefgh";char *pc=&a[8];while(--pc>=a)putchar(*pc);putchar('\n');return 0;}结果:hgfedcba(9)#include<stdio.h>#define N 2#define M 5int main(){char c[N][M]={"1357","2468"},*p[2];int i=0,j=0,k=0;for(i=0;i<N;i++) p[i]=c[i];for(i=0;i<N;i++)for(j=0;p[i][j]>'\0'&&p[i][j]<='9';j+=2){printf("%d, %d\n",i,j);k=10*k+p[i][j]-'0';printf("%d\n",k);}return 0;}结果:1526(10)#include<stdio.h>#define N 3#define M 4int main(){int a[N][M]={1,3,5,7,9,11,13,15,17,19,21,23};int (*p)[M]=a,i,j,k=0;for(i=0;i<M-1;i++)for(j=0;j<N-1;j++)printf("%d",k+(*(*p+1)+j));return 0;}结果:343434(11)#include<stdio.h>int main(){char *c[]={"ENTER","NEW","POINT","FIRST"};char **pc[]={c+3,c+2,c+1,c};char ***ppc=pc;printf("%s\n",**++ppc);printf("%s\n",*--*++ppc+3);printf("%s\n",*ppc[-2]+3);printf("%s\n",ppc[-1][-1]+1);return 0;}结果:95236.6(1)#include<stdio.h>int main(){int a[10]={1,2,3,4,5,6,7,8,9,10},i;for(i=0;i<10;i++)printf("%d ",a[i]);return 0;}或#include<stdio.h>int main(){int a[10]={1,2,3,4,5,6,7,8,9,10},I,*p;p=a;for(i=0;i<10;i++)printf("%d ",*p++);return 0;}(2)可以6.7#include"stdio.h"void swap(int*,int*);void main(){int si,li,j,k,a[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};printf("please input start loation:");scanf("%d",&si);printf("please input number:");scanf("%d",&li);printf("%d, %d\n",si,li);k=li;for(j=0;j<20;j++){if(j>=si-1&&j<=si-1+li/2-1){swap(&a[j],&a[j+k]);k--;k--;}printf("%4d",a[j]);}}void swap(int *x,int *y){int temp;temp=*x;*x=*y;*y=temp;}6.9(1),a, a+2=a[2], &a[0]=a, a[0]+3=&a[0][3], *(a+1)=*a[1]=a[1][0], *(a+2)+1=a[2][1], *(a[1]+2)=a[1][2],&a[0][2]=a[0]+2, *(a[0][2])=?, *(*(a+2)+1)=a[2][1]=23, a[1][3]=15(2)a+1,&a[1][0],相等,二级指针,一级指针6.10#include<stdio.h>void main(){void maxval( int arr[][4],int m,int n);int array[3][4],i,j,l,c;printf("input lines of array:");scanf(%d",&l);printf("input column of array:");scanf("%d",&c);printf("input data use comma between data\n");for(i=0;i<1;i++)for(j=0;j<c;j++)scanf("%d",&array[i][j]);printf("\n");for(i=0;i<1;i++){for(j=0;j<c;j++)printf("%5d",array[i][j]);printf("\n");}maxval(array,l,c);}void maxval( int arr[][4],int m,int n){int i,j,max,line=0,col=0;int(*p)[4];max=arr[0][0];p=arr;for(i=0;i<m;i++)for(j=0;j<n;j++)if(max<*(*(p+i)+j)){ max=*(*(p+i)+j);line=i;col=j;}printf("the maximum value is %d",max);printf(" the line is:%d,line);printf(" the column is :%d\n",col);}6.11(略)6.13指出下面程序中的错误,并分析出错的原因。