这周学的是变量类型,输入形式,以及输出形式。
整形,浮点型(实数)。float 对应%.xf(保留几位小数),int 对应%(0)xd对应保留几位整数,如果有0的话以右边对齐,如果位置上没有数字,补上0。double 对应%.xlf(区别与float,更为精确。)
实例:温度转化(借pta的实例1)
7-1 计算摄氏温度 (5 分)
给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出一个华氏温度。
输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。
输入样例:
150
输出样例:
Celsius = 65
下面是代码:
#include <stdio.h>
int main()
{
int F,C; /*定义整形温度和华氏度,重中之重*/
scanf("%d",&F); /*输入函数,本周的热点*/
C = 5 * (F-32) / 9; /*转化方程*/
printf("Celsius = %d",C);
return 0;
}
1.最小的存储单位:是字节byte不是比特bit(B)
2.下面这个是具体的数值区别
3. = 是赋值运算符
4. 类型转换运算符
5. scanf输入函数务必加上&(已经好几次未加上)
6. 幂函数(几次方)
例如5的三次方
pow(5,3)并且务必在头文件加上#include <math.h>
下面这个题需要注意类型统一,如下:
7-4 计算存款利息 (10 分)
本题目要求计算存款利息,计算公式为interest=money×(1+rate)year−money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。
输入格式:
输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。
输出格式:
在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。
输入样例:
1000 3 0.025
输出样例:
interest = 76.89
代码如下:
#include <stdio.h>
#include <math.h> /*因为下面有几次方的运算所以要加上*/
int main()
{
double year,money,rate,interest; /*题目意思是实数所以用double*/
scanf("%lf %lf %lf",&money,&year,&rate); /*这里必须与上面的double统一*/
interest = money * pow((1+rate),year) - money;
printf("interest = %.2lf",interest);
return 0;
}
再往下一道题:
7-5 倒序4位数 (10 分)
输入一个4位的正整数,输出它的倒序数。
输入样例:
1200
输出样例:
0021
输入样例:
1234
输出样例:
4321
代码如下:
#include <stdio.h>
int main()
{
int A,B,C,D,E;
scanf("%d",&A);
B= A/1000;
C= (A-1000*B)/100;
D= (A-1000*B-C*100)/10;
E= A-1000*B-C*100-D*10; /*这里用的是一种傻瓜方法求每一位上的数字再倒序输出*/
printf("%d%01d%01d%01d",E,D,C,B);
return 0;
}
下面这个题我其实是搞不太清楚的,因为我用的是if函数来分情况,按照得出的错误来看四个测试点我只对了两个
题目如下:
7-7 然后是几点 (15 分)
有时候人们用四位数字表示一个时间,比如 1106
表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530
;0 点 30 分表示为 030
。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530
;0 点 30 分表示为 030
。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
下面是在网上搜到的答案:
#include<stdio.h>
int main()
{
int a,b,hour,min,nowhour,nowmin;
scanf("%d%d",&a,&b); /*首先输入*/
hour =a/100;
min =a%100; /*将得到之前的时刻换算成小时和分钟*/
if(b>0) /*if函数进行分类(分成流逝分钟数为正和为负的情况)
{
nowhour =(min+b)/60; /*现在时刻两者相加*/
nowmin =(min+b)%60;
printf("%02d%02d",hour+nowhour,nowmin); /*以右对齐的形式输出*/
}
else /*流逝的分钟小于零的情况*/
{
hour=hour-(-b)/60-1; /*将流逝小时换成正的(最后还要减一)判断是否为60*/
nowmin=(60-(-b)%60+min)%60; /*现在分钟算法*/
hour=hour+(60-(-b)%60+min)/60; /*现在小时算法*/
printf("%d%02d",hour,nowmin);
}
return 0;
}
我自己的代码:
#include <stdio.h>
#include <math.h>
int main()
{
int Q,L,H,h,m,M;
scanf("%d %d",&Q,&L);
H = L/60;
M = L - H * 60;
h = Q / 100;
m = Q - h * 100;
if(m+M>=60){
printf("%d%2d",h+H+1,m+M-60);
}
if(m+M<0){
printf("%d%2d",h+H-1,m+M+60);
}
else{
printf("%d%2d",h+H,m+M);
}
return 0;
}
上面是我输出的错误
大佬们可以批评指正!