C语言编程入门之刷题篇(C语言130题)(4)

(题目标题可以直接转题目链接)

BC23 时间转换


描述

给定秒数 seconds ,把秒转化成小时、分钟和秒。

数据范围: 0<seconds<100000000

输入描述:

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

输出描述:

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

示例1

输入:3661

输出:1 1 1

参考代码:

#include 

int main() {
    int a=0;
    scanf("%d",&a);
    int h=0;
    int m=0;
    int s=0;
    h=a/3600;
    m=a%3600/60;
    s=a%3600%60;
    printf("%d %d %d ",h,m,s);
    return 0;
}

答案解析: 计算好对应的数字,按照格式打印就行。

BC24 总成绩和平均分计算


描述

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

输入描述:

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

输出描述:

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

示例1

输入:79.5 80.0 98.0

输出:257.50 85.83

参考代码:

#include 

int main() {
   float n=0.0;
   int i=0;
   float sum=0.0;
   for (i=0; i<3;i++) {
   scanf("%f",&n);
   sum+=n;
   }
   printf("%.2f %.2f",sum,sum/3);
    return 0;
}

答案解析: 1. 本题在接收数据的同时就可以计算分数的总和,不一定非要等数据全部接收完毕。 2. 按照格式打印就行。

BC30 KiKi和酸奶

描述

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

输入描述:

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

输出描述:

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

示例1

输入:8 5 16

输出:4

参考代码:

#include 

int main() {
    int m=0;
    int n=0;
    int h=0;
    int sum=0;
    scanf("%d%d%d",&n,&h,&m);
    if(m<=n*h)
{
if (m%h>0) {
sum=n-(m/h)-1;
}
else {
sum=n-(m/h);
}
}
printf("%d",sum);
    return 0;
}

答案解析: 1. 注意多组输入 2. 如果h分钟喝一瓶酸奶,那么m分钟喝汽水的瓶数就是h/m瓶,但是如果m%h有余数,就说明又打 开了一瓶,只是没来得及喝完,那么位打开的就少 一瓶

BC31 发布信息


描述

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

输入描述:

输出描述:

I lost my cellphone!

参考代码:

#include 

int main() {
    printf("I lost my cellphone!");
    return 0;
}

BC32 输出学生信息


描述

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

输入描述:

输出描述:

输出分为三行,分别为标题行,分隔行,信息行。

第一行,标题行,每个标题之间间隔4个空格。

第二行,分隔行,一共21个减号"-"。

第三行,信息行,每列输出信息和标题首字母对齐。输出样例如下:

Name Age Gender

---------------------

Jack 18 man

参考代码:

#include 

int main() {
    printf("Name    Age    Gender\n");
    printf("---------------------\n");
    printf("Jack    18     man\n");
    return 0;
}

BC33 计算平均成绩


描述

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

输入描述:

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

输出描述:

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

示例1

输入:75 80 43 67 96

输出:72.2

参考代码:

#include 

int main() {
    float n=0;
    float sum=0;
    for(int i=0;i<5;i++)
    {
    scanf("%f",&n);
    sum+=n;
    }
    printf("%.1f",sum/5);
    return 0;
}

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

BC34 进制A+B


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

输入描述:

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

输出描述:

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

示例1

输入:0x12 05

输出:23

参考代码:

#include 
int main()
{
int a=0;
int b=0;
scanf("%x %o",&a, &b);
printf("%d",a+b);
    return 0;
}

答案解析: 1. 首先要理解十进制、十六进制、八进制只是一种数据的表示形式,不是数据的存储形式。 2. 不同格式的数据的输出在C语言中有不同的格式指定,比如:%x是十六进制格式,%o就是八进制 格式。 3. 不同进制的数据存放都整形变量中都是整形值,直接计算就行,计算交给计算机。

BC37 网购


描述

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

数据范围:衣服价格满足 1≤val≤100000

输入描述:

一行,四个数字,第一个数表示小明看中的衣服价格,第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。 注:输入日期保证只有“双11”和“双12”。

输出描述:

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

示例1

输入:1000.0 11 11 1

输出:650.00

参考代码:

#include 
int main()
{
float price=0;
  int month=0;
  int day=0;
  int flag=0;//用来判断是否需要优惠卷减50元
  float cut=0;
scanf("%f%d%d%d",&price, &month, &day, &flag);
if ((month==11)&&(day==11))
   {
 cut=0.7;
  }
 else if ((month==12)&&(day==12))
  {
 cut=0.8;
 }
price=price*cut-50.0*flag;//如果输入flag为1则减去50元如果为0则优惠卷没用减去0元。
  if (price<0)//如过果价格小于50元那么优惠后价格为0元商家不会倒贴。
   {
  price=0;
  }
 printf("%.2f",price);  
 return 0;
}

答案解析:

1. 本地理解好题目意思,然后计算机就可以 2. 注意抵扣完后价格小于0,只能按照0计算 3. 按照格式输

BC39 争夺前五名


描述

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

数据范围: 5≤n≤50 ,成绩采取百分制并不会出现负数

输入描述:

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

输出描述:

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

示例1

输入:

6

99 45 78 67 72 88

输出:

99 88 78 72 67

参考代码:

#include 
int main() {
   int n=0;
   scanf("%d",&n);
   int i=0;
   int arr[50]={0};

   for (i=0;i

答案解析: 1. 要学会使用C语言库函数提供qsort函数。 2. 或者自己实现一个简单的整形数组排序代码。

(本道题用到了冒泡排序(或也可用qsort函数),后期会专门出一期文章来解释两种排序)

BC40 竞选社长


描述

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

输入描述:

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

输出描述:

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

示例1

输入:ABBABBAAB0

输出:B

参考代码:

#include 

int main() {
   char ar[20]={0};
   int i=0;
   gets(ar);
   int count=0;//定义一个count来比较A B的数量
while(ar[i]!='0')
{
   
  if (ar[i]=='A') {   
  count++;//若输入的A则count++
  }
  else if (ar[i]=='B') {
  count--;//若输入的为B则count--
  }
  i++;
}
  if (count>0) {//最后统计count若>0则A的数量大于B的数量,反正B大于
  printf("A");
  }
  else if (count<0) {
  printf("B");
  }
  else {
  printf("E");//若count=0则说明A B的票数一样
  }
    return 0;
}

答案解析: 1. 本题有很多解法。 2. 主要就是读取输入数据的问题要解决好,输入有2个结束条件(遇到读取结束EOF,或者'0')。 3. 剩余的工作就是统计个数后,然后根据情况按照格式输出。

下一期 log in…………


文章主要参考比特就业课-鹏哥c语言训练营,文章内容及排版格式也参考比特课程的课件;

你可能感兴趣的:(c语言,c++,开发语言)