资讯详情

C语言刷题——lesson4

1. BC23-时间转换

给定秒数seconds (0< seconds < 将秒转化为小时、分钟和秒。

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

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

3661 

1 1 1 

#include <stdio.h> int main() { 
          int sec = 0;  scanf("%d", &sec);  int h = sec / 60 / 60;//小时  int m = sec / 60 % 60;//分钟  int s = sec % 60;//秒  printf("%d %d %d\n", h, m, s);  return 0; } 

计算相应的数字,并按格式打印。

2. BC24-计算总分和平均分

依次输入学生的三科成绩,在屏幕上输出学生的总成绩和平均成绩。

一行,3科目成绩,成绩用空间隔开。 

一行,总分和平均分(小数点后保留两位),用空间隔开。 

79.5 80.0 98.0 

257.50 85.83 

#include <stdio.h> int main() { 
          int i = 0; float sum = 0.0; float avg = 0.0; float score = 0.0; for (i = 0; i < 3; i++) { 
          scanf("%f", &score); sum += score; } printf("%.2f %.2f\n", sum, sum / 3.0); return 0; } 

  1. 本题在接收数据的同时就可以计算分数的总和,不一定非要等数据全部接收完毕。

  2. 按照格式打印就行。

3. BC30-kiki和酸奶

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

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

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

8 5 16

4

#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 > 0)
			printf("%d\n", n - m / h - 1);
		else
			printf("%d\n", n - m / h);
	}

	return 0;
}

  1. 注意多组输入

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

4. BC31-发布信息

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

I lost my cellphone!

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

本题是个入门题目,直接按照要求输出结果就是了。

5. BC32-输出学生信息

学生信息管理系统是学校教学管理的重要工具,现有一名学生基本信息如下:姓名-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; 
}

这是一个简单题,按照题目要求的格式输出就行了。

6. BC33-计算平均成绩

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

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

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

75 80 43 67 96

72.2

#include <stdio.h>
int main()
{ 
        
    int i = 0;
    int sum = 0;
    int input = 0;
    for (i = 0; i < 5; i++)
    { 
        
        scanf("%d", &input);
        sum += input;
    }
    printf("%.1f\n", sum / 5.0);
    return 0;
}

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

7. BC34-进制A+B

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

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

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

0x12 05

23

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

#include <stdio.h>
int main()
{ 
        
	int a = 0;
	int b = 0;
	scanf("%x %o", &a, &b);
	int sum = a + b;
	printf("%d\n", sum);
	return 0;
}

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

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

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

8. BC37-网购

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

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

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

1000.0 11 11 1

650.00

999.8 12 12 0

799.84

66.6 11 11 1

0.00

//代码1
#include <stdio.h>
int main()
{ 
        
	float price = 0.0;//价格
	int m = 0;
	int d = 0;
	int flag = 0;//是否有优惠券
	scanf("%f%d%d%d", &price, &m, &d, &flag);
	if (m == 11 && d == 11)
	{ 
        
		price *= 0.7;
		if (flag == 1)
			price -= 50;
	}
	else if (m == 12 && d == 12)
	{ 
        
		price *= 0.8;
		if (flag == 1)
			price -= 50;
	}
	if (price < 0.0)
		price = 0.0;
	printf("%.2f\n", price);
	return 0;
}
//代码2
#include <stdio.h>
int main()
{ 
        
	float price = 0.0;//价格
	int m = 0;
	int d = 0;
	int flag = 0;//是否有优惠券
	float cut = 0;//折扣
	scanf("%f%d%d%d", &price, &m, &d, &flag);
	if (m == 11 && d == 11)
	{ 
        
		cut = 0.7;
	}
	else if (m == 12 && d == 12)
	{ 
        
		cut = 0.8;
	}
	price = price * cut - flag * 50.0;
	if (price < 0.0)
		price = 0.0;
	printf("%.2f\n", price);
	return 0;
}

  1. 本地理解好题目意思,然后再上计算机

  2. 注意抵扣完后价格小于0,只能按照0计算

  3. 按照格式输出

9. BC39-争夺前五名

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

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

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

6
99 45 78 67 72 88

99 88 78 72 67

//代码1
#include <stdio.h>
int cmp_int(const void* e1, const void* e2) 
{ 
        
    return *(int*)e1 - *(int*)e2;
}
int main()
{ 
        
    int n = 0;
    int score[40] = { 
         0 };
    scanf("%d", &n);
    int i = 0;
    for (i = 0; i < n; i++)
    { 
        
        scanf("%d", &score[i]);
    }
    //对所有数字排序
    int j = 0;
    //使用库函数排序
    qsort(score, n, 4, cmp_int);
    for (i = 0; i < 5; i++)
    { 
        
        printf("%d ", score[--n]);
    }
    return 0;
}
//代码2
#include <stdio.h>
int main()
{ 
        
    int n = 0;//个数
    int score[40] = { 
         0 };//存放成绩
    scanf("%d", &n);
    int i = 0;
    for (i = 0; i < n; i++)
    { 
        
        scanf("%d", &score[i]);
    }
    //对所有数字排序-冒泡排序
    int j = 0;
    for (i = 0; i < n; i++)
    { 
        
        for (j = 0; j < n - i - 1; j++)
        { 
        
            if (score[j] < score[j + 1])
            { 
        
                int tmp = score[j];
                score[j] = score[j + 1];
                score[j + 1] = tmp;
            }
        }
    }

    for (i = 0; i < 5; i++)
    { 
        
        printf("%d ", score[i]);
    }

    return 0;
}

  1. 要学会使用C语言库函数提供qsort函数。

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

10. BC40-竞选社长

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

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

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

ABBABBAAB0

B

//代码1
#include <stdio.h>
int main()
{ 
        
	char arr[100] = { 
         0 };
	gets(arr);
	int i = 0;
	int count_a = 0;
	int count_b = 0;
	while (arr[i] != '0')
	{ 
        
		if (arr[i] == 'A')
		{ 
        
			count_a++;
		}
		else if (arr[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;
}
//代码2
#include <stdio.h>
int main()
{ 
        
	char arr[100] = { 
         0 };
	gets(arr);
	int i = 0;
	int flag = 0;
	while (arr[i] != '0')
	{ 
        
		if (arr[i] == 'A')
		{ 
        
			flag++;
		}
		else if (arr[i] == 'B')
		{ 
        
			flag--;
		}
		i++;
	}
	if (flag > 0)
		printf("A");
	else if (flag < 0)
		printf("B");
	else
		printf("E");
	return 0;
}
//代码3
#include <stdio.h>
int main()
{ 
        
	char arr[100] = { 
         0 };
	int ch = 0;
	int flag = 0;
	//如果getchar获取了
	while (((ch = getchar()) != '0') && ch != EOF)
	{ 
        
		if (ch == 'A')
		{ 
        
			flag++;
		}
		else if (ch == 'B')
		{ 
        
			flag--;
		}
	}
	if (flag > 0)
		printf("A");
	else if (flag < 0)
		printf("B");
	else
		printf("E");
	return 0;
}

  1. 本题有很多解法。

  2. 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者’0’)。

  3. 剩余的工作就是统计个数后,然后根据情况按照格式输出。

标签: bc40no光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台