版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/juejing2271/article/details/79854773 </div>
<div id="content_views" class="markdown_views">
<!-- flowchart 箭头图标 勿删 -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path></svg>
<p>先给个<a href="https://blog.csdn.net/juejing2271/article/details/79463398" rel="nofollow" target="_blank">哈工大C语言公开课练兵编程(一)传送门</a> <br>
PS:由于平常没时间做,一般三周更新一次,希望大家原谅。
第四周
1 检测用户错误输入(4分)
题目内容:根据scanf()的返回值判断scanf()是否成功读入了指定的数据项数,使程序在用户输入123a时,能输出如下运行结果:
123a↙
Input error!
输入格式:
“%d %d”
输出格式:
如果成功读入指定的数据项数,输出格式为:”a = %d, b = %d\n” (注意:等号的两边各有一个空格)
输入非法数据,输出格式为:”Input error!”
#include<stdio.h>
int main(){
int a,b,x;
x=scanf("%d %d",&a,&b);
if(x==2) printf("a = %d, b = %d\n",a,b);
else printf("Input error!");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2 闰年判断(6分)
题目内容:从键盘任意输入一个公元年份(大于等于1),判断它是否是闰年。若是闰年输出“Yes”,否则输出“No”。要求对输入数据进行合法性判断。
提示:
已知符合下列条件之一者是闰年:
(1)能被4整除,但不能被100整除;
(2)能被400整除。
示例:
示例1:
2015↙
No
示例2:
2016↙
Yes
示例3:
-123↙
Input error!
例4:
a↙
Input error!
输入格式:
“%d”
输出格式:
是闰年,输出:”Yes\n”
不是闰年,输出:”No\n”
输入数据不合法,输出:”Input error!\n”
#include<stdio.h>
int main(){
int year,x;
x=scanf("%d",&year);
if(x==1&&year>0){
if(year%400==0||year%4==0&&year%100!=0) printf("Yes\n");
else printf("No\n");
}
else printf("Input error!");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3 程序改错v1.0(7分)
题目内容:下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,否则将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。
//需要修改的程序
#include<stdio.h>
int main()
{
int score;
char grade;
printf("Please input score:");
scanf("%d", &score);
if (score < 0 || score > 100)
printf("Input error!\n");
else if (score >= 90)
grade = 'A’;
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'E';
printf("grade:%c\n", grade);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
示例:
示例1:
Please input score:
-1↙
Input error!
示例2:
Please input score:
95↙
grade: A
示例3:
Please input score:
82↙
grade: B
示例4:
Please input score:
72↙
grade: C
示例5:
Please input score:
66↙
grade: D
示例6:
Please input score:
32↙
grade: E
示例7:
Please input score:
127↙
Input error!
输入输出:
输入提示信息:”Please input score:\n”
输入格式: “%d”
输出格式:
用户输入存在错误时,输出提示信息:”Input error!\n”
输出格式:”grade: %c\n” (注意:%c前面有一个空格)
//AC代码
#include<stdio.h>
int main()
{
int score,x;
char grade;
printf("Please input score:\n");
x=scanf("%d", &score);
if (score < 0 || score > 100 || x!=1){
printf("Input error!\n");
return 0;
}
else if (score >= 90)
grade = 'A';
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'E';
printf("grade: %c\n", grade);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
4 字符类型判断(4分)
题目内容:从键盘键入任意一个字符,判断该字符是英文字母(不区分大、小写)、数字字符还是其它字符。
若键入字母,则屏幕显示 It is an English character.;若键入数字则屏幕显示It is a digit character. ;若输入其它字符,则屏幕显示:It is other character.
示例:
程序的运行示例1:
Input simple:
b↙
It is an English character.
程序的运行示例2:
Input simple:
6↙
It is a digit character.
程序的运行示例3:
Input simple:
*↙
It is other character.
程序的运行示例4:
Input simple:
A↙
It is an English character.
输入输出:
输入信息提示:”Input simple:\n”
输入格式: “%c”
输出格式:
英文字符的输出格式:”It is an English character.\n”
数字的输出格式:”It is a digit character.\n”
其它字符的输出格式:”It is other character.\n”
#include<stdio.h>
int main(){
char ch;
printf("Input simple:\n");
scanf("%c",&ch);
if(ch<='z'&&ch>='a'||ch<='Z'&&ch>='A')
printf("It is an English character.\n");
else if(ch<='9'&&ch>='0')
printf("It is a digit character.\n");
else printf("It is other character.\n");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
5 快递费用计算(7分)
题目内容:上海市的某快递公司根据投送目的地距离公司的远近,将全国划分成5个区域:
0区 | 1区 | 2区 | 3区 | 4区 |
---|---|---|---|---|
同城 | 临近两省 | 1500公里(含)以内 | 1500——2500公里 | 2500公里以上 |
上海 | 江苏,浙江 | 北京,天津,河北,辽宁,河南,安微,陕西,湖北,江西,湖南,福建,广东,山西。 | 吉林,辽宁,甘肃,四川,重庆,青海,广西,云南,海南,内蒙古,黑龙江,贵州。 | 新疆,西藏。 |
快递费按邮件重量计算,由起重费用、续重费用两部分构成:
(1) 起重(首重)1公斤按起重资费计算(不足1公斤,按1公斤计算),超过首重的重量,按公斤(不足1公斤,按1公斤计算)收取续重费;
(2) 同城起重资费10元,续重3元/公斤;
(3) 寄往1区(江浙两省)的邮件,起重资费10元,续重4元;
(4) 寄往其他地区的邮件,起重资费统一为15元。而续重部分,不同区域价格不同:2区的续重5元/公斤,3区的续重6.5元/公斤,4区的续重10元/公斤。
编写程序,从键盘输入邮件的目的区域编码和重量,计算并输出运费,计算结果保留2位小数。程序中所有浮点数的数据类型均为float。
提示:续重部分不足一公斤,按1公斤计算。因此,如包裹重量2.3公斤:1公斤算起重,剩余的1.3公斤算续重,不足1公斤按1公斤计算,1.3公斤折合续重为2公斤。如果重量应大于0、区域编号不能超出0-4的范围。
示例:
程序运行结果示例1:
4,4.5↙
Price: 55.00
程序运行结果示例2:
5,3.2↙
Error in Area
Price: 0.00
输入输出:
输入格式:
用逗号分隔的两个数字,第一个表示区域、第二个是重量:”%d,%f”
输出格式:
价格的输出格式:”Price: %5.2f\n”
区域错误的提示信息:”Error in Area\n”
#include<stdio.h>
int main(){
int area;
float weight,price;
scanf("%d,%f",&area,&weight);
if(area<0||area>4||weight<=0)
printf("Error in Area\n");
else{
weight=(int)weight==weight?weight:(int)(weight+1);
if(area==0) price=10+(int)(weight-1)*3;
else if(area==1) price=10+(int)(weight-1)*4;
else if(area==2) price=15+(int)(weight-1)*5;
else if(area==3) price=15+(int)(weight-1)*6.5;
else if(area==4) price=15+(int)(weight-1)*10;
}
printf("Price: %5.2f\n",price);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
6 数位拆分v2.0(4分)
题目内容:从键盘上输入一个4位数的整数n,编写程序将其拆分为两个2位数的整数a和b,计算并输出拆分后的两个数的加、减、乘、除和求余运算的结果。例如n=-4321,设拆分后的两个整数为a,b,则a=-43,b=-21。除法运算结果要求精确到小数点后2位,数据类型为float。求余和除法运算需要考虑除数为0的情况,即如果拆分后b=0,则输出提示信息”The second operater is zero!”
示例:
程序的运行结果示例1:
Please input n:
1200↙
12,0
sum=12,sub=12,multi=0
The second operator is zero!
程序的运行结果示例2:
Please input n:
-2304↙
-23,-4
sum=-27,sub=-19,multi=92
dev=5.75,mod=-3
输入输出:
输入提示信息:”Please input n:\n”
输入格式: “%d”
输出格式:
拆分后的两个整数的输出格式:”%d,%d\n”
加法、减法、乘法的输出格式:”sum=%d,sub=%d,multi=%d\n”
除法和求余的输出格式:”dev=%.2f,mod=%d\n”
除数为0的提示信息:”The second operator is zero!\n”
#include<stdio.h>
int main(){
int n,a,b;
printf("Please input n:\n");
scanf("%d",&n);
a=n/100;
b=n%100;
printf("%d,%d\n",a,b);
printf("sum=%d,sub=%d,multi=%d\n",a+b,a-b,a*b);
if(b==0) printf("The second operator is zero!\n");
else printf("dev=%.2f,mod=%d\n",a/1.0/b,a%b);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
7 出租车计价(4分)
题目内容:已知某城市普通出租车收费标准为:起步里程为3公里,起步费为8元,10公里以内超过起步里程的部分,每公里加收2元,超过10公里以上的部分加收50%的回空补贴费,即每公里3元。出租车营运过程中,因堵车和乘客要求临时停车等客的,按每5分钟加收2元计算,不足5分钟的不计费。从键盘任意输入行驶里程(精确到0.1公里)和等待时间(精确到分钟),请编程计算并输出乘客应支付的车费,对结果进行四舍五入,精确到元。
示例:
程序运行结果示例1:
Input distance and time:2,2↙
fee = 8
程序运行结果示例2:
Input distance and time:5,5↙
fee = 14
程序运行结果示例3:
Input distance and time:12,15↙
fee = 34
程序运行结果示例4:
Input distance and time:20,0↙
fee = 52
输入输出:
输入提示信息:”Input distance and time:”
输入格式:
用逗号分隔的两个数字,第一个表示距离、第二个表示时间:”%f,%d”
输出格式:”fee = %.0f\n” (注意:等号的两边各有一个空格)
#include<stdio.h>
int main(){
float dis,fee=0;
int tim;
printf("Input distance and time:");
scanf("%f,%d",&dis,&tim);
tim=tim/5;
fee+=2*tim;
if(dis>10){
fee+=3*(dis-10);
}
if(dis>3){
dis=dis>=10?10:dis;
fee+=2*(dis-3);
}
if(dis>0){
fee+=8;
}
printf("fee = %.0f\n",fee);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
8 数据区间判断(6分)
题目内容:从键盘输入一个int型的正整数n(已知:0
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int x;
char str[10];
printf("Please enter the number:\n");
scanf("%d",&x);
sprintf(str,"%d",x);
if(x<=0||strlen(str)>4) printf("error!\n");
else if(strlen(str)==1) printf("%d: 0-9\n",x);
else if(strlen(str)==2) printf("%d: 10-99\n",x);
else if(strlen(str)==3) printf("%d: 100-999\n",x);
else if(strlen(str)==4) printf("%d: 1000-9999\n",x);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
9 计算一元二次方程的根v2.0(4分)
题目内容:根据下面给出的求根公式,计算并输出一元二次方程ax2+bx+c=0ax2+bx+c=0的两个实根,要求精确到小数点后4位。其中a,b,c的值由用户从键盘输入。如果用户输入的系数不满足求实根的要求,输出错误提示 “error!”。程序中所有的数据类型均为float。
示例:
程序运行结果示例1:
Please enter the coefficients a,b,c:
1,2,1↙
x1=-1.0000, x2=-1.0000
程序运行结果示例2:
Please enter the coefficients a,b,c:
2,6,1↙
x1=-0.1771, x2=-2.8229
程序运行结果示例3:
Please enter the coefficients a,b,c:
2,1,6↙
error!
输入输出:
输入提示信息:”Please enter the coefficients a,b,c:\n”
输入格式: “%f,%f,%f”
输出格式: “x1=%7.4f, x2=%7.4f\n”
如果输入的系数不满足求实根的要求,输出错误提示信息:”error!\n”
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main(){
float a,b,c,x,y;
printf("Please enter the coefficients a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
x=-b/2/a;
y=b*b-4*a*c;
if(y<0) printf("error!\n");
else printf("x1=%7.4f, x2=%7.4f\n",x+sqrt(y)/2/a,x-sqrt(y)/2/a);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
第五周
1 判断一个整型数据有几位v2.0(4分)
题目内容:从键盘输入一个整型数据(int型),编写程序判断该整数共有几位,并输出包含各个数字的个数。例如,从键盘输入整数16644,该整数共有5位,其中有1个1,2个6,2个4。
示例:
程序运行结果示例1:
Please enter the number:
12226↙
12226: 5 bits
1: 1
2: 3
6: 1
程序运行结果示例2:
Please enter the number:
-12243↙
-12243: 5 bits
1: 1
2: 2
3: 1
4: 1
输入输出:
输入格式: “%d”
输出格式:
输入提示信息:”Please enter the number:\n”
判断该整数共有几位:”%d: %d bits\n”
包含数字0的个数:”0: %d\n”
包含数字1的个数:”1: %d\n”
包含数字2的个数:”2: %d\n”
包含数字3的个数:”3: %d\n”
包含数字4的个数:”4: %d\n”
包含数字5的个数:”5: %d\n”
包含数字6的个数:”6: %d\n”
包含数字7的个数:”7: %d\n”
包含数字8的个数:”8: %d\n”
包含数字9的个数:”9: %d\n”
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main(){
int x,a[10]={0};
char str[12];
printf("Please enter the number:\n");
scanf("%d",&x);
sprintf(str,"%d",abs(x));
for(int i=0;i<strlen(str);i++){
a[str[i]-'0']++;
}
printf("%d: %d bits\n",x,strlen(str));
for(int i=0;i<10;i++){
if(a[i])
printf("%d: %d\n",i,a[i]);
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2 奖金计算(6分)
题目内容:企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时,高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?
示例:
程序运行结果示例1:
789↙
bonus=78
程序运行结果示例2:
789516↙
bonus=36342
输入格式: “%ld”
输出格式:”bonus=%ld\n”
#include<stdio.h>
int main(){
long x;
double bonus=0;
scanf("%ld",&x);
if(x>1000000){
bonus=bonus+(x-1000000)*0.01;
}
if(x>600000){
x=x>1000000?1000000:x;
bonus=bonus+(x-600000)*0.015;
}
if(x>400000){
x=x>600000?600000:x;
bonus=bonus+(x-400000)*0.03;
}
if(x>200000){
x=x>400000?400000:x;
bonus=bonus+(x-200000)*0.05;
}
if(x>100000){
x=x>200000?200000:x;
bonus=bonus+(x-100000)*0.075;
}
if(x>0){
x=x>100000?100000:x;
bonus=bonus+x*0.1;
}
printf("bonus=%ld\n",(long)bonus);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
3 程序修改—1(4分)
题目内容:修改下面这个程序使其快速计算1+2+3……+n的值,n从键盘输入。并按照下面给出的运行示例检查程序。
#include <stdio.h>
int main()
{
int i, j, sum = 0, n=100;
for (i=1,j=n; i<=j; i++,j--)
{
sum = sum + i + j;
}
printf("sum = %d", sum);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
示例:
程序运行结果示例1:
5↙
sum = 15
程序运行结果示例2:
6↙
sum = 21
输入输出:
输入格式: “%d”
输出格式: “sum = %d” (注意:等号两侧各有一个空格)
#include <stdio.h>
int main()
{
int i, j, sum = 0, n;
scanf("%d",&n);
for (i=1,j=n; i<j; i++,j--)
{
sum = sum + i + j;
}
if(i==j) sum=sum+i;
printf("sum = %d", sum);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
4 程序修改—2(4分)
题目内容:修改下面这个用do-while语句实现的程序,改用while语句实现,并对比其优缺点。
#include <stdio.h>
int main()
{
int sum = 0, m;
do{
printf("Input m:\n");
scanf("%d", &m);
sum = sum + m;
printf("sum = %d\n", sum);
}while (m != 0);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
示例:
程序运行结果示例:
Input m:
1↙
sum = 1
Input m:
2↙
sum = 3
Input m:
3↙
sum = 6
Input m:
4↙
sum = 10
Input m:
0↙
输入输出:
输入格式:”%d”
输出格式:
输入提示: “Input m:\n”
输出累加和: “sum = %d\n”(注意:等号两侧各有一个空格)
#include <stdio.h>
int main()
{
int sum = 0, m=-1;
while(m!=0){
printf("Input m:\n");
scanf("%d", &m);
sum = sum + m;
if(m)
printf("sum = %d\n", sum);
};
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
5 程序改错-1(4分)
题目内容:我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只?目前程序运行结果有误,请问为什么会比正确答案多出三个解?不仅要找出错误和修正错误,还要求利用以前学过的知识分析错误的原因。
#include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
if (5*x + 3*y + z/3 == 100)
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
程序目前的运行结果:
x=0, y=25, z=75
x=3, y=20, z=77
x=4, y=18, z=78
x=7, y=13, z=80
x=8, y=11, z=81
x=11, y=6, z=83
x=12, y=4, z=84
程序正确的运行结果:
x=0, y=25, z=75
x=4, y=18, z=78
x=8, y=11, z=81
x=12, y=4, z=84
输入输出:
输入格式: 无
输出格式:
“x=%d, y=%d, z=%d\n
#include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
if (5*x + 3*y + z/3 == 100&&z%3==0)
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
6 程序改错-2(5分)
题目内容:从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出“Yes!”,否则输出“No!”。已知负数、0和1都不是素数。请找出下面程序的错误并改正之,同时按照给出的运行示例检查修改后的程序。
#include <stdio.h>
#include <math.h>
int main()
{
int n, i;
printf("Input n:\n");
scanf("%d", &n);
for (i=2; i<=sqrt(n); i++)
{
if (n % i = 0)
{
printf("No!\n");
}
}
printf("Yes!\n");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
示例:
程序的运行结果示例1:
Input n:
-3↙
No!
程序的运行结果示例2:
Input n:
0↙
No!
程序的运行结果示例3:
Input n:
1↙
No!
程序的运行结果示例4:
Input n:
6↙
No!
程序的运行结果示例5:
Input n:
7↙
Yes!
输入输出:
输入格式: “%d”
输出格式:
输入提示信息: “Input n:\n”
是素数: “Yes!\n”
不是素数: “No!\n”
#include <stdio.h>
#include <math.h>
int main()
{
int n, i;
printf("Input n:\n");
scanf("%d", &n);
if(n<=1){printf("No!\n");return 0;}
for (i=2; i<=sqrt(n); i++)
{
if (n % i == 0)
{
printf("No!\n");
return 0;
}
}
printf("Yes!\n");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
7 程序改错-3(4分)
题目内容:从键盘任意输入两个符号各异的整数,直到输入的两个整数满足要求为止,然后打印这两个数。请通过测试找出下面这个程序存在的问题(不止一个问题哦),并改正。同时用下面给出的运行结果示例检查修改后的程序。
#include <stdio.h>
int main()
{
int x1, x2;
do{
printf("Input x1, x2:");
scanf("%d,%d", &x1, &x2);
}while (x1 * x2 > 0);
printf("x1=%d,x2=%d\n", x1, x2);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
程序正确的运行结果示例:
Input x1, x2:
a,s↙
Input x1, x2:
a,1↙
Input x1, x2:
2,s↙
Input x1, x2:
1,2↙
Input x1, x2:
-1,-2↙
Input x1, x2:
0,3↙
Input x1, x2:
1.2,3.4↙
Input x1, x2:
1.2,5↙
Input x1, x2:
-1,3↙
x1=-1,x2=3
输入输出:
输入格式: “%d,%d”
输出格式:
输入提示信息:”Input x1, x2:\n”
输出: “x1=%d,x2=%d\n”
#include <stdio.h>
int main()
{
int x1, x2,x=-1;
do{
if(x!=-1) while(getchar()!='\n');
printf("Input x1, x2:\n");
x=scanf("%d,%d", &x1, &x2);
}while(x!=2||x1*x2>=0);
printf("x1=%d,x2=%d\n", x1, x2);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
8 猴子吃桃程序_扩展1(4分)
题目内容:猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。
示例:
程序的运行结果示例1:
Input days:
5↙
x=46
程序的运行结果示例2:
Input days:
10↙
x=1534
输入输出:
输入格式: “%d”
输出格式:
输入提示信息:”Input days:\n”
输出:”x=%d\n”
#include<stdio.h>
int main(){
int n,x=1;
printf("Input days:\n");
scanf("%d",&n);
for(int i=1;i<n;i++)
x=(x+1)*2;
printf("x=%d\n",x);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
9 猴子吃桃程序_扩展2(4分)
题目内容:猴子第一天摘了若干个桃子,吃了一半,不过瘾,又多吃了1个。第二天早上将剩余的桃子又吃掉一半,并且又多吃了1个。此后每天都是吃掉前一天剩下的一半零一个。到第n天再想吃时,发现只剩下1个桃子,问第一天它摘了多少桃子?为了加强交互性,由用户输入不同的天数n进行递推,即假设第n天的桃子数为1。同时还要增加对用户输入数据的合法性验证(如:不允许输入的天数是0和负数)
示例:
程序运行结果示例:
Input days:
0↙
Input days:
-5↙
Input days:
a↙
Input days:
3↙
x=10
输入输出:
输入格式: “%d”
输出格式:
输入提示信息:”Input days:\n”
输出:”x=%d\n”
#include<stdio.h>
int main(){
int n,x=1,flag=1;
do{
if(!flag){
while(getchar()!='\n');
}else flag=0;
printf("Input days:\n");
scanf("%d",&n);
}while(n<=0);
for(int i=1;i<n;i++)
x=(x+1)*2;
printf("x=%d\n",x);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
10 6位密码输入检测(4分)
题目内容:从键盘输入6位仅由数字0~9组成的密码。用户每输入一个密码并按回车键后,程序给出判断:如果是数字,则原样输出该数字,并提示用户目前已经输入了几位密码,同时继续输入下一位密码;否则,程序提示”error”,并让用户继续输入下一位密码。直到用户输入的密码全部是数字为止。
示例:
程序的运行结果示例:
Input your password:
1↙
1, you have enter 1-bits number
6↙
6, you have enter 2-bits number
a↙
error
d↙
error
4↙
4, you have enter 3-bits number
6↙
6, you have enter 4-bits number
8↙
8, you have enter 5-bits number
2↙
2, you have enter 6-bits number
输入输出:
输入提示信息:”Input your password:\n”
输入格式: “%c”
输出格式:
如果输入的是数字,输出格式为:”%c, you have enter %d-bits number\n”
如果输入的不是数字,输出提示信息:”error\n”
#include<stdio.h>
int main(){
char a,count=6;
printf("Input your password:\n");
while(count){
scanf(" %c",&a);
if(a<='9'&&a>='0'){
count--;
printf("%c, you have enter %d-bits number\n",a,6-count);
}else{
printf("error\n");
}
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
11 判断一个整型数据有几位v1.0(4分)
题目内容:从键盘输入一个整型数据(int型),编写程序判断该整数共有几位。例如,从键盘输入整数16644,该整数共有5位。
示例:
程序运行结果示例1:
Please enter the number:
21125↙
21125: 5 bits
程序运行结果示例2:
Please enter the number:
-12234↙
-12234: 5 bits
输入输出:
输入提示信息:”Please enter the number:\n”
输入格式: “%d”
输出格式:”%d: %d bits\n”
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int main(){
int a;
char str[20];
printf("Please enter the number:\n");
scanf("%d",&a);
sprintf(str,"%d",abs(a));
printf("%d: %d bits\n",a,strlen(str));
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
12 检测输入数据中奇数和偶数的个数(4分)
题目内容:从键盘输入一系列正整数,输入-1表示输入结束(-1本身不是输入的数据)。编写程序判断输入数据中奇数和偶数的个数。如果用户输入的第一个数据就是-1,则程序输出”over!”。否则。用户每输入一个数据,输出该数据是奇数还是偶数,直到用户输入-1为止,分别统计用户输入数据中奇数和偶数的个数。
示例:
程序运行结果示例1:
Please enter the number:
1↙
1:odd
5↙
5:odd
8↙
8:even
9↙
9:odd
12↙
12:even
17↙
17:odd
-1↙
The total number of odd is 4
The total number of even is 2
程序运行结果示例2:
Please enter the number:
-1↙
over!
The total number of odd is 0
The total number of even is 0
输入输出:
输入提示信息:”Please enter the number:\n”
输入格式: “%d”
输出格式:
用户输入的第一个数据就是-1,输出格式:”over!\n”
奇数的输出格式:”%d:odd\n”
偶数的输出格式:”%d:even\n”
输入数据中奇数的个数统计:”The total number of odd is %d\n”
输入数据中偶数的个数统计:”The total number of even is %d\n”
#include<stdio.h>
int main(){
int a,x=0,y=0;
printf("Please enter the number:\n");
do{
scanf("%d",&a);
if(a==-1) {
if(x+y==0)
printf("over!\n");
break;
}
if(a%2){
printf("%d:odd\n",a);
x++;
}
else{
printf("%d:even\n",a);
y++;
}
}while(a!=-1);
printf("The total number of odd is %d\n",x);
printf("The total number of even is %d\n",y);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
第六章
1 绘制金字塔(4分)
题目内容:要求用户从键盘输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
A
ABA
ABCBA
ABCDCBA
示例:
程序运行结果示例1:
Please input a capital:
D↙
____A
___ABA
__ABCBA
_ABCDCBA
程序运行结果示例2:
Please input a capital:
F↙
______A
_____ABA
____ABCBA
___ABCDCBA
__ABCDEDCBA
_ABCDEFEDCBA
(说明:上面运行结果示例中,每行字母前面的下划线”_”代表屏幕上实际输出的是空格,最后一行前面有一个空格,倒数第二行有两个空格,以此类推。)
输入输出:
输入提示信息:”Please input a capital:\n”
输入格式: “%c”
输出格式:”%c”
#include<stdio.h>
int main(){
char ch;
int i,j,t;
printf("Please input a capital:\n");
scanf("%c",&ch);
t=ch-'A'+1;
for(i=1;i<=t;i++){
for(j=t;j>=i;j--){
printf("%s"," ");
}
for(j=1;j<=i;j++){
printf("%c",'A'+j-1);
}
for(j=1;j<i;j++){
printf("%c",'A'+i-1-j);
}
printf("\n");
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
2 循环嵌套的应用(4分)
题目内容:编写程序产生如下输出:
F
FE
FED
FEDC
FEDCB
FEDCBA
输入输出:
输入格式: 无
输出格式:”%c”
#include<stdio.h>
int main(){
int i,j,t=6;
for(i=1;i<=t;i++){
for(j=1;j<=i;j++){
printf("%c",'A'+t-j);
}
printf("\n");
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3 利用泰勒级数计算sinx的值(4分)
题目内容:利用泰勒级数计算sinx的值,要求最后一项的绝对值小于,并统计出此时累加了多少项。请用“利用前项来计算后项”的方法计算累加项,不要使用pow函数编写程序。程序中所有实数的数据类型都是double类型。
sin\approx x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+\frac{x^9}{9!}-\cdots
示例:
程序的运行结果示例1:
Input x:
3↙
sin(x)=0.141,count=9
程序的运行结果示例2:
Input x:
10↙
sin(x)=-0.544,count=18
输入提示信息:”Input x:\n”
输入格式: “%lf”
输出格式:”sin(x)=%.3f,count=%d\n”
#include<stdio.h>
#define ZERO 1e-5
int main(){
int i,j,count=1;
double x,t,res=0;
printf("Input x:\n");
scanf("%lf",&x);
res=t=x;
while(t>=ZERO||-t>=ZERO){
count++;
t=-t*x*x/(2*count-2)/(2*count-1);
res+=t;
}
printf("sin(x)=%.3f,count=%d\n",res,count);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
4 计算100~200之间的所有素数之和(4分)
题目内容:计算100~200之间的所有素数之和,判别一个数是否是素数请用给定的函数实现。
函数原型:int fun(int m);
说明:
参 数:m 是要进行判断的数;
返回值:若数 m 是素数,则返回值为1;否则返回值为0。
输入输出:
输入格式: 无
输出格式: “sum=%d\n”
#include<stdio.h>
#include<math.h>
int isPrime(int x); //非素数返回0,素数返回本身
int main(){
int i,sum=0;
for(i=100;i<=200;i++){
sum+=isPrime(i);
}
printf("sum=%d\n",sum);
return 0;
}
int isPrime(int x){
int i;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
//printf("%d ",x);
return x;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
5 编程实现一个输入指定范围内的整数的函数(4分)
题目内容:编程实现一个输入指定范围内的整数的函数getint,其完整的函数原型为:int getint(int min, int max);,它负责接收用户的输入进行验证,保证接收的一定是一个介于min和max之间([min, max]区间内)的一个整数并最后返回该整数。如果用户输入不合法,则会提示继续输入,直到输入合法时为止。要求编写完整的程序并测试你所写的getint函数。
示例:
程序的运行结果示例:
Please enter min,max:
3,100↙
Please enter an integer [3..100]:
-2↙
Please enter an integer [3..100]:
0↙
Please enter an integer [3..100]:
116↙
Please enter an integer [3..100]:
58↙
The integer you have entered is:58
输入输出:
输入提示信息:
“Please enter min,max:\n”
“Please enter an integer [%d..%d]:\n”
输入格式:
输入数据区间的最小值和最大值:”%d,%d”
输入指定范围内的整数: “%d”
输出格式:”The integer you have entered is:%d\n”
#include<stdio.h>
int main(){
int min,max,cur;
printf("Please enter min,max:\n");
scanf("%d,%d",&min,&max);
do{
printf("Please enter an integer [%d..%d]:\n",min,max);
scanf("%d",&cur);
}while(cur>max||cur<min);
printf("The integer you have entered is:%d\n",cur);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
6 程序改错v2.0(5分)
题目内容:下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。
#include<stdio.h>
int main()
{
int score;
char grade;
printf("Please input score:");
scanf("%d", &score);
if (score < 0 || score > 100)
printf("Input error!\n");
else if (score >= 90)
grade = 'A’;
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'E';
printf("grade:%c\n", grade);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
示例:
程序运行结果示例1:
Please input score:
a↙
Input error!
Please input score:
-12↙
Input error!
Please input score:
230↙
Input error!
Please input score:
92↙
grade: A
程序运行结果示例2:
Please input score:
88↙
grade: B
程序运行结果示例3:
Please input score:
73↙
grade: C
程序运行结果示例4:
Please input score:
65↙
grade: D
程序运行结果示例5:
Please input score:
27↙
grade: E
输入输出:
输入提示信息:”Please input score:\n”
输入格式: “%d”
输出格式:
输入错误时的提示信息:”Input error!\n”
输出格式:”grade: %c\n” (注意:%c前面有一个空格)
#include<stdio.h>
int main()
{
int score,x;
char grade;
do{
printf("Please input score:\n");
x=scanf("%d", &score);
getchar();
if (score < 0 || score > 100 || x!=1) {
printf("Input error!\n");
continue;
}
else if (score >= 90)
grade = 'A';
else if (score >= 80)
grade = 'B';
else if (score >= 70)
grade = 'C';
else if (score >= 60)
grade = 'D';
else
grade = 'E';
printf("grade: %c\n", grade);
}
while(score < 0 || score > 100 || x!=1);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
7 编程计算a+aa+aaa+…+aa…a(n个a)的值(4分)
题目内容:编程计算 a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。例如,当n=4,a=2,表示计算2+22+222+2222的值。
示例:
程序运行结果示例:
Input a,n:
2,4↙
sum=2468
输入输出:
输入提示信息:”Input a,n:\n”
输入格式: “%d,%d”(先输入a,后输入n)
输出格式: “sum=%ld\n”
#include<stdio.h>
int main(){ //这个考虑了大数的情况,一帮编程也应该这么考虑
int i,jinwei=0,a,n,res[100]={0};
printf("Input a,n:\n");
scanf("%d,%d",&a,&n);
for(i=0;i<n;i++){
int t=jinwei+a*(n-i);
res[i]=t%10;
jinwei=t/10;
}
if(jinwei>0){
res[i]=jinwei;
n++;
}
printf( "sum=");
for(i=n-1;i>=0;i--)
printf("%d",res[i]);
printf("\n");
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
8 搬砖问题(4分)
**题目内容:**n块砖( 27
#include<stdio.h>
int main(){
int i, n, men, women, children, sum=36;
printf("Input n(27<n<=77):\n");
scanf("%d",&n);
for(men=0;men<=n/4;men++){
for(women=0;women<n/3;women++){
if(men+women+2*(n-4*men-3*women)==sum)
printf("men=%d,women=%d,children=%d\n",men,women,sum-men-women);
}
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
9 编程输出某年某月有多少天(考虑到闰年)(5分)
题目内容:从键盘输入一个年份和月份,输出该月有多少天(考虑闰年),用switch语句编程。
示例:
程序运行结果示例1:
Input year,month:
2015,3↙
31 days
程序运行结果示例2:
Input year,month:
2015,4↙
30 days
程序运行结果示例3:
Input year,month:
2016,2↙
29 days
程序运行结果示例4:
Input year,month:
2014,2↙
28 days
程序运行结果示例5:
Input year,month:
2015,13↙
Input error!
输入输出:
输入提示信息:”Input year,month:\n”
输入格式: “%d,%d”
输出格式:
输入错误时的提示信息:
“Input error!\n”
“31 days\n”
“30 days\n”
“29 days\n”
“28 days\n”
#include<stdio.h>
int main(){
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int year,month;
printf("Input year,month:\n");
scanf("%d,%d",&year,&month);
if(month>12||month<=0||year<0)
printf("Input error!\n");
else{
if(year%4==0&&year%100!=0||year%400==0)
days[1]=29;
printf("%d days\n",days[month-1]);
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
PS:有不少人像我反映,有的题目没有按照题目要求做。的确由于时间原因,我并不是每道题都认真看完题目了,但是以上代码都是能AC的,只能说明这个OJ系统也只是对输出进行字符匹配,并不能做其他check。想按照题目要求解的,自行解决,毕竟题目都不难。。。Good Luck!!!
一共18周,我有时间就写,争取每个月写点,如果有一个月没写,应该会抽时间补上,毕竟我还要刷LeetCode的人工智能的题。。。