一、函数digit(n,k)的功能是求正整数n中从右端开始的第k个数字的值,如果k超过了n的位数,则函数返回-1;否则返回n中第k个数字
//非递归
int digit1(int n,int k)
{
int t;
while(k)
{
if(n==0) return -1;
t = n%10;
n = n/10;
k--;
}
return t;
}
//递归
int digit2(int n,int k)
{
if(n == 0) return -1;
if(k ==1) return n%10;
return digit2(n/10,k-1);
}
二、编程统计输入的一行中的大写字母、小写字母、数字的个数以及单词数
void number(char str[])
{
int a=0,b=0,c=0,d=0,flag = 0;
while(*str)
{
if(*str>=65 && *str<=90) a++,flag = 1;
if(*str>=97 && *str<=122) b++,flag = 1;
if(*str>=48 && *str<=57) c++;
if(!(*str>=65 && *str<=90) && !(*str>=97 && *str<=122) && flag == 1)
{
d++;
flag = 0;
}
str++;
}
printf("%d %d %d %d",a,b,c,d);
}
三、建立一个学生登记表,按学号排序,打印学生登记表
struct student
{
long no;
char name[8];
char sex;
float score;
};
//输入学生信息
int input(struct student *stu)
{
int i = 0;
scanf("%ld",&stu[i].no);
while(stu[i].no != -1)
{
scanf("%s%f%c",stu[i].name,&stu[i].score,&stu[i].sex);
i++;
scanf("%ld",&stu[i].no);
}
return i;
}
//按学号排序
void stu_sort(struct student *stu,int n)
{
int i,j;
struct student temp;
for(i = 0;i<n;i++)
{
for(j = i+1;j<n;j++)
{
if(stu[i].no>stu[j].no)
{
temp = stu[i];
stu[i] = stu[j];
stu[j] = temp;
}
}
}
}
//打印学生信息
void output(struct student *stu)
{
int i = 0;
while(stu[i].no != -1)
{
printf("%d %s %.2f %c\n",stu[i].no,stu[i].name,stu[i].score,stu[i].sex);
i++;
}
}
四、删除”最右下“的结点子树,并返回该子树的根节点
BitTree RightBottom(BitTree T)
{
if(T == NULL) return NULL;
BitTree p,pre;
p = T->right;
if(!p) return NULL;
pre = T;
while(!p->right)
{
pre = p;
p = p->right;
}
pre->right = NULL;
return p;
}