C語言知識百問_第1頁
C語言知識百問_第2頁
C語言知識百問_第3頁
C語言知識百問_第4頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

C語言知識80問1.表達(dá)式(1-7).程序在編譯時出現(xiàn)如下錯誤提示信息:errorC2106 ,=, leftoperandmustbe1-value,如何根據(jù)錯誤提示信息判斷和解決程序中的錯誤?.使用指針類型后,程序中出現(xiàn)了許多錯誤,不知如何修改?源程序如下:.老師,按照你的建議重新修改程序后,編譯連接通過,可是運行的結(jié)果還是不對?.我的程序能夠完成十進(jìn)制到二進(jìn)制和八進(jìn)制之間的轉(zhuǎn)換,就是不能正確轉(zhuǎn)為十六進(jìn)制數(shù),即在轉(zhuǎn)換的十六進(jìn)制結(jié)果中看不到十六進(jìn)制數(shù)中的A-F符號,這是為什么?.編譯錯誤:errorC2018:unknowncharacter'0xa3I是什么意思?.在調(diào)試程序時中所有的警告信息不影響目標(biāo)文件的形成,這樣是否可以忽略這些信息?下面的提示信息”:0error(s),1warning(s)localvariable'm'usedwithouthavingbeeninitialize11,我們應(yīng)注意什么?.表達(dá)式y(tǒng)二?px++與y=*(px++)意義相同嗎?.程序在編譯時出現(xiàn)如下錯誤提示信息:errorC2106 -*leftoperandmustbe1-value,???如何根據(jù)錯誤提示信息判斷和解決程序中的錯誤?下面是該問題的源程序:#include<stdio.h>intmain()(intf(intn);intsum,n,m;printf(Mpleaseinput\n**);scanf(m;sum=f(0)+f(1);fbr(n=2;n<=m;n++) {f(n)=f(n-1)+f(n-2);sum=sum+f(n);)printf(Msum=%d\n,,,sum);printf(**f(n)=%d\n**,f(n));return0;答:從錯誤信息提示中可以看出,你程序第11行“f(n)=f(n-l)+f(n-2);”語句有錯,即系統(tǒng)指出了賦值號左邊有邏輯錯誤。f(n)為函數(shù)調(diào)用形式,函數(shù)調(diào)用一般不能在賦值號左邊出現(xiàn)(引用除外)。你的程序如果使用數(shù)組編寫,程序改動如下:#include<stdio.h>intmain()intf[50]={0,1};//定義f為50個元素的數(shù)組,前2個元素存放數(shù)列的前2項0和1intsum,n,m;printf("pleaseinputm:\nH);scanf("%d”,&m);sum=flOJ+fll];〃前2項的和for(n=2;n<m;n++) {f[n]=f[n-l]+f[n-2];sum=sum+f[n];}printf(,,sum=%d\n,,,sum);printf(Mf(n)=%d\nM,f[n-1]);return0;.使用指針類型后,程序中出現(xiàn)了許多錯誤,不知如何修改?源程序如下:〃找大數(shù)#include<stdio.h>intmain()inta[10],*p;for(p=a;p<10;p++)scanf("%d”,&p);intmax=*p;for(p=++a;p<1〇;p++)if(*p>max)max=*p;printf("max=%d\n',,max);return0;答:對于多個錯誤,首先從第一個錯誤改起,采用邊改邊調(diào)試的方法,效率較髙。第6行p<10式子錯,不能用指針與一個整數(shù)進(jìn)行比較,改為p<a+10,其中a+10代表a[9]元素之后的ー個元素的地址,作為終值控制。第7行scanf("%d”,&p);錯誤,改為scanf("%d”,p);意為給p指向的變量讀值。第9行++a,p<10有錯,a為數(shù)組名,代表地址常量,其值不能改變,改為a+l?.老師,按照你的建議重新修改程序后,編譯連接通過,可是運行的結(jié)果還是不對?修改后的的程序如卜:〃找大數(shù)#include<stdio,h>intmain()(inta[10],*p;fbr(p=a;p<a+10;p++)scanf(t<%d,\p);intmax二?p;for(p=a+1;p<a+!〇;p++)if(*p>max)max=*p;printf(nmax=%d\n'\max);return0;)運行過程如下:輸出結(jié)果:max=1310656,并不是我輸入的數(shù)據(jù),這又是為什么?答:你的程序改得很好,運行時輸入的數(shù)據(jù)也是正確的,問題究竟在那里?記住,這種問題還在我們的程序中,往往是“邏輯”上的錯誤,不易發(fā)現(xiàn)。查找問題的方法,可以借助DEGUB調(diào)試工具,設(shè)斷點,跟蹤執(zhí)行過程,觀察變量等;該題中可以這樣找問題,先排除輸入的10個數(shù)據(jù)沒有錯誤,再分析你給max變量的初值是否正確,你會發(fā)現(xiàn)max的初值正好是1310656,這并不是a數(shù)組的值。問題出在指針p,原因是在完成給a數(shù)組輸入后,p已指向a數(shù)組最后元素的下ー個位置,這時的?p值是不確定的。我們常用數(shù)組中的第一個元素作為初值,程序再次改動如下:#include<stdio.h>intmain()(inta[10],*p;for(p=a;p<a+!〇;p++) scanf("%d”,p);p=a;〃恢復(fù)pintmax=*p;for(p=p+1;p<a+!0;p++)if(*p>max)max=*p;printf("max=%d\n',,max);return0;[返回].我的程序能夠完成十進(jìn)制到二進(jìn)制和八進(jìn)制之間的轉(zhuǎn)換,就是不能正確轉(zhuǎn)為十六進(jìn)制數(shù),即在轉(zhuǎn)換的十六進(jìn)制結(jié)果中看不到十六進(jìn)制數(shù)中的A-F符號,這是為什么?程序如下:#include<stdio.h>#include<string.h>intmain()(intn;intr;inta[2000];printff請輸入要轉(zhuǎn)換的十進(jìn)制數(shù)字Xn“);scanf("%d”,&n);printf(”請輸入要轉(zhuǎn)換成〈二進(jìn)制人進(jìn)制,十六進(jìn)制scanf("%d”,&r);inti=0;do{a[i]=n%r;n=n/r;i++;}while(n!=0);for(intj=i-l;j>=0;j-){if(a[j]>=10)alj^aljl-lO+'A';prin提"%d”,a|jD;)printf("\n”);return0;}答:將你的程序中下列循環(huán)結(jié)構(gòu)for(intj=i-l;j>=O;j—)(if(a[j]>=10)aU]=a[j]-10+*A';printf(**%d,,,a|jj);}更改為:for(intj=i-l;j>=O;j—)(if(a[j]>=l0)printf(14%c,,,char(a[j]-l0+'A'));elseprintf("%d",a[j]);}[返冋].編譯錯誤:errorC2018:unknowncharacter'0xa3,是什么意思?答:不能識別的字符。產(chǎn)生這種錯誤的地方,經(jīng)常是在程序中出現(xiàn)了不該使用的中文字符,特別是ー些中文的標(biāo)點符號。如‘和“;”有區(qū)別,前面的分號是中文的,后面的分號是西文的,程序中語句末尾不能用中文的分號結(jié)束。[返回].在調(diào)試程序時中所有的警告信息不影響目標(biāo)文件的形成,這樣是否可以忽略這些信息?下面的提示信息":0error(s),1warning(s)localvariable'm'usedwithouthavingbeeninitialize",我們應(yīng)注意什么?答:警告信息是編譯系統(tǒng)給用戶發(fā)岀的另ー?種信號,指出這里的問題系統(tǒng)還無法完全決斷是對還是錯,山用戶分析后確定,因此不能完全忽略。我們提倡對于程序中任何警告信息都應(yīng)進(jìn)行分析處理,以免造成運行時各種"異?,F(xiàn)象”的產(chǎn)生。信息"Oerror(s),1waming(s)localvariable'm'usedwithouthavingbeeninitialize",意為程序中的變量m使用前沒有賦初值,直接使用m時可能會導(dǎo)致結(jié)果錯誤,例如累加和變量初值通常取。,階乘變量的初值通常取1〇[返回].表達(dá)式y(tǒng)=*px++與y=*(px++)意義相同嗎?答:相同。運算后,y變量先得到*px的值,之后使指針px增1。原因:在這里,?和++都是單目運算符,優(yōu)先級別相同,但遵循右結(jié)合性,即?px++相當(dāng)于?(px++),但(px++)的值為px,因而?與px結(jié)合成?px,繼續(xù)運算將?px的值賦值給y,表達(dá)式運算結(jié)束后,在為px值增10[返冋]2.數(shù)據(jù)類型(8-16).我在做下面的程序時將date用了int,結(jié)果錯了,而換成char就對了,這是為什么?程序中的name1和name2后面的[41]是什么意思?.下列程序為什么不能實現(xiàn)對二維數(shù)組m進(jìn)行行列互換?.下面的程序功能是打印楊輝三角形(10行),為何會出現(xiàn)非法操作?.請幫我分析程序中的警告信息出現(xiàn)的原因?.這個程序的電話號碼如果第一個數(shù)字是0時,結(jié)果就錯了,為什么?源程序如下:.幫忙改改程序中的多個錯誤。功能:輸入五個用戶信息以用戶名為排序關(guān)鍵字,按照字典順序?qū)ξ鍌€信息進(jìn)行升序排列。.下面是ー個簡單的main。函數(shù),編譯也有錯誤?請分析錯誤的原因。程序是這樣寫的:.執(zhí)行inta=2,&b=a;++b;++a;后,為什么a與b的值都是4?.Sw叩函數(shù)中的形參已設(shè)為指針類型,但調(diào)用后,實參變量的值仍然達(dá)不到交換,為什么呢?8.我在做下面的程序時將date用了int,結(jié)果錯了,而換成char就對了,這是為什么?程序中的namel和name2后面的[41]是什么意思?//example1-5顯示生日卡#include<stdio.h>intmain()(charname1[4l],name2[41J,date[41];printf("pleaseinputyourfriend'sname\n");scanf("%s”,namel);printf("pleaseinputyourname\n");scanf("%s”,name2);printf("pleaseinputthedayyouwritethisletter\n");scanf("%s”,date);printf(',======================================================\nH);printf("Mydear%s,\n",namel);printf("Happybirthdaytoyou!\n");printf("yours\nM);printf("%s\n",name2);printf("%s\n",date);printf("========================================================\n'');return0;答:(1)將date定義為int本身并沒有錯誤。而scanf("%d”,date);有問題,它只能接收ー個整數(shù),不能同時接收多個整數(shù),即不能實現(xiàn)給整型數(shù)組各元素讀值。而改為char類型后,scanf("%s”,date);能接受一個字符串,這一點與整型數(shù)組有區(qū)別。charname1[41],name2[41]:這里的41表示一個字符數(shù)組中元素的個數(shù)。這樣,使用ー個字符數(shù)組能接受一個人的名字,該人名長度最多為40個字符,多余的一個元素存放字符串的結(jié)束標(biāo)志符。[返回].下列程序為什么不能實現(xiàn)對二維數(shù)組m進(jìn)行行列互換? 程序如下:#include<stdio.h>voidcs_myron(intm[][4],intn)(intij;for(i=0;i<n;i++)for(j=0;j<4;j++)m[i][j]=in[j][i];}voidmain()(intm[3][4]={1,2,3,4,5,6,7,8,9,10,11,12);cs_myron(m,3);printf("%d\n",m);)答:你的程序錯誤較多:m[3][4]行列互換后,應(yīng)為ー個4行3列的二維數(shù)組,因此在ー個m數(shù)組上互換元素值是不可能。通常對ー個方陣進(jìn)行行列互換。(2)互換同一數(shù)組中的兩個元素僅用ー個語句難于實現(xiàn);如:m[i][j]=m[j][i]:是不能互換兩個元素的值。(3)語句printf(m?endl;不能輸出數(shù)組m。下面給出ー個完整的例子,對數(shù)組m[4][4]進(jìn)行行列互換。#include<stdio.h>voidcs_myron(intm[J[4],intn)(inti,j,k;for(i=0;i<n;i++)for(j=i;j<4;j++)k=m[i皿;m[i][j]=m[j][i];m[j][i]=k;voidmain()(inti,j;intm[4][4]=(12345,678,9,10,11,12,13,14,15,16};cs_myron(m,4);for(i=0;i<4;i++)(for(j=0y<4;j++)printff4%dprintf("\n”);}getchar();[返回].下面的程序功能是打印楊輝三角形(10行),為何會出現(xiàn)非法操作?//楊輝三角形(打印10行)#include<stdio.h>voids(intlist[][10],intm){inti,j;fbr(i=0;i<m;i++)for(j=0;j<m;j++) {list[i]U]=l;if(i<j)list[i][j]=O;)for(i=0;i<m;i++)for(j=0;j<=i;j++)list[i+l][j+l]=list[i][j]+list[i][j+l];}voidmain()inta[10]ll0J;intij;s(a,10);printf(endl;for(i=0;i<10;i++)(for(j=0;j<=i;j++)printf(a[i]U]vvヤ”;printf(endl;答:這是?個典型的數(shù)組越界問題的程序。程序改動如下,改動部分用紅色標(biāo)出?!钶x三角形(打印10行)#include<stdio.h>voids(intlist[][10],intm){intij;for(i=0;i<m;i++)for(j=0;j<m;j++)(list[i][j]=l;if(i<j)list[i][j]=O;)fbr(i=0;i<m-l;i++)for(j=0;j<i;j++)list[i+l][j+l]=Ust[i]U]+list[i]U+l];}voidmain()(inta[10][10];intij;s(a,10);printf(endl;for(i=0;i<10;i++)(for(j=0;j<=i;j++)printf(a[i][j]?H\tM;printf(endl;.請幫我分析程序中的警告信息出現(xiàn)的原因?#include<stdio.h>intmain()(floata,b,c,sum,m;floatd;d=0.5;primf("請任意輸入三個小數(shù):\n");scanf(u%f%f%f\&a,&b,&c);sum=a+b+c;printf("這三個小數(shù)的和為:%f\n,',sum);m=sum+d;intn=m;printf("這三個小數(shù)的和經(jīng)四舍五入后為:%d\n*\n);return0;)答:該提示信息指出,程序的第12行,初始化語句intn二m;中將float型變量m值轉(zhuǎn)換為int時可能會產(chǎn)生數(shù)據(jù)丟失,應(yīng)引起你的注意。如果不希望再看到警告信息,可以將第12行語句改為:intn=(int)m;或intn=int(m);.這個程序的電話號碼如果第一個數(shù)字是0時,結(jié)果就錯了,為什么?源程序如下:#include<stdio.h>#include<string.h>structphone(charname[20];intnumber;};main()(phonecall[5J;charch[20];inti,j,k;for(i=0;i<=4;i=i+1){scanf("%s”,call[i].name);scanf("%d”,&call[i].number);)for(j=0;j<=4;j=j+1){for(i=0;i<4;i=i+l){if(strcmp(call[i].name,call[i+l].name)>0){strcpy(ch,call[i+l].name);strcpy(call[i+l].name,call[i].name);strcpy(cal1[i].name,ch);k=call[i].number;call[i].number=call[i4-l].number;call[i+l].number=k;printf("名字 電話\n");printf(M \nn);for(i=0;i<=4;i=i+1){printf(<4%s\t,,,call[i].name);printf("%d\n",call[i].number);}return0;)答:程序本身沒有問題。由于電話號碼number是整型變量,如果提供的整數(shù)前面加0,則表示該數(shù)是ー個ハ進(jìn)制數(shù),這個。并不作為數(shù)的一部分。如:C++中的整數(shù)0123不是十進(jìn)制數(shù)123,而表示83(ド82+2*81+3*80=83)。為反映出第?位有〇的電話號碼,最好將number定義為字符數(shù)組:charnumber[12];同時將程序中用于交換用的中間變量k類型也定義成字符數(shù)組如:chark[12];交換時注意使用字符串函數(shù)strcpy。。主要改動部分如下:structphone(charname[20];charnumber[12];);inti,j,k;改為:intij;chark[12];k=call[i].number;call[i].number=call[i+l],number;call[i+1].number=k;改為:strcpy(k,call[i].number);strcpy(call[i].number,call[i+1].number);strcpy(call[i+l].number,k);13.幫忙改改程序中的多個錯誤。功能:輸入五個用戶信息以用戶名為排序關(guān)鍵字,按照字典順序?qū)ξ鍌€信息進(jìn)行升序排列。include<stdio.h>include<string.h>definePERSON5;structCustomTypecharname[10];inttel網(wǎng););intmain()(structCustomTypeCustom[PERSON];inti,j;prinf("Pleaseinputdataofcustom\n");for(i=0;i<PERSON;i=i+1) {scanf("%s”,Custom[i].name);scanf("%d”,custom[i].tel);}for(intg=0;g<PERSON;g=g+1) {for(intj=PERSON-l;j>g;j=j-l)if(charstrcmp(custom[j].name,custom[g].name)>0){charbig[10]=custom[j].name;custom1].name二custom[g].name;custom[g].name=big[10];))pintf("姓名電話\n");printf(" \nn);for(intk=0;k<PERSON;k=k+1){printf("%s\t",custom|k].name);printf("%d\t\n”,custom[k].tel);)return0;)答:你的程序錯誤比較多,錯誤原因歸類如下:#definePERSON5;中,宏定義后不能有分號。scanf("%d”,custom[i].tel)不能為整型數(shù)組te!讀值。應(yīng)該把tel改為字符數(shù)組。(3)變量名拼錯,如Custom,拼寫為customif(charstrcmp(Custom0].name,ustom[g].name)>0),改為if(strcmp(Custom]].name,Custom(g].name)>0)(5)交換兩個字符串必須用strcpy函數(shù),不能直接賦值。如:Custom]].name=Custom[g].name;改過的程序如下:#include<stdio.h>#include<string.h>#definePERSON5structCustomType(charnameflO];chartel[8];};intmain()(CustomTypeCustomfPERSON];inti;prinf("Pleaseinputdataofcustom\n");for(i=0;i<PERSON;i=i+l) scanf("%s%s”,Custom[i].name,customロ].tel);for(intg=0;g<PERSON;g=g+1) {for(intj=PERSON-l;j>g;j=j-l)if(strcmp(Custom(j].name,Custom[g].name)<0){

CustomTypeTemp;Temp二Custom1];Custom[j]=Custom[g];Custom[g]=Temp;)}pintfC姓名電話\nn);printf(" \nH);for(intk=0;k<PERSON;k=k+1)printf("%s\t%s\n”,custom[k].name,custom[k].tel);return0;}[返回].下面是ー個簡單的main。函數(shù),編譯也有錯誤?請分析錯誤的原因。程序是這樣寫的:#include<stdio.h>voidmain()(printf("HelloC!\n");return0;}答:的確有錯誤。由于main。函數(shù)返回值void類型,因此函數(shù)體中不能有return0;的語句。可以去掉該語句,或僅有return;[返冋].執(zhí)行inta=2,&b=a;++b;++a;后,為什么a與b的值都是4?答:語句inta=2,&b=a;說明了a是ー個整型變量,b是ー個引用變量,且用b引用a。這時b與a共用ー塊存儲單元,因此,a與b的值是ー樣的,最終的值都是4。有時也稱引用變量b是變量a的別名。[返回].Swap函數(shù)中的形參己設(shè)為指針類型,但調(diào)用后,實參變量的值仍然達(dá)不到交換,為什么呢?函數(shù)程序如下:voidSwap(int*x,int*y){int*z;z=x;x=y;y=z;return;}答:你想對調(diào)用該函數(shù)的實參變量值進(jìn)行交換,函數(shù)中應(yīng)改為對指針x和y所指對象變量進(jìn)行交換,而不是對指針x和y的交換。函數(shù)改寫如下:voidSwap(int*x,int*y){intz;z=*x;*x=*y;y=*z;return;3、控制結(jié)構(gòu)(17-27).下面的程序2是我改寫的判斷素數(shù)的程序,看起來與程序1沒有什么大的區(qū)別,但程序2結(jié)果不對,為什么?.有一分?jǐn)?shù)序列通項是后ー項的分母為前ー項分子,后?ー項分子為前ー項分子和分母的和,求其前n項和。我給的第一項分子是7,分母是10,使用語句:a[0]=7/10;賦初值,程序運行后結(jié)果很奇怪,當(dāng)輸入大于等于2時,輸出結(jié)果總是l.#INF,為什么?.我寫的判斷“完數(shù)”程序哪錯了?我的程序如ド:.求圓周率,看看我的程序那里出錯了?.為何只能循環(huán)一次?.如何才能區(qū)分開輸I屮語句printf("n不是素數(shù)"'<<endl;和printf("n是素數(shù)"<<endl;?我的程序如下:.求1!+2!+3!+....+10!的程序中,哪里錯了,應(yīng)該怎樣改?我的程序如下:.這個素數(shù)表哪里錯啦?.請問下面的程序哪里出錯?.while和for都表示循環(huán),如何選用?.我編寫的“打印1000到10000回文數(shù)’’程序,不知道哪錯了?我的程序如下:.ド面的程序2是我改寫的判斷素數(shù)的程序,看起來與程序1沒有什么大的區(qū)別,但程序2結(jié)果不對,為什么?程序段1如下:intisprime(intn)(intle叩=YES; 〃先假定為YESfor(inti=2;i<n;i++)if(n%i==0)leap=NO; /Z只要有因子』eap值變?yōu)镹Oreturnleap;)程序段2如下:intisprime(intn)(intleap=NO;intj;for(inti=2;i<n;i++)j=n%i;if(j!=O)leap=YES;returnleap;答:首先要明確素數(shù)的概念,ー個大于2的正整數(shù),如果除了1和它本身外,再沒有其它的因子,這個數(shù)就是素數(shù),因此,判斷ー個數(shù)n是否是素數(shù),實際上是在2~n-l之間查找是否還有n的因子。只要2~n-l間還有一個因子存在,說明n就不是素數(shù),只有2~n-l間沒有一個因子,說明nオ是素數(shù)。在程序段1中,我們先假定該數(shù)是素數(shù),即令leap=YES,然后從2~n-l分別判斷,只要有一個能夠被n整除即n%i==O,說明n不是素數(shù),這時就將le叩改為NO:如果循環(huán)結(jié)束時leap仍然是最初的YES,表示該數(shù)除1和它本身外,沒有其它的因子,也就是素數(shù)。顯然,程序段1作為判斷n是否是素數(shù)的函數(shù)肯定是正確的。當(dāng)然,從優(yōu)化角度上說,該程序還可以作進(jìn)?步的簡化,這里就不再討論了。你所改寫的程序段2就不同了。你首先假定該數(shù)不是素數(shù),即令leap=NO,然后從2~n-l分別判斷,只要有一個不能夠被n整除即j!=0,這時就將leap改為YES,從而想得到結(jié)論n是素數(shù),這一點與素數(shù)定義相違背。[返回].有一分?jǐn)?shù)序列通項是后ー項的分母為前ー項分子,后一項分子為前ー項分子和分母的和,求其前n項和。我給的第一項分子是7,分母是10,使用語句:a[0]=7/10;賦初值,程序運行后結(jié)果很奇怪,當(dāng)輸入大于等于2時,輸出結(jié)果總是l.#INF,為什么?〃分?jǐn)?shù)序列求和程序#include<stdio.h>intmain()(intn;doublea[1000],sum;printf("Pleaseinputanumber'*);scanf("%d”,&n);a[0]=7/10;sum=a[0J;for(inti=1;i<n;i++){a[i]=I/a[i-l]+l;sum=sum+a[i];)printf(”前n項和是:%d\nH);return0;答:問題的關(guān)鍵正是語句al0]=7/10;引起的。你希望a[0]的值是0.7,但實際a[0]的值是0.0,因為整數(shù)7除以整數(shù)10結(jié)果是。。這樣語句a[i]=l/a[i-l]+l;在i=l時,在分母上,其值為0,引起錯誤。你只需將語句a[0]=7"0;改動為:a⑼=7.0ハ0.0;或直接寫a[0]=0.7;就可以了,程序的其它部分不作任何改動。[返回].我寫的判斷“完數(shù)”程序哪錯了?我的程序如下:#include<stdio.h>intmain()(inti,j,n,s=O;for(i=2;i<=1000;i=i+l))for(j=l;j<=i;j=j+l){n=i%j;if(n==O)s=s+j;if(i=s-i)printf(u%d\nM,i);))return0;)答:首先回顧完數(shù)的定義:所謂完數(shù),是指ー個數(shù)恰好等于他的所有因子之和(不包括其本身)。例如:6=1+2+3,所以,6是完數(shù)。 你的程序中有幾個地方需要注意:s=0;位置(2)內(nèi)循環(huán)for(j=l;j<=i;j=j+l)中j<=i改為j<i(i除外)(3)if(i=s-i)改為if(i==s)判斷i是完數(shù)的程序段改為:s=0;for(j=l;j<i;j=j+l){n=i%j;if(n==O)s=s+j;}if(i==s)printf(44%d\n,,,i);整個程序改動如下:#include<stdio.h>intmain()inti,j,n,s;for(i=2;i<=1000;i=i+l){s=0;for(j=l;j<i;j=j+l){n=i%j;if(n==O)s=s+j;)if(i==s)printfC<%d\n,,,i);}return0;}[返回].求圓周率,看看我的程序那里出錯了?#include<stdio.h>#include<math.h>intmain()(doubles=0.0;doubleu;intm;fbr(inti=1;iv=m;i++){if(i%2!=0)u=l/(2*i-l);elseu=(-l)/(2*i-l);while(fabs(u)>=1.OE-4)s=s+u;)printf(<<%f\n,,,4*s);return0;}答:第一個錯誤是m變量定義后無初值,這樣for循環(huán)執(zhí)行次數(shù)無法確定;第二,在本題中,實際循環(huán)次數(shù)是無法事先確定的,因此用for循環(huán)不好;盡管你使用了while循環(huán),但是只是計算累加。建議使用do...while循環(huán)。另外,你的u的迭代表達(dá)似乎有問題,應(yīng)該重新設(shè)計。[返回].為何只能循環(huán)一次?#include<stdio.h>#include<string.h>intmystrchr(charstring!),intc)fbr(inti=O;i<strlen(string);i++){if(string[i]==c)returni+1;elsereturn0;))intmain()(charx[]=nsjfhdjskhfkskfuieuK;chara=,h,;intn;if(n=mystrchr(x,a))printf(utheresultyouwant%d\n”,n);elseprintf("Thereisno\nH);return0;)答:函數(shù)中的循環(huán)語句出了問題:for(inti=O;i<strlen(string);i++){if(string[i]==c)returni+1;elsereturn0;)因為string[i]不等于c?應(yīng)繼續(xù)做循環(huán),判斷string[i+l],…,而不能執(zhí)行語句return0;函數(shù)程序改為:fbr(inti=O;i<strlen(string);i++)if(string[i]==c)returni+1;return0;[返回].如何才能區(qū)分開輸出語句printf("n不是素數(shù)\n");和printf("n是素數(shù)、n");?我的程序如下:〃判斷n是否為素數(shù)#include<stdio.h>voidmain()(intn,i,r;printf("Pleaseinputyournumbern=n);scanf(H%dn,&n);for(i=2;i<=n-l;i=i+l){r=n%i;if(r==O)printf("n不是素數(shù)、n");printf("n是素數(shù)\n");答:程序改動部分為紅色的標(biāo)注的地方。#include<stdio.h>voidmain()(intn,i,r;printf(nPleaseinputyournumbern=\nH);scanf("%d”,&n);for(i=2;i<=n-l;i=i+l){r=n%i;if(r==O){printf("n不是素數(shù)\n");break;))if(i==n)printf("n是素數(shù)\n");)[返回].求l!+2!+3!+....+10!的程序中,哪里錯了,應(yīng)該怎樣改?我的程序如下:〃求!!+2!+3!+....+10!#include<stdio.h>intfac(intn)(inta=l;fbr(inti=1;i<=n;i++)a=a*n,returna;)intmain()(intsum=0;for(intk=l;k<=10;k++)sum=sum+fac(k);printf(Msum=%d\nM,sum);return0;答:你程序的子函數(shù)fac中出現(xiàn)錯誤,循環(huán)語句:fbr(inti=l;i<=n;i++)a=a*n,returna;中包含了return語句,因此循環(huán)只執(zhí)行了一次。錯誤原因語句a=a*n,后不應(yīng)為而應(yīng)為另外a=a*n;改為a=a*i;改動后的子函數(shù)fac如下:intfac(intn)(inta=l;for(inti=l;i<=n;i++)a=a*i;returna;}[返回].這個素數(shù)表哪里錯啦?程序如下:#include<stdio.h>#definem1001voidpri(intpri[])(inti,j;for(i=0;i<m;i++)pri=i;i=2;while(i<=m/2){fbr(j=i+1;j<m;j++)if(pri|jJ!=O&&pri|j]%pri==O) {pri[j]=O;i=i+l;)if(pri==O)i=i+l;)}intmain()(intk,prim[m];pri(prim);for(k=0;k<m;k++)printf("%d”,prim[k]);return0;答:程序錯誤位置見紅色標(biāo)注。改動后的程序如下:#include<stdio.h>#definem1001voidpri(intpri[])(intij;fdr(i=0;i<m;i++)pri[i]=i;i=2;while(i<=m/2){for(j=i+1;j<m;j++)if(pri[j]!=O&&pri[j]%pri[i]==O)pri|j]=O;i++;while(pri[i]==0)i=i+1;)}intmain()(intk,prim[m];pri(prim);for(k=2;k<m;k++)if(prim[k])prin-"%d二prim[k]);return0;1[返回].請問下面的程序哪里出錯?#include<stdio.h>intmain()(intsum=0;inti,n;inta[n]; 〃定義字符型數(shù)組printf(HPleaseinputainteger(>=2)\nu);scanf("%d”,&n);al0]=0;a[l]=l;sum=a[0]+a[l];for(i=2;i<n;i++) {a=a[i-l]+a[i-2];sum=sum+a;Iprintf("第n個數(shù)是%d\n",a[i-l]);printff前n個數(shù)之和是%d\n",sum);getchar();〃用于顯示結(jié)果return0;)答:第6行指出數(shù)組inta[n];其長度不能使用變量,必須給出確定的常量值。第13行,語句a=a[i-l]+a[i-2];改為:a[i]=a[i-l]+a[i-2]1第14行,語句sum=sum+a;改為sum=sum+a[i];[返回].while和for都表示循環(huán),如何選用?答:在循環(huán)次數(shù)未知,但有明確的結(jié)束條件情況下,通常使用while語句;for特別適合循環(huán)次數(shù)已知的情況,寫出的程序結(jié)構(gòu)簡潔明了。事實上,在c語言中while和for又可以相互替換。例如:求n!(1)用for編寫:intt=l,i;scanf("%d”,&n);fbr(i=l;i<=n;i++)t*=i;(2)用while編寫:intt=l,i;scanf("%d”,&n);i=l;while(i<=n){t*=ii++;)[返回].我編寫的“打印1000到10000冋文數(shù)”程序,不知道哪錯了?我的程序如下:#include<stdio.h>intAs(intn)(intk,a,m=0;k=n;for(intj=l;j<=n;j++){a=k%10;m=m*10+a;k=k/10;)retum(m==n);intmain()(for(intn=1000;n<10000;n++) {if(As(n))printf("%d”,n);}printf("\n”);return0;)答:你的主函數(shù)結(jié)構(gòu)是正確的。關(guān)鍵是判斷回文數(shù)的函數(shù)As(),你希望由k產(chǎn)生一個反序整數(shù)m,可以將原循環(huán)語句for(intj=l;j<=n;j++)(a=k%10;m=m*10+a;k=k/10;}改為:while(k!=O)(a=k%10;m=m*10+a;k=k/10;4.數(shù)組與字符串(一)(28-44).在下面程序中,如果把1や叩]>=區(qū)&&近巾]<=2,)去掉,結(jié)果中僅有‘'THIS"。這是為什么?程序如下:.將字符串oyanghuiou逆置后,輸出結(jié)果為:uoiuhgnayo燙oyanghuiou燙?,為什么在后邊出現(xiàn)了亂碼?我的程序如下:.請問輸入數(shù)組時,怎樣自動換行?比如輸入3*3的數(shù)組,我想讓輸入3個數(shù)時自動換行,不知道怎么實現(xiàn)這個功能?下面是我的程序:.在求斐波那契切數(shù)列前30項立方和的程序中,編譯通過,而運行結(jié)果錯誤;如果把改成pow(fji],3),結(jié)果就對了,為什么?.下面程序輸出的最大數(shù)的位置號為什么總是固定不變的?程序如下:.動態(tài)申請n行m列個元素的二維數(shù)組程序,有如下錯誤信息:.我編寫的求斐波那契數(shù)列的第n項和前n項和的程序,請幫我檢查什么地方出了錯誤?我的程序如下:.我程序的功能是將一個整型值轉(zhuǎn)為字符串?dāng)?shù)據(jù),但運行結(jié)果不正確,請幫我修改程序。程序如下:.我改寫的求n!的函數(shù)(n大于20,需要用到數(shù)組存放),有一個錯誤,信息如下:cpp(16):errorC2440:'return':cannotconvertfrom'int[]'to'int,如何解釋錯誤原因?程序如下:.為什么主函數(shù)中數(shù)組a的值未發(fā)生變化?程序如下:.字符串復(fù)制程序,錯誤在那里?程序如下:.為什么如下程序1中判斷用兩個=,而我編的程序2中只需要1個=,而且如果我用兩個=的話就得不到想要的結(jié)果?.我編寫的函數(shù):voidsuper(charaロロ);編譯時指出一行錯誤:errorC2087:,<Unknown>':missingsubscript這是為什么?.矩陣乘法程序中有多個不明白的地方,矩陣乘法程序如下:.字符串逆置程序中那里有錯?以下是我的程序:.利用函數(shù)求一維數(shù)組中的最大值,最小值,程序錯在哪里?.在產(chǎn)生n個空格的字符串的程序中,錯誤在哪里?.在下面程序中,如果把if(str[i]>='a'&&str[i]<=Z')去掉,結(jié)果中僅有‘‘THIS"。這是為什么?程序如下:#include<stdio.h>intmain()(charstr[]=uthisisasample',;printf(**Theoriginalstringis:%s\n*',str);inti=0;while(str[i]!=O){if(str[i]>='a,&&str[i]<=*z*)strfi]=str[i]-'a*+*A*;i=i+l;}printf(**Aftertransform:%s\n'*,str);return0;答:當(dāng)然了,因為你的字符串含空格。空格的ASCII碼是32。當(dāng)你去掉判別輸入字符是字母時,這時對第一個空格的處理就為32—'a'+'A',它的值恰好為0,正是字符串的結(jié)束標(biāo)志符。因此printf輸出THIS后,發(fā)現(xiàn)結(jié)束標(biāo)志符0,則認(rèn)為已經(jīng)輸出完畢。[返回].將字符串oyanghuiou逆置后,輸出結(jié)果為:uoiuhgnayo燙oyanghuiou燙?為什么在后邊出現(xiàn)了亂碼?我的程序如下:#include<stdio.h>intmain()(chars[ll];chart[l1];inti,j,m;for(i=0;i<10;i++)scanf("%c”,&s[i]);printf(**s=%s\n'*,s);for(j=0;j<10;j++){m=9-j;t[j]=s[m];Iprintf("t=%s\n",t);return0;)答:關(guān)鍵是字符串要有結(jié)束符へ?!?。你的輸入部分:for(inti=0;i<10;i++)scanf("%c”,&s[i]);能接收10個字符,但s數(shù)組還不能認(rèn)為存放有10個字符的字符串,只有添加‘、?!?才能稱為是字符串。因此在輸入部分后增加一個語句s[i+l]='、0’;而語句printf("t=%s\n",t);輸出s數(shù)組中的ー個字符串,即從s的第一個元素開始輸出,直到遇見‘'〇'字符結(jié)束輸出。同樣,給t數(shù)組添加結(jié)束符’'0’,即增加語句用+1]=''0';結(jié)果就可以正常顯示。改動后的程序如下:#include<stdio.h>intmain()(chars[ll];charfdr(i=0;i<10;i++)scanf("%c”,&s[i]);s[i+l]=W;printf(Ms=%s\n';s);for(intj=0;j<10;j++){m=9-j;t[j]=s[m];)-+1]=ヘ〇';printf("t=%s\n",t);return0;[返回].請問輸入數(shù)組時,怎樣自動換行?比如輸入3*3的數(shù)組,我想讓輸入3個數(shù)時自動換行,不知道怎么實現(xiàn)這個功能?下面是我的程序:printf("請輸入第一個矩陣(3*3)\n");for(i=0;i<=2;i++){for(j=0;j<=2;j++)prindTW);答:這個問題實現(xiàn)起來還有些困難。因為我們輸入的數(shù)據(jù)先存放在鍵盤的輸入緩沖區(qū)中,只有按回車鍵后,scanf從輸入緩沖區(qū)中提取數(shù)據(jù)到變量中。你企圖使用循環(huán)控制輸入3個數(shù)據(jù),而不按回車鍵,等到系統(tǒng)執(zhí)行完3次后,緊接著執(zhí)行語句printf(“\n”);進(jìn)行自動換行操作,這是不行的。因為你不按回車鍵,系統(tǒng)一直等待不能讀入任何數(shù)據(jù)。其實,我們沒有必要這樣做,我們可以人為的進(jìn)行換行控制,在輸入3個數(shù)據(jù)后,按一次回車鍵,再輸入第二行數(shù)據(jù),按回車…,同樣達(dá)到目的。你的程序改動如下:printf("請輸入第一個矩陣(3*3)\n");for(i=0;i<=2;i++){for(j=0;j<=2;j++)scanf("%d”,&a[i][j]);//printf(ヽ");去掉這個語句[返回].在求斐波那契切數(shù)列前30項立方和的程序中,編譯通過,而運行結(jié)果錯誤;為什么?我的程序如下:#include<stdio.h>#include<math.h>voidmain()intf[100];doublesum=2;f[l]=l;f[2]=l;for(inti=3;i<=3O;i++){f[i]=f[i-l]+f[i-2];sum=sum+f[i]*f[i]*f[i];)for(i=l;i<=30;i++)printf("%dハ3+“,f[i]);printf(',\b=%d,',sum);答:主要原因是int型變量的表示數(shù)值的范圍有限,而f[i]值增長的很快,3個用]連乘,乘積也是整數(shù),運算中已超過int最大數(shù)的范圍,因此結(jié)果是錯誤的;如果使用double型,比int的數(shù)據(jù)范圍大的多。你的程序有以下幾種改法:(1)只須將intfUOO]:改成double甲00];(2)只須將巾]*f[i]*f[i]改成(double)f[i]*f[i]*f[i][返回]32下面程序輸出的最大數(shù)的位置號為什么總是固定不變的?程序如下:#include<stdio.h>intmax(inta[],intn)(inti,k;//k存放最大值的數(shù)組下標(biāo)for(i=0;i<n;i++){k=i;if(a[i]>a[k])k=i;)returnk;}intmain()(inta[10]=(10,23,13,32,14,17,87,45,67,43);printf("最大數(shù)的位置號:%d\n'\max(a,10));return0;1答法掉k=i;將k初始化為〇。[返回].動態(tài)申請n行m列個元素的二維數(shù)組程序,有如下錯誤信息:(1):errorC2540:non-constantexpressionasarraybound(2):errorC2440:'=1:cannotconvertfrom'int(*)[1]'to'int*'Typespointedtoareunrelated;conversionrequiresreinterpret_cast,C-styleastorfunction-stylecast如何改正這些錯誤,程序如下:#include<stdio.h>intmain()intn,m,i,j;int*p;printf("pleaseinputscanf(H%d%d';&n,&m);p=malloc(sizeof(int[n][m]);for(i=0;i<n;i++)for(j=0;j<m;j++)*(p+i*m+j尸i*j+l;for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%d”,*(p+i*m+j));printf("\nH);)return0;)答:第8行語句p=newint[n][m];動態(tài)申請的二維數(shù)組列下標(biāo)值也不能使用變量。因此用ー維數(shù)組模擬二維數(shù)組。修改后的程序如下:#include<stdio.h>intmain()(intn,m,i,j;int*p;printf("pleaseinputn,m:");scanf("%d%d",&n,&m);p=malloc(sizeof(int)*n*m);for(i=0;i<n;i++)for(j=0;j<m;j++)*(p+i*m+j)=i*j+1;for(i=0;i<n;i++){for(j=0;j<m;j++)printf("%dM,*(p+i*m+j));printf("\nり;}return0;[返回].我編寫的求斐波那契數(shù)列的第n項和前n項和的程序,請幫我檢查什么地方出了錯誤?我的程序如下:#include<stdio.h>intmain()(intsum=O;intn;printf("Pleaseinputainteger(>=2)\n");scanf("%d”,&n);inta[n];〃定義整型數(shù)組a[0]=0;a[l]=l;sum=a[O]+a[l];for(inti=2;i<n;i++){a[i]=a[i-l]+a[i-2];sum=sum+a[i];)printf("第n個數(shù)是%d\n”,a[i-l]);printf("前n個數(shù)之和是%d\n”,sum);getchar();〃用于顯示結(jié)果return0;}答:程序中數(shù)組定義出了問題。語句scanf("%d”,&n);inta[n];不能定義n個元素的數(shù)組。解決方法:(1)定義ー個大的數(shù)組,如inta[50];其它不改動。(2)使用malloc動態(tài)分配數(shù)組。將inta[n];改為int*a=malloc(sizeof(int)*n);其它不改動。[返回].我程序的功能是將一個整型值轉(zhuǎn)為字符串?dāng)?shù)據(jù),但運行結(jié)果不正確,屏幕顯示如下:請幫我修改程序。程序如下:voiditoa(intn,char*string)(inti=0;chart,*Endp;while(n!=0){*(string+i)=n%10;n=n/10;i++;)*(string+i)=,\O,;〃進(jìn)行逆置for(Endp=string+i-l;string<Endp;string++,Endp--){t=*string;*string=*Endp;*Endp=t;)return;)intmain()(charsi[80];intn=12345;itoa(n,sl);printfCsl=%s\n,,,sl);return0;I答:只須將語句?(string+i)=n%10;修改為:*(string+i)=n%10+,0';即將余數(shù)。ー9轉(zhuǎn)換為字符‘〇‘一'9'〇[返回].我改寫的求n!的函數(shù)(n大于20,需要用到數(shù)組存放),有一個錯誤,信息如下:(16):errorC2440:Yetum*:cannotconvertfrom'int[]'to'int'如何解釋錯誤原因?程序如下:#include<stdio.h>constintMAXSIZE=100;intbigarray(intarray[],intn)(intsum,sc;for(inti=0;i<MAXSIZE;i++)array[i]=0;array[0]=l;fbr(i=2;i<=n;i++){sc=0;for(intj=0;jvMAXSIZE;j++){sum=array[j]*i+sc;sc=sum/10;array[j]=sum%10;})returnarray;}intmain()(intarray[MAXSIZE];intn=50;bigarray(array,n);for(inti=MAXSIZE-l;i>=0;i-)printf("%d’〈array[i]);printf(t4\n");return0;)答:第16行returnarray;即返回數(shù)組出現(xiàn)錯誤。修改方法:(1)將函數(shù)返回值類型改為int*,即返回整型的指針,這樣與returnarray;一致。(2)將函數(shù)返回值類型改為void,即無返回值,同時去掉returnarray;[返回].為什么主函數(shù)中數(shù)組a的值未發(fā)生變化?程序如下://程序功能:去掉字符串左端連續(xù)空格符。#include<stdio.h>#include<string.h>char*myltrim(char*string)(char*n,*i;i=strlen(string)+string-l;fbr(n=string;n<=i;n++)if(*n!ゴ’)printf("%c",*n);*(n+l)=0;returnstring;voidmain()intn;chara[尸‘a(chǎn)bcd";myltrim(a);printf("[%s]\n",a);答:你的程序只是輸出了給定字符串中的非空格字符,并未能夠去掉a數(shù)組中存放的字符串左端連續(xù)空格符。程序改動如下:#include<stdio.h>#include<string.h>char*my]trim(char*string)(char*n=string,*i;i=strlen(string)+string-1;while(*n==**)n++;strcpy(string,n);returnstring;Ivoidmain()(chara[J="abcd";printf("[%s]\n",myltrim(a));printf("[%s]\n",a);}[返回].字符串復(fù)制程序,錯誤在那里?程序如下:#include<stdio.h>voidmystrcpy(char*destin,char*source){while("source!=0)//如果?source==0則表示原字符串結(jié)束("destin="source;/Z復(fù)制字符source++;〃source移向原字符串中的下ー個字符destin++;〃destin移向新字符數(shù)組的ド一位置)"destin=0;//在新字符串尾部添寫ー個結(jié)束符〇);intmain()(charx[]={"ajlf'};chary[10];mystrcpy(x,y);return0;)答:你的函數(shù)mystrcpy無任何錯誤。主函數(shù)中存在兩個錯誤:(1)調(diào)用語句中實參次序反了,應(yīng)改為:mystrcpy(y.x);(2)主函數(shù)中無輸出[返回].為什么如下程序1中判斷用兩個=,而我編的程序2中只需要1個=,而且如果我用兩個=的話就得不到想要的結(jié)果?程序1://Example8-11:函數(shù)strchr()在字符串中査找指定字符#include<stdio.h>char*strchr(char.string,intc)(while("string!=c&&*string!=0)string++;if(*string==c)/Z查找成功returnstring;else//string==0(字符串結(jié)束符),字符串中沒有creturnNULL;}程序2:〃去掉字符串尾部的空格的程序#include<stdio.h>#include<string.h>char*mytrim(char"string)(if(*(string+strlen(string)-l)='\t')*(string+strlen(string)-1)=0;returnstring;答:你寫的程序2是不能完成題目耍求的。改進(jìn)方法if語句改用while語句(2)空格字符用,,(值為32),而非ヘ「改動后:#include<stdio.h>#include<string.h>char*mytrim(char*string)(while(*(string+strlen(string)-1)=ゴ')*(string+strlen(string)-1)=0;returnstring;}注意主函數(shù)調(diào)用:intmain()(charstr[]="hhd〃改為char*str="hhd”;將引起錯誤printf("%s.\n”,str);printf("%s.\n”,mylrim(str));return0;}[返回]40.我編寫的函數(shù):voidsuper(chara[][]);編譯時指出一行錯誤:errorC2087:’〈Unknown〉’:missingsubscript這是為什么?答:函數(shù)中的形參chara[用定義是錯誤的,在c語言中,作為形參的二維數(shù)組可以省略行下標(biāo)但不能省略列下標(biāo),且必須給出ー個常數(shù)。如果需要傳遞ー個不確定行列長度值的二維數(shù)組,可以將二維數(shù)組看作一維數(shù)組進(jìn)行傳遞。如:voidsuper(chara[],intm,intn);調(diào)用的函數(shù)中:charstr[5][80];Super(str[0],5,80);[返冋].矩陣乘法程序中有多個不明白的地方?矩陣乘法程序如下:include<stdio.h>intmain()(constintL=4;constintM=5;constintN=3;doublea[L*M]={1.0,3.0,-2.0,0.0,4.0,-2.0,-1.0,5.0,-7.0,2.0,0.0,8.0,4.0,1.0,5.0,3.0,-3.0,2.0,-4.0,1.0);doubleb[M*N]={4.0,5.0,-1.0,2.0,-2.0,6.0,7.0,8.0,1.0,0.0,3.0,-5.0,9.0,8.0,-6.0);doublec[L*N];inti,j,k;for(i=0;i<L;i=i+l)for(j=0;j<N;j=j+l){c[i*N+j]=0;for(k=0;k<M;k=k+1)c[i*N+j]=c[i*N+j]+a[i*M+k]*b[k*N+j];printf(nThereasultisc=\nH);for(inti=O;j<N;j=j+l)printf(M%f,,,c[i*N+j]);printf("\n”);)return0;(l)c[i*N+j]二〇;中的"i*N+j”是什么?c[i*N+j]=c[i*N+j]+a[i*M+k]*b[k*N+j];又是在干什么呀?答:該題目功能是計算a[L][M]Xb[M][N],結(jié)果放在數(shù)組c[L][N]中淇中L=4,M=5,N=3,如果使用二維數(shù)組直接編寫,可能容易理解,利用二維數(shù)組編寫的程序如下:for(i=0;i<L;i=i+l)for(j=0;j<N;j=j+l){c[iJlj]=O;for(k=0;k<M;k=k+1)c[i][j]=c[i][j]+a[i][k]*b[k][j];printf(MThereasultisc=\nn);for(i=0;i<L;i=i+1){for(intj=0;j<N;j=j+l)printf(“%f”,叩]?;printf("\n”);)而你的程序卻使用ー維數(shù)組模擬二維數(shù)組求解,增加了理解上的困難。可以這樣理解:二維數(shù)組在內(nèi)存中按行方式連續(xù)分配各個元素,如c數(shù)組:c[4H3]共12個元素。每個元素的相對序號:〇<[〇][〇]l-c[0][l],2-c[0][2],3-c[l][0],4-c[l][l],-可以看出,序號為i*3+j,即i*N+j。可以通過數(shù)組的首地址和i*N+j序號找到i行j列的數(shù)組元素。因此a[i*M+k]可以理解為相當(dāng)于二維數(shù)組中的i行k列元素,而b[k*N+j]相當(dāng)于二維數(shù)組中的k行j列元素。[返回].字符串逆置程序中那里有錯?以下是我的程序:/Z字符串逆置。#include<stdio.h>intmain()(chara[l2];inti,j;for(j=O;j<12;j=j++)scanf("%c”,&a[j]);a[12]=a[0];for(i=0;i<12;i=i++){if(a[ll]!=0)a[i]=a[i+l];)printf("%s\n”,a);return0;}答:你的程序錯誤較多。(1)數(shù)組使用越界:如:a[12]=a[0];a[12]超出a數(shù)組的范圍。(2)字符串處理中不能忘記結(jié)束符‘、?!?。(3)字符串逆置算法錯誤。你的程序改寫如下:#include<stdio.h>#include<string.h>intmain()(chara[81],ch;inti,j,len;printf("請輸入字符串:\n");scanf("%s”,a);/?接收輸入的ー個字符串,系統(tǒng)會自動加入‘、〇’*/printf("逆置前的字符串:%s'n",a);len=strlen(a);/?計算a中實際字符的個數(shù)?/for(i=0;i<len/2;i=i++){ch=a[i];a[i]=a[len-i-l];a[len-i-l]=ch;}printf("逆置后的字符串:%s\n”,a);return0;)[返回].利用函數(shù)求一維數(shù)組中的最大值,最小值,程序錯在哪里?答:錯誤及修改方法査看如下程序中的紅色標(biāo)注。標(biāo)注后的程序如下:#include<stdio.h>intimax(intarray[],intcount)(intmax=array[0];for(inti=l;i<=count;i++)/?應(yīng)改為for(inti=l;i<count;i++)*/if(array[i]>max)max=array[i];returnmax;}intimin(intarray[J,intcount)(intmin二array[0];for(inti=l;i<=count;i++)/?應(yīng)改為fbr(inti=l;i〈count;i++)*/if(array[i]<min)min=array[i];returnmin;voidmain()staticintmax,min;/?可以不用靜態(tài)變量!*/inta[30];printf("Pleaseinputagroupofnumbers"?endl;scanf("%d”,a[30]);/*這是最大的錯誤,請用循環(huán),?個?個輸入!*/imax(a,30);/?調(diào)用問題,改為max=imax(a,30);*/imin(a,30);/?調(diào)用問題,改為min=imin(a,30);*/printf("Themaxnumberis:%d\n",max);printf("Theminnumberis:%d\n",min);[返回].在產(chǎn)生n個空格的字符串的程序中,錯誤在哪里?答:錯誤處用紅色進(jìn)行標(biāo)注。#include<stdio.h>char*mystrspc(char"string,intn)(while(n>=0){"string-string++;n—;)*string=0;/?此時string指向「字符串的尾部,在main中用這個返回值會出錯的.*/returnstring;)voidmain()(chars[10];char*string=s;string=mystrspc(string,4);printf("%s\n”,string);}改動后的程序如下:#include<stdio.h>char*mystrspc(char"string,intn)char"p=string;while(n>=0){*string-*;string++;n一;)*string=O;returnp;)voidmain()(chars[10];char*string=s;string=mystrspc(string,4);printf(4t.%s.\n,\string);.數(shù)組與字符串(二)(45-61).怎樣使用字符串連接函數(shù)?.字符數(shù)組如何定義和使用?比如:stringU,它后面的“口”是不是只有在定義時オ能有,其他的地方用到它時是不是要去掉?.下面的程序哪里出現(xiàn)了錯誤?.ー個設(shè)置密碼的程序,編譯時的信息:errorC2065:'strcmp*:undeclaredidentifier如何修改程序?.ー個設(shè)置密碼的程序,在加上文件包含命令:include<string.h>后,無編譯連接錯誤,可是運行時結(jié)果無法確定,為什么?.下面的程序用數(shù)組求比較大的數(shù)的階乘,請問老師,在這個程序中怎么才能去掉輸出結(jié)果中前面所有的〇?.老師,這個數(shù)組為什么不能輸出?程序如下:.下面程序運行時將會看到當(dāng)n=3時,輸出為17,實際上應(yīng)為。。當(dāng)然,當(dāng)n>=4時結(jié)果肯定為17。程序中的錯誤到底在那里?53.這樣的語句intarray[10]='abc';錯在那里?.可以這樣定義數(shù)組嗎?如:scanf(n;inta[n];.請問ド面的程序哪里出錯了?.十進(jìn)制轉(zhuǎn)十六進(jìn)制,程序中有問題,請老師幫忙看一下?57,以下的程序的目的是將一個數(shù)字字符串轉(zhuǎn)換為整型數(shù)值,其中字符串的第1個字符可能是'+',可能是也可能什么都沒有:以下是我編寫的程序,但運行的結(jié)果只能正確顯示輸入格式為'-12'等形式的負(fù)整數(shù),請老師幫忙看看…。.為給定的字符串查找函數(shù)strchr()添加main函數(shù)對其進(jìn)行測試。下面是我寫的測試程序,其中存在多個錯誤,請老師幫我分析產(chǎn)生錯誤的原因。.在我編寫的求斐波那契數(shù)列的第n項和前n項之和的程序中,當(dāng)n=5時,運行過程顯示如下:pleaseinputn(顯示)5 (輸入)x[i]=-858993460(顯示)sum=12 (顯示)結(jié)果顯然有錯誤,請幫我分析錯誤原因。.我編寫的字符串復(fù)制函數(shù)mystrcpy,調(diào)用時卻總是出現(xiàn)亂碼,我不知道是什么原因?.利用指針編寫的“冒泡排序”程序,當(dāng)輸入10個數(shù)后,結(jié)果是錯誤的,如何進(jìn)行修改。.指針變量和數(shù)組變量有何區(qū)別?.怎樣使用字符串連接函數(shù)?我的程序如ド:〃連接字符串include<stdio.h>include<string.h>intmain()(chardestination[8l]=nabcdefghijklmnopqrstuvwxyzn;charsource[ド"ABCDEFGHIJKLMNOPQRSTUVWXYZ”;strcat(char*destination,char*source);printffTheresultis:%s\nn,destination);return0;答:(1)調(diào)用函數(shù)的實參不能帶數(shù)據(jù)類型

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論