指針參考程序_第1頁(yè)
指針參考程序_第2頁(yè)
指針參考程序_第3頁(yè)
指針參考程序_第4頁(yè)
指針參考程序_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、指針參考程序編程題:1. 編寫(xiě)程序,用指針實(shí)現(xiàn)讀入一行數(shù)列,求數(shù)列的和,平均值,最大值、最小值,并且打印它們。#include "stdio.h"#include "limits.h"void main()int array80, *p;int n, i, sum=0, max=INT_MIN, min=INT_MAX; /*符號(hào)常量INT_MIN和INT_MAX分別表示int型的最小值和最大值,在limits.h中定義*/printf("請(qǐng)確定要輸入的整數(shù)個(gè)數(shù)n "); scanf("%d",&n);pr

2、intf("請(qǐng)輸入%d個(gè)整數(shù)", n);p=array;for(i=0; i<n; i+)scanf("%d",p);if(*p>max)max= *p;if(*p<min)min= *p;sum=sum + *p;p+;printf("輸入的%d個(gè)整數(shù)為", n); /*輸出所有整數(shù)*/p=array;for(i=0; i<n; i+)printf("%d ",*p+);putchar('n');printf("以上整數(shù)的累加和為%dn", sum);p

3、rintf("以上整數(shù)的平均值為%.2fn", (float)sum/n);printf("以上整數(shù)的最大值為%dn", max);printf("以上整數(shù)的最小值為%dn", min);2. 編寫(xiě)字符串插入函數(shù)char *strins(char *s1, char *s2),將字符串s2的內(nèi)容插入到字符串s1之前,參數(shù)s1, s2為指向字符串的指針。函數(shù)執(zhí)行后,返回值為結(jié)果字符串的首地址(即s1),參數(shù)s1為結(jié)果字符串中原來(lái)子串s1的首地址,參數(shù)s2不變。例如:s1=”world”, s2=”hello”, 結(jié)果字符串為”hello

4、world”,s1指向字符h。在main函數(shù)中輸入兩個(gè)字符串,調(diào)用該函數(shù)完成字符串的插入,并輸出結(jié)果。#include "stdio.h"char *strins(char *s1, char *s2)int len1=0, len2=0;char *p1, *p2;p1=s1;while(*p1+) /計(jì)算s1的長(zhǎng)度len1+;p2=s2;while(*p2+) /計(jì)算s2的長(zhǎng)度len2+;/把s1中的每個(gè)字符順次向后移動(dòng)len2個(gè)位置,包括結(jié)束符'0'p1=s1+len1; /指向s1的結(jié)束符'0'do *(p1+len2)= *p1;

5、while(p1-!=s1); /*至少要移動(dòng)一次,因此用dowhile循環(huán)*/把s2拷貝插入到s1的前面p1=s1;p2=s2;while(*p2)*p1+=*p2+;return s1;void main()char str180,str280, *p;printf("input first string:");gets(str1);printf("input second string:");gets(str2);printf("原來(lái)的字串s1:");puts(str1);p=strins(str1,str2); printf(

6、"插入后的字符串:");puts(str1); /*這里puts(str1)和puts(p)的輸出結(jié)果一樣,因?yàn)閜指針實(shí)際上就是指向str1的第一個(gè)元素*/puts(p);3. 編寫(xiě)字符串函數(shù)char *substr(char *str1, char *str2),判斷字符串str2是否為str1的子串,如果是,則返回str1中首次出現(xiàn)子串str2的起始位置,否則,返回NULL值。例如:str1=”I am a student”,str2=”stu”,函數(shù)執(zhí)行后,返回值指向字符s,參數(shù)s1, s2不變。在main函數(shù)中輸入兩個(gè)字符串,調(diào)用該函數(shù)判斷第二個(gè)字符串是否為第一個(gè)字

7、符串的子串,并輸出結(jié)果。#include <stdio.h> char *substr(char *str1, char *str2);void main() char s180, s220, *p; printf("input string1:n"); gets(s1); printf("input string2:n"); gets(s2); /*s2為要驗(yàn)證的字串*/ p=substr(s1, s2);if (p!=NULL)printf("n第二個(gè)字符串是第一個(gè)字符串的子串!n");printf("p指針

8、指向字符%c!n", *p);else printf("n第二個(gè)字符串不是第一個(gè)字符串的子串,p為空指針!n"); char *substr(char *str1, char *str2)char *p, *q, *s; for(s=str1; *s !='0' ; s+)if (*s = *str2) /*str1中是否有和str2首字符相同的字符*/ for(p=s, q=str2; *p && *q ; p+, q+) /*判斷接下去的幾個(gè)字符是否相同*/ if (*p != *q) /*不相同*/break; if (*q=

9、'0') /*所有字符都相同*/return s; /*是子串, 返回指向第一個(gè)字符的指針*/return NULL;/*沒(méi)有匹配的字符串,返回空指針*/ 4. 編寫(xiě)字符串函數(shù)int lenstr(char *str),求字符串str的長(zhǎng)度。在main函數(shù)中輸入一個(gè)字符串,調(diào)用該函數(shù)計(jì)算字符串的長(zhǎng)度,并輸出結(jié)果。#include <stdio.h> int lenstr(char *str);void main() char s80; printf("請(qǐng)輸入一個(gè)字符串以回車(chē)結(jié)束:n"); gets(s); printf("該字符串的長(zhǎng)度

10、為%dn", lenstr(s);int lenstr(char *str)char *p; int len=0;for(p=str; *p ; p+)len+;return len;5. 編寫(xiě)字符串函數(shù)char * cutstr(char *str, int n),將字符串str中前面的n個(gè)字符刪除,后續(xù)字符前移。函數(shù)執(zhí)行后,參數(shù)str,n不變,如果成功,返回值為str首地址,如果未成功,返回值為NULL。例如:str=”I am a student”,n=2,函數(shù)執(zhí)行后str=”am a student”。在main函數(shù)中輸入一個(gè)字符串和一個(gè)正整數(shù)n,調(diào)用該函數(shù)將字符串前面的n個(gè)

11、字符刪除,后續(xù)字符前移,并輸出結(jié)果。#include <stdio.h> #include "string.h"char * cutstr(char *str, unsigned int n);void main() char s80, *p; unsigned int n;printf("請(qǐng)輸入一個(gè)字符串以回車(chē)結(jié)束:n"); gets(s); printf("請(qǐng)輸入要?jiǎng)h除前面的字符個(gè)數(shù): ");scanf("%d", &n);p=cutstr(s,n);printf("刪除前面%d個(gè)

12、字符后字符串為:%sn", n, p); /這里p用s替代結(jié)果一樣char * cutstr(char *str, unsigned int n)char *p; if( strlen(str) < n ) /*要?jiǎng)h除的字符數(shù)大于字符串中實(shí)際字符個(gè)數(shù)*/*str='0'elsefor(p=str+n; *p; p+) /*后續(xù)字符前移*/*(p-n)=*p;*(p-n)='0' /*串結(jié)束標(biāo)志*/return str;6. 編寫(xiě)一個(gè)排序函數(shù)sort,將數(shù)組按照從大到小的順序排序,其中有兩個(gè)形式參數(shù),一個(gè)為指向數(shù)組的指針p,另一個(gè)為數(shù)組的元素個(gè)數(shù)n

13、。在main函數(shù)中輸入10個(gè)整數(shù)存入數(shù)組data10中,調(diào)用該函數(shù)對(duì)data進(jìn)行排序,并輸出最后的排序結(jié)果。#include "stdio.h"void sort(int *a, int n) /無(wú)返回值,在原數(shù)組上排序 int i, j, temp; for(i=0;i<n-1;i+) /*冒泡排序*/ for(j=0;j<n-i-1;j+) if(*(a+j)<*(a+j+1) temp = *(a+j); *(a+j) = *(a+j+1); *(a+j+1) = temp; void main(void) int data10; int i; pr

14、intf("請(qǐng)輸入10個(gè)整數(shù):n"); for(i=0;i<10;i+) scanf("%d",&datai); sort(data, 10); printf("降序排序后的數(shù)組為:n"); for(i=0;i<10;i+) printf("%d ", datai); printf("n");選做題: 編寫(xiě)程序,用指針實(shí)現(xiàn)讀入字符串s,字符串s1,字符串s2,如果s1是字符串s的子串,則用s2替換s中的s1,并且打印結(jié)果字符串。例如s=”abcde123fghijk123mn

15、45”, s1=”123”, s2=”88”, 程序執(zhí)行后s=”abcde88fghijk88mn45”#include <stdio.h>#include <string.h>/利用前面設(shè)計(jì)的函數(shù)/char *strins(char *s1, char *s2) 將字符串s2的內(nèi)容插入到字符串s1之前/char * cutstr(char *str, int n),將字符串str中前面的n個(gè)字符刪除,后續(xù)字符前移/以及c庫(kù)函數(shù) char *strstr(char *s1, char *s2) 從字符串s1中尋找子串s2第一次出現(xiàn)的位置,返回指向第一次出現(xiàn)s2的指針,如

16、果沒(méi)找到返回NULLchar *strins(char *s1, char *s2)int len1=0, len2=0;char *p1, *p2;p1=s1;while(*p1+) /計(jì)算s1的長(zhǎng)度len1+;p2=s2;while(*p2+) /計(jì)算s2的長(zhǎng)度len2+;/把s1中的每個(gè)字符順次向后移動(dòng)len2個(gè)位置,包括結(jié)束符'0'p1=s1+len1; /指向s1的結(jié)束符'0'do *(p1+len2)= *p1; while(p1-!=s1); /*至少要移動(dòng)一次,因此用dowhile循環(huán)*/把s2拷貝插入到s1的前面p1=s1;p2=s2;whil

17、e(*p2)*p1+=*p2+;return s1;char * cutstr(char *str, unsigned int n)char *p; if( strlen(str) < n ) /*要?jiǎng)h除的字符數(shù)大于字符串中實(shí)際字符個(gè)數(shù)*/*str='0'elsefor(p=str+n; *p; p+) /*后續(xù)字符前移*/*(p-n)=*p;*(p-n)='0' /*串結(jié)束標(biāo)志*/return str;void main() char s180, s220, s320, *p, *q; unsigned int len2, len3;puts("請(qǐng)輸入字符串s1以回車(chē)結(jié)束: "); gets(s1);puts("請(qǐng)輸入字符串s2以回車(chē)結(jié)束: "); gets(s2);puts("請(qǐng)輸入字符串s3以回車(chē)結(jié)束: "); gets(s3);len2=strlen(

溫馨提示

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

評(píng)論

0/150

提交評(píng)論