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函数,也是会出错,不知道用了哪里的储存。 看了很多次也没改出来,是时间快过了,赶紧就先发上来了,有时间再改。 要是谁看出来了就教教我啦!