📄 xt4.htm
字号:
<TD> </TD></TR></TBODY></TABLE>
<P><SPAN class=s14><BR></SPAN><SPAN class=xt12>平均成绩
<BR>解:<BR>#include <iostream.h><BR>#include
<iomanip.h><BR>#define M 6<BR>#define N 5<BR>void
main(void)<BR>{ float s[M][N],sum,ave;<BR> int
i,j;<BR> cout<<"Input data:\n"; //输入数据<BR> for
(i=0;i<M-1;i++) //输入5个学生的学号与3门课成绩<BR> { for
(j=0;j<N-1;j++)<BR> cin>>s[i][j];<BR> }<BR> for
(i=0;i<M;i++) //处理数据<BR> { sum=0.0;<BR> for
(j=1;j<N-1;j++)
//计算每个学生的总成绩<BR> sum=sum+s[i][j];<BR> s[i][N-1]=sum;
//计算每个学生的总分<BR> }<BR> for (j=1;j<N;j++) //处理数据<BR> {
sum=0.0;<BR> for (i=0;i<M-1;i++)
//计算每个学生的总成绩<BR> sum=sum+s[i][j];<BR> s[M-1][j]=sum/(M-1);
//计算每门课程的平均分<BR> }<BR> cout<<setw(5)<<" Num.
"<<" Math. Chin. Engl. Sum."<<endl;
//输出数据<BR> cout<<"------------------------------\n";<BR> for
(i=0;i<M;i++)<BR> { for (j=0;j<N;j++)
//输出学号、3门课程的成绩与总分<BR> if (i==M-1 && j==0)
cout<<setw(6)<<" ";<BR> else
cout<<setw(6)<<s[i][j];<BR> cout<<endl;<BR> }
<BR> cout<<"------------------------------\n";<BR>}</SPAN></P>
<P class=xt12>4.21
对4.21题中学生成绩表按总成绩排序后输出,并输出每门课程不及格学生的成绩信息。(习题课内容)<BR>解:<BR>#include
<iostream.h><BR>#include <iomanip.h><BR>#define M
6<BR>#define N 5<BR>void main(void)<BR>{ float
s[M][N],sum,ave,temp;<BR> int i,j,k;<BR> cout<<"Input
data:\n"; //输入数据<BR> for (i=0;i<M-1;i++)
//输入5个学生的学号与3门课成绩<BR> { for
(j=0;j<N-1;j++)<BR> cin>>s[i][j];<BR> }<BR> for
(i=0;i<M;i++) //处理数据<BR> { sum=0.0;<BR> for
(j=1;j<N-1;j++)
//计算每个学生的总成绩<BR> sum=sum+s[i][j];<BR> s[i][N-1]=sum;
//计算每个学生的总分<BR> }<BR> for (j=1;j<N;j++) //处理数据<BR> {
sum=0.0;<BR> for (i=0;i<M-1;i++)
//计算每个学生的总成绩<BR> sum=sum+s[i][j];<BR> s[M-1][j]=sum/(M-1);
//计算每门课程的平均分<BR> }<BR> for (i=0;i<M-2;i++)<BR> {
k=i;<BR> for(j=i+1;j<M-1;j++)<BR> if (s[k][4]<s[j][4])
k=j; <BR> if (k!=i) <BR> for (j=0;j<N;j++)<BR> {
temp=s[i][j];s[i][j]=s[k][j];s[k][j]=temp;}<BR> }
<BR> cout<<setw(5)<<" Num. "<<" Math. Chin.
Engl. Sum."<<endl;
//输出数据<BR> cout<<"------------------------------\n";<BR> for
(i=0;i<M;i++)<BR> { for (j=0;j<N;j++)
//输出学号、3门课程的成绩与总分<BR> if (i==M-1 && j==0)
cout<<setw(6)<<" ";<BR> else
cout<<setw(6)<<s[i][j];<BR> cout<<endl;<BR> }
<BR>cout<<"------------------------------\n";<BR>}</P>
<P class=xt12>4.22
设A、B、C为m行n列矩阵。设计矩阵加法程序,能完成C=A+B的操作。m与n用define定义为常量,其值由用户自定义。<BR>解:<BR>#include
<iostream><BR>#include <iomanip.h><BR>#define M
2<BR>#define N 2<BR>void main(void)<BR>{ int
a[M][N],b[M][N],c[M][N],i,j;<BR> cout<<"Input
a[M][N]:"<<endl;<BR> for (i=0;i<M;i++)<BR> for
(j=0;j<N;j++)<BR> cin>>a[i][j];<BR> cout<<"Input
b[M][N]:"<<endl;<BR> for (i=0;i<M;i++)<BR> for
(j=0;j<N;j++)<BR> cin>>b[i][j];<BR> for
(i=0;i<M;i++)<BR> for (j=0;j<N;j++)<BR> c[i][j]=
a[i][j]+b[i][j];<BR> for (i=0;i<M;i++)<BR> { for
(j=0;j<N;j++)<BR> cout<<setw(4)<<c[i][j];<BR> cout<<endl;<BR> }<BR>}</P>
<P><SPAN class=xt12>4.23
设A为m行n列矩阵,B为n行k列矩阵,C为m行k列矩阵。设计矩阵乘法程序,能完成C=A*B的操作。m、n与k用define定义为常量,其值由用户自定义。<BR>解:<BR>#include
<iostream><BR>#include <iomanip.h><BR>#define M
2<BR>#define N 3<BR>#define P 4<BR>void main(void)<BR>{ int
a[M][N],b[N][P],c[M][P],i,j,k;<BR> cout<<"Input
a["<<M<<"]["<<N<<"]:"<<endl;<BR> for
(i=0;i<M;i++)<BR> for
(j=0;j<N;j++)<BR> cin>>a[i][j];<BR> cout<<"Input
b["<<N<<"]["<<P<<"]:"<<endl;<BR> for
(i=0;i<N;i++)<BR> for
(j=0;j<P;j++)<BR> cin>>b[i][j];<BR> for
(i=0;i<M;i++)<BR> for (j=0;j<P;j++)<BR> {
c[i][j]=0;<BR> for
(k=0;k<N;k++)<BR> c[i][j]=c[i][j]+a[i][k]*b[k][j];<BR> }<BR> for
(i=0;i<M;i++)<BR> { for
(j=0;j<P;j++)<BR> cout<<setw(4)<<c[i][j];<BR> cout<<endl;<BR> }<BR>}</SPAN></P>
<P
class=xt12>4.24什么叫指针?有哪些类型的指针?<BR>答:所谓指针就是变量、数组、函数等的内存地址。<BR>指针变量按定义格式大致可分为五种:指针变量、指针数组、指向一维数组的指针变量、返回指针值函数、函数指针变量。</P>
<P class=xt12>4.25
指针变量按定义格式分为哪5类?每类指针变量如何定义?<BR>答:指针变量按定义格式大致可分为五种:指针变量、指针数组、指向一维数组的指针变量、返回指针值的函数、函数指针变量。<BR>(1)指针变量的定义格式如下:<BR>〔存储类型〕
<类型> *<指针变量名> ;如: int b,a[10],*
p;<BR>(2)指针数组的定义格式如下:<BR>〔存储类型〕 <类型>
*<数组名>[<数组长度>];<BR>例如: char c[3 ][4]={
"ABC","DEF","GHI"};<BR>char *pc[3
]={c[0],c[1],c[2]};<BR>(3)指向一维数组的指针变量可用于处理二维数组的运算问题,其定义格式为:<BR><类型>
(*<指针变量名>)[<数组列数>]; <BR>如:int
(*p)[3];<BR>(4)函数可返回一个指针值,该指针指向一个已定义好的任一类型的数据。定义返回指针值的函数格式为:<类型>
*<函数名>(<形参>){<函数体>} <BR>如:float * f ( float
x) {… } 定义了一个返回实型指针的函数f
(),该函数的形参为实型的x。<BR>(5)函数指针变量是用于存放函数指针的变量,也即存放函数入口地址的变量。函数指针变量的定义格式为:<BR><类型>
(*<变量名>) (<参数表>);</P>
<P class=xt12>4.26
定义一个整型指针变量pi,用什么方法,才能使pi指向整型变量i,指向整型一维数组a的首地址,指向整型二维数组b的首地址。<BR>答:<BR>pi=&i;<BR>pi=a;(或者pi=&a[0];)<BR>pi=&a[0][0];(或者pi=a[0];)</P>
<P class=xt12>4.27
叙述二维数组a的行地址、行首地址、元素地址的概念、作用及表示方法,写出元素a[i][j]值的表示方法。<BR>答:行首地址是第i行第0列的地址,第i行首地址表示方式有:*(a+i)、a[i]、&a[i][0],用于指向数组元素的指针变量。<BR>行地址是第i行的地址,行地址表示方式有:a+i、&a[i],用于指向一维数组的指针变量。注意,二维数组名a是表示第0行的行地址&a[0],而不是第0行第0列的元素地址&a[0][0]。<BR>第i行第j列元素a[i][j]地址的表示方式有:a[i]+j
、*(a+i)+j
、&a[i][0]+j、&a[i][j]。<BR>第i行第j列元素值的表示方式有:*(a[i]+j) 、
*(*(a+i)+j) 、 *(&a[i][0]+j)、a[i][j]。</P>
<P
class=xt12>4.28引用类型变量与其相关变量有何关系?引用类型变量主要用于什么场合?<BR>答:引用类型变量与其相关的变量使用相同的内存空间。<BR>在C++中引入引用类型的主要目的是为了函数参数传送提供方便。由于引用类型变量与相关变量使用相同的内存空间,所以用引用类型变量作为函数形参时,形参与实参变量使用相同的内存,在函数内对形参的运算就是对实参的运算,因此可通过参数返回函数运算结果。</P>
<P class=xt12>4.29
对字符串指针变量,能否用cin、cout对其输入/输出字符串?能否对字符串指针变量进行赋值运算?字符串指针变量能否作为字符串处理函数的参数?<BR>答:不能将字符串用cin直接输入指针变量。但可将指针变量所指字符串用直接输出。<BR>可以对字符串指针变量进行赋值运算。<BR>字符串指针变量能作为字符串处理函数的参数。</P>
<P class=xt12>4.30 读下列程序,并写出程序运行结果。<BR>(1)<BR># include
<iostream.h><BR>void main (void)<BR>{ float
x=1.5,y=2.5,z;<BR> float
*px,*py;<BR> px=&x;<BR> py=&y;<BR> z= * px +
*py;<BR> cout<<"x="<<*px<<'\t'<<"y="<<*py<<"z="<<z<<'\n';<BR>}<BR>程序运行结果是:<BR>x=1.5
y=2.5z=4<BR>(2)<BR># include <iostream.h><BR>void main(
void)<BR>{ int a[5]={10,20,30,40,50};<BR> int *p=&a[0];
<BR> p++;<BR> cout<< *p<<'\t'; <BR> p+=3;
<BR> cout<< *p<<'\t'; <BR> cout<<
*p--<<'\t'; <BR> cout<<++ *p<<'\n';
<BR>}<BR>程序运行结果是:<BR>20 50 50 41</P>
<P class=xt12>4.31
编写程序,用4种方式求整型一维数组的和。4种方式是指4种不同的数组元素表达方式。<BR>解:<BR># include
<iostream.h><BR>void main( void)<BR>{ int
a[5],i,j,*p,n=5,sum;<BR> p=a;<BR> cout
<<"请输入一维数组的五个数据值"<<endl;<BR> for
(i=0;i<n;i++)<BR> cin>>a[i];
<BR> cout<<endl;<BR> sum=0;<BR> for (i=0;i<n;i++)
//第一种方式<BR> sum=sum+a[i];<BR> cout<<"数组元素的和为:"<<sum<<endl;<BR> sum=0;<BR> p=a;
//第二种方式<BR> for (i=0;i<n;i++)<BR> sum=sum+*(p+i);
<BR> cout<<"数组元素的和为:"<<sum<<endl;<BR> sum=0;
<BR> for (i=0;i<n;i++)
//第三种方式<BR> sum=sum+*(a+i);<BR> cout<<"数组元素的和为:"<<sum<<endl;<BR> sum=0;<BR> for
(i=0;i<n;i++)
//第四种方式<BR> sum=sum+p[i];<BR> cout<<"数组元素的和为:"<<sum<<endl;<BR>}<BR>程序运行结果为:<BR>请输入一维数组的五个数据值</P>
<P
class=xt12>数组元素的和为:15<BR>数组元素的和为:15<BR>数组元素的和为:15<BR>数组元素的和为:15</P>
<P class=xt12>4.32编写程序,用以下二种方法求实型二维数组a[3][4]的最大值。<BR>(1)用指针变量
(2)用表7.1中的数组元素表示法中的第三种 <BR>解:<BR># include
<iostream.h><BR>void main(void)<BR>{ int
a[3][3]={{1,2,3},{4,5,6},{7,8,9}};<BR> int
*p=&a[0][0],max;<BR> max=*p; //将二维数组首地址赋给指针变量p<BR> for
(int i=0;i<9;i++) <BR> { if(max<*p)max=*p;
//输出二维数组中第i个元素值<BR> p++;
//指针变量p加1,指向下一个元素<BR> }<BR> cout<<"数组的最大值为:"<<max<<endl;<BR> max=*(&a[0][0]+0);<BR> for(i=0;i<3;i++)
//利用元素地址进行求解<BR> for(int
j=1;j<3;j++)<BR> if(max<*(&a[i][0]+j))
max=*(&a[i][0]+j);<BR> cout<<"数组的最大值为:"<<max<<endl;<BR>}<BR>程序输出结果为:<BR>数组的最大值为:9<BR>数组的最大值为:9</P>
<P class=xt12>4.33
用指针变量编写下列字符串处理函数:<BR>(1)字符串拼接函数<BR>(2)字符串比较函数<BR>(3)取字符串长度函数<BR>在主函数中输入两个字符串,对这两个字符串进行比较,并输出比较结果。然后将两个字符串进行拼接,输出拼接后的字符串及其长度。<BR>解:<BR>#
include <iostream.h><BR>int scmp(char *p1,char *p2)<BR>{
while(*p1==*p2)<BR> { p1++;<BR> p2++;<BR> }<BR>if
(*p1>*p2) <BR>return 1;<BR>else if (*p1==*p2)<BR> return
0;<BR>else<BR> return -1;<BR>}<BR>void scat(char *p1,char
*p2)<BR>{
while(*p1!=0)<BR> p1++;<BR> while(*p2!=0)<BR> *p1++=*p2++;<BR> *p1=0;<BR>}<BR>int
slen(char *p)<BR>{ int l=0;<BR> while(*p!=0)<BR> {
p++;<BR> l++;<BR> }<BR> return l;<BR>}<BR>void
main(void)<BR>{ char s1[40],s2[20];<BR> cout<<"Input
String1:";<BR> cin>>s1;<BR> cout<<"Input
String2:";<BR> cin>>s2;<BR> if
(scmp(s1,s2)==1)<BR> cout<<"String1>String2"<<endl;<BR> else
if
(scmp(s1,s2)==-1)<BR> cout<<"String2>String1"<<endl;<BR> else<BR> cout<<"String1=String2"<<endl;<BR> scat(s1,s2);<BR> cout<<"String1+String2="<<s1<<endl;<BR> cout<<"Length="<<slen(s1)<<endl;<BR>}<BR><BR>4.34
定义一个二维字符数组c[5][80],用cin.getline
输入5个字符串到二维数组5行中,然后用c[0]~c[4]表示5行字符串,对字符串进行升序排列,最后输出排序后的结果。<BR>解:<BR>#include
<iostream.h><BR># include <string.h><BR>void
main(void)<BR>{ char c[5][80];<BR> char
*p[5]={c[0],c[1],c[2],c[3],c[4]};<BR> char *pc;<BR> int
i,j;<BR> cout<<"Input 5 String:"<<endl;<BR> for
(i=0;i<5;i++)<BR> cin>>p[i];<BR> for
(i=0;i<4;i++)<BR> { for (j=i+1;j<5;j++)<BR> if (strcmp
(p[i],p[j])>0) <BR> {
pc=p[i];p[i]=p[j];p[j]=pc;<BR> }<BR> }<BR> for (
i=0;i<5;i++) cout<<p[i]<<endl;<BR>}</P>
<P class=xt12>4.35
输入一个二维数组a[6][6],设计一个函数,用指向一维数组的指针变量和二维数组的行数作为函数的参数,求出平均值、最大值和最小值,并输出。<BR>解:<BR>#
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -