Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7724238
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: C/C++

2011-05-08 10:32:48

1、使用指针,计算num1 + num2

Num1 = 12;

Num2 = 15

 

2N个人排成一圈,从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

阅读(3691) | 评论(1) | 转发(4) |
0

上一篇:C_基础练习

下一篇:嵌入式培训课件

给主人留下些什么吧!~~

2011-10-06 10:34:11

楼主第四个题的if(*(ptr+i) > *(ptr+j))
判断条件不够,这样得不出正确的结果应该改为
if(*(p+i) > *(p+j)&&(i<j))