?? 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"; //輸入數(shù)據(jù)<BR> for
(i=0;i<M-1;i++) //輸入5個學(xué)生的學(xué)號與3門課成績<BR> { for
(j=0;j<N-1;j++)<BR> cin>>s[i][j];<BR> }<BR> for
(i=0;i<M;i++) //處理數(shù)據(jù)<BR> { sum=0.0;<BR> for
(j=1;j<N-1;j++)
//計(jì)算每個學(xué)生的總成績<BR> sum=sum+s[i][j];<BR> s[i][N-1]=sum;
//計(jì)算每個學(xué)生的總分<BR> }<BR> for (j=1;j<N;j++) //處理數(shù)據(jù)<BR> {
sum=0.0;<BR> for (i=0;i<M-1;i++)
//計(jì)算每個學(xué)生的總成績<BR> sum=sum+s[i][j];<BR> s[M-1][j]=sum/(M-1);
//計(jì)算每門課程的平均分<BR> }<BR> cout<<setw(5)<<" Num.
"<<" Math. Chin. Engl. Sum."<<endl;
//輸出數(shù)據(jù)<BR> cout<<"------------------------------\n";<BR> for
(i=0;i<M;i++)<BR> { for (j=0;j<N;j++)
//輸出學(xué)號、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題中學(xué)生成績表按總成績排序后輸出,并輸出每門課程不及格學(xué)生的成績信息。(習(xí)題課內(nèi)容)<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"; //輸入數(shù)據(jù)<BR> for (i=0;i<M-1;i++)
//輸入5個學(xué)生的學(xué)號與3門課成績<BR> { for
(j=0;j<N-1;j++)<BR> cin>>s[i][j];<BR> }<BR> for
(i=0;i<M;i++) //處理數(shù)據(jù)<BR> { sum=0.0;<BR> for
(j=1;j<N-1;j++)
//計(jì)算每個學(xué)生的總成績<BR> sum=sum+s[i][j];<BR> s[i][N-1]=sum;
//計(jì)算每個學(xué)生的總分<BR> }<BR> for (j=1;j<N;j++) //處理數(shù)據(jù)<BR> {
sum=0.0;<BR> for (i=0;i<M-1;i++)
//計(jì)算每個學(xué)生的總成績<BR> sum=sum+s[i][j];<BR> s[M-1][j]=sum/(M-1);
//計(jì)算每門課程的平均分<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;
//輸出數(shù)據(jù)<BR> cout<<"------------------------------\n";<BR> for
(i=0;i<M;i++)<BR> { for (j=0;j<N;j++)
//輸出學(xué)號、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
設(shè)A、B、C為m行n列矩陣。設(shè)計(jì)矩陣加法程序,能完成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
設(shè)A為m行n列矩陣,B為n行k列矩陣,C為m行k列矩陣。設(shè)計(jì)矩陣乘法程序,能完成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>答:所謂指針就是變量、數(shù)組、函數(shù)等的內(nèi)存地址。<BR>指針變量按定義格式大致可分為五種:指針變量、指針數(shù)組、指向一維數(shù)組的指針變量、返回指針值函數(shù)、函數(shù)指針變量。</P>
<P class=xt12>4.25
指針變量按定義格式分為哪5類?每類指針變量如何定義?<BR>答:指針變量按定義格式大致可分為五種:指針變量、指針數(shù)組、指向一維數(shù)組的指針變量、返回指針值的函數(shù)、函數(shù)指針變量。<BR>(1)指針變量的定義格式如下:<BR>〔存儲類型〕
<類型> *<指針變量名> ;如: int b,a[10],*
p;<BR>(2)指針數(shù)組的定義格式如下:<BR>〔存儲類型〕 <類型>
*<數(shù)組名>[<數(shù)組長度>];<BR>例如: char c[3 ][4]={
"ABC","DEF","GHI"};<BR>char *pc[3
]={c[0],c[1],c[2]};<BR>(3)指向一維數(shù)組的指針變量可用于處理二維數(shù)組的運(yùn)算問題,其定義格式為:<BR><類型>
(*<指針變量名>)[<數(shù)組列數(shù)>]; <BR>如:int
(*p)[3];<BR>(4)函數(shù)可返回一個指針值,該指針指向一個已定義好的任一類型的數(shù)據(jù)。定義返回指針值的函數(shù)格式為:<類型>
*<函數(shù)名>(<形參>){<函數(shù)體>} <BR>如:float * f ( float
x) {… } 定義了一個返回實(shí)型指針的函數(shù)f
(),該函數(shù)的形參為實(shí)型的x。<BR>(5)函數(shù)指針變量是用于存放函數(shù)指針的變量,也即存放函數(shù)入口地址的變量。函數(shù)指針變量的定義格式為:<BR><類型>
(*<變量名>) (<參數(shù)表>);</P>
<P class=xt12>4.26
定義一個整型指針變量pi,用什么方法,才能使pi指向整型變量i,指向整型一維數(shù)組a的首地址,指向整型二維數(shù)組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
敘述二維數(shù)組a的行地址、行首地址、元素地址的概念、作用及表示方法,寫出元素a[i][j]值的表示方法。<BR>答:行首地址是第i行第0列的地址,第i行首地址表示方式有:*(a+i)、a[i]、&a[i][0],用于指向數(shù)組元素的指針變量。<BR>行地址是第i行的地址,行地址表示方式有:a+i、&a[i],用于指向一維數(shù)組的指針變量。注意,二維數(shù)組名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引用類型變量與其相關(guān)變量有何關(guān)系?引用類型變量主要用于什么場合?<BR>答:引用類型變量與其相關(guān)的變量使用相同的內(nèi)存空間。<BR>在C++中引入引用類型的主要目的是為了函數(shù)參數(shù)傳送提供方便。由于引用類型變量與相關(guān)變量使用相同的內(nèi)存空間,所以用引用類型變量作為函數(shù)形參時,形參與實(shí)參變量使用相同的內(nèi)存,在函數(shù)內(nèi)對形參的運(yùn)算就是對實(shí)參的運(yùn)算,因此可通過參數(shù)返回函數(shù)運(yùn)算結(jié)果。</P>
<P class=xt12>4.29
對字符串指針變量,能否用cin、cout對其輸入/輸出字符串?能否對字符串指針變量進(jìn)行賦值運(yùn)算?字符串指針變量能否作為字符串處理函數(shù)的參數(shù)?<BR>答:不能將字符串用cin直接輸入指針變量。但可將指針變量所指字符串用直接輸出。<BR>可以對字符串指針變量進(jìn)行賦值運(yùn)算。<BR>字符串指針變量能作為字符串處理函數(shù)的參數(shù)。</P>
<P class=xt12>4.30 讀下列程序,并寫出程序運(yùn)行結(jié)果。<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>程序運(yùn)行結(jié)果是:<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>程序運(yùn)行結(jié)果是:<BR>20 50 50 41</P>
<P class=xt12>4.31
編寫程序,用4種方式求整型一維數(shù)組的和。4種方式是指4種不同的數(shù)組元素表達(dá)方式。<BR>解:<BR># include
<iostream.h><BR>void main( void)<BR>{ int
a[5],i,j,*p,n=5,sum;<BR> p=a;<BR> cout
<<"請輸入一維數(shù)組的五個數(shù)據(jù)值"<<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<<"數(shù)組元素的和為:"<<sum<<endl;<BR> sum=0;<BR> p=a;
//第二種方式<BR> for (i=0;i<n;i++)<BR> sum=sum+*(p+i);
<BR> cout<<"數(shù)組元素的和為:"<<sum<<endl;<BR> sum=0;
<BR> for (i=0;i<n;i++)
//第三種方式<BR> sum=sum+*(a+i);<BR> cout<<"數(shù)組元素的和為:"<<sum<<endl;<BR> sum=0;<BR> for
(i=0;i<n;i++)
//第四種方式<BR> sum=sum+p[i];<BR> cout<<"數(shù)組元素的和為:"<<sum<<endl;<BR>}<BR>程序運(yùn)行結(jié)果為:<BR>請輸入一維數(shù)組的五個數(shù)據(jù)值</P>
<P
class=xt12>數(shù)組元素的和為:15<BR>數(shù)組元素的和為:15<BR>數(shù)組元素的和為:15<BR>數(shù)組元素的和為:15</P>
<P class=xt12>4.32編寫程序,用以下二種方法求實(shí)型二維數(shù)組a[3][4]的最大值。<BR>(1)用指針變量
(2)用表7.1中的數(shù)組元素表示法中的第三種 <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; //將二維數(shù)組首地址賦給指針變量p<BR> for
(int i=0;i<9;i++) <BR> { if(max<*p)max=*p;
//輸出二維數(shù)組中第i個元素值<BR> p++;
//指針變量p加1,指向下一個元素<BR> }<BR> cout<<"數(shù)組的最大值為:"<<max<<endl;<BR> max=*(&a[0][0]+0);<BR> for(i=0;i<3;i++)
//利用元素地址進(jìn)行求解<BR> for(int
j=1;j<3;j++)<BR> if(max<*(&a[i][0]+j))
max=*(&a[i][0]+j);<BR> cout<<"數(shù)組的最大值為:"<<max<<endl;<BR>}<BR>程序輸出結(jié)果為:<BR>數(shù)組的最大值為:9<BR>數(shù)組的最大值為:9</P>
<P class=xt12>4.33
用指針變量編寫下列字符串處理函數(shù):<BR>(1)字符串拼接函數(shù)<BR>(2)字符串比較函數(shù)<BR>(3)取字符串長度函數(shù)<BR>在主函數(shù)中輸入兩個字符串,對這兩個字符串進(jìn)行比較,并輸出比較結(jié)果。然后將兩個字符串進(jìn)行拼接,輸出拼接后的字符串及其長度。<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
定義一個二維字符數(shù)組c[5][80],用cin.getline
輸入5個字符串到二維數(shù)組5行中,然后用c[0]~c[4]表示5行字符串,對字符串進(jìn)行升序排列,最后輸出排序后的結(jié)果。<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
輸入一個二維數(shù)組a[6][6],設(shè)計(jì)一個函數(shù),用指向一維數(shù)組的指針變量和二維數(shù)組的行數(shù)作為函數(shù)的參數(shù),求出平均值、最大值和最小值,并輸出。<BR>解:<BR>#
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -