2007年机试

第一题

从输入的字符串中,统计空格,回车,TAB出现的次数

#include<stdio.h>
#include<stdio.h>
#include<string.h>
int main(){
	char a[100],b[100],c[100];
	int i,j,k;
	scanf("%s%s",a,b);
	int len1=strlen(a),len2=strlen(b);
	i=j=k=0;
	while(i<len1&&j<len2){
		if(a[i]>b[j])c[k++]=b[j++];
		else if(a[i]<b[j])c[k++]=a[i++];
		else if(a[i]==b[j]){
			c[k++]=a[i++];
			j++;
		}
	}
	while(i<len1)c[k++]=a[i++];
	while(j<len2)c[k++]=b[j++];
	for(i=0;i<k;i++)printf("%c",c[i]);
	printf("\n");
	return 0;
}

第二题

将两个升序字符串合并成一个升序字符串,相同的字母,出现一次。

#include<string.h>
int main(){
	char ch,str[10000];
	int i=0;
	while((ch=getchar())!='\\'){//以\结束
		str[i++]=ch;
	}
	str[i]='\0';
	int len=strlen(str),space=0,enter=0,tab=0;
	for(i=0;i<len;i++){
        if(str[i]==' ')space++;
		else if(str[i]=='\n')enter++;
		else if(str[i]=='\t')tab++;
	}
	printf("%d %d %d\n",space,enter,tab);
	return 0;
}

第三题  多项式相加

#include<stdio.h>
#include<malloc.h>
typedef struct node{
    float coef;
    int expn;
    node *next;
}Lnode, * Dxs;
 
Dxs create();
Dxs add_dxs(Dxs firsta, Dxs firstb);
void printDxs(Dxs h);
void deleteNode(Dxs h, Dxs p);
 
 
int main(){
    Dxs ha, hb, hc;
    printf("请依次输入第一个多项式的系数和指数\n");
    ha = create();
    printf("请依次输入第二个多项式的系数和指数\n");
    hb = create();
    printf("输入的第一个多项式是: ");
    printDxs(ha->next);
    printf("输入的第二个多项式是: ");
    printDxs(hb->next);
    hc = add_dxs(ha, hb);
    printf("两个多项式的和为: ");
    printDxs(hc->next);
    return 0;
}
 
//创建链表(读入数据以 0 0 结束)
Dxs create(){
    float coef;
    int expn;
    Dxs first, qa, s;
    first = (Dxs)malloc(sizeof(Lnode));
    first->coef = -1;
    first->expn = -1;
    first->next = NULL;
    qa = first;
    while(1){
        scanf("%f", &coef);
        scanf("%d", &expn);
        if(coef == 0 && expn == 0){
            break;
        }
        s = (Dxs)malloc(sizeof(Lnode));
        s->coef = coef;
        s->expn = expn;
        s->next = NULL;
        qa->next = s;
        qa = s;
    }
    return first;
}
 
//链表相加
Dxs add_dxs(Dxs firsta, Dxs firstb){
    Dxs firstc, ha, hb, pc, s;
    int a, b;
    float sum;
    firstc = (Dxs)malloc(sizeof(Lnode));
    firstc->coef = -1;
    firstc->expn = -1;
    firstc->next = NULL;
    pc = firstc;
 
    ha = firsta->next;
    hb = firstb->next;
    while(ha!= NULL && hb != NULL){
        a = ha->expn;
        b = hb->expn;
        if(a < b){
            //将a加入c中,移动a和c的指针
            pc->next = ha;
            pc = pc->next;
            ha = ha->next;
        }else if(a > b){
            //将b加入c中,移动b和c的指针
            pc->next = hb;
            pc = pc->next;
            hb = hb->next;
        }else{
            sum = ha->coef + hb->coef;
            if(sum != 0.0){
                //将和加入a中,再将a加入c中,移动c的指针
                ha->coef = sum;
                pc->next = ha;
                pc = pc->next;
            }else{
 
                //查找删除A中系数之和为0的那个节点
                s = firsta;
                while(s != ha){
                    s = s->next;
                }
                s->next = ha->next;
            }
            //ab已经处理完成,同时后移一位
            ha = ha->next;
            hb = hb->next;
        }
    }
 
    //将剩余部分加入c后面
    if(ha != NULL){
        pc->next = ha;
    }
 
    if(hb != NULL){
        pc->next = hb;
    }
    return firstc;
}
 
//遍历显示链表
void printDxs(Dxs h){
    while(h != NULL){
        printf("%0.2f*X^%d + ", h->coef, h->expn);
        h=h->next;
    }
    printf("\n");
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值