C习题集26-35

文章提供了一系列编程题目,包括将秒数转化为小时、分钟和秒,计算学生的总成绩和平均分,模拟KiKi喝酸奶的情景,以及处理发布会信息、学生信息输出、计算平均成绩、进制加法、网购折扣计算、成绩排名和社团竞选等。每道题目都给出了示例输入输出和C语言的解题代码。
摘要由CSDN通过智能技术生成

目录

26.时间转换

27.总成绩和平均分计算

28.KiKi喝酸奶

29.发布会信息

30.输出学生信息

31.计算平均成绩

32.进制A+B

33.网购

34.争夺前五名

35.竞选社长


26.时间转换

题目描述:

        给定秒数 seconds ,把秒转化成小时、分钟和秒。数据范围:0<seconds<100000000 。

输入描述:

一行,包括一个整数,即给定的秒数。

示例输入:3661

输出描述:

一行,包含三个整数,依次为输入整数对应的小时数、分钟
数和秒数(可能为零),中间用一个空格隔开。

示例输出:1 1 1

解析:

        本题只需要计算好对应的数字,并按照格式打印就好啦。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int seconds = 0;
	int h = 0;
	int m = 0;
	int s = 0;
	//输入
	scanf("%d", &seconds);
	//计算
	h = seconds / 60 / 60;
	m = seconds / 60 % 60;
	s = seconds % 60;
	//输出
	printf("%d %d %d", h, m, s);
	return 0;
}

27.总成绩和平均分计算

题目描述:

        依次输入一个学生的3科成绩,在屏幕上输出该学生的总成绩以及平均成绩。

输入描述:

一行,3科成绩,成绩之间用一个空格隔开。

示例输入:79.5 80.0 98.0

输出描述:

一行,总成绩和平均成绩(小数点后保留两位),用一个空格隔开。

示例输出:257.50 85.83

解析:

        本题在接受数据的同时就可以计算总分,不一定要等数据被全部接受完毕。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{		
	double scores[3] = { 0.0 };//三科的成绩
	double sum = 0.0;
	double avg = 0.0;
	//输入并计算
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		scanf("%lf", &scores[i]);
		sum += scores[i];
	}
	avg = sum / 3;
	//输出
	printf("%.2lf %.2lf", sum, avg);
	return 0;
}

28.KiKi喝酸奶

题目描述:

        BoBo买了一箱酸奶,里面有n盒未打开的酸奶,KiKi喜欢喝酸奶,第一时间发现了酸奶。KiKi每h分钟能喝光一盒酸奶,并且KiKi在喝光一盒酸奶之前不会喝另一个,那么经过m分钟后还有多少盒未打开的酸奶?

输入描述:

多组输入,每组输入仅一行,包括n,h和m(均为整数)。输入数据保证m <= n * h。

示例输入:8 5 16

输出描述:

针对每组输入,输出也仅一行,剩下的未打开的酸奶盒数。

示例输出:4

解析:

        1.注意多组输入。

        2.如果h分钟喝完一瓶酸奶,那么m分钟喝酸奶的瓶数就是h/m瓶,但是如果m%n有余数,就说明又打开了一瓶,只是没来得及喝完,那么未打开的就少一瓶。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int n = 0;
	int h = 0;
	int m = 0;
	//输入
	while (scanf("%d %d %d", &n, &h, &m) != EOF)
	{
		if (m % h)
		{
			printf("%d\n", n - ((m / h)+1));
		}
		else
		{
			printf("%d\n",n - m / h);
		}
	}
	return 0;
}

29.发布会信息

题目描述:

        你的手机丢了,在屏幕上输出信息告诉大家。

输入描述:

输出描述:

I lost my cellphone!

解析:

        本题是入门题目,直接按照要求输入就行。

代码:

#include<stdio.h>
int main()
{
	printf("I lost my cellphone!");
	return 0;
}

30.输出学生信息

题目描述:

        学生信息管理系统是学校教学管理的重要工具,现有一名学生基本信息如下:姓名-Jack,年龄-18,性别-Man,请按照输出样例的格式输出该学生的信息。

输入描述:

输出描述:

输出分为三行,分别为标题行,分隔行,信息行。
第一行,标题行,每个标题之间间隔4个空格。
第二行,分隔行,一共21个减号"-"。
第三行,信息行,每列输出信息和标题首字母对齐。输出样例如下:
Name    Age    Gender
---------------------
Jack    18     man

解析:

        本题也是入门题目,直接按照要求输入就行。

代码:

#include <stdio.h>
int main() {
    printf("Name    Age    Gender\n");
    printf("---------------------\n");
    printf("Jack    18     man   \n");
    return 0;
}

31.计算平均成绩

题目描述:

        从键盘输入5个学生的成绩(整数),求他们的平均成绩(浮点数,保留一位小数)。

输入描述:

一行,连续输入5个整数(范围0~100),用空格分隔。

示例输入:75 80 43 67 96

输出描述:

一行,输出5个数的平均数(保留一位小数)。

示例输出:72.2

解析:

        本题在获取输入数据的同时,计算成绩总和,然后求平均值,按照格式输出就行。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{	
	int scores[5] = { 0 };
	int i = 0;
	int sum = 0;
	//输入并计算
	for (i = 0; i < 5; i++)
	{
		scanf("%d", &scores[i]);
		sum += scores[i];
	}
	//输出
	printf("%.1lf", sum / 5.0);
	return 0;
}

32.进制A+B

题目描述:

        输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-2e31~2e31-1)。

输入描述:

一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。

示例输入:0x12 05

十六进制Hexadecimal一般以0x开头,例如0xFF。八进制Octal,一般以0开头,例如07

输出描述:

一行,a+b的十进制结果。

示例输出:23

解析:

        1.首先要理解十进制、十六进制、八进制只是一种数据的表现形式,不是数据的存储形式。

        2.不同格式的数据输出在c语言中有不同的格式指定:%x是十六进制格式,%o就是八进制。

        3.不同进制的数据存放在整型变量中都是整型值,直接计算就行。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{	
	int a = 0;
	int b = 0;
	int sum = 0;
	//输入
	scanf("%x %o", &a, &b);
	//计算
	sum = a + b;
	//输出
	printf("%d", sum);
	return 0;
}

33.网购

题目描述:
        KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。

输入描述:

一行,四个数字,第一个数表示小明看中的衣服价格,
第二和第三个整数分别表示当天的月份、当天的日期、
第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。

示例输入:1000.0 11 11 1

输出描述:

一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)

示例输出:650.00

解析:

        本题需要注意抵扣完后价格小于0,只能按0计算,因为题目上面说明了商家不会倒贴你money!!!

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	double price = 0.0;//价格
	int month = 0;
	int day = 0;
	int flag = 0;//是否有优惠券
	double cut = 1.0;//折扣
	//输入
	scanf("%lf %d %d %d", &price, &month, &day, &flag);
	//判断
	if (month == 11 && day == 11)
	{
		cut = 0.7;
		if (flag == 1)
		{
			printf("%.2lf\n", price * cut - 50);
		}
		else
		{
			printf("%.2lf\n", price * cut);
		}
	}
	else if (month == 12 && day == 12)
	{
		cut = 0.8;
		if (flag == 1)
		{
			printf("%.2lf\n", price * cut - 50);
		}
		else
		{
			printf("%.2lf\n", price * cut);
		}
	}
	else
	{
		printf("%.2lf\n", price);
	}
	return 0;
}

34.争夺前五名

题目描述:

        期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入n个学生成绩(不超过40个),输出每组排在前五高的成绩。

输入描述:

两行,第一行输入一个整数,表示n个学生(>=5),
第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。

示例输入:6
         99 45 78 67 72 88

输出描述:

一行,输出成绩最高的前五个,用空格分隔

示例输出:99 88 78 72 67

解析:

        1.学会使用c语言函数库提供的sqrt函数。

        2.或者自己实现一个简易的整型数组排序代码。

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<stdlib.h>

int cmp_int(const void* e1, const void* e2);//函数声明

int main()
{
	int n = 0;//个数
	int scores[40] = { 0 };//成绩
	//输入
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &scores[i]);
	}
	//排序 - 升序
	
	//方法一
	//自己实现排序 - 冒泡排序 - 两两相邻的元素比较,并交换
	for (i = 0; i < n; i++)//趟数
	{
		//一趟冒泡排序要进行多少对元素的比较
		int j = 0;
		for (j = 0; j < n - i - 1; j++)
		{
			if (scores[j] > scores[j + 1])
			{
				int temp = scores[j];
				scores[j] = scores[j + 1];
				scores[j + 1] = temp;
			}
		}
	}

	//方法二
	//使用库函数qsort
	/*	void qsort(void* base,  数组名
		size_t num,    元素个数
		size_t width,    每个元素所占字节
		int(__cdecl * compare)(const void* elem1, const void* elem2));    函数指针
			
			Return Value Description 
									<0  elem1 less than elem2 
									0   elem1 equivalent to elem2 
									>0  elem1 greater than elem2 

	*/
				
					
	qsort(scores, n, sizeof(int), cmp_int);
	//升序 - 输出后5个成绩
	for (i = n - 1; i >= n - 5; i--)
	{
		printf("%d ", scores[i]);
	}
	return 0;
}

int cmp_int(const void* e1, const void* e2)
{
	return (*(int*)e1 - *(int*)e2);
}

35.竞选社长

题目描述:

        假设你们社团要竞选社长,有两名候选人分别是A和B,社团每名同学必须并且只能投一票,最终得票多的人为社长。

输入描述:

一行,字符序列,包含A或B,输入以字符0结束。

输入示例:ABBABBAAB0

输出描述:

一行,一个字符,A或B或E,输出A表示A得票数多,
输出B表示B得票数多,输出E表示二人得票数相等。

示例输出:B

解析:

       第二种写法要注意while语句有2个结束条件 :EOF和'0'

代码:

//利用gets()
#include<stdio.h>
int main()
{
	char buf[100] = { 0 };
	//输入
	gets(buf);//Get a line from the stdin stream.
	//统计
	int count_a = 0;
	int count_b = 0;
	int i = 0;
	while (buf[i] != '0')
	{
		if (buf[i] == 'A')
			count_a++;
		if (buf[i] == 'B')
			count_b++;
		i++;
	}
	//输出
	if (count_a > count_b)
	{
		printf("A");
	}
	else if (count_a < count_b)
	{
		printf("B");
	}
	else
	{
		printf("E");
	}
	return 0;
}

//利用getchar()
#include<stdio.h>
int main()
{
	int ch = 0;
	int flag = 0;
	while (((ch = getchar()) != '0') && ((ch = getchar()) != EOF))
	{
		if (ch = 'A')
			flag++;
		if (ch == 'B')
			flag--;
	}
	if(flag>0)
		printf("A");
	else if (flag < 0)
		printf("B");
	else
		printf("E");
	return 0;
}

本期分享结束啦,拜拜!

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值