经典算法(61~90)

注:已选择性忽略绘图部分

【程序61】(利用二维数组
题目:打印出杨辉三角形(要求打印出10行如下图)
1.程序分析:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

 1 #include<stdio.h>
 2 main()
 3 {
 4     int a[10][10];
 5     int i, j, k;
 6     for( i=0; i<9; i++)
 7     {
 8         for( k=0; k<10-i; k++)
 9             printf("  ");
10         for( j=0; j<=i; j++)
11         {
12             if(j==0 || j==i)
13                 a[i][j]=1;
14             else
15                 a[i][j]=a[i-1][j-1]+a[i-1][j];
16             printf("%d   ",a[i][j]);
17         }
18         printf("\n");
19     }
20     system("pause");
21 }

==============================================================
【程序62】 (略)
题目:学习putpixel画点。

==============================================================
【程序63】 (略)
题目:画椭圆ellipse

==============================================================
【程序64】 (略)
题目:利用ellipse and rectangle 画图。

==============================================================
【程序65】 (略)
题目:一个最优美的图案。

==============================================================
【程序66】 (回顾指针,实现2个数交换)
题目:输入3个数a,b,c,按大小顺序输出。

 1 #include<stdio.h>
 2 void swap(int *p1, int *p2)
 3 {
 4     int p;
 5     if(*p1<*p2)
 6     {
 7         p=*p1;    *p1=*p2;    *p2=p;
 8     }
 9 }
10 main()
11 {
12     int a,b;
13     int *p1, *p2;
14     p1=&a;
15     p2=&b;
16     scanf("%d%d", &a,&b);
17     if(a<b)
18         swap(p1,p2);
19     printf("%d     %d\n",*p1, *p2);
20     system("pause");
21 }

==============================================================
【程序67】(本质冒泡排序) 
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

#include<stdio.h>
#define N 10
main()
{
    int a[N]={1,2,3,4,5,6,7,8,9,10};
    int i, j;
    for( i=0; i<N-1; i++)
    {
        for( j=i+1; j<N; j++)
        {
            if( a[i]<a[j])
            {
                a[i]=a[i]^a[j];
                a[j]=a[i]^a[j];
                a[i]=a[i]^a[j];
            }
        }
        printf("%d  ",a[i]);
    }
    printf("%d", a[N-1]);
    getchar();
}

==============================================================
【程序68】 (取模运算)
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

 1 #include<stdio.h>
 2 #define N 10
 3 main()
 4 {
 5     int a[N]={1,2,3,4,5,6,7,8,9,10};
 6     int tmp[N];
 7     int m;
 8     int i, j, temp;
 9     scanf("%d", &m);
10     for( j=0; j<m; j++)
11         {
12             tmp[j]=a[j];
13             //printf("temp[%d]=%d\n", j, tmp[j]);
14         }
15     for( i=0; i<N; i++)
16     {
17         if( (i+m)>=N)
18             a[i]=tmp[(i+m)%N];            //考虑溢出,取余循环
19         else
20             a[i]=a[i+m];                    //简单移位
21         printf("%d  ", a[i]);
22     }
23     system("pause");
24 }

==============================================================
【程序69】
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
圈子,问最后留下的是原来第几号的那位。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAX 100+1
 4 main()
 5 {
 6     int n;
 7     int a[MAX];
 8     int i, temp, count;
 9     for( i=1; i<MAX; i++)
10         a[i]=1;
11     scanf("%d", &n);
12     temp=n;
13     count=0;
14     i=1;
15     for( ; ; )
16     {
17         //printf("loop\n");
18         if(n==1)
19             break;
20         if( i!=0)
21         {
22             if( a[i]==1)
23             {
24                 count++;
25                 //printf("i=%d, count=%d\n", i, count);
26                 //a[i]=0;
27                 if(count%3==0)
28                 {
29                     count=0;
30                     a[i]=0;
31                     n--;
32                     printf("delete:%d\nn=%d\n", i, n);
33                 }
34             }
35             i=(i+1)%(temp+1);
36             //printf("i=%d\n",i);
37         }
38         else
39             i++;
40         }
41     for( i=1; i<=temp; i++)
42     {
43         if(a[i]==1)
44             printf("result=%d\n", i);
45     }
46     system("pause");
47 }

==============================================================
【程序70】 (字符串处理)
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define MAXN 100+1
 4 int count(char *p);
 5 main()
 6 {
 7     char *p[100];                            //关于此处定义方法不是特别清楚
 8     scanf("%s" , p);                         //输入不能超过100字符
 9     printf("%d\n", count(p));
10     system("pause");
11 }
12 int count( char *p)
13 {
14     int num=0;
15     while(*p!='\0')
16     {
17         p++;
18         num++;
19     }
20     return num;
21 }

【程序71】 (结构体声明的格式及注释)
题目:编写input()和output()函数输入,输出5个学生的数据记录。

 1 #include<stdio.h>
 2 #define N 2
 3 struct Student
 4 {
 5     char name[10];        //char *name[10]区别
 6     char no[10];
 7     int age;
 8 }stu[N];                    //此处有疑问
 9 
10 void input()
11 {
12     int i;
13     for( i=0; i<N; i++)
14     {
15         printf("Please input the name of student %d: ", i+1);
16         scanf("%s", stu[i].name);
17         printf("Please input the number of student %d: ", i+1);
18         scanf("%s", stu[i].no);
19         printf("Please input the age of student %d: ", i+1);
20         scanf("%d", &stu[i].age);
21     }
22 };
23 void output()
24 {
25     int i;
26         printf("Information about student :\n");
27         printf("  name    number age\n");
28     for( i=0; i<N; i++)
29         printf("%d: %s    %s    %d\n", i+1, stu[i].name, stu[i].no, stu[i].age);
30 };
31 main()
32 {
33     input();
34     output();
35     system("pause");
36 }
37     

 

posted @ 2014-10-30 16:40  anthozoan77  阅读(186)  评论(0编辑  收藏  举报