📄 xt4.htm
字号:
<P
class=xt12>4.11已有一按从小到大次序排序好的数组,现输入一数,要求用折半查找法找出该数在数组中的位置。(习题课)<BR>解:<BR>#include
<iostream.h><BR>#define N 10<BR>void main(void)<BR>{
float a[N];<BR> int i,b,n,m;<BR> cout<<"Input sort array
a[9]:"<<endl;<BR> for(i=0;i<N-1;i++)<BR> cin>>a[i];<BR> cout<<"Input
number
b:";<BR> cin>>b;<BR> i=0;<BR> n=N/2;<BR> m=n;<BR> while(m>1)<BR> {
if (b==a[n]) <BR> break;<BR> else if (b>a[n]) n=n+m/2
;<BR> else n=n-m/2;<BR> m=m/2;<BR> }<BR> if (b==a[n])
<BR> cout<<b<<" is on
"<<n+1;<BR> else<BR> cout<<"no find !";<BR>}</P>
<P class=xt12>4.12 输入一个5行5列的二维数组,编程实现:<BR>(1)
求出其中的最大值和最小值及其对应的行列位置;<BR>(2)
求出对角线上各元素之和。(提示参考例4.2)<BR>解:<BR>#include
<iostream.h><BR>#include <iomanip.h><BR>#define N
5<BR>void main(void)<BR>{ float a[N][N],max,min,sum;<BR> int
i,j,r1,r2,c1,c2;<BR> cout<<"Input
a[5][5]:"<<endl;<BR> for(i=0; i<N;i++)<BR> for(j=0;
j<N;j++)<BR> cin>>a[i][j];<BR> max=min=a[0][0];<BR> sum=0;<BR> for(i=0;
i<N;i++)<BR> for(j=0; j<N;j++)<BR> { if
(a[i][j]>max)<BR> { max=
a[i][j];<BR> r1=i;c1=j;<BR> }<BR> else if
(a[i][j]<min)<BR> { min=
a[i][j];<BR> r2=i;c2=j;<BR> }<BR> if (i==j)
sum+=a[i][j];<BR> }<BR> cout<<"max="<<max<<'\t'<<"row1="<<r1<<'\t'<<"col1="<<c1<<endl;<BR> cout<<"min="<<min<<'\t'<<"row2="<<r2<<'\t'<<"col2="<<c2<<endl;<BR> cout<<"sum="<<sum<<endl;<BR>}</P>
<P class=xt12>4.13设计一个程序,打印杨辉三角形。(习题课)<BR>1<BR>1 1<BR>1 2
1<BR>3 3 1<BR>4 6 4 1<BR>5 10 10 5 1<BR>6 15 20 15 6 1<BR>7 21
35 35 21 7 1<BR>8 28 56 70 56 28 8 1<BR>1 9 36 84 126 126 84
36 9 1<BR>解:方法一<BR>杨辉三角形第n行第m个元素值为多项式(1+x)n 的系数
值。<BR>如第4行各元素值为:<BR><BR>所以只要计算出组合数
即可得到第n行第m个元素值。<BR>用二重循环即可打印出杨辉三角形。<BR>#include
<iostream.h><BR>#include <iomanip.h><BR>#define N
11<BR>void main(void)<BR>{ int
c[N][N],m,n,k,m1,n1,n_m;<BR> for(n=0; n<N;n++)<BR> for(m=0;
m<=n;m++)<BR> { for(m1=1,k=1;k<=m;k++)
m1*=k;<BR> for(n1=1,k=1;k<=n;k++)
n1*=k;<BR> for(n_m=1,k=1;k<=n-m;k++)
n_m*=k;<BR> c[n][m]=n1/(m1*n_m);<BR> }<BR> for(n=0;n<N;n++)<BR> {
for(m=0;
m<=n;m++)<BR> cout<<setw(6)<<c[n][m];<BR> cout<<endl;<BR> }<BR>}<BR>方法二<BR>从杨辉三角形各元素数值可以看出如下规律:<BR>(1)第一列和对角线元素值为1<BR>(2)其它其元素值为c[n][m]=c[n-1][m-1]+c[n-1][m]<BR>由此可编写程序如下:<BR>#include
<iostream.h><BR>#include <iomanip.h><BR>#define N
11<BR>void main(void)<BR>{ int
c[N][N],m,n,k,m1,n1,nm1;<BR> for(n=1;n<N;n++)<BR> {
c[n][n]=1;<BR> c[n][1]=1;<BR> }<BR> for(n=3;
n<N;n++)<BR> for(m=2;
m<=n-1;m++)<BR> c[n][m]=c[n-1][m-1]+c[n-1][m];<BR> for(n=1;
n<N;n++)<BR> {
for(m=1;m<=n;m++)<BR> cout<<setw(6)<<c[n][m];<BR> cout<<endl;<BR> }<BR>}</P>
<P class=xt12>4.14
输入一个字符串,求出字符串长度(不能用strlen函数),输出字符串及其长度。<BR>解:<BR>#include
<iostream.h><BR>#include <iomanip.h><BR>#define N
30<BR>void main(void)<BR>{ char str[N];<BR> int
k,l,len;<BR> cout<<"Input a
String"<<endl;<BR> cin>>str;<BR> len=0;<BR> k=0;<BR> while(str[k]!=0)
<BR> {
k++;<BR> len++;<BR> }<BR> cout<<str<<endl;<BR> cout<<"
Length of String:"<<len<<endl;<BR>}</P>
<P class=xt12>4.15
输入一行字符,分别统计出其中英文字母、空格、数字字符和其它字符的个数。<BR>解:(提示:参考习题3.24)<BR>#include
<iostream.h><BR>#include <iomanip.h><BR>#define N
30<BR>void main(void)<BR>{ char str[N];<BR> int
f,i,k1,k2,k3,k4;<BR> cout<<"Input a
String"<<endl;<BR> cin.getline(str,N);<BR> k1=0;<BR> k2=0;<BR> k3=0;<BR> k4=0;<BR> i=0;<BR> while(str[i]!=0)<BR> {
if ((str[i]>=0x41) && (str[i]<=0x5a) ||
(str[i]>=0x61) && (str[i]<=0x7a))
k1++;<BR> else if ((str[i]>=0x30) &&
(str[i]<=0x39)) k2++;<BR> else if (str[i]==0x20)
k3++;<BR> else
k4++;<BR> i++;<BR> }<BR> cout<<"字母:"<<k1<<"个\t数字:"<<k2<<"个\t空格:"<<k3<<"个\t其它 :"<<k4<<"个"<<endl;<BR>}</P>
<P class=xt12>4.16
编一程序,对从键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不同字符的ASCII码之差。例如:输入的两个字符串分别为“abcdef”和“abceef”,则第一个不同字符为“d”和“e”,输出为-1。<BR>解:<BR>#include
<iostream.h><BR>#include <string.h><BR>#define N
30<BR>void main(void)<BR>{ char s1[N],s2[N];<BR> int
i,len;<BR> cout<<"Input first
String"<<endl;<BR> cin>>s1;<BR> cout<<"Input
second String"<<endl;<BR> cin>>s2;<BR> if
(strlen(s1)>strlen(s2)) len=strlen(s2);<BR> else
len=strlen(s1);<BR> i=0;<BR> while (i<len &&
s1[i]==s2[i]) i++;<BR> if (i==len)
<BR> cout<<"s1=s2";<BR> else<BR> cout<<"s1["<<i<<"]-s2["<<i<<"]="<<s1[i]-s2[i]<<endl;<BR>}<BR>4.17
从键盘输入三个字符串,将其合并成一个字符串,并求出合并后字符串的长度。<BR>解:<BR>#include
<iostream.h><BR>#include <string.h><BR>#define N
30<BR>void main(void)<BR>{ char
s1[N],s2[N],s3[N],s[3*N];<BR> cout<<"Input first
String"<<endl;<BR> cin>>s1;<BR> cout<<"Input
second
String"<<endl;<BR> cin>>s2;<BR> cout<<"Input
third
String"<<endl;<BR> cin>>s3;<BR> strcpy(s,s1);<BR> strcat(s,s2);<BR> strcat(s,s3);<BR> cout<<"s="<<s<<endl;<BR>}<BR><BR>4.18
编写程序,实现str=str1+str2的操作,此处运算符“+”表示将二个字符串str1、str2连接成一个字符串str。用键盘将二个字符串输入字符数组str1与str2中,连接后的字符串存放在字符数组str中,并输出连接后的字符串str。<BR>(1)用C++提供的字符串处理函数完成上述要求。<BR>(2)不用C++提供的字符串处理函数完成上述要求。<BR>解:解法一<BR>#include
<iostream.h><BR>#include <string.h><BR>#define N
30<BR>void main(void)<BR>{ char
str1[N],str2[N],str[2*N];<BR> cout<<"Input first
String"<<endl;<BR> cin>>str1;<BR> cout<<"Input
second
String"<<endl;<BR> cin>>str2;<BR> strcpy(str,str1);<BR> strcat(str,str2);<BR> cout<<"str="<<str<<endl;<BR>}<BR>解法二<BR>#include
<iostream.h><BR>#define N 30<BR>void main(void)<BR>{
char str1[N],str2[N],str[2*N];<BR> int
i,j;<BR> cout<<"Input first
String"<<endl;<BR> cin>>str1;<BR> cout<<"Input
second
String"<<endl;<BR> cin>>str2;<BR> i=0;<BR> while(str1[i]!=0)
<BR> {
str[i]=str1[i];<BR> i++;<BR> }<BR> j=0;<BR> while(str2[j]!=0)
<BR> {
str[i]=str2[j];<BR> i++;<BR> j++;<BR> }<BR> str[i]=0;<BR> cout<<"str="<<str<<endl;<BR>}</P>
<P class=xt12>4.19
已知某运动会上男子百米赛跑决赛成绩。要求编写程序,按成绩排序并按名次输出排序结果,包括输出名次、运动员号码和成绩三项内容。<BR>解:<BR>用M行3列数组存放运动员号码、成绩与名次,对决赛成绩降序排序,最后按排序后的位置输入名次。<BR>#
include <iostream.h><BR>#include <iomanip.h><BR>#
define M 5<BR>void main(void)<BR>{ int
a[M][3],i,j,k,temp;<BR> cout<<"Input No and final
grade:";<BR> for
(i=0;i<M;i++)<BR> cin>>a[i][0]>>a[i][1];
<BR> for (i=0;i<M-1;i++)<BR> {
k=i;<BR> for(j=i+1;j<M;j++)<BR> if (a[k][1]<a[j][1])
k=j; <BR> if (k!=i) <BR> {
temp=a[i][0];a[i][0]=a[k][0];a[k][0]=temp;<BR> temp=a[i][1];a[i][1]=a[k][1];a[k][1]=temp;<BR> }<BR> }<BR> for
(i=0;i<M;i++)
a[i][2]=i+1;<BR> cout<<setw(6)<<"No."
<<setw(6)<<"Grade"
<<setw(6)<<"Order"<<endl;<BR> cout<<"-------------------------------------------------------------------"<<endl;<BR> for
(i=0;i<M;i++)<BR> { for (j=0;j<3;j++)
<BR> cout<<setw(6)<<a[i][j];<BR> cout<<endl;<BR> }<BR> cout<<"-------------------------------------------------------------------"<<endl;<BR>}</P>
<P class=s14><SPAN class=xt12>4.20
某小组有5个学生,考了3门课程,他们的学号及成绩如表4.2所示,试编程求每个学生的总成绩及每门课的平均成绩,并按表格形式输出每个学生的学号、3门课程成绩、总成绩及各门课程的平均成绩。要求用一个6行5列的数组完成上述操作。<BR>表4.2
学生成绩情况表<BR></SPAN></P>
<TABLE cellSpacing=1 cellPadding=1 width="75%" border=1>
<TBODY>
<TR>
<TD class=s14>学 号</TD>
<TD class=s14>数 学</TD>
<TD class=s14>语 文</TD>
<TD class=s14>外 语</TD>
<TD class=s14>总成绩</TD></TR>
<TR>
<TD class=s14>1001</TD>
<TD class=s14>90</TD>
<TD class=s14>80</TD>
<TD class=s14>85</TD>
<TD> </TD></TR>
<TR>
<TD class=s14>1002</TD>
<TD class=s14>70</TD>
<TD class=s14>75</TD>
<TD class=s14>80</TD>
<TD> </TD></TR>
<TR>
<TD class=s14>1003</TD>
<TD class=s14>65</TD>
<TD class=s14>70</TD>
<TD class=s14>75</TD>
<TD> </TD></TR>
<TR>
<TD class=s14>1004</TD>
<TD class=s14>85</TD>
<TD class=s14>50</TD>
<TD class=s14>60</TD>
<TD> </TD></TR>
<TR>
<TD class=s14>1005</TD>
<TD class=s14>80</TD>
<TD class=s14>90</TD>
<TD class=s14>70</TD>
<TD> </TD></TR>
<TR>
<TD class=s14>平均成绩</TD>
<TD> </TD>
<TD> </TD>
<TD> </TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -