




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Chap8指針
8.1尋找保險箱密碼8.2貍貓換太子8.3冒泡排序8.4加密變換問題8.5任意個整數(shù)求和問題*本章要點變量、內(nèi)存單元和地址之間是什么關系?如何定義指針變量,怎樣才能使用指針變量?什么是指針變量的初始化?指針變量的基本運算有哪些?如何使用指針操作所指向的變量?指針作為函數(shù)參數(shù)的作用是什么?如何使用指針實現(xiàn)函數(shù)調用返回多個值?如何利用指針實現(xiàn)內(nèi)存的動態(tài)分配?8.1尋找保險箱密碼
一個關于特工008尋找保險箱密碼的故事…關鍵點分析得到線索:0217單元的“虎跑號”寄存箱提示地址:1976單元找到目標:“龍井號”寄存箱取出內(nèi)容:9118.1尋找密碼的途徑分析密碼911存放在某個寄存箱內(nèi),如果我們知道這個寄存箱的名字,就能夠找到密碼
“龍井號”如果不知道密碼所在的寄存箱名字,知道該寄存箱的地址也照樣能夠取出密碼1976如果寄存箱的地址也不知道,但是有另外一個地方存放這個寄存箱的地址,就能順藤摸瓜,間接找到密碼02178.1密碼存放示意圖龍井號9111976虎跑號19760217名字虎跑號龍井號地址02171976內(nèi)容1976911例8-1利用指針模擬尋找保險箱密碼的過程
獲取密碼的兩種方法
intmain(void){ intkey=911;/*變量key存放密碼*/
int*addr=NULL;/*變量addr存放地址*/
addr=&key;/*將key的地址賦給addr*/
/*通過變量key輸出密碼值*/printf("Thekeyis:%d\n",key);/*通過變量key的地址來輸出密碼值*/
printf("IfIknowtheaddressofthekey,Ialsocangetit:%d\n",*addr);
return0;}Thekeyis:911IfIknowtheaddressofthekey,Ialsocangetit:911
8.1.2地址和指針-指針的概念內(nèi)存單元地址內(nèi)容變量intx=20,y=1,z=155;printf("%d",x;)直接訪問:通過變量名訪問間接訪問:通過另一個變量訪問把變量的地址放到另一變量中使用時先找到后者再從中取出前者的地址100020x10021y1004155z20001000p2002地址指針變量指針內(nèi)存單元地址內(nèi)容變量intx=20,y=1,z=155;printf("%d",x;)100020x10021y1004155z20001000p2002地址指針變量指針變量:存放地址的變量某個變量的地址指向指針變量所指向的變量的類型int*p;p是整型指針,指向整型變量float*fp;fp是浮點型指針,指向浮點型變量char*cp;
cp是字符型指針,指向字符型變量類型名*
指針變量名指針聲明符8.1.3指針變量的定義指針變量的定義類型名*
指針變量名int*
p;指針變量名是p,不是*p*是指針聲明符intk,*p1,*p2;等價于:intk;int*p1;int*p2;8.1.4指針的基本運算
*間接訪問運算符,訪問指針所指向的變量*p:指針變量p所指向的變量a3&ap*p如果指針的值是某個變量的地址,通過指針就能間接訪問那個變量。1、取地址運算和間接訪問運算
&取地址運算符,給出變量的地址int*p,a=3;p=&a;把a的地址賦給p,即p指向a指針變量的類型和它所指向變量的類型相同#include<stdio.h>intmain(void){inta=3,*p; p=&a; printf(“a=%d,*p=%d\n”,a,*p);*p=10;printf("a=%d,*p=%d\n",a,*p);printf("Entera:");scanf("%d",&a); printf("a=%d,*p=%d\n",a,*p);(*p)++; printf("a=%d,*p=%d\n",a,*p);
return0;}例8-2指針取地址運算和間接訪問運算
a3&ap*pa=3,*p=3a=10,*p=10Entera:5
a=5,*p=5a=6,*p=6a3&ap*p(1)當p=&a后,*p與a相同(2)int*p;定義指針變量p
*p=10;指針p所指向的變量,即a(3)&*p與&a相同,是地址
*&a與a相同,是變量(4)(*p)++等價于a++
將p所指向的變量值加1*p++等價于*(p++)
先取*p,然后p自加,此時p不再指向a說明inta=3,x,*p;p=&a;x=*p++;b2&bp2*p2a1&ap1*p121#include<stdio.h>intmain(void){inta=1,b=2,t;int*p1,*p2;p1=&a;p2=&b;printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);t=*p1;*p1=*p2;*p2=t;
printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);
return0;}例8-3通過指針改變變量的值a=1,b=2,*p1=1,*p2=2a=2,b=1,*p1=2,*p2=12、賦值運算a3&ap1&ap2*p1
*p2inta=3,*p1,*p2;p1=&a;把a的地址賦給p1,即p1指向ap2=p1;p2也指向a相同類型的指針才能相互賦值b4&bp2*p2a2&ap1*p16c&a&c例8-4指針賦值intmain(void){inta,b,c,*p1,*p2;a=2;b=4;c=6;
p1=&a;p2=&b;
printf("a=%d,b=%d,c=%d,*p1=%d,*p2=%d\n",a,b,c,*p1,*p2);
p2=p1;p1=&c;
printf("a=%d,b=%d,c=%d,*p1=%d,*p2=%d\n",a,b,c,*p1,*p2);
return0;}*p2*p1
a=2;b=4;c=6;*p1=2,*p2=4a=2;b=4;c=6;*p1=6,*p2=2例8-5intmain(void){inta=1,b=2;int*p1=&a,*p2=&b,*pt;
printf("a=%d,b=%d,*p1=%d,*p2=%d\n",a,b,*p1,*p2);pt=p1;p1=p2;p2=pt;printf(“a=%d,b=%d,*p1=%d,*p2=%d\n”,a,b,*p1,*p2);return0;}8.1.5指針變量的初始化p1b2&bp2*p2a1&a*p1ptb2&ap2*p1a1&bp1*p2pt&aa=1;b=2;*p1=1,*p2=2a=1;b=2;*p1=2,*p2=1對指針的操作/對指針所指向變量的操作*p1和*p2的值都由1和2變成了2和1(1)直接改變指針的值(2)改變指針所指變量的值p1b2&bp2*p2a1&a*p1ap1b2&ap2*p11&b*p2p1b1&bp2*p2a2&a*p18.2貍貓換太子一個關于發(fā)生在北宋年間變量替換的故事…關鍵點分析真宗和李玉未出生的孩子:小王子劉娥的陰謀:用貍貓?zhí)鎿Q掉孩子籌備工作:設計兩套替換行動方案實施結果:行動一失敗,行動二成功
intmain(void){intbaby=PRINCE;/*baby代表孩子,
剛出生時是王子
*/
printf("beforechange,babyis");
display(baby);
replace1(baby);/*實施貍貓換太子第一次行動*/
printf("\n");printf("afterfirstaction,babyis");
display(baby);
replace2(&baby); /*實施貍貓換太子第二次行動*/
printf("\n");printf("aftersecondaction,babyis");display(baby);return0;}例8-6指針作為函數(shù)參數(shù)模擬貍貓換太子#defineCIVET0定義貍貓值為0#definePRINCE1定義王子值為1
voidreplace1(intbaby){baby=CIVET;}voidreplace2(int*baby){*baby=CIVET;}voiddisplay(intwho){if(who==CIVET)printf("貍貓");elseif(who==PRINCE)printf("王子");}beforechange,babyis王子afterfirstaction,babyis王子aftersecondaction,babyis貍貓8.2.2指針作為函數(shù)的參數(shù)函數(shù)參數(shù)包括實參和形參,兩者的類型要一致,可以是指針類型。如果實參是某個變量的地址,相應的形參就是指針。
intmain(void){inta=1,b=2;int*pa=&a,*pb=&b;
voidswap1(intx,inty),swap2(int*px,int*py),swap3(int*px,int*py);
swap1(a,b);printf(“Aftercallingswap1:a=%db=%d\n”,a,b);
a=1;b=2;
swap2(pa,pb);printf(“Aftercallingswap2:a=%db=%d\n”,a,b);a=1;b=2;
swap3(pa,pb);printf(“Aftercallingswap3:a=%db=%d\n”,a,b);return0;}調用哪個函數(shù),可以交換main()中變量a和b的值?例8-7swap1()a12bx12y21swap1(a,b);voidswap1(intx,inty){intt;t=x;x=y;y=t;}例8-7swap2()swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}abpxpy12值傳遞,地址未變,但存放的變量的值改變了21例8-7swap3()swap3(&a,&b);voidswap3(int*px,int*py){int*pt;pt=px;px=py;py=pt;}abpxpy12值傳遞,形參指針的改變不會影響實參指針作為函數(shù)參數(shù)的應用swap2(&a,&b);voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}要通過函數(shù)調用來改變主調函數(shù)中某個變量的值:(1)在主調函數(shù)中,將該變量的地址或者指向該變量的指針作為實參(2)在被調函數(shù)中,用指針類型形參接受該變量的地址
(3)在被調函數(shù)中,改變形參所指向變量的值abpxpy1221Aftercallingswap1:a=1,b=2Aftercallingswap2:a=2,b=1Aftercallingswap3:a=1,b=2通過指針實現(xiàn)函數(shù)調用返回多個值
例8-8輸入年和天數(shù),輸出對應的年、月、日。例如:輸入2000和61,輸出2000-3-1。定義函數(shù)month_day(year,yearday,*pmonth,*pday)用2個指針作為函數(shù)的參數(shù),帶回2個結果intmain(void){intday,month,year,yearday;voidmonth_day(intyear,intyearday,int*pmonth,int*pday);printf(“inputyearandyearday:”);
scanf("%d%d",&year,&yearday); month_day(year,yearday,&month,&day); printf("%d-%d-%d\n",year,month,day); return0; }例8-8voidmonth_day(intyear,intyearday,int*pmonth,int*pday){intk,leap;inttab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31},};
/*建立閏年判別條件leap*/leap=(year%4==0&&year%100!=0)||year%400==0;
for(k=1;yearday>tab[leap][k];k++)yearday-=tab[leap][k];*pmonth=k;*pday=yearday;}inputyearandyearday:200061
2000-3-1monthdaypmonthpday318.3冒泡排序-程序解析
voidswap2(int*,int*);voidbubble(inta[],intn);intmain(void){intn,a[8];inti;printf("Entern(n<=8):");scanf("%d",&n);printf("Entera[%d]:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);
bubble(a,n);
printf("Aftersorted,a[%d]=",n);for(i=0;i<n;i++) printf("%3d",a[i]);
return0;}voidbubble(inta[],intn){inti,j;for(i=1;i<n;i++) for(j=0;j<n-i;j++)if(a[j]>a[j+1])
swap2(&a[j],&a[j+1]);}
voidswap2(int*px,int*py){intt;t=*px;*px=*py;*py=t;}Entern(n<=8):8Entera[8]:73663-522-772Aftersorted,a[8]=-77-5233722668.3.2數(shù)組和地址間的關系inta[100],*p;數(shù)組名代表一個地址,它的值是數(shù)組首元素的地址(基地址)a+i
是距數(shù)組a的基地址的第i個偏移3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3198a[99]a[i]aa+1a+99a+i&a[i]*(a+i)sum=0;for(i=0;i<100;i++)sum=sum+a[i];*(a+i)下標運算符[]的含義指針和數(shù)組的關系任何由數(shù)組下標來實現(xiàn)的操作都能用指針來完成inta[100],*p;p=a;或p=&a[0];
pp+1p+99p+i3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3198a[99]a[i]
aa+1a+99a+i&a[i]
a[i]a+i
*(a+i)p+i
*(p+i)&p[i]
p[i]p=a;sum=0;for(i=0;i<100;i++)sum=sum+p[i];等價等價用指針完成對數(shù)組的操作inta[100],*p;移動指針p3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3198a[99]a[i]aa+1a+99a+isum=0;for(p=a;p<=
&a[99];p++)sum=sum+*p;ppp#include<stdio.h>intmain(void){doublea[2],*p,*q;p=&a[0];
q=p+1;printf("%d\n",q-p);printf("%d\n",(int)q-(int)p);return0;}例8-10使用指針計算數(shù)組元素個數(shù)和數(shù)組元素的存儲單元數(shù)
18指針p和q之間元素的個數(shù)指針p和q之間的字節(jié)數(shù)地址值pq3000a[0]地址內(nèi)容數(shù)組元素3008a[1]aa+1double*p,*q;q-p兩個相同類型的指針相減,表示它們之間相隔的存儲單元的數(shù)目p+1/p-1指向下一個存儲單元/指向上一個存儲單元其他操作都是非法的指針相加、相乘和相除,或指針加上和減去一個浮點數(shù)p<q兩個相同類型指針可以用關系運算符比較大小指針的算術運算和比較運算pq3000a[0]地址內(nèi)容數(shù)組元素3008a[1]aa+1#include<stdio.h>intmain(void){inti,a[10],*p;longsum=0;printf("Enter10integers:");
for(i=0;i<10;i++)scanf("%d",&a[i]);for(p=a;p<=a+9;p++)
sum=sum+*p;printf("sum=%ld\n",sum);return0;}例8-11使用指針計算數(shù)組元素之和
Enter10integers:
10987654321sum=55p3000a[0]地址內(nèi)容數(shù)組元素3002a[1]3018a[9]a[i]aa+1a+9a+ippp數(shù)組元素作為函數(shù)實參時,函數(shù)形參為變量與變量作為函數(shù)實參相同,值傳遞8.3.3數(shù)組名作為函數(shù)的參數(shù)doublefact(intn);intmain(void){inti,n=5;doublesum; sum=0;for(i=1;i<=n;i++) sum=sum+fact(i);
printf("sum=%e\n",sum);return0;}doublefact(intn){inti; doubleresult=1;
for(i=1;i<=n;i++) result=result*i;returnresult;}intb[5]={1,4,5,7,9};fact(b[i-1]);1!+4!+5!+7!+9!數(shù)組名是指針常量,相當于指針作為函數(shù)的參數(shù)數(shù)組名做為實參,形參是指針變量(數(shù)組)數(shù)組名作為函數(shù)的參數(shù)intsum(int*array,intn){inti,s=0;for(i=0;i<n;i++)s+=array[i];return(s);}例8-12intmain(void){inti;intb[5]={1,4,5,7,9};printf("%d\n",sum(b,5));return0;}(1)實參是數(shù)組名(2)形參是指針變量可以寫成數(shù)組形式intarray[]*(array+i)intsum(int*array,intn){inti,s=0;for(i=0;i<n;i++)s+=array[i];return(s);}intmain(void){inti;intb[5]={1,4,5,7,9};printf("%d\n",sum(b,5));return0;}b
b[0]b[5]arraysum(b,5)b[0]+b[1]+...+b[4]sum(b,3)b[0]+b[1]+b[2]sum(b+1,3)b[1]+b[2]+b[3]sum(&b[2],3)b[2]+b[3]+b[4]#include<stdio.h>intmain(void){inti,a[10],n;voidreverse(intp[],intn);printf("Entern:");scanf("%d",&n);printf("Enter%dintegers:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);
reverse(a,n);for(i=0;i<n;i++)printf("%d\t",a[i]); return0;}
例8-13將數(shù)組元素逆序存放voidreverse(intp[],intn){inti,j,t;for(i=0,j=n-1;i<j;i++,j--){t=p[i];p[i]=p[j];p[j]=t;}}Entern:10Enter10integers:1098765432112345678910數(shù)組名做為函數(shù)的參數(shù),在函數(shù)調用時,將實參數(shù)組首元素的地址傳給形參(指針變量),因此,形參也指向實參數(shù)組的首元素。如果改變形參所指向單元的值,就是改變實參數(shù)組首元素的值?;颍盒螀?shù)組和實參數(shù)組共用同一段存貯空間,如果形參數(shù)組中元素的值發(fā)生變化,實參數(shù)組中元素的值也同時發(fā)生變化。a
a[0]a[5]p指針實現(xiàn)voidreverse(int*p,intn){int*pj,t;for(pj=p+n-1;p<pj;p++,pj--){t=*p;*p=*pj;*pj=t;}}a[0]p數(shù)組元素內(nèi)容指針a[1]a[9]pj#include<stdio.h>intmain(void){inti,a[10],n;voidreverse(intp[],intn);printf("Entern:");scanf("%d",&n);printf("Enter%dintegers:",n);for(i=0;i<n;i++)scanf("%d",&a[i]);
reverse(a,n);for(i=0;i<n;i++)printf("%d\t",a[i]); return0;}8.3.4冒泡排序算法分析相鄰兩個數(shù)比較,小的調到前面,大的調到后面98888854408955554504559444605444966066666908000009i=1i=2i=3i=4i=5a[j]>a[j+1]j=0to4j=0to3j=0to2j=0to6-1-i98888854408955554504559444605444966066666908000009
985460i=1j=0:895460j=1:859460j=2:854960j=3:854690j=4:854609intmain(void){inti,j,n,t,a[10];n=6;for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=1;i<n;i++)for(j=0;j<n-i;j++) if(a[j]>a[j+1]){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }return0;}intmain(void){inti,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]);
sort(a,10);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");return0;}voidsort(int*array,intn){inti,j,t;for(i=1;i<n;i++)for(j=0;j<n-i;j++) if(array[j]>array[j+1]){ t=array[j]; array[j]=array[j+1]; array[j+1]=t; }}字符串:字符數(shù)組字符指針8.4.1程序解析8.4.2字符數(shù)組和字符指針8.4.3常用的字符串處理函數(shù)8.4加密問題8.4.1程序解析-加密
#defineMAXLINE100voidencrypt(char*s);intmain(void){charline[MAXLINE];printf("Inputthestring:");gets(line);
encrypt(line);
printf(“Afterbeingencrypted:%s\n",line);return0;}voidencrypt(char*s){for(;*s!='\0';s++)if(*s=='z')*s='a'; else*s=*s+1;}Inputthestring:hellohangzhouAfterbeingencrypted:ifmmp!ibohaipv8.4.2字符串和字符指針
字符串常量"array""point"用一對雙引號括起來的字符序列被看做一個特殊的一維字符數(shù)組,在內(nèi)存中連續(xù)存放實質上是一個指向該字符串首字符的指針常量charsa[]="array";char*sp="point";charsa[]="array";char*sp="point";printf("%s",sa); printf("%s",sp); printf("%s\n","string");
arraypointstringprintf("%s",sa+2);printf("%s",sp+3);printf("%s\n",string"+1);raynttring數(shù)組名sa、指針sp和字符串"string"的值都是地址字符數(shù)組與字符指針的重要區(qū)別charsa[]="Thisisastring";char*sp="Thisisastring";saThisisastring\0spThisisastring\0如果要改變數(shù)組sa所代表的字符串,只能改變數(shù)組元素的內(nèi)容如果要改變指針sp所代表的字符串,通常直接改變指針的值,讓它指向新的字符串示例charsa[]="Thisisastring";char*sp="Thisisastring";strcpy(sa,"Hello");sp="Hello";sa=“Hello”;非法數(shù)組名是常量,不能對它賦值字符指針-先賦值,后引用定義字符指針后,如果沒有對它賦值,指針的值不確定。
char*s;scanf(“%s”,s);char*s,str[20];s=str;scanf(“%s”,s);定義指針時,先將它的初值置為空char*s=NULL不要引用未賦值的指針加密函數(shù)的兩種實現(xiàn)voidencrypt(chars[]){inti; for(i=0;s[i]!='\0';i++)if(s[i]=='z')s[i]='a'; elses[i]=s[i]+1;}voidencrypt(char*s){for(;*s!='\0';s++)if(*s=='z')*s='a'; else*s=*s+1;}8.4.3常用的字符串處理函數(shù)函數(shù)原型在stdio.h或string.h中給出1、字符串的輸入和輸出輸入字符串:scanf()或gets()輸出字符串:printf()或puts()
stdio.hcharstr[80];i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';(1)scanf("%s",str)輸入?yún)?shù):字符數(shù)組名,不加地址符遇回車或空格輸入結束,并自動將輸入的一串字符和‘\0’送入數(shù)組中(2)gets(str)遇回車輸入結束,自動將輸入的一串字符和‘\0’送入數(shù)組中
字符串的輸入'\n''''\t'charstr[80];for(i=0;str[i]!=‘\0’;i++)putchar(str[i]);(3)printf("%s",str)printf("%s","hello");(4)puts(str)puts("hello");輸出字符串后自動換行輸出參數(shù)可以是字符數(shù)組名或字符串常量,輸出遇'\0'結束字符串的輸出#include<stdio.h>intmain(){charstr[80];scanf("%s",str);printf("%s",str);printf("%s","Hello");return0;}例8-15字符串輸入輸出函數(shù)示例#include<stdio.h>intmain(){charstr[80];gets(str);puts(str);puts("Hello");return0;}ProgrammingProgrammingHelloProgrammingisfun!
ProgrammingHelloProgrammingProgrammingHelloProgrammingisfun!
Programmingisfun!Hello2、字符串的復制、連接、比較、
求字符串長度字符串復制:strcpy(str1,str2)字符串連接:strcat(str1,str2)字符串比較:strcmp(str1,str2)求字符串長度:strlen(str)string.hstrcpy(str1,str2);將字符串str2復制到str1中
staticcharstr1[20];staticcharstr2[20]=“happy”;字符串復制函數(shù)strcpy()happy\0\0strcpy(str1,str2);happy\0str1中strcpy(str1,“world”);str1中:world\0#include“stdio.h”#include“string.h”intmain(void){charstr1[20],str2[20];gets(str2);strcpy(str1,str2);puts(str1);return0;}strcpy()示例12341234
strcat(str1,str2);
連接兩個字符串str1和str2,并將結果放入str1中字符串連接函數(shù)strcat#include"stdio.h"#include"string.h"intmain(void){charstr1[80],str2[20];gets(str1);gets(str2);strcat(str1,str2);puts(str1);return0;}str1中:
Letus\0str2中:go.\0str1中:
Letusgo.\0str2中:go.\0Letusgo.
Letusgo.strcmp(str1,str2)比較兩個字符串str1和str2的大小。規(guī)則:按字典序(ASCII碼序)如果str1和str2相等,返回0;如果str1大于str2,返回一個正整數(shù);如果str1小于str2,返回一個負整數(shù);staticchars1[20]="sea";
字符串比較函數(shù)strcmpstrcmp(s1,"Sea");strcmp("Sea","Sea");strcmp("Sea","Sea");正整數(shù)負整數(shù)0#include“stdio.h”#include“string.h”intmain(void){intres;chars1[20],s2[20];gets(s1);gets(s2);res=strcmp(s1,s2);printf(“%d”,res);return0;}strcmp()示例12345-4利用字符串比較函數(shù)比較字符串的大小
strcmp(str1,str2);為什么定義這樣的函數(shù)?用strcmp()比較字符串strcmp(str1,str2)>0strcmp(str1,“hello”)<0strcmp(str1,str2)==0str1>str2str1<“hello”str1==str2
比較字符串首元素的地址比較字符串的內(nèi)容strlen(str)計算字符串的有效長度,不包括‘\0’。staticcharstr[20]=“Howareyou?”strlen(“hello”)的值是:strlen(str)的值是:字符串長度函數(shù)strlen512函數(shù)功能頭文件puts(str)輸出字符串stdio.hgets(str)輸入字符串(回車間隔)strcpy(s1,s2)s2==>s1strcat(s1,s2)s1“+”s2==>s1若s1“==”s2,函數(shù)值為0
strcmp(s1,s2)若s1“>”s2,函數(shù)值>0string.h
若s1“<”s2,函數(shù)值<0計算字符串的有效長度,strlen(str)不包括‘\0’字符串處理函數(shù)小結intmain(){inti;intx,min;scanf("%d",&x);min=x;for(i=1;i<5;i++){scanf("%d",&x);if(x<min)min=x;}
printf("minis%d\n",min);return0;}例8-16求最小字符串#include<string.h>intmain(){inti;charsx[80],smin[80];scanf("%s",sx);strcpy(smin,sx);for(i=1;i<5;i++){scanf("%s",sx);if(strcmp(sx,smin)<0)strcpy(smin,sx);}
printf("minis%s\n",smin);return0;}28-1990
minis–1
toolkeyaboutzoosea
minisabout
8.5任意個整數(shù)求和問題*例8-17先輸入一個正整數(shù)n,再輸入任意n個整數(shù),計算并輸出這n個整數(shù)的和。要求使用動態(tài)內(nèi)存分配方法為這n個整數(shù)分配空間。8.5.1程序解析intmain(){ intn,sum,i,*p;
printf("Entern:"); scanf("%d",&n);if((p=(int*)calloc(n,sizeof(int)))==NULL){printf("Notabletoallocatememory.\n"); e
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吊籃安裝勞務合同范本
- 發(fā)外加工合同范例
- 變更稅務合同范本
- 古琴購買合同范例
- 入租房合同范本
- 北京防水合同范本
- sem托管合同范本
- 合同范本書籍
- 合肥官方代理記賬合同范本
- 吊頂材料合同范本
- 讀書分享讀書交流會《你當像鳥飛往你的山》課件
- 大學生職業(yè)素養(yǎng)訓練(第六版)教案 第二單元 學習職業(yè)禮儀
- 2022年中華護理學會輸液連接裝置安全管理專家共識解讀
- 內(nèi)鏡下ESD護理配合
- DB34∕T 1644-2012 南方紅豆杉用材林栽培技術規(guī)程
- 《中華人民共和國道路運輸條例》知識專題培訓
- 直腸癌課件完整版本
- 2024年山東省青島市普通高中自主招生物理試卷(含解析)
- 【三菱】M800M80系列使用說明書
- 【Z精密零部件公司企業(yè)文化建設問題及優(yōu)化建議14000字(論文)】
- 2024-2030年紅茶行業(yè)市場深度調研及發(fā)展趨勢與投資戰(zhàn)略研究報告
評論
0/150
提交評論