c语言练习-3

3-1.
  编写一个将两个字符串连接起来函数(即实现strcat函数的功能),两个字符串由主函数输入, 连接后的字符串也由主函数输出。

#include "stdio.h"
char strcatt(char *a1 ,char *a2)
{
    char *p1,*p2;
    p1=a1;p2=a2;
    while (*p1!='/0') p1++;
    while (*p2!='/0')
    {
        *p1=*p2;
        p2++;p1++;
    }   
    *p1='/0';
}
int main()
{
    char str1[100],str2[50];
    printf("Please input the string1 and string2./n");
    gets(str1);
    gets(str2);
    strcatt(str1,str2);
    printf("The string1 has been: %s.",str1);
    getch();
    return 0;
}       


知道了几个基础的知识吧。首先, '/0' 不能<=,  只能!= 。其次,类似这样的处理字符串,要是改掉了最后的终止符, 需要再手动加上,系统不会再给自动加。还有,写给装B凯敏的, char类型下,实参是数组,形参还是能用指针的~~

1-2.
   给一个不多于5位的正整数,要求:
 1)求出它是几位数;
 2)分别输出每一位数字;
 3)按逆序输出每一位数字,例如原数字是123,应输出321.

把问题改为   给一个任意数。
虽然于凯敏也写了,但是吧,还是自己写一个心里踏实。
虽然于凯敏写的比我的短,貌似比我的效率高,但是吧,还是自己的看的踏实。

#include "stdio.h"
int f_10(int y)
{
    int x;
    if (y==1)
      x=10;
      else x=10*f_10(y-1);
    return x;
}
int main()
{
    int m=0,c[100],i,a=0,b;
    long n1,n2;
    printf("Please input the number./n");
    scanf("%d",&n1);
    n2=n1;
    while (n1!=0)
    {
        n1=n1/10;
        m++;
    }
    printf("It's digits is %d./n",m);
    b=n2%10;
    c[m-1]=b;
    for (i=1;i<m;i++)
    {
        n2=n2-a*f_10(m-i+1);
        a=n2/f_10(m-i);
        c[i-1]=a;
        printf("%d/n",a);
    }
    printf("%d/n",b);
    printf("The new order is:");
    for (i=m-1;i>=0;i--)
      printf("%d",c[i]);
    getch();
    return 0;
}                   

3-3.
  建立一个链表,每个结点包括:学号、姓名、性别、年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

#include "stdio.h"
#include "malloc.h"
#define LEN sizeof(struct student)
struct student
{
    long num;
    char name[8];
    char sex[2];
    int age;
    struct student *next;
};
int n;
struct student *creat(void)
{
    struct student *head,*p1,*p2,*p;
    n=0;
    p1=p2=(struct student *)malloc(LEN);
    printf("Please input the information of the students as num,name,sex,age./nIn the end,please input 0 to finish creating./n");
    scanf("%ld,%s,%s,%d",&p1->num,&p1->name,&p1->sex,&p1->age);
    head=NULL;
    while (p1->num!=0)
    {
        n=n+1;
        if (n==1) head=p1;
        else p2->next=p1;
        p2=p1;
        p1=(struct student *)malloc(LEN);
        scanf("%ld,%s,%s,%d",&p1->num,&p1->name,&p1->sex,&p1->age);
    }
    p2->next=NULL;
    p=head;
    printf("There are %d students./n",n);
    printf("/nnum     name    sex    age   /n");
    while (p!=NULL)
      {
          printf("%ld%8s%6s%6d/n",p->num,p->name,p->sex,p->age);
          p=p->next;
      }     
    return (head);
}
struct student *del(struct student *p,int age)
{
    struct student *p1,*p2;
    if (p==NULL)
    {printf("/nlist null!/n");return (p);}
    p1=p;
    while (age!=p1->age && p1->next!=NULL)
      {p2=p1;p1=p1->next;}
    if (age==p1->age)
      {
          if (p1==p)
           p=p1->next;
           else p2->next=p1->next;
         printf("delete:%d",age);
         n=n-1;
         printf("There are %d left./n",n);
      }
       else printf("%d can not be fond!/n",age);
    p1=p;
    printf("/nnum     name    sex    age   /n");
    while (p1!=NULL)
      {
          printf("%ld%8s%6s%6d",p1->num,p1->name,p1->sex,p1->age);
          p1=p1->next;
      }
    return (p);
}
 main()
{
    int dage;
    struct student *head;
    head=creat();
    printf("Please input the age of the deleting one./n");
    scanf("%d",&dage);
    head=del(head,dage);
    getch();
}                

这个程序就是出错,在 creat函数里,输出不了,输出是一段乱码,不知道是打开了哪里的储存。还有 del函数,也是会出错,不知道用了哪里的储存。  看了很多次也没改出来,是时间快过了,赶紧就先发上来了,有时间再改。 要是谁看出来了就教教我啦!


         

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值