每日代码/C语言/2020/07/31

练习3-7 成绩转换 (15分)

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
输入格式:
输入在一行中给出一个整数的百分制成绩。

输出格式:
在一行中输出对应的五分制成绩。

输入样例:
90
输出样例:
A

#include
int main(void)
{
    int n,t;
    scanf("%d",&n);
    t=n/10;
    switch(t)
    {
        case 10 :
        case 9 :
            {
                printf("A");
                break;
            }
        case 8 :
            {
                printf("B");
                break;                
            }
        case 7 :
            {
                printf("C");
                break;                
            }
        case 6 :
            {
                printf("D");
                break;                
            }
        default :
            {
                printf("E");
                break;                
            }
    }
}

练习3-8 查询水果价格 (15分)

给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

首先在屏幕上显示以下菜单:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

输入格式:
输入在一行中给出用户连续输入的若干个编号。

输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

输入样例1:
3 -1 0 2
输出样例1:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00

#include
int main()
{
    int x;
    double a[5]={0,3.0,2.5,4.1,10.2};
    printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
    int count=0;
    while(1)
    {
        scanf("%d",&x);
        count++;
        if(!x)
            break;
        else if(x>=1&x<=4)
            printf("price = %.2lf\n",a[x]);
        else
            printf("price = 0.00\n");
        if(count>4)
            break;
    }
}

习题3-1 比较大小 (10分)

本题要求将输入的任意3个整数从小到大输出。

输入格式:
输入在一行中给出3个整数,其间以空格分隔。

输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:
4 2 8
输出样例:
2->4->8

#include
int main()
{
    int a[3],temp;
    for(int i=0;i<3;i++)
    {
        if(scanf("%d ",&a[i])){};
    }
    for(int x=0;x<2;x++)
    {
        for(int y=0;y<2-x;y++)
        {
            if(a[y]>a[y+1])
            {
                temp=a[y+1];
                a[y+1]=a[y];
                a[y]=temp;
            }
        }
    }
    printf("%d->%d->%d",a[0],a[1],a[2]);
    return 0;
}


习题3-2 高速公路超速处罚 (15分)

按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked

#include
int main()
{
    double m,n;
    scanf("%lf%lf",&m,&n);
    if(1.1*n>m)
        printf("OK");
    else if(m<n*1.5)
        printf("Exceed %.0lf%%. Ticket 200\n",(m-n)/n*100);
    else
        printf("Exceed %.0lf%%. License Revoked\n",(m-n)/n*100);
}

习题7-8 字符串转换成十进制整数 (15分)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:
输入在一行中给出一个以#结束的非空字符串。

输出格式:
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:
±P-xf4±1!#
输出样例:
-3905

#include
#include
int main()
{
	int i=0;
	char s[21],c,fuhao='+';
	while(1)
	{
		c=getchar();
		if(c=='#')
			break;
		else
		{
			if((c>='0'&c<='9')||(c>='A'&c<='F')||(c>='a'&c<='f'))
				{
					if(c>='a'&c<='f')
						c=c-32;
					s[i++]=c;
				}
			if(i<=1)
			{
				if(c=='-')
					fuhao=c;	
			}	
		}
	}
	long sum=0;
	int count=0;
        for(int j=i-1;j>=0;j--)
        {
            if(s[j]>='A'&s[j]<='F')
                sum+=pow(16,count)*(s[j]-55);
            else
                sum+=pow(16,count)*(s[j]-48);
            count++;
        }
        int f;
        if(fuhao=='+')
        	f=1;
        else
        	f=-1;
    printf("%d",f*sum); 
}

习题11-8 单链表结点删除 (20分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:

struct ListNode {
int data;
ListNode *next;
};
函数接口定义:
struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。

裁判测试程序样例:
#include
#include

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while § {
printf("%d “, p->data);
p = p->next;
}
printf(”\n");
}

int main()
{
int m;
struct ListNode *L = readlist();
scanf("%d", &m);
L = deletem(L, m);
printlist(L);

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
10 11 10 12 10 -1
10
输出样例:
11 12
作者
张泳
单位
浙江大学城市学院
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

struct ListNode *readlist()
{
    struct ListNode *head,*p,*r;
    int x;
    head=(struct ListNode *)malloc(sizeof(struct ListNode));
    head->next =NULL;
    r=head;
    scanf("%d",&x);
    while(x!=-1)
    {
    	p=(struct ListNode *)malloc(sizeof(struct ListNode));
    	p->data =x;
    	r->next =p;
    	r=p;
    	scanf("%d",&x);
	}
    r->next =NULL;
    return head ;
}
struct ListNode *deletem( struct ListNode *L, int m )
{
	struct ListNode *pre,*p;
	pre=L;
	p=pre->next ;
	while(p)
	{
		if(m==p->data )
		{
			p=p->next ;
			pre->next =p;
			continue;
		}
		else
		{
			pre=p;
			p=p->next ;	
		}
	}
	return L->next ;
}

你可能感兴趣的:(笔记,c语言,pta)