2012年(1008)
分类:
2012-08-01 11:19:37
原文地址:C_指针练习 作者:luozhiyong131
1、使用指针,计算num1 + num2
Num1 = 12;
Num2 = 15
2、N个人排成一圈,从1-3报数,报到3的人退出,问最后留下的人是谁。N从键盘输入
#include
int main()
{
int student[100];
int str_num, *ptr, counter, del=0;
int i,flag = 0;
printf("输入学生个数(小于一百):");
scanf("%d", &str_num);
for(i = 0; i < str_num; i++)
student[i] = i+1; /*给学生编号*/
ptr = student;
while(str_num - del > 1)
{
if(*ptr != 0)
{
flag++;
if(flag == 3)
{
*ptr = 0; /*删除学生*/
flag = 0;
del++;
}
}
ptr++;
if(ptr == (student + str_num))
ptr = student;
}
for(i = 0; i < str_num; i++)
if(student[i] != 0)
printf("最后学生是%d \n", student[i]);
}
3、循环移动数组data={1,2,3,4,5,6,7,8,9,0}。输入一个数N,数组元素右循环移动N位
#include
int main()
{
int data[]={1,2,3,4,5,6,7,8,9,0};
int n,i,temp;
int *ptr;
printf("输入要移动的位数:");
scanf("%d",&n);
while(n--)
{
ptr = data; /*指针指向数组的首地址*/
temp = *ptr;
for(i = 0; i < 9; i++)
{
*ptr = *(ptr+1); /*后一位元素向前移动一位*/
ptr++; /*指针后移*/
}
*ptr = temp;
}
for(i = 0; i < 10; i++)
printf("%d ",data[i]);
printf("\n");
}
4、对一个整形数组进行递增排序
#include
#include
#include
int main()
{
int data[10];
int i, j, temp;
int *ptr;
printf("产生十个百以内的随机数:\n");
srand((unsigned)time(NULL)); /*随机种子*/
for(i = 0; i < 10; i++)
{
data[i] = rand() % 100; /*产生百以内的随机数*/
printf("%d ", data[i]);
}
ptr = data ;
for(i = 0; i < 9; i++)
{
for(j = i; j < 10; j++)
{
if(*(ptr+i) > *(ptr+j))
{
temp = *(ptr+i); /*保存较大的值*/
*(ptr+i) = *(ptr+j); /*较小的值前移*/
*(ptr+j) = temp; /*较大的值后移*/
}
}
}
printf("\n递增排序后的结果:\n");
for(i = 0; i < 10; i++)
printf("%d ",data[i]);
printf("\n");
}
5、通过指向指针的指针变量来访问一个二维数组,输出所有元素中的最大值
#include
#include
#include
#define N 3
#define M 4
int main()
{
int data[N][M];
int i, j, max = 0;
int *ptr;
int **p;
p = &ptr;
printf("产生N*M个百以内的随机数:\n");
srand((unsigned)time(NULL)); /*随机种子*/
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
{
data[i][j] = rand() % 100; /*产生百以内的随机数*/
printf("%2d ", data[i][j]);
}
printf("\n");
}
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
{
ptr = &data[i][j];
if(**p > max)
max = **p;
}
}
printf("%d\n",max);
}
一小时——第二部分:Linux C