天天看点

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}

代码如下:

#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;

}
           

执行结果如下:

[email protected]:~/qiang/tmp$ ./zhizhen2
请输入要移动的位数:
3
移动后数组为:
7 8 9 1 2 3 4 5 6 
[email protected]:~/qiang/tmp$ ./zhizhen2
请输入要移动的位数:
7
移动后数组为:
3 4 5 6 7 8 9 1 2 
[email protected]:~/qiang/tmp$ 
           

题目二、

输入一个字符串,内有数字和非数字字符,如a123X456  17960? 302tab5876 将其中连续的数字作为一个整数,一次存放到整数型数组a中,例如123放到 a[0],456放到 a[1]中,统计有多少个整数,并输出这些数;

分析:这是一道非常经典的指针编程题,网上有很多解法,有用malloc的,有用sscanf的,找到一个自己能理解的解法也是重要的,下面是博主自己写的程序,希望对大家有所帮助,代码如下:

#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;
}
           

输出结果为:

[email protected]:~/qiang/tmp$ ./zhizhen1
请输入字符串:
123xiao45  ?<er97
共有3个整数
这些整数是:
a[]=123 45 97 
[email protected]:~/qiang/tmp$ ./zhizhen1
请输入字符串:
xiao12jian5w4gd67dd
共有4个整数
这些整数是:
a[]=12 5 4 67 
[email protected]:~/qiang/tmp$ 
           

继续阅读