第八周编程总结
题目1:8-1 混合类型数据格式化输入 (5 分)
本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。
1).实验代码
#include<stdio.h>
int main()
{
int n;
float number1,number2;
char op;
scanf("%f %d %c %f",&number1,&n,&op,&number2);
printf("%c %d %.2f %.2f",op,n,number1,number2);
return 0;
}
2).设计思路
第一步 输入并定义变量
第二步 输出并定义变量
3)本题调试中遇到的问题及解决方案
没有遇到问题
4).运行结果截图
题目2:8-2 计算符号函数的值 (10 分)
对于任一整数n,符号函数sign(n)的定义如下:
请编写程序计算该函数对任一输入整数的值。
1).实验代码
#include<stdio.h>
int main()
{
int n,result;
scanf("%d",&n);
if(n == 0){
result = 0;
}
else if(n<0){
result = -1;
}
else{
result = 1;
}
printf("sign(%d) = %d",n,result);
return 0;
}
2).设计思路
第一步 整形输入变量n
第二步 使用if-else语句进行判断
第三步 输出结果
3)本题调试中遇到的问题及解决方案
If语句中的等号出现错误,==为等号,=为赋值语句
4).运行结果截图
题目3:8-3 计算个人所得税 (10 分)
假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:
- 当工资不超过1600时,税率为0;
- 当工资在区间(1600, 2500]时,税率为5%;
- 当工资在区间(2500, 3500]时,税率为10%;
- 当工资在区间(3500, 4500]时,税率为15%;
- 当工资超过4500时,税率为20%。
1).实验代码
#include<stdio.h>
int main()
{
double wage,rate;
scanf("%lf",&wage);
if(wage>=0){
if(wage<=1600){
rate = 0.00;
}
else if(wage>1600&&wage<=2500){
rate = 0.05*(wage-1600);
}
else if(wage>2500&&wage<=3500){
rate = 0.10*(wage-1600);
}
else if(wage>3500&&wage<=4500){
rate = 0.15*(wage-1600);
}
else if(wage>4500){
rate = 0.20*(wage-1600);
}
}
printf("%.2lf",rate);
return 0;
}
2).设计思路
第一步 使用双精度浮点型进行定义
第二步使用if-else语句进行对不同工资的判断
第三步进行个人税的输出
3)本题调试中遇到的问题及解决方案
无问题
4).运行结果截图
题目4:8-4 比较大小 (10 分)
本题要求将输入的任意3个整数从小到大输出。
1).实验代码
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
int e = 0;
if(a>b){
e = a;
a = b;
b = e;
}
if(a>c){
e = a;
a = c;
c = e;
}
if(b>c){
e = b;
b = c;
c = e;
}
printf("%d->%d->%d",a,b,c);
return 0;
}
2).设计思路
第一步 使用4个盒子,其中一个空盒子用来储存2者之间较大的
第二步使用if-else语句进行大小的比较,
第三步按顺序输出
3)本题调试中遇到的问题及解决方案
无
4).运行结果截图
题目5:8-5 到底是不是太胖了 (10 分)
据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。真实体重与标准体重误差在10%以内都是完美身材(即 | 真实体重 − 标准体重 | < 标准体重×10%)。已知市斤是公斤的两倍。现给定一群人的身高和实际体重,请你告诉他们是否太胖或太瘦了。
1).实验代码
#include<stdio.h>
int main()
{
int n;
double s,x,a,b;
scanf("%d",&n);
while(n--)
{
scanf("%lf%lf",&a,&b);
s=(a-100.0)*0.9;
x=b/2.0;
if(x>(s-s*0.1)&&x<(s+s*0.1))
printf("You are wan mei!\n");
if(x>=(s+s*0.1))
printf("You are tai pang le!\n");
if(x<=(s-s*0.1))
printf("You are tai shou le!\n");
}
}
2).设计思路
第一步 进行输入并定义变量
第二步有3种情况使用if-else语句进行不同的输出。
3)本题调试中遇到的问题及解决方案
If条件语句使用数学函数进行判断,导致部分正确
4).运行结果截图
题目6:8-6 高速公路超速处罚 (15 分)
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
1).实验代码
#include <stdio.h>
int main()
{
int speed,limit;
double a;
scanf("%d %d",&speed,&limit);
a=(double)(speed-limit)*100/(double)limit;
if(a<10||speed<limit)
printf("OK");
else if(a<50)
printf("Exceed %.0f%%. Ticket 200",a);
else
printf("Exceed %.0f%%. License Revoked",a);
return 0;
}
2).设计思路
第一步 输入并定义速度和限制速度
第二步求出罚款200元的条件
第三步使用if-else语句进行判断是否需要罚款
第四步 格式化输出
3)本题调试中遇到的问题及解决方案
满足一个速度小于10%是仅仅不够的,速度必须小于限制速度才是没有超速
4).运行结果截图
题目7:8-7 统计字符 (15 分)
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
1).实验代码
#include<stdio.h>
int main()
{
int letter=0,digit=0,blank=0,other=0;
int i;
char ch;
for(i=0;i<=9;i++){
scanf("%c",&ch);
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
letter++;
else if(ch>='0'&&ch<='9')
digit++;
else if(ch==' '||ch=='\n')
blank++;
else
other++;
}
scanf("%c",&ch);
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}
2).设计思路
第一步 进行格式化输入并定义储存变量的字符
第二步判断是否为字符,数字等,如果是并进行累加
第三步格式化输出
3)本题调试中遇到的问题及解决方案
空格和回车的判断不熟悉,查阅书籍可知
4).运行结果截图
题目8:8-8 统计学生平均成绩与及格人数 (15 分)
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
1).实验代码
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,grade;
int count;
double sum,ave;
scanf("%d",&n);
count=0;
sum=0.0;
for(int i=0;i<n;i++){
scanf("%d",&grade);
sum+=grade;
if(grade>=60) count+=1;
}
ave = n!=0? sum/n : 0;
printf("average = %.1lf\n",ave);
printf("count = %d",count);
return 0;
}
2).设计思路
第一步 调用数学函数使用头文件
第二步 输入并定义变量
第三步使用if-else语句进行判断是否及格,是,则进行累加
第四步 求出平均数,并进行格式化输出
3)本题调试中遇到的问题及解决方案
需注意当n=0时不能进行平均值的运算
4).运行结果截图
题目:8-9 输出闰年 (15 分)
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
代码:
#include<stdio.h>
int main()
{
int year, i, count=0;
scanf("%d", &year);
if(year<=2000||year>2100)
printf("Invalid year!\n");
else{
for(i=2001; i<=year; i++){
if(i%4 == 0&&i%100!=0||i%400 == 0){
printf("%d\n", i);
count++;
}
}
if(count == 0)
printf("None\n");
}
return 0;
}
2).设计思路
第一步 格式化输入年份
第二步 判断是否满足闰年的条件,使用if-elae语句
第三步 格式化输出变量
3)本题调试中遇到的问题及解决方案
If条件句的逻辑关系不明确,逻辑或和逻辑与的符号混淆
查询书籍
4).运行结果截图