练习题6及参考答案.docx
《练习题6及参考答案.docx》由会员分享,可在线阅读,更多相关《练习题6及参考答案.docx(20页珍藏版)》请在冰豆网上搜索。
练习题6及参考答案
窗体顶部
1.单项选择题
(1)以下关于数组的描述正确的是 。
A.数组的大小是固定的,但可以有不同类型的数组元素
B.数组的大小是可变的,但所有数组元素的类型必须相同
C.数组的大小是固定的,所有数组元素的类型必须相同
D.数组的大小是可变的,可以有不同类型的数组元素
【答】C
(2)下述关于字符数组的描述中错误的是 。
A.字符数组可以存放字符串
B.字符数组中的字符串可以整体输入和输出
C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D.不可以用关系运算符对字符数组中的字符串进行比较
【答】B
(3)不能把字符串"Hello!
"赋给数组b的语句是 。
A.charb[10]={'H','e','l','l','o','!
'}; B.charb[10];b="Hello!
";
C.charb[10];strcpy(b,"Hello!
"); D.charb[10]="Hello!
(4)若有以下定义:
inta[12]={1,2,3,4,5,6,7,8,9,10,11,12};
charc='a',d,g;
则数值为4的表达式是 。
A.a[g-c] B.a[4] C.a['d'-'c'] D.a['d'-c]
【答】D
(5)以下合法的数组定义是 。
A.inta[]="string"; B.inta[5]={0,1,2,3,4,5};
C.chara="string"; D.chara[]={0,1,2,3,4,5};
(6)以下错误的字符串赋值或赋初值方式是 。
A.char*str;str="string";
B.charstr[7]={'s','t','r','i','n','g'};
C.charstr[10];str="string";
D.charstr1[]="string",str2[]="12345678";stcpy(str2,strl);
(7)若有以下定义和语句,则输出结果是 。
char*sp="\"D:
\\ANI.WSP\"";
printf("%s",sp);
A.字符串中有非法字符,输出值不定 B.\"D:
\\ANI.WSP\"
C."D:
\ANI.WSP" D."D:
\\ANI.WSP"
(8)若有以下定义和语句,则输出结果是 。
chars[12]="abook!
printf("%d",strlen(s));
A.12 B.8 C.7 D.6
(9)以下一维数组a的正确定义是 。
A.inta(10); B.intn=10,a[n];
C.intn; D.#defineSIZE10
scanf("%d",&n); inta[SIZE];
inta[n];
(10)以下正确的定义语句是 。
A.intA['a']; B.intA[3,4];
C.intA[][3]; D.intA[10];
(11)以下对一维数组a进行正确初始化的是 。
A.inta[10]=(0,0,0,0); B.inta[10]={};
C.inta[]={0}; D.inta[10]={10*2};
(12)以下对二维数组a进行正确初始化的是 。
A.inta[2][3]={{1,2},{3,4},{5,6}}; B.inta[][3]={1,2,3,4,5,6};
C.inta[2][]={1,2,3,4,5,6}; D.inta[2][]={{1,2},{3,4}};
(13)以下给字符数组a定义和赋值正确的是 。
A.charstr[10];str={"China"};
B.charstr[]={"China"};
C.charstr[10];strcpy(str,"abcdefghijklmn");
D.charstr[10]={"abcdefghijklmn"};
(14)在执行staticinta[][3]={{1,2},{3,4}};语句后,a[1][3]的值是 。
A.3 B.4 C.0 D.2
(15)在定义inta[3][6];后,第10个元素是 。
A.a[2][4] B.a[1][3] C.a[3][1] D.a[4][2]
(16)在定义inta[3][4][2];后,第10个元素是 。
A.a[2][1][2] B.a[1][0][1] C.a[2][0][1] D.a[2][2][1]
(17)以下程序的运行结果是 。
#include
main()
{
chara[80]="AB",b[80]="LMNP";
inti=0;
strcat(a,b);
while(a[i++]!
='\0')b[i]=a[i];
puts(b);
}
A.LB B.ABLMNP C.AB D.LBLMNP
(18)以下程序的运行结果是 。
charstr[]="SSSWLIA",c;
intk;
for(k=2;(c=str[k])!
='\0';k++)
switch(c)
case'I':
++k;break;
case'L':
continue;
default:
putchar(c);continue;
putchar('*');
A.SSW* B.SW* C.SW*A D.SW
(19)以下程序的运行结果是 。
chara[]="morning",t;
inti,j=0;
for(i=1;i<7;i++)
if(a[j] t=a[j]; a[j]=a[7]; a[7]=a[j]; puts(a);}A.mogninr B.mo C.morning D.mornin【答】B2.填空题(1)以下程序运行时输入LanguageProgramming↙,其结果是 。#includemain(){ charstr[30]; scanf("%s",str); printf("str=%s\n",str);}【答】Language(2)以下程序的运行结果是 。#includemain(){ charstr[]={"1a2b3c"}; inti; for(i=0;str[i]!='\0';i++) if(str[i]>='0'&&str[i]<='9') printf("%c",str[i]); printf("\n");}【答】123(3)以下程序的运行结果是 。#includemain(){ inta[3][3]={1,2,3,4,5,6,7,8,9},i,s=0; for(i=0;i<=2;i++) s=s+a[i][i]; printf("s=%d\n",s);}【答】s=15(4)以下程序的运行结果是 。#includemain(){ inta[3][3]={1,2,3,4,5,6,7,8,9},i,s=1; for(i=0;i<=2;i++) s=s*a[i][i]; printf("s=%d\n",s);}【答】s=45(5)以下程序的运行结果是 。#includemain(){ inta[]={0,2,5,8,12,15,23,35,60,65}; intx=15,i,n=10,m; i=n/2+1;m=n/2; while(m!=0) { if(x { i=i-m/2-1; m=m/2; } elseif(x>a[i]) { i=i+m/2+1; m=m/2; } elsebreak; } printf("place=%d",i+1);}【答】place=6(6)以下程序的运行结果是 。#includemain(){ inti,j,row=0,col=0,m; staticinta[3][3]={1,-2,0,4,-5,6,2,4}; m=a[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][j] { m=a[i][j]; row=i; col=j; } printf("a(%d,%d)=%d\n",row,col,m);}【答】a(1,1)=-5(7)以下程序的运行结果是 。#includemain(){ inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4}; inti,j,n; n=9;i=n/5;j=n-i*5-1; printf("第%d个元素(%d,%d)值是%d\n",n,i,j,a[i][j]);}【答】第9个元素(1,3)值是-3(8)以下程序的运行结果是 。#includemain(){ inta[4][5]={1,2,4,-4,5,-9,3}; intb=0,i,j,i1,j1,n=-9; for(i=0;i<4;i++) { for(j=0;j<5;j++) if(a[i][j]==n) { i1=i;j1=j;b=1; break; } if(b) break; } printf("%d是第%d个元素\n",n,i1*5+j1+1);}【答】-9是第6个元素(9)以下程序的运行结果是____。#includemain(){ intarr[10],i,k=0; for(i=0;i<10;i++) arr[i]=i; for(i=0;i<4;i++) k+=arr[i]+i; printf("%d\n",k);}【答】12(10)以下程序的功能是将字符串s中所有的空格字符删除。请填空。#includemain(){ char*s="ourteacherteachsClanguage"; inti,j; for(i=j=0;s[i]!='\0';i++) if(s[i]!='') ① ; ② ; printf("%s\n",s);}【答】①s[j++]=s[i]②s[j]='\0'3.编程题(1)编写一个程序,将两个字符串合并成一个字符串。【解】程序如下:/*文件名:exci6_1.cpp*/VC++6.0#includemain(){ chars1[20],s2[20],s3[40]; inti,j; printf("字符串1:"); gets(s1); printf("字符串2:"); gets(s2); for(i=0;s1[i]!='\0';i++) s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; s3[i+j]='\0'; printf("合并字符串:%s\n",s3);}(2)编写一个程序,将一个子字符串插入到主字符串中指定位置。【解】程序如下:/*文件名:exci6_2.cpp*/VC++6.0#includemain(){ intn,i,j,k; chars1[20],s2[20],s3[40]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); printf("起始位置:"); scanf("%d",&n); for(i=0;i s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; printf("i=%d,j=%d\n",i,j); for(k=n;s1[k]!='\0';k++) s3[j+k]=s1[k]; s3[j+k]='\0'; printf("结果字符串:%s\n",s3);}(3)编写一个程序,输出一个字符串的逆转串。【解】程序如下:/*文件名:exci6_3.cpp*/VC++6.0#includemain(){ chars1[20],s2[20]; inti,j; printf("字符串:"); scanf("%s",s1); for(i=0;s1[i]!='\0';i++); /*求出字符串s1的长度i*/ for(j=0;s1[j]!='\0';j++) s2[i-j-1]=s1[j]; s2[i]='\0'; printf("逆转串:%s\n",s2);}(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。【解】程序如下:/*文件名:exci6_4.cpp*/VC++6.0#includemain(){ inti,j,k,index; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); index=0; for(i=0;s1[i];i++) { for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) { index=i; break; } if(index!=0) break; } printf("位置=%d\n",index);}(5)编写一个程序,计算一个字符串中子串出现的次数。【解】程序如下:/*文件名:exci6_5.cpp*/VC++6.0#includemain(){ inti,j,k,count=0; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); for(i=0;s1[i];i++) for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) count++; printf("出现次数=%d\n",count);}(6)编写一个程序,将用户输入的正十进制数转换成某一进制base(base≤16)的数输出。【解】采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组num中,最后显示该数组即为所得。程序如下:/*文件名:exci6_6.cpp*/VC++6.0#includemain(){ inti=0,base,n,j,num[20]; printf("输入正十进制整数:"); scanf("%d",&n); printf("输入要转换的进制:"); scanf("%d",&base); do { i++; num[i]=n%base; n=n/base; }while(n!=0); printf("转换的结果:"); for(j=i;j>=1;j--) if(num[j]<10) printf("%d",num[j]); else printf("%c",'A'+num[j]-10); printf("\n");}(7)编写一个程序,计算两个3×4阶矩阵相加,并打印出结果。【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用两重for循环进行相加求值产生二维数组c,最后输出c的各元素值。程序如下:/*文件名:exci6_7.cpp*/VC++6.0#includemain(){ inta[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}}; intb[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}}; inti,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]=a[i][j]+b[i][j]; for(i=0;i<3;i++) /*输出结果*/ { for(j=0;j<4;j++) printf("%d",c[i][j]); printf("\n"); }}(8)编写一
t=a[j];
a[j]=a[7];
a[7]=a[j];
puts(a);
A.mogninr B.mo C.morning D.mornin
2.填空题
(1)以下程序运行时输入LanguageProgramming↙,其结果是 。
charstr[30];
scanf("%s",str);
printf("str=%s\n",str);
【答】Language
(2)以下程序的运行结果是 。
charstr[]={"1a2b3c"};
inti;
for(i=0;str[i]!
='\0';i++)
if(str[i]>='0'&&str[i]<='9')
printf("%c",str[i]);
printf("\n");
【答】123
(3)以下程序的运行结果是 。
inta[3][3]={1,2,3,4,5,6,7,8,9},i,s=0;
for(i=0;i<=2;i++)
s=s+a[i][i];
printf("s=%d\n",s);
【答】s=15
(4)以下程序的运行结果是 。
inta[3][3]={1,2,3,4,5,6,7,8,9},i,s=1;
s=s*a[i][i];
【答】s=45
(5)以下程序的运行结果是 。
inta[]={0,2,5,8,12,15,23,35,60,65};
intx=15,i,n=10,m;
i=n/2+1;m=n/2;
while(m!
=0)
if(x { i=i-m/2-1; m=m/2; } elseif(x>a[i]) { i=i+m/2+1; m=m/2; } elsebreak; } printf("place=%d",i+1);}【答】place=6(6)以下程序的运行结果是 。#includemain(){ inti,j,row=0,col=0,m; staticinta[3][3]={1,-2,0,4,-5,6,2,4}; m=a[0][0]; for(i=0;i<3;i++) for(j=0;j<3;j++) if(a[i][j] { m=a[i][j]; row=i; col=j; } printf("a(%d,%d)=%d\n",row,col,m);}【答】a(1,1)=-5(7)以下程序的运行结果是 。#includemain(){ inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4}; inti,j,n; n=9;i=n/5;j=n-i*5-1; printf("第%d个元素(%d,%d)值是%d\n",n,i,j,a[i][j]);}【答】第9个元素(1,3)值是-3(8)以下程序的运行结果是 。#includemain(){ inta[4][5]={1,2,4,-4,5,-9,3}; intb=0,i,j,i1,j1,n=-9; for(i=0;i<4;i++) { for(j=0;j<5;j++) if(a[i][j]==n) { i1=i;j1=j;b=1; break; } if(b) break; } printf("%d是第%d个元素\n",n,i1*5+j1+1);}【答】-9是第6个元素(9)以下程序的运行结果是____。#includemain(){ intarr[10],i,k=0; for(i=0;i<10;i++) arr[i]=i; for(i=0;i<4;i++) k+=arr[i]+i; printf("%d\n",k);}【答】12(10)以下程序的功能是将字符串s中所有的空格字符删除。请填空。#includemain(){ char*s="ourteacherteachsClanguage"; inti,j; for(i=j=0;s[i]!='\0';i++) if(s[i]!='') ① ; ② ; printf("%s\n",s);}【答】①s[j++]=s[i]②s[j]='\0'3.编程题(1)编写一个程序,将两个字符串合并成一个字符串。【解】程序如下:/*文件名:exci6_1.cpp*/VC++6.0#includemain(){ chars1[20],s2[20],s3[40]; inti,j; printf("字符串1:"); gets(s1); printf("字符串2:"); gets(s2); for(i=0;s1[i]!='\0';i++) s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; s3[i+j]='\0'; printf("合并字符串:%s\n",s3);}(2)编写一个程序,将一个子字符串插入到主字符串中指定位置。【解】程序如下:/*文件名:exci6_2.cpp*/VC++6.0#includemain(){ intn,i,j,k; chars1[20],s2[20],s3[40]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); printf("起始位置:"); scanf("%d",&n); for(i=0;i s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; printf("i=%d,j=%d\n",i,j); for(k=n;s1[k]!='\0';k++) s3[j+k]=s1[k]; s3[j+k]='\0'; printf("结果字符串:%s\n",s3);}(3)编写一个程序,输出一个字符串的逆转串。【解】程序如下:/*文件名:exci6_3.cpp*/VC++6.0#includemain(){ chars1[20],s2[20]; inti,j; printf("字符串:"); scanf("%s",s1); for(i=0;s1[i]!='\0';i++); /*求出字符串s1的长度i*/ for(j=0;s1[j]!='\0';j++) s2[i-j-1]=s1[j]; s2[i]='\0'; printf("逆转串:%s\n",s2);}(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。【解】程序如下:/*文件名:exci6_4.cpp*/VC++6.0#includemain(){ inti,j,k,index; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); index=0; for(i=0;s1[i];i++) { for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) { index=i; break; } if(index!=0) break; } printf("位置=%d\n",index);}(5)编写一个程序,计算一个字符串中子串出现的次数。【解】程序如下:/*文件名:exci6_5.cpp*/VC++6.0#includemain(){ inti,j,k,count=0; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); for(i=0;s1[i];i++) for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) count++; printf("出现次数=%d\n",count);}(6)编写一个程序,将用户输入的正十进制数转换成某一进制base(base≤16)的数输出。【解】采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组num中,最后显示该数组即为所得。程序如下:/*文件名:exci6_6.cpp*/VC++6.0#includemain(){ inti=0,base,n,j,num[20]; printf("输入正十进制整数:"); scanf("%d",&n); printf("输入要转换的进制:"); scanf("%d",&base); do { i++; num[i]=n%base; n=n/base; }while(n!=0); printf("转换的结果:"); for(j=i;j>=1;j--) if(num[j]<10) printf("%d",num[j]); else printf("%c",'A'+num[j]-10); printf("\n");}(7)编写一个程序,计算两个3×4阶矩阵相加,并打印出结果。【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用两重for循环进行相加求值产生二维数组c,最后输出c的各元素值。程序如下:/*文件名:exci6_7.cpp*/VC++6.0#includemain(){ inta[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}}; intb[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}}; inti,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]=a[i][j]+b[i][j]; for(i=0;i<3;i++) /*输出结果*/ { for(j=0;j<4;j++) printf("%d",c[i][j]); printf("\n"); }}(8)编写一
i=i-m/2-1;
m=m/2;
elseif(x>a[i])
i=i+m/2+1;
elsebreak;
printf("place=%d",i+1);
【答】place=6
(6)以下程序的运行结果是 。
inti,j,row=0,col=0,m;
staticinta[3][3]={1,-2,0,4,-5,6,2,4};
m=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j] { m=a[i][j]; row=i; col=j; } printf("a(%d,%d)=%d\n",row,col,m);}【答】a(1,1)=-5(7)以下程序的运行结果是 。#includemain(){ inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4}; inti,j,n; n=9;i=n/5;j=n-i*5-1; printf("第%d个元素(%d,%d)值是%d\n",n,i,j,a[i][j]);}【答】第9个元素(1,3)值是-3(8)以下程序的运行结果是 。#includemain(){ inta[4][5]={1,2,4,-4,5,-9,3}; intb=0,i,j,i1,j1,n=-9; for(i=0;i<4;i++) { for(j=0;j<5;j++) if(a[i][j]==n) { i1=i;j1=j;b=1; break; } if(b) break; } printf("%d是第%d个元素\n",n,i1*5+j1+1);}【答】-9是第6个元素(9)以下程序的运行结果是____。#includemain(){ intarr[10],i,k=0; for(i=0;i<10;i++) arr[i]=i; for(i=0;i<4;i++) k+=arr[i]+i; printf("%d\n",k);}【答】12(10)以下程序的功能是将字符串s中所有的空格字符删除。请填空。#includemain(){ char*s="ourteacherteachsClanguage"; inti,j; for(i=j=0;s[i]!='\0';i++) if(s[i]!='') ① ; ② ; printf("%s\n",s);}【答】①s[j++]=s[i]②s[j]='\0'3.编程题(1)编写一个程序,将两个字符串合并成一个字符串。【解】程序如下:/*文件名:exci6_1.cpp*/VC++6.0#includemain(){ chars1[20],s2[20],s3[40]; inti,j; printf("字符串1:"); gets(s1); printf("字符串2:"); gets(s2); for(i=0;s1[i]!='\0';i++) s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; s3[i+j]='\0'; printf("合并字符串:%s\n",s3);}(2)编写一个程序,将一个子字符串插入到主字符串中指定位置。【解】程序如下:/*文件名:exci6_2.cpp*/VC++6.0#includemain(){ intn,i,j,k; chars1[20],s2[20],s3[40]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); printf("起始位置:"); scanf("%d",&n); for(i=0;i s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; printf("i=%d,j=%d\n",i,j); for(k=n;s1[k]!='\0';k++) s3[j+k]=s1[k]; s3[j+k]='\0'; printf("结果字符串:%s\n",s3);}(3)编写一个程序,输出一个字符串的逆转串。【解】程序如下:/*文件名:exci6_3.cpp*/VC++6.0#includemain(){ chars1[20],s2[20]; inti,j; printf("字符串:"); scanf("%s",s1); for(i=0;s1[i]!='\0';i++); /*求出字符串s1的长度i*/ for(j=0;s1[j]!='\0';j++) s2[i-j-1]=s1[j]; s2[i]='\0'; printf("逆转串:%s\n",s2);}(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。【解】程序如下:/*文件名:exci6_4.cpp*/VC++6.0#includemain(){ inti,j,k,index; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); index=0; for(i=0;s1[i];i++) { for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) { index=i; break; } if(index!=0) break; } printf("位置=%d\n",index);}(5)编写一个程序,计算一个字符串中子串出现的次数。【解】程序如下:/*文件名:exci6_5.cpp*/VC++6.0#includemain(){ inti,j,k,count=0; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); for(i=0;s1[i];i++) for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) count++; printf("出现次数=%d\n",count);}(6)编写一个程序,将用户输入的正十进制数转换成某一进制base(base≤16)的数输出。【解】采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组num中,最后显示该数组即为所得。程序如下:/*文件名:exci6_6.cpp*/VC++6.0#includemain(){ inti=0,base,n,j,num[20]; printf("输入正十进制整数:"); scanf("%d",&n); printf("输入要转换的进制:"); scanf("%d",&base); do { i++; num[i]=n%base; n=n/base; }while(n!=0); printf("转换的结果:"); for(j=i;j>=1;j--) if(num[j]<10) printf("%d",num[j]); else printf("%c",'A'+num[j]-10); printf("\n");}(7)编写一个程序,计算两个3×4阶矩阵相加,并打印出结果。【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用两重for循环进行相加求值产生二维数组c,最后输出c的各元素值。程序如下:/*文件名:exci6_7.cpp*/VC++6.0#includemain(){ inta[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}}; intb[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}}; inti,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]=a[i][j]+b[i][j]; for(i=0;i<3;i++) /*输出结果*/ { for(j=0;j<4;j++) printf("%d",c[i][j]); printf("\n"); }}(8)编写一
m=a[i][j];
row=i;
col=j;
printf("a(%d,%d)=%d\n",row,col,m);
【答】a(1,1)=-5
(7)以下程序的运行结果是 。
inta[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};
inti,j,n;
n=9;i=n/5;j=n-i*5-1;
printf("第%d个元素(%d,%d)值是%d\n",n,i,j,a[i][j]);
【答】第9个元素(1,3)值是-3
(8)以下程序的运行结果是 。
inta[4][5]={1,2,4,-4,5,-9,3};
intb=0,i,j,i1,j1,n=-9;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(a[i][j]==n)
i1=i;j1=j;b=1;
break;
if(b)
printf("%d是第%d个元素\n",n,i1*5+j1+1);
【答】-9是第6个元素
(9)以下程序的运行结果是____。
intarr[10],i,k=0;
for(i=0;i<10;i++)
arr[i]=i;
k+=arr[i]+i;
printf("%d\n",k);
【答】12
(10)以下程序的功能是将字符串s中所有的空格字符删除。
请填空。
char*s="ourteacherteachsClanguage";
inti,j;
for(i=j=0;s[i]!
if(s[i]!
='') ① ;
② ;
printf("%s\n",s);
【答】①s[j++]=s[i]②s[j]='\0'
3.编程题
(1)编写一个程序,将两个字符串合并成一个字符串。
【解】程序如下:
/*文件名:
exci6_1.cpp*/
VC++6.0
chars1[20],s2[20],s3[40];
printf("字符串1:
");
gets(s1);
printf("字符串2:
gets(s2);
for(i=0;s1[i]!
s3[i]=s1[i];
for(j=0;s2[j]!
='\0';j++)
s3[i+j]=s2[j];
s3[i+j]='\0';
printf("合并字符串:
%s\n",s3);
(2)编写一个程序,将一个子字符串插入到主字符串中指定位置。
exci6_2.cpp*/
intn,i,j,k;
printf("主字符串:
printf("子字符串:
printf("起始位置:
scanf("%d",&n);
for(i=0;i s3[i]=s1[i]; for(j=0;s2[j]!='\0';j++) s3[i+j]=s2[j]; printf("i=%d,j=%d\n",i,j); for(k=n;s1[k]!='\0';k++) s3[j+k]=s1[k]; s3[j+k]='\0'; printf("结果字符串:%s\n",s3);}(3)编写一个程序,输出一个字符串的逆转串。【解】程序如下:/*文件名:exci6_3.cpp*/VC++6.0#includemain(){ chars1[20],s2[20]; inti,j; printf("字符串:"); scanf("%s",s1); for(i=0;s1[i]!='\0';i++); /*求出字符串s1的长度i*/ for(j=0;s1[j]!='\0';j++) s2[i-j-1]=s1[j]; s2[i]='\0'; printf("逆转串:%s\n",s2);}(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。【解】程序如下:/*文件名:exci6_4.cpp*/VC++6.0#includemain(){ inti,j,k,index; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); index=0; for(i=0;s1[i];i++) { for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) { index=i; break; } if(index!=0) break; } printf("位置=%d\n",index);}(5)编写一个程序,计算一个字符串中子串出现的次数。【解】程序如下:/*文件名:exci6_5.cpp*/VC++6.0#includemain(){ inti,j,k,count=0; chars1[20],s2[20]; printf("主字符串:"); gets(s1); printf("子字符串:"); gets(s2); for(i=0;s1[i];i++) for(j=i,k=0;s1[j]==s2[k];j++,k++) if(!s2[k+1]) count++; printf("出现次数=%d\n",count);}(6)编写一个程序,将用户输入的正十进制数转换成某一进制base(base≤16)的数输出。【解】采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组num中,最后显示该数组即为所得。程序如下:/*文件名:exci6_6.cpp*/VC++6.0#includemain(){ inti=0,base,n,j,num[20]; printf("输入正十进制整数:"); scanf("%d",&n); printf("输入要转换的进制:"); scanf("%d",&base); do { i++; num[i]=n%base; n=n/base; }while(n!=0); printf("转换的结果:"); for(j=i;j>=1;j--) if(num[j]<10) printf("%d",num[j]); else printf("%c",'A'+num[j]-10); printf("\n");}(7)编写一个程序,计算两个3×4阶矩阵相加,并打印出结果。【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用两重for循环进行相加求值产生二维数组c,最后输出c的各元素值。程序如下:/*文件名:exci6_7.cpp*/VC++6.0#includemain(){ inta[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}}; intb[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}}; inti,j,c[3][4]; for(i=0;i<3;i++) for(j=0;j<4;j++) c[i][j]=a[i][j]+b[i][j]; for(i=0;i<3;i++) /*输出结果*/ { for(j=0;j<4;j++) printf("%d",c[i][j]); printf("\n"); }}(8)编写一
printf("i=%d,j=%d\n",i,j);
for(k=n;s1[k]!
s3[j+k]=s1[k];
s3[j+k]='\0';
printf("结果字符串:
(3)编写一个程序,输出一个字符串的逆转串。
exci6_3.cpp*/
chars1[20],s2[20];
printf("字符串:
scanf("%s",s1);
='\0';i++); /*求出字符串s1的长度i*/
for(j=0;s1[j]!
s2[i-j-1]=s1[j];
s2[i]='\0';
printf("逆转串:
%s\n",s2);
(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。
exci6_4.cpp*/
inti,j,k,index;
index=0;
for(i=0;s1[i];i++)
for(j=i,k=0;s1[j]==s2[k];j++,k++)
if(!
s2[k+1])
index=i;
if(index!
printf("位置=%d\n",index);
(5)编写一个程序,计算一个字符串中子串出现的次数。
exci6_5.cpp*/
inti,j,k,count=0;
count++;
printf("出现次数=%d\n",count);
(6)编写一个程序,将用户输入的正十进制数转换成某一进制base(base≤16)的数输出。
【解】采用辗转相除法进行进制之间的相互转换,将结果存储在一维数组num中,最后显示该数组即为所得。
程序如下:
exci6_6.cpp*/
inti=0,base,n,j,num[20];
printf("输入正十进制整数:
printf("输入要转换的进制:
scanf("%d",&base);
do
i++;
num[i]=n%base;
n=n/base;
}while(n!
=0);
printf("转换的结果:
for(j=i;j>=1;j--)
if(num[j]<10)
printf("%d",num[j]);
else
printf("%c",'A'+num[j]-10);
(7)编写一个程序,计算两个3×4阶矩阵相加,并打印出结果。
【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用两重for循环进行相加求值产生二维数组c,最后输出c的各元素值。
exci6_7.cpp*/
inta[3][4]={{3,-2,1,2},{0,1,3,-2},{3,1,0,4}};
intb[3][4]={{-2,3,0,-1},{1,0,-2,3},{-2,0,1,-3}};
inti,j,c[3][4];
for(j=0;j<4;j++)
c[i][j]=a[i][j]+b[i][j];
for(i=0;i<3;i++) /*输出结果*/
printf("%d",c[i][j]);
(8)编写一
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1