歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> Linux C 指針練習

Linux C 指針練習

日期:2017/3/3 11:50:57   编辑:Linux技術
題目一
已知數組內容如下 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
plain copy
#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
plain copy
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
plain copy
#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
plain copy
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$
Copyright © Linux教程網 All Rights Reserved