日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C 指针练习

發布時間:2023/12/9 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C 指针练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目一

已知數組內容如下 s[] = {1,2,3,4,5,6,7,8,9},輸入一個常數 m(1<=m<=9),使得該數組內容順序后移n個位置。如n = 3時,數組后移3個位置后的內容為{7,8,9,1,2,3,4,5,6}

代碼如下:

[cpp]?view plaincopy
  • #include?<stdio.h>??
  • ??
  • int?main()??
  • {??
  • ????int?a[]?=?{1,2,3,4,5,6,7,8,9};??
  • ????int?b[9]?=?{0};??
  • ????int?*p?=?a;???
  • ????int?*q?=?b;??
  • ????int?i,m,n;??
  • ??
  • ????printf("請輸入要移動的位數:\n");??
  • ????scanf("%d",&m);??
  • ????n?=?m;??
  • ??????
  • ????for(i?=?0;?i?<?m;?i++)?????
  • ????{??
  • ????????*q++?=?*(?p?+?9?-?n);??
  • ????????n--;??????
  • ????}??
  • ??????
  • ????for?(i?=?0;i?<?9?-?m;i++)??????????
  • ????????*q++??=?*p++;??
  • ??
  • ????printf("移動后數組為:\n");??
  • ????for(i?=?0;?i?<?9;i++)??
  • ????????printf("%d?",b[i]);???
  • ????????printf("\n");??
  • ??????
  • ????return?0;??
  • ??
  • }??
  • 執行結果如下: [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/tmp$?./zhizhen2??
  • 請輸入要移動的位數:??
  • 3??
  • 移動后數組為:??
  • 7?8?9?1?2?3?4?5?6???
  • fs@ubuntu:~/qiang/tmp$?./zhizhen2??
  • 請輸入要移動的位數:??
  • 7??
  • 移動后數組為:??
  • 3?4?5?6?7?8?9?1?2???
  • fs@ubuntu:~/qiang/tmp$???

  • 題目二、

    輸入一個字符串,內有數字和非數字字符,如a123X456 ?17960? 302tab5876 將其中連續的數字作為一個整數,一次存放到整數型數組a中,例如123放到 a[0],456放到 a[1]中,統計有多少個整數,并輸出這些數;

    分析:這是一道非常經典的指針編程題,網上有很多解法,有用malloc的,有用sscanf的,找到一個自己能理解的解法也是重要的,下面是博主自己寫的程序,希望對大家有所幫助,代碼如下:

    [cpp]?view plaincopy
  • #include?<stdio.h>??
  • #include?<string.h>??
  • ??
  • int?main(int?argc,?const?char?*argv[])??
  • {??
  • ????char?b[100];??
  • ????int??a[100];??
  • ????memset(a,'\0',100);??
  • ????char?*p?=?b;??
  • ????int?i?=?0;??
  • ????int?j;??
  • ????int?sum?=?0;??
  • ????int?count?=?0;??
  • ????int?flag?=?1;//標志位,遇到數字為0,遇到非數字為1;此處其初始值為1,默認首字符前面還是非數字,不輸出整數,主要配合下面的程序??
  • ????printf("請輸入字符串:\n");??
  • ????gets(b);??
  • ??????
  • ????while(*p?)??
  • ????{??
  • ????????if(*p?<=?'9'?&&?*p?>=?'0')??
  • ????????{??
  • ????????????flag?=?0;//遇到數字,flag=0??
  • ????????????sum?=?sum*10?+?*p++?-?'0';//將字符數字轉化成整數,此時并不輸出。當下一個字符為非數字時,才輸出??
  • ????????}?????
  • ????????else???
  • ????????{??
  • ????????????while(flag?==?0)//此時讀到非數字字符,判斷此時flag,如果此時flag為0.說明上一個字符為數字??
  • ????????????{??
  • ????????????????a[i++]?=?sum?;//此時將數字輸出,賦給a[i],i++??
  • ????????????????sum?=?0;//將sum清零??
  • ????????????????flag?=?1;//非數字字符,flag置1??
  • ????????????}??
  • ????????????p++;//此時flag為1,沒有整數輸出,則看下一個字符??
  • ????????}??
  • ????}??
  • //字符串結束后,會遇到兩種情況,一個是最后一個字符為數字,另一種是非數字字符??
  • ????if(flag?==?0)//因為前面的程序中,整數的下一個字符為非數字時,才會輸出整數,若最后一個是數字的話,則無法輸出,所以這里對最后一個字符進行判斷??
  • ????????a[i]?=?sum;//將最后一個整數輸出??
  • ????else???
  • ????????i--;//此時最后一個字符為非數字,沒有整數輸出,但i多加了一次,所以此處i--??
  • ??????
  • ????count?=?i?+?1;//整數個數為i+1??
  • ????printf("共有%d個整數\n",count);??
  • ????printf("這些整數是:\na[]=");??
  • ????for(j?=?0;?j?<?i+1;?j++)??
  • ????????printf("%d?",a[j]);??
  • ????printf("\n");??
  • ??
  • ????return?0;??
  • }??
  • 輸出結果為: [cpp]?view plaincopy
  • fs@ubuntu:~/qiang/tmp$?./zhizhen1??
  • 請輸入字符串:??
  • 123xiao45???<er97??
  • 共有3個整數??
  • 這些整數是:??
  • a[]=123?45?97???
  • fs@ubuntu:~/qiang/tmp$?./zhizhen1??
  • 請輸入字符串:??
  • xiao12jian5w4gd67dd??
  • 共有4個整數??
  • 這些整數是:??
  • a[]=12?5?4?67???
  • fs@ubuntu:~/qiang/tmp$ ??
  • 總結

    以上是生活随笔為你收集整理的Linux C 指针练习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。