查看: 73|回复: 1

[经验] C语言经典算法67-76

[复制链接]

41

主题

0

好友

347

积分

秀才

Rank: 3Rank: 3

  • TA的每日心情
    开心
    10 小时前
  • 签到天数: 27 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2017-10-10 11:07:16 |显示全部楼层
    【程序67
    题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
    1.程序分析:谭浩强的书中答案有问题。
    2.程序源代码:
    main()
    {
    int number[10];
    input(number);
    max_min(number);
    output(number);
    }
    input(number)
    int number[10];
    {int i;
    for(i=0;i<9;i++)
    scanf("%d,",&number);
    scanf("%d",&number[9]);
    }
    max_min(array)
    int array[10];
    {int *max,*min,k,l;
    int *p,*arr_end;
    arr_end=array+10;
    max=min=array;
    for(p=array+1;p if(*p>*max) max=p;
    else if(*p<*min) min=p;
    k=*max;
    l=*min;
    *p=array[0];array[0]=l;l=*p;
    *p=array[9];array[9]=k;k=*p;
    return;
    }
    output(array)
    int array[10];
    { int *p;
    for(p=array;p printf("%d,",*p);
    printf("%d\n",array[9]);
    }
    ==============================================================
    【程序68
    题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
    1.程序分析:
    2.程序源代码:
    main()
    {
    int number[20],n,m,i;
    printf("the total numbers is:");
    scanf("%d",&n);
    printf("back m:");
    scanf("%d",&m);
    for(i=0;i scanf("%d,",&number);
    scanf("%d",&number[n-1]);
    move(number,n,m);
    for(i=0;i printf("%d,",number);
    printf("%d",number[n-1]);
    }
    move(array,n,m)
    int n,m,array[20];
    {
    int *p,array_end;
    array_end=*(array+n-1);
    for(p=array+n-1;p>array;p--)
    *p=*(p-1);
    *array=array_end;
    m--;
    if(m>0) move(array,n,m);
    }
    ==============================================================
    【程序69
    题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从13报数),凡报到3的人退出
    圈子,问最后留下的是原来第几号的那位。信盈达嵌入式企鹅要妖气呜呜吧久零就要
    1. 程序分析:
    2.程序源代码:
    #define nmax 50
    main()
    {
    int i,k,m,n,num[nmax],*p;
    printf("please input the total of numbers:");
    scanf("%d",&n);
    p=num;
    for(i=0;i *(p+i)=i+1;
    i=0;
    k=0;
    m=0;
    while(m {
    if(*(p+i)!=0) k++;
    if(k==3)
    { *(p+i)=0;
    k=0;
    m++;
    }
    i++;
    if(i==n) i=0;
    }
    while(*p==0) p++;
    printf("%d is left\n",*p);
    }
    ==============================================================
    【程序70
    题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。
    1.程序分析:
    2.程序源代码:
    main()
    {
    int len;
    char *str[20];
    printf("please input a string:\n");
    scanf("%s",str);
    len=length(str);
    printf("the string has %d characters.",len);
    }
    length(p)
    char *p;
    {
    int n;
    n=0;
    while(*p!='\0')
    {
    n++;
    p++;
    }
    return n;
    }
    【程序71
    题目:编写input()output()函数输入,输出5个学生的数据记录。
    1.程序分析:
    2.程序源代码:
    #define N 5
    struct student
    { char num[6];
    char name[8];
    int score[4];
    } stu[N];
    input(stu)
    struct student stu[];
    { int i,j;
    for(i=0;i { printf("\n please input %d of %d\n",i+1,N);
    printf("num: ");
    scanf("%s",stu.num);
    printf("name: ");
    scanf("%s",stu.name);
    for(j=0;j<3;j++)
    { printf("score %d.",j+1);
    scanf("%d",&stu.score[j]);
    }
    printf("\n");
    }
    }
    print(stu)
    struct student stu[];
    { int i,j;
    printf("\nNo. Name Sco1 Sco2 Sco3\n");
    for(i=0;i{ printf("%-6s%-10s",stu.num,stu.name);
    for(j=0;j<3;j++)
    printf("%-8d",stu.score[j]);
    printf("\n");
    }
    }
    main()
    {
    input();
    print();
    }
    ==============================================================
    【程序72
    题目:创建一个链表。
    1.程序分析:
    2.程序源代码:
    /*creat a list*/
    #include "stdlib.h"
    #include "stdio.h"
    struct list
    { int data;
    struct list *next;
    };
    typedef struct list node;
    typedef node *link;
    void main()
    { link ptr,head;
    int num,i;
    ptr=(link)malloc(sizeof(node));
    ptr=head;
    printf("please input 5 numbers==>\n");
    for(i=0;i<=4;i++)
    {
    scanf("%d",&num);
    ptr->data=num;
    ptr->next=(link)malloc(sizeof(node));
    if(i==4) ptr->next=NULL;
    else ptr=ptr->next;
    }
    ptr=head;
    while(ptr!=NULL)
    { printf("The value is ==>%d\n",ptr->data);
    ptr=ptr->next;
    }
    }
    ==============================================================
    【程序73
    题目:反向输出一个链表。
    1.程序分析:
    2.程序源代码:
    /*reverse output a list*/
    #include "stdlib.h"
    #include "stdio.h"
    struct list
    { int data;
    struct list *next;
    };
    typedef struct list node;
    typedef node *link;
    void main()
    { link ptr,head,tail;
    int num,i;
    tail=(link)malloc(sizeof(node));
    tail->next=NULL;
    ptr=tail;
    printf("\nplease input 5 data==>\n");
    for(i=0;i<=4;i++)
    {
    scanf("%d",&num);
    ptr->data=num;
    head=(link)malloc(sizeof(node));
    head->next=ptr;
    ptr=head;
    }
    ptr=ptr->next;
    while(ptr!=NULL)
    { printf("The value is ==>%d\n",ptr->data);
    ptr=ptr->next;
    }}
    ==============================================================
    【程序74
    题目:连接两个链表。
    1.程序分析:
    2.程序源代码:
    #include "stdlib.h"
    #include "stdio.h"
    struct list
    { int data;
    struct list *next;
    };
    typedef struct list node;
    typedef node *link;
    link delete_node(link pointer,link tmp)
    {if (tmp==NULL) /*delete first node*/
    return pointer->next;
    else
    { if(tmp->next->next==NULL)/*delete last node*/
    tmp->next=NULL;
    else /*delete the other node*/
    tmp->next=tmp->next->next;
    return pointer;
    }
    }
    void selection_sort(link pointer,int num)
    { link tmp,btmp;
    int i,min;
    for(i=0;i {
    tmp=pointer;
    min=tmp->data;
    btmp=NULL;
    while(tmp->next)
    { if(min>tmp->next->data)
    {min=tmp->next->data;
    btmp=tmp;
    }
    tmp=tmp->next;
    }
    printf("\40: %d\n",min);
    pointer=delete_node(pointer,btmp);
    }
    }
    link create_list(int array[],int num)
    { link tmp1,tmp2,pointer;
    int i;
    pointer=(link)malloc(sizeof(node));
    pointer->data=array[0];
    tmp1=pointer;
    for(i=1;i{ tmp2=(link)malloc(sizeof(node));
    tmp2->next=NULL;
    tmp2->data=array;
    tmp1->next=tmp2;
    tmp1=tmp1->next;
    }
    return pointer;
    }
    link concatenate(link pointer1,link pointer2)
    { link tmp;
    tmp=pointer1;
    while(tmp->next)
    tmp=tmp->next;
    tmp->next=pointer2;
    return pointer1;
    }
    void main(void)
    { int arr1[]={3,12,8,9,11};
    link ptr;
    ptr=create_list(arr1,5);
    selection_sort(ptr,5);
    }
    ==============================================================
    【程序75
    题目:放松一下,算一道简单的题目。
    1.程序分析:
    2.程序源代码:
    main()
    {
    int i,n;
    for(i=1;i<5;i++)
    { n=0;
    if(i!=1)
    n=n+1;
    if(i==3)
    n=n+1;
    if(i==4)
    n=n+1;
    if(i!=4)
    n=n+1;
    if(n==3)
    printf("zhu hao shi de shi:%c",64+i);
    }
    }
    ==============================================================
    【程序76
    题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数
    1/1+1/3+...+1/n(利用指针函数)
    1.程序分析:
    2.程序源代码:
    main()
    #include "stdio.h"
    main()
    {
    float peven(),podd(),dcall();
    float sum;
    int n;
    while (1)
    {
    scanf("%d",&n);
    if(n>1)
    break;
    }
    if(n%2==0)
    {
    printf("Even=");
    sum=dcall(peven,n);
    }
    else
    {
    printf("Odd=");
    sum=dcall(podd,n);
    }
    printf("%f",sum);
    }
    float peven(int n)
    {
    float s;
    int i;
    s=1;
    for(i=2;i<=n;i+=2)
    s+=1/(float)i;
    return(s);
    }
    float podd(n)
    int n;
    {
    float s;
    int i;
    s=0;
    for(i=1;i<=n;i+=2)
    s+=1/(float)i;
    return(s);
    }
    float dcall(fp,n)
    float (*fp)();
    int n;
    {
    float s;
    s=(*fp)(n);
    return(s);
    }
    ==============================================================

    回复

    使用道具 举报

    18

    主题

    6

    好友

    2863

    积分

    超级版主

    Rank: 8Rank: 8

    该用户从未签到

    发表于 2017-10-10 11:11:40 |显示全部楼层
    楼主辛苦了,讲道理,一样的内容咱们发一篇就好了
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条

    手机版|爱板网 |网站地图  

    GMT+8, 2017-10-21 22:10 , Processed in 0.187197 second(s), 9 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部