C语言程序设计编辑与调试环境
第1关:打印输出 Hello Word
任务描述
本关任务:通过运行一个C
语言程序,让你初步了解程序的运行方法。
相关知识(略)
编程要求
请补充Begin-End
之间的代码,使用printf()
在屏幕上输出 Hello World
。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 视频
输入:无
输出:Hello World
#include<stdio.h>
int main(void)
{
/********* Begin *********/
printf("Hello World");
/********* End *********/
return 0;
}
第2关:打印输出图形
任务描述
本关任务:参照上面调试的程序,编写一个能输出规定图形的程序。
相关知识(略)
编程要求
编写一个C
程序,输出以下图案,并上机调试通过。第一行开头有4
个空格,第二行开头有3
个空格,第三行有2
个空格,第四行开头有一个空格,第五行开头没有空格,9
个*
。
* *** OK Hello!*********
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
输入:无
输出:
* *** OK Hello!*********
提示 本题通过执行多个printf
函数输出每一行即可,暂时不用考虑使用循环
#include<stdio.h>
int main(void)
{
/********* Begin *********/
printf(" *\n ***\n OK\n Hello!\n*********");
/********* End *********/
return 0;
}
第3关:求3个数的最大值
任务描述
本关任务:编写一个程序,输入a、b、c
三个整数,输出其中最大值。
相关知识
输入
输入一行数据,分别为a b c
。
输出
a b c
其中最大的数,不用换行。
如何求出最大值
求几个数的最大值?
三个数两两比较,将较大的数存入最大值变量max
;
编程要求
根据提示,在右侧编辑器Begin-End
中补充代码,计算并输出三个数的最大值。
测试说明
我会对你编写的代码进行测试:
测试输入:10,30,20
预期输出:max=30
测试输入:15,78,85
预期输出:max=85
提示:
注意输入输出格式。
#include<stdio.h>
int main(void)
{
/********* Begin *********/
int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b&&a>c)
max=a;
if(b>a&&b>c)
max=b;
if(c>a&&c>b)
max=c;
printf("max=%d",max);
/********* End *********/
return 0;
}
第4关:熟悉C语言调试过程
任务描述
本关任务:以下程序源代码有错误,请使用C
语言的调试功能,检查程序的错误并更正,使之能正确运行。
程序源代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I0RTCVKU-1672219198631)(C:\Users\86183\Pictures\Screenshots\屏幕截图_20221228_155026.png)]
相关知识(略)
编程要求
程序中要求键盘输入x
的值,当x
的值为5
时输出*****
,否则输出#####
。
- 输入:整数
x
的值。 - 输出:当
x
的值为5
时输出*****
,否则输出#####
。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
输入:5
输出:*****
#include<stdio.h>
int main(void)
{
/********* Begin *********/
int x,y,z;
y=2;z=3;
scanf("%d",&x);
if (x==y+z)
printf("*****");
else
printf("#####" );
return 0;
/********* End *********/
}
选择结构程序设计
第1关:排序
任务描述
本关任务:下面的程序是从键盘输入三个整数按从小到大的顺序输出。
*为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。*
相关知识
输入格式
输入格式如下:
printf("请输入三个整数:");` `scanf("%d%d%d",&a,&b,&c);
输出
排序输出从小到大的三个整数。
输出格式如下:
printf("从小到大排列为:%d,%d,%d",a,b,c);
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写排序的小程序。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
样例输入:
请输入三个整数:5 7 6
样例输出:
从小到大排列为:5,6,7
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,b,c,t;
printf("请输入三个整数:");
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t=a;
a=b;
b=t;
}
else
a=a;b=b;
if(a>c)
{
t=a;
a=c;
c=t;
}
else
a=a;c=c;
if(b>c)
{
t=b;
b=c;
c=t;
}
else
b=b;c=c;
printf("从小到大排列为:%d,%d,%d",a,b,c);
/*********End**********/
return 0;
}
第2关:选择结构-闰年判断
任务描述
编写程序,完成如下功能:从键盘输入任意年份year
,判别该年份是否闰年。 *为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。*
相关知识
输入
从键盘任意输入一个年份 。
输出
根据是否闰年进行输出,是输出”****是闰年!
“,否输出”****不是闰年!
“,其中****为当前输入的年份。
样例输入
2000
样例输出
2000 是闰年!
开始你的任务吧,祝你成功!
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写选择结构-闰年判断的小程序。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int year;
scanf("%d",&year);
if(year%400==0)
{
printf("%d 是闰年!",year);
}
else
{
printf("%d 不是闰年!",year);
}
/*********End**********/
return 0;
}
第3关:选择结构-分段函数问题
任务描述
本关任务:编写程序,根据输入的值,输出函数的值。
有一个函数,定义如下
写一段程序,输入x
,输出y
。
相关知识
输入
从键盘任意输入一个数x
输出
一个数y
,保留小数点后三位。
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写选择结构-分段函数问题的小程序。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。 样例输入:
14
样例输出:
181.000
#include<stdio.h>
int main(void)
{
/*********Begin*********/
double x,y;
scanf("%lf",&x);
if(x<0 && x!=-3){
y=x*x+x-6;
}
else if(x>=0 && x<10 && x!=2 && x!=3){
y=x*x-5*x+6;
}
else{
y=x*x-x-1;
}
printf("%.3f",y);
/*********End**********/
return 0;
}
第4关:学生成绩等级换算
任务描述
本关任务:给出一百分制成绩,要求输出成绩等级A
、B
、C
、D
、E
。 90
分以上为A
80-89
分为B
70-79
分为C
60-69
分为D
60
分以下为E
,如果输入数据不在0~100
范围内,请输出一行:“Score is error!
”。
相关知识
输入
从键盘输入一个成绩,成绩可以使浮点数。
输出
(1)如果输入数据在0
到100
范围内:一个字符,表示成绩等级。 (2)如果输入数据不在0~100
范围内,请输出一行:“Score is error!
”。
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写学生成绩等级换算的小程序。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
样例输入:
90
样例输出:
A
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n;
scanf("%d",&n);
if(n>100 || n<0)
{
printf("Score is error!");
return 0;
}
else if(n>=90 && n<=100)
{
printf("A");
return 0;
}
else if(n>=80 && n<=89)
{
printf("B");
return 0;
}
else if(n>=70 && n<=79)
{
printf("C");
return 0;
}
else if(n>=60 && n<=69)
{
printf("D");
return 0;
}
else if(n<60)
{
printf("E");
return 0;
}
/*********End**********/
return 0;
}
顺序结构程序设计进阶
第1关:加法运算
任务描述
本关任务:写一个加法程序,输入整数a,b
,输出他们的和。
相关知识(略)
编程要求
请补充Begin-End
之间的代码,写一个加法程序,输入整数a,b
,输出他们的和。
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
- 输入格式:
scanf("%d,%d",&a,&b);
- 输出格式:
printf("%d+%d=%d\n",a,b,c);
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入:3,4
样例输出:3+4=7
#include<stdio.h>
int main(void)
{
int a,b,c;
//Please input a,b:
/*********Begin*********/
scanf("%d,%d",&a,&b);
c=a+b;
printf("%d+%d=%d\n",a,b,c);
/*********End**********/
return 0;
}
第2关:不使用第3个变量,实现两个数的对调
本关任务:下列程序是不用第三个变量,实现将两个数进行对调的操作。 程序代码如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y36gYIGq-1672219198633)(C:\Users\86183\Pictures\Screenshots\屏幕截图_20221228_155923.png)]
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,并按照要求完成本关任务。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 输入:3 4
输出: a=3 b=4
a=4 b=3
输入:7 85
输出: a=7 b=85
a=85 b=7
#include<stdio.h>
int main(void)
{
int a,b;
//Enter a and b:
scanf("%d%d",&a,&b);
printf("a=%d b=%d\n",a,b);
/*********Begin*********/
a=b-a;
b=b-a;
a=b+a;
/*********End**********/
printf("a=%d b=%d\n",a,b);
return 0;
}
第3关:用宏定义常量
任务描述
本关任务:已知某物品单价为30
,数量为x
。求商品的总价钱。用宏定义物品的单价。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,用宏定义物品的单价。
- 输入:一个整数
x
,代表物品的数量。 - 输出:输出总价格。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例输入: 5
样例输出: 150
#include<stdio.h>
#define PRICE 30
int main(void)
{
/*********Begin*********/
int x;
scanf("%d",&x);
int y;
y=PRICE*x;
printf("%d\n",y);
/*********End**********/
return 0;
}
第4关:数字分离
任务描述
输入一个三位数,分别求出x
的各位数字,十位数字,百位数字的值。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,输入一个三位数,分别求出x
的各位数字,十位数字,百位数字的值。
- 输入:一个三位数
- 输出:输出该数字的百位,十位,个位,数字之间用一个空格隔开。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例输入: 123
样例输出: 1 2 3
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int x,a,b,c;
scanf("%d",&x);
a=x/100;
b=(x/10)%10;
c=x%10;
printf("%d %d %d\n",a,b,c);
/*********End**********/
return 0;
}
第5关:计算总成绩和平均成绩
任务描述
本关任务:编程求从键盘上输入一个学生的五门成绩,计算出该学生的总成绩和平均成绩。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,编程求从键盘上输入一个学生的五门成绩,计算出该学生的总成绩和平均成绩。
- 输入:五个整数
- 输出:总成绩和平均成绩,其中平均成绩保留小数点后两位。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例输入: 60 70 80 90 100
样例输出 400 80.00
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,b,c,d,e,sum;
float average;
scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);
sum=a+b+c+d+e;
average=sum/5.00;
printf("%d %.2f",sum,average);
/*********End**********/
return 0;
}
第6关:求三角形的面积
任务描述
本关任务:编程求以a、b、c
为边长的三角形的面积area
。
相关知识
三角形面积计算公式为: 假设三角形三条边长分别为a、b、c
,其中s=(a+b+c)/2
,则面积:
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,编程求以a、b、c
为边长的三角形的面积area
。
- 输入:
a b c
三角形的三条边,可以是小数; - 输出:三角形面积,保留
3
位小数。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例输入: 3 4 5
样例输出: 6.000
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
float a,b,c,s,area;
scanf("%f %f %f",&a,&b,&c);
s=(a+b+c)/2.000;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%.3f\n",area);
/*********End**********/
return 0;
}
第7关:立体几何计算题
任务描述
本关任务:设圆半径r
,圆柱高h
, 求圆周长C1
,半径为r的圆球表面积Sb
,圆半径r
,圆柱高为h的圆柱体积Vb
。 用scanf
输入数据,输出计算结果,输出时取小数点后两位数字。请编程序。 PI=3.14
相关知识(略)
编程要求
- 输入:两个double型浮点数,
r
和h
; - 输出:圆周长
C1
、圆球表面积Sb
、圆柱体积Vb
。 保留两位小数,每个结果后换行。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例输入: 1.5,3
样例输出: C1=9.42
Sb=28.26
Vb=21.20
*提示*
圆球表面积计算公式为s=4π**r2,r
为球的半径。
圆柱体体积计算公式为:V=π**r2h,r
为半径,h
为高。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
double r,h,C1,Sb,Vb,PI;
scanf("%lf,%lf",&r,&h);
PI=3.14;
C1=2*PI*r;
Sb=4*PI*r*r;
Vb=PI*r*r*h;
printf("C1=%.2f\nSb=%.2f\nVb=%.2f\n",C1,Sb,Vb);
/*********End**********/
return 0;
}
第8关:计算两个正整数的最大公约数
任务描述
编程计算两个正整数的最大公约数。其中求最大公约数的函数原型已经给出,请在主函数中编程调用函数,输出最大公约数。
程序的运行示例: 12,3↙
3
####函数原型说明 求最大公约数的函数原型如下: int MaxCommonFactor( int a, int b);
返回值:返回的是最大公约数;若输入的数据有任意一个不满足条件,返回值是-1
。 参数:a,
b是两个整型数
相关知识
本任务主要考察函数的调用方法。 ####编程要求 根据提示,在右侧编辑器Begin-End
处补充代码,编程计算两个正整数的最大公约数。
- 输入:输入格式:
"%d,%d"
- 输出:输出格式:
"%d\n"
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入: 467,465
样例输出: 1
#include<stdio.h>
int MaxCommonFactor( int a, int b)
{
int c;
if(a<=0||b<=0)
return -1;
while(b!=0)
{
c=a%b;
a=b;
b=c;
}
return a;
}
int main(void)
{
/*********Begin*********/
int a,b;
scanf("%d,%d",&a,&b);
printf("%d\n",MaxCommonFactor(a,b));
/*********End**********/
return 0;
}
选择结构程序设计进阶
第1关:快递费用计算
任务描述
本关任务:编写一个计算机快递费的程序。
上海市的某快递公司根据投送目的地距离公司的远近,将全国划分成5
个区域: 快递费按邮件重量计算,由起重费用、续重费用两部分构成:
(1) 起重(首重)1
公斤按起重资费计算(不足1
公斤,按1
公斤计算),超过首重的重量,按公斤(不足1
公斤,按1
公斤计算)收取续重费; (2) 同城起重资费10
元,续重3
元/公斤; (3) 寄往1
区(江浙两省)的邮件,起重资费10
元,续重4
元; (4) 寄往其他地区的邮件,起重资费统一为15
元。而续重部分,不同区域价格不同:2
区的续重5
元/公斤,3
区的续重6.5
元/公斤,4
区的续重10
元/公斤。
相关知识(略)
编程要求
编写程序,从键盘输入邮件的目的区域编码和重量,计算并输出运费,计算结果保留2
位小数。
提示
续重部分不足一公斤,按1
公斤计算。因此,如包裹重量2.3
公斤:1
公斤算起重,剩余的1.3
公斤算续重,不足1
公斤按1
公斤计算,1.3
公斤折合续重为2
公斤。如果重量应大于0
、区域编号不能超出0-4
的范围。
输入
用逗号分隔的两个数字,第一个表示区域、第二个是重量:“%d,%f”
输出
价格的输出格式:"Price: %.2f\n"
区域错误的提示信息:"Error in Area\n"
*为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。*
测试说明
样例输入: 4,4.5
样例输出: Price: 55.00
程序运行结果示例1:
输入:4,4.5
输出:Price: 55.00
程序运行结果示例2:
输入:5,3.2
输出: Error in Area
Price: 0.00
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
int q;
float weight;
scanf("%d,%f",&q,&weight);
if(q==0)
printf("Price: %.2f\n",10+3.0*ceil(weight-1));
else if(q==1)
printf("Price: %.2f\n",10+4.0*ceil(weight-1));
else if(q==2)
printf("Price: %.2f\n",15+5.0*ceil(weight-1));
else if(q==3)
printf("Price: %.2f\n",15+6.5*ceil(weight-1));
else if(q==4)
printf("Price: %.2f\n",15+10.0*ceil(weight-1));
else
{
printf("Error in Area\n");
printf("Price: 0.00");
}
/*********End**********/
return 0;
}
第2关:计算一元二次方程的根
任务描述
本关任务:根据下面给出的求根公式,计算并输出一元二次方程ax2+bx+c=0
的两个实根,要求精确到小数点后4
位。其中a,b,c
的值由用户从键盘输入。如果用户输入的系数不满足求实根的要求,输出错误提示 “error!
”。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,按照要求完成本关任务。 ####输入
输入格式: "%f,%f,%f"
输出
输入提示信息:"Please enter the coefficients a,b,c:\n"
输出格式:"x1=%.4f, x2=%.4f\n"
输入错误提示信息:"error!\n"
*为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。*
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例1
输入:1,2,1
输出: Please enter the coefficients a,b,c:
x1=-1.0000, x2=-1.0000
样例2
输入:2,1,6
输出: Please enter the coefficients a,b,c:
error!
#include<stdio.h>
#include<math.h>
int main(void)
{
/*********Begin*********/
float a,b,c,x1,x2;
printf("Please enter the coefficients a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
if(b*b-4*a*c<0)
{
printf("error!\n");
}
else
{
printf("x1=%.4f, x2=%.4f\n",x1,x2);
}
/*********End**********/
return 0;
}
第3关:产品信息格式化
任务描述
本关任务:编写一个程序, 对用户录入的产品信息进行格式化。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,编写一个程序, 对用户录入的产品信息进行格式化。
以下为程序的运行结果示例:
Enter item number:
385↙
Enter unit price:
12.5↙
Enter purchase date (mm/dd/yy):
12/03/2015↙
Item Unit Purchase
385 $ 12.50 12032015
输入 产品编号输入格式:"%d"
产品价格输入格式:"%f"
购买日期输入格式:"%d/%d/%d"
输出 产品编号输入提示信息:"Enter item number:\n"
产品价格输入提示信息:"Enter unit price:\n"
购买日期输入提示信息:"Enter purchase date (mm/dd/yy):\n"
格式化输出的表头信息:"Item Unit Purchase\n"
输出格式:"%-9d$ %-9.2f%02d%02d%02d\n"
*为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。*
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
样例输入: 385
12.5
12/03/2015
样例输出: Enter item number:
Enter unit price:
Enter purchase date (mm/dd/yy):
Item Unit Purchase
385 $ 12.50 12032015
#include<stdio.h>
int main(void)
{
/*********Begin*********/
printf("Enter item number:\n");
int n;
scanf("%d",&n);
printf("Enter unit price:\n");
float price;
scanf("%f",&price);
printf("Enter purchase date (mm/dd/yy):\n");
int m,d,y;
scanf("%d/%d/%d",&m,&d,&y);
printf("Item Unit Purchase\n");
printf("%-9d$ %-9.2f%02d%02d%02d\n",n,price,m,d,y);
/*********End**********/
return 0;
}
循环结构程序设计1
第1关:小球自由落体运动
任务描述
一球从M
米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N
次落地时反弹多高?共经过多少米? 结果保留两位小数。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,并按照要求完成本关任务。
输入 从键盘输入M
和N
的值。
输出 它在第N
次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入: 1000 5
样例输出: 31.25 2875.00
#include<stdio.h>
int main(void)
{
/*********Begin*********/
float m,n,h,i,t,sum;
scanf("%f %f",&m,&n);
sum=m;
for(i=1;i<n;i++)
{
t=m/2;
h=t/2;
sum+=2*t;
m=t;
}
printf("%.2f %.2f",h,sum);
/*********End**********/
return 0;
}
第2关:求解出n以内所有能被5整除的正整数的乘积
任务描述
本关任务:求解出n
以内(包含n
)所有能被5
整除的正整数数的乘积s
。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,求解出n
以内(包含n
)所有能被5
整除的正整数数的乘积s
输入 输入包含多个样例,每个样例一个正整数n
,占一行。读取到文件结尾。输入的n
不超过100
。
输入格式
scanf("%d", &n)
输出 对于每个样例n
,输出n
以内(包含n
)所有能被5
整除的正整数的乘积。 输出格式
printf("%d\n", s);
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入: 19
样例输出: 750
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,s=1;
scanf("%d", &n);
for(int i=5;i<=n;i+=5)
s*=i;
printf("%d\n", s);
/*********End**********/
return 0;
}
第3关:最大公约数和最小公倍数
任务描述
本关任务:输入两个正整数m
和n
,求其最大公约数和最小公倍数。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,输入两个正整数m
和n
,求其最大公约数和最小公倍数。
输入 从键盘上任意输入两个数。
输出 分两行输出,第一行输出:最大公约数是多少;第二行输出最小公倍数是多少。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入: 2 3
样例输出: 最大公约数是:1
最小公倍数是:6
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int m,n,t,a,b,i;
scanf("%d %d",&m,&n);
if(m>n)
{
t=m;
m=n;
n=t;
}
a=n;b=m;
while(i!=0)
{
i=a%b;
a=b;
b=i;
}
printf("最大公约数是:%d\n",a);
printf("最小公倍数是:%d\n",m*n/a);
/*********End**********/
return 0;
}
第4关:字符串中各类字符数的统计
任务描述
本关任务:输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
输入 一行字符。 输出 统计每种字符的个数值。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入: aklsjflj123 sadf918u324 asdf91u32oasdf/.';123
样例输出: 23 16 2 4
#include <stdio.h>
int main()
{
char c;
int letters = 0, space = 0, digit = 0, other = 0;
while ((c = getchar()) != '\n')
{
if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
{
letters++;
}
else if (c == ' ')
{
space++;
}
else if (c >= '0' && c <= '9')
{
digit++;
}
else
{
other++;
}
}
printf("%d %d %d %d", letters, digit,space, other);
return 0;
}
第5关:求sn=a+aa+aaa+aaaa+…的值
任务描述
本关任务:键盘输入正整数a
和n
,编程 s=a+aa+aaa+aaaa+aa...a
(n
个a
)的值。 例如: a=2
,n=5
时,表示计算由2
组成的数的和:2+22+222+2222+22222
( 此时 共有5
个数相加)。
输入:5
3
表示3
个由5
组成的数相加,即计算5+55+555
的值,输出:615
输入:5
4
表示计算5+55+555+5555
的值,输出:6170
相关知识
在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。
C
中可利用while
、for
、do-while
等常用循环函数来是语句或代码块进行重复操作,从而省去很多重复的工作,使代码简洁明了。
while语句
基本语法:基于while
实现循环的基本语法如下:
while(布尔值){ 需要循环的语句或者代码块}
- 其中括号中的布尔值如果为真,这进入循环,直到布尔值变为假,则推出循环,继续执行之后代码。
- 其中括号中的布尔值如果为假,则直接不进入循环,继续执行循环代码块之后代码。
应用示例:
// 需要循环输出3次6int n = 3;while(n--){ printf("6");}
for语句
基本语法:基于for
实现循环的基本语法如下:
for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){ 需循环的语句或者代码块}
-
其中
1
处位置,是一个赋值语句,在循环开始
前执行一次,之后再不执行。 -
其中
2
处位置为判断语句,每次
开始循环
时(包括第一次)都会先经过这个判断语句的判断
- 如果此处为真,则进入循环,执行循环内语句或者代码块。
- 如果此处为假,则不进入循环,执行之后的代码。
-
其中
3
处位置为一个运算语句,每执行完
一次循环,就会执行一次此处代码。
应用示例:
// 同样需要输出3个6int i;for(i=0;i<3;i++){ printf("6");}
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下: 键盘输入正整数a
和n
,编程 s=a+aa+aaa+aaaa+aa...a
(n
个a
)的值。 例如: a=2
,n=5
时,表示计算由2
组成的数的和:2+22+222+2222+22222
( 此时 共有5
个数相加)。
输入:5
3
表示3
个由5
组成的数相加,即计算5+55+555
的值,输出:615
输入:5
4
表示计算5+55+555+5555
的值,输出:6170
本关涉及的代码文件的代码框架如下:
#include <stdio.h>// 定义main函数int main(void){ // 请在此添加代码 /********** Begin *********/ /********** End **********/ return 0;}
测试说明
以下是测试样例:
输入:5 3
输出:615
输入:6 4
输出:7404
输入:3 5
输出:37035
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a,n,i;
double sum;
scanf("%d %d",&a,&n);
for(i=n-1,sum=0;i>=0;i--)
sum+=(pow(a,(n-i)));
for(i=n-1,sum=n*a;i>0;i--)
sum+=(n-i)*a*(pow(10,i));
printf("%.0lf",sum);
/*********End**********/
return 0;
}
循环结构程序设计2
第1关:C循环-求平均成绩
任务描述
本关任务:编写一个程序,输入学生人数和每个人的成绩,计算平均成绩。 ######注意:当输入的学生人数小于等于0时,输出平均成绩为0分! 例如:
相关知识
在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。
C
中可利用while
、for
、do-while
等常用循环函数来是语句或代码块进行重复操作,从而省去很多重复的工作,使代码简洁明了。
while语句
基本语法:基于while
实现循环的基本语法如下:
while(布尔值){ 需要循环的语句或者代码块}
- 其中括号中的布尔值如果为真,这进入循环,直到布尔值变为假,则推出循环,继续执行之后代码。
- 其中括号中的布尔值如果为假,则直接不进入循环,继续执行循环代码块之后代码。
应用示例:
// 需要循环输出3次6int n = 3;while(n--){ printf("6");}
for语句
基本语法:基于for
实现循环的基本语法如下:
for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){ 需循环的语句或者代码块}
-
其中
1
处位置,是一个赋值语句,在循环开始
前执行一次,之后再不执行。 -
其中
2
处位置为判断语句,每次
开始循环
时(包括第一次)都会先经过这个判断语句的判断
- 如果此处为真,则进入循环,执行循环内语句或者代码块。
- 如果此处为假,则不进入循环,执行之后的代码。
-
其中3处位置为一个运算语句,每
执行完
一次循环,就会执行一次此处代码。
应用示例:
// 同样需要输出3个6int i;for(i=0;i<3;i++){ printf("6");}
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下: 编程实现:编写一个程序,输入学生人数和每个人的成绩,计算平均成绩。 ######注意:当输入的学生人数小于等于0时,输出平均成绩为0分! 例如:
–
本关涉及的代码文件的代码框架如下:
#include <stdio.h>// 定义main函数int main(){ // 请在此添加代码 /********** Begin *********/ /********** End **********/ return 0;}
测试说明
以下是测试样例:
输入:3 90 70 80
输出:the number of students:the scores:average=80.00
输入:-1
输出:the number of students:the scores:average=0.00
输入:4 78.5 26 73.6 90.1
输出:the number of students:the scores:average=67.05
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,i;
float score,sum=0,average;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%f",&score);
sum+=score;
}
average=(n<=0?0:sum/n);
printf("the number of students:the scores:average=%.2f",average);
/*********End**********/
return 0;
}
第2关:C循环-求各位数字之积
任务描述
本关任务:计算正整数num
的各位上的数字之积。 例如:
输入:2583
经过—-(2x5x8x3) 输出:240
输入:102
经过—-(1x0x2) 输出:0
输入:136
经过—-(1x3x6) 输出:18
相关知识
在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。
C
中可利用while
、for
、do-while
等常用循环函数来是语句或代码块进行重复操作,从而省去很多重复的工作,使代码简洁明了。
while语句
基本语法:基于while
实现循环的基本语法如下:
while(布尔值){ 需要循环的语句或者代码块}
- 其中括号中的布尔值如果为真,这进入循环,直到布尔值变为假,则推出循环,继续执行之后代码。
- 其中括号中的布尔值如果为假,则直接不进入循环,继续执行循环代码块之后代码。
应用示例:
// 需要循环输出3次6int n = 3;while(n--){ printf("6");}
for语句
基本语法:基于for
实现循环的基本语法如下:
for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){ 需循环的语句或者代码块}
-
其中
1
处位置,是一个赋值语句,在循环开始
前执行一次,之后再不执行。 -
其中
2
处位置为判断语句,每次
开始循环
时(包括第一次)都会先经过这个判断语句的判断
- 如果此处为真,则进入循环,执行循环内语句或者代码块。
- 如果此处为假,则不进入循环,执行之后的代码。
-
其中
3
处位置为一个运算语句,每执行完
一次循环,就会执行一次此处代码。
应用示例:
// 同样需要输出3个6int i;for(i=0;i<3;i++){ printf("6");}
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下: 计算正整数num
的各位上的数字之积。 例如:
输入:2583
经过—-(258*3) 输出:240
输入:102
经过—-(102) 输出:0
输入:136
经过—-(136) 输出:18
本关涉及的代码文件的代码框架如下:
#include <stdio.h>// 定义main函数int main(){ // 请在此添加代码 /********** Begin *********/ /********** End **********/ return 0;}
测试说明
以下是测试样例:
输入:120
输出:0
输入:314
输出:12
输入:1952
输出:90
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int fac=1,num;
scanf("%d",&num);
while(num)
{
fac*=num%10;
num/=10;
}
printf("%d",fac);
/*********End**********/
return 0;
}
第3关:C循环-求阶乘之和
任务描述
本关任务:编写一个程序,任意输入n
,求S=1!+2!+...+n!
。 注意:n!
表示n
的阶乘。0
的阶乘等于1
,负数的阶乘等于0
。 提示:(n+1)!=n!*(n+1) 例如: 输入:10
输出:4037913
输入:7
输出:5913
输入:-1
输出:0
相关知识
在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。
C
中可利用while
、for
、do-while
等常用循环函数来是语句或代码块进行重复操作,从而省去很多重复的工作,使代码简洁明了。
while语句
基本语法:基于while
实现循环的基本语法如下:
while(布尔值){ 需要循环的语句或者代码块}
- 其中括号中的布尔值如果为真,这进入循环,直到布尔值变为假,则推出循环,继续执行之后代码。
- 其中括号中的布尔值如果为假,则直接不进入循环,继续执行循环代码块之后代码。
应用示例:
// 需要循环输出3次6int n = 3;while(n--){ printf("6");}
for语句
基本语法:基于for
实现循环的基本语法如下:
for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){ 需循环的语句或者代码块}
-
其中
1
处位置,是一个赋值语句,在循环开始
前执行一次,之后再不执行。 -
其中
2
处位置为判断语句,每次
开始循环
时(包括第一次)都会先经过这个判断语句的判断
- 如果此处为真,则进入循环,执行循环内语句或者代码块。
- 如果此处为假,则不进入循环,执行之后的代码。
-
其中
3
处位置为一个运算语句,每执行完
一次循环,就会执行一次此处代码。
应用示例:
// 同样需要输出3个6int i;for(i=0;i<3;i++){ printf("6");}
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下: 编程实现:任意输入n
,求S=1!+2!+...+n!
。 ######注意:n!表示n的阶乘。0的阶乘等于1,负数的阶乘等于0。
本关涉及的代码文件的代码框架如下:
#include <stdio.h>// 定义main函数int main(){ // 请在此添加代码 /********** Begin *********/ /********** End **********/ return 0;}
测试说明
以下是测试样例:
输入:10
输出:4037913
输入:1
输出:1
输入:-5
输出:0
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i, n, sum = 0, f = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
f*=i;
sum+=f;
}
printf("%ld",sum);
/*********End**********/
return 0;
}
第4关:C循环-水仙花数
任务描述
本关任务:求出所有的水仙花数。
**提示:**所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。比如153
是一个水仙花数,因为153=1^3+5^3+3^3
。
**注意:**本题不需要输入语句,由于网站限制要求一定要有输入输出示例,但同学们可以对输入部分忽略不计。 例如: 370
就是一个水仙花数,因为370 = 3^3 +7^3 + 0^3
相关知识
在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。
C
中可利用while
、for
、do-while
等常用循环函数来是语句或代码块进行重复操作,从而省去很多重复的工作,使代码简洁明了。
while语句
基本语法:基于while
实现循环的基本语法如下:
while(布尔值){ 需要循环的语句或者代码块}
- 其中括号中的布尔值如果为真,这进入循环,直到布尔值变为假,则推出循环,继续执行之后代码。
- 其中括号中的布尔值如果为假,则直接不进入循环,继续执行循环代码块之后代码。
应用示例:
// 需要循环输出3次6int n = 3;while(n--){ printf("6");}
for语句
基本语法:基于for
实现循环的基本语法如下:
for(1.赋值语句或者省略;2.判断语句或者省略;3.执行语句或者省略){ 需循环的语句或者代码块}
-
其中
1
处位置,是一个赋值语句,在循环开始
前执行一次,之后再不执行。 -
其中
2
处位置为判断语句,每次
开始循环
时(包括第一次)都会先经过这个判断语句的判断
- 如果此处为真,则进入循环,执行循环内语句或者代码块。
- 如果此处为假,则不进入循环,执行之后的代码。
-
其中
3
处位置为一个运算语句,每执行完
一次循环,就会执行一次此处代码。
应用示例:
// 同样需要输出3个6int i;for(i=0;i<3;i++){ printf("6");}
编程要求
本关的编程任务是补全右侧代码片段中Begin
至End
中间的代码,具体要求如下: 求出所有的水仙花数。 **提示:**所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。比如153
是一个水仙花数,因为153=1^3+5^3+3^3
。· **注意:**本题不需要输入语句,由于网站限制要求一定要有输入输出示例,但同学们可以对输入部分忽略不计。 例如: 370
就是一个水仙花数,因为370 = 3^3 +7^3 + 0^3
本关涉及的代码文件的代码框架如下:
#include <stdio.h>// 定义main函数int main(){ // 请在此添加代码 /********** Begin *********/ /********** End **********/ return 0;}
测试说明
以下是测试样例:
输入: 1
输出:153 370 371 407
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int hun, ten, ind,a, n;
a=getchar();
while(a!=1)
break;
for( n=100; n<1000; n++ )
{
hun = n / 100;
ten = (n-hun*100) / 10;
ind = n % 10;
if(n == hun*hun*hun + ten*ten*ten + ind*ind*ind)
printf("%d ", n);
}
/*********End**********/
return 0;
}
第5关:C循环-寻找完数
任务描述
本关任务:一个数如果恰好等于它的因子之和,这个数就称为”完数”。 例如,6
的因子为1、2、3
,而6=1+2+3
,因此6
是”完数”。 编程序找出1000
之内的所有完数。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,并按照要求完成任务。 输入 1000
输出 编程序找出1000
之内的所有完数,每个完数占一行。
测试说明
输入:1000
输出: 6
28
496
#include <stdio.h>
int is_perfect_number(int n)
{
int i,s=0;
for(i = 1; i <=n/2; i ++)
if(n%i == 0) s+= i;
if(s == n) return 1;
return 0;
}
int main()
{
int n,x;
x=getchar();
for(n = 1; n < 1000; n++)
if(is_perfect_number(n))
printf("%d\n",n);
}
第6关:分数求和
任务描述
本关任务:编写程序计算 1 - 1/2 + 1/3 - 1/4 + ..... +1/99 - 1/100
的值,并显示出来(保留结果为小数点后三位)。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码,编写程序计算 1 - 1/2 + 1/3 - 1/4 + ..... +1/99 - 1/100
的值,并显示出来(保留结果为小数点后三位)。
测试说明
平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
double sum = 0.0;
for (i = 1; i <= 100; i++)
{
sum = sum + (pow(-1, i + 1)) / i;
}
printf("%.3f", sum);
return 0;
}
指针
第1关:用指针法输入12个整数,然后按每行4个数输出
任务描述
题目描述:用指针法输入12
个整数,然后按每行4
个数输出 ####相关知识(略) ####编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入
输入包含一行,有12
个整数。 输出
按顺序,每行输出4
个整数。 ####测试说明 样例输入:
1 2 3 4 5 6 7 8 9 10 11 12
样例输出:
1 2 3 4` `5 6 7 8` `9 10 11 12
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[12],*b,i;
b=a;
for(i=0;i<12;i++)
{
scanf("%d",b++);
}
b=a;
for(i=0;i<12;i++)
{
if((i+1)%4==0)
printf("%d\n",*b);
else
printf("%d ",*b);
b++;
}
/*********End**********/
return 0;
}
第2关:指针变量作为函数参数实现两变量交换值
任务描述
题目描述:对输入的两个整数a
,b
,用指针变量作为函数参数,交换a
和b
的值。 ####输入 两个整数a
b
####输出 输出用函数交换处理后的值a
b
####样例输入 1 2
####样例输出 2 1
开始你的任务吧,祝你成功!
** [TOC]
任务描述
题目描述:对输入的两个整数a
,b
,用指针变量作为函数参数,交换a
和b
的值。 ####相关知识(略) ####编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 两个整数a
b
输出 输出用函数交换处理后的值a
b
####测试说明 样例输入: 1 2
样例输出: 2 1
#include<stdio.h>
/*********Begin*********/
void swap(int *a,int *b)
{
int t;
t=*a;
*a=*b;
*b=t;
}
/*********End**********/
int main(void)
{
int a,b;
scanf("%d%d",&a,&b);
/*********Begin*********/
swap(&a,&b);
printf("%d %d",a,b);
/*********End**********/
return 0;
}
第3关:报数
任务描述
题目描述:有n
人围成一圈,顺序排号。从第1
个人开始报数(从1
到3
报数),凡报到3
的人退出圈子,问最后留下的是原来的第几号的那位。 ####相关知识(略) ####编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入
初始人数n
输出
最后一人的初始编号 ####测试说明 样例输入:
3
样例输出:
2
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,ans,i;
scanf("%d",&n);
ans=0;
if(n==0)
return 0;
for(i=2;i<=n;i++)
ans=(ans+3)%i;
printf("%d\n",ans+1);
/*********End**********/
return 0;
}
第4关:strcmp函数
任务描述
题目描述:用一个函数实现两个字符串的比较,即自己写一个strcmp
函数 ####相关知识(略) ####编程要求 请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 输入两字符串 输出 输出最大的那个字符串 ####测试说明 样例输入: abc
abd
样例输出: abd
#include<stdio.h>
int strcmp(char *p1,char *p2){
/*********Begin*********/
int i=0;
while(*(p1+i)==*(p2+2))
{
if(*(p1+i++)=='\0')
{
return 0;
}
}
return(*(p1+i)-(*(p2+i)));
/*********End**********/
}
int main(void)
{
char a[110],b[110];
scanf("%s%s",a,b);
if(strcmp(a,b)>0)
printf("%s", a);
else
printf("%s", b);
return 0;
}
函数
第1关:求和
任务描述
题目描述:给你一个n
,要求你编写一个函数求1+2+.......+n.
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。
输入 输入一个n
输出 输出1+2+.......+n
的和
测试说明
样例输入: 100
样例输出: 5050
#include<stdio.h>
//编写函数
/*********Begin*********/
int sum(int n)
{
int s=0;
for(int i=1;i<=n;i++)
s+=i;
return s;
}
/*********End**********/
int main(void)
{
/*********Begin*********/
int n;
scanf("%d",&n);
printf("%d",sum(n));
/*********End**********/
return 0;
}
第2关:回文数计算
任务描述
本关任务:编写函数求区间[200,3000]
中所有的回文数,回文数是正读和反读都是一样的数。如525
, 1551
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 无需输入
输出 输出区间[200,3000]
中所有的回文数,一行一个回文数,不需要输出其它无关的字符。
202` `212` `222` `232` `242` `.....
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
#include<stdio.h>
void solve(){
/*********Begin*********/
int a,b,c,m,n,p,q;
for(int i=200;i<=3000;i++)
{
if(i<1000)
{
c=i%10;
b=(i/10)%10;
a=i/100;
if(i==c*100+b*10+c)
printf("%d\n",i);
}
else
{
q=i%10;
p=(i/10)%10;
n=(i/100)%10;
m=i/1000;
if(i==q*1000+p*100+n*10+m)
printf("%d\n",i);
}
}
/*********End**********/
}
int main(void)
{
solve();
return 0;
}
第3关: 编写函数求表达式的值
任务描述
题目描述:有如下表达式 s = 1 + 1 / 3 + (1 * 2) / (3 * 5) + (1 * 2 * 3) / (3 * 5 * 7) + .... + (1 * 2 * 3 * .... * n) / (3 * 5 * 7 * ... * (2 * n + 1))
。
编写函数求给出的n所对应的表达式s的值。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入
一个整数n
输出
输出表达式的值,保留小数点后10位的值。
测试说明
样例输入:
4
样例输出:
1.5492063492
#include<stdio.h>
//编写题目要求的函数
/*********Begin*********/
double s(int n)
{
double m=1.0,q=1.0;
for(int i=1;i<=n;i++)
{
q=q*i/(2*i+1);
m+=q;
}
}
/*********End**********/
int main(void)
{
/*********Begin*********/
int x;
scanf("%d",&x);
printf("%12.10lf",s(x));
/*********End**********/
return 0;
}
第4关:阶乘数列
任务描述
题目描述:求Sn=1!+2!+3!+4!+5!+…+n!
之值,其中n
是一个数字。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入
一个整数n(1<=n<=20)
输出 输出表达式的值,占一行。
测试说明
样例输入:
5
样例输出:
153
提示:
用int
可能会溢出,需要用能表示更大范围的long long
int
(注:VC6.0
不支持此类型,VC
下使用可使用__int64
替代)
#include<stdio.h>
//编写函数
/*********Begin*********/
long long csh(long long n)
{
long long p=1;
for(long long i=1;i<=n;i++)
{
p*=i;
}
return p;
}
/*********End**********/
int main(void)
{
/*********Begin*********/
long long int n;
scanf("%lld",&n);
long long sum=0;
for(long long int i=1;i<=n;i++)
{
sum+=csh(i);
}
printf("%lld",sum);
/*********End**********/
return 0;
}
第5关:亲密数
任务描述
题目描述:两个不同的自然数A
和B
,如果整数A
的全部因子(包括1
,不包括A
本身)之和等于B
;且整数B的全部因子(包括1
,不包括B
本身)之和等于A
,则将整数A
和B
称为亲密数。求3000
以内的全部亲密数。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 无需输入 输出 3000
以内的全部亲密数(输出格式:(A
,B
),不加换行,不加分隔符号) 一对亲密数只输出一次,小的在前
测试说明
样例输出: (220,284)(1184,1210)(2620,2924)
提示:
按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b
,再计算b
的全部因子的累加和为n
,若n
等于a
则可判定a
和b
是亲密数。计算数a
的各因子的算法:
用a依次对i(i=1~a/2)
进行模运算,若模运算结果等于0
,则i
为a
的一个因子;否则i就不是a
的因子。
#include<stdio.h>
void solve(){
/*********Begin*********/
int a,b,i,j,c;
for(a=1;a<3000;a++)
{
b=0;
for(i=1;i<=a/2;i++)
if(a%i==0)
b+=i;
c=0;
for(j=1;j<=b/2;j++)
if(b%j==0)
c+=j;
if(a==c&&a<b)
printf("(%d,%d)",a,b);
}
/*********End**********/
}
int main(void)
{
solve();
return 0;
}
第6关:公约公倍数
任务描述
题目描述:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,变量类型使用long long int
。 输入 两个正整数 输出 最大公约数 最小公倍数 如果输入的数中包含负数,则输出Input Error
测试说明
样例输入:
6 15
样例输出:
3 30
提示:
- 负数没有最大公约数和最小公倍数;
- 最大公约数和最小公倍数一定为正数,不可以为负数;
- 需要考虑代码运行效率,否则会评测超时。
#include<stdio.h>
//编写最大公约数GCD函数
/*********Begin*********/
long long int GCD(long long int m,long long int n)
{
long long int t;
if(m<n);
{
t=m;
m=n;
n=t;
}
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
return m;
}
/*********End**********/
//编写最小公倍数LCM函数
/*********Begin*********/
long long int LCM(long long int m,long long int n)
{
long long int t;
t=m*n/GCD(m,n);
return t;
}
/*********End**********/
int main(void)
{
/*********Begin*********/
long long int a,b;
scanf("%lld %lld",&a,&b);
if(a<0 || b<0)
{
printf("Input Error");
return 0;
}
printf("%lld %lld",GCD(a,b),LCM(a,b));
/*********End**********/
return 0;
}
一维数组和二维数组
任务描述
本关任务:将十个数进行从大到小的顺序进行排列。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码。 输入 输入十个整数。
输出 以从大到小的顺序输出这个十个数。
测试说明
样例输入: 1 2 3 4 5 6 7 8 9 10
样例输出: 10 9 8 7 6 5 4 3 2 1
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int i,j,a[10],t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
{
for(j=0;j<10-i;j++)
{
if(a[j+1]>a[j])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<10;i++)
{
printf("%2d",a[i]);
}
/*********End**********/
return 0;
}
第2关:查找整数
任务描述
题目描述:给出一个包含n
个整数的数列,问整数a
在数列中的第一次出现是第几个。
相关知识(略)
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码。 输入 第一行包含一个整数n
。 第二行包含n
个非负整数,为给定的数列,数列中的每个数都不大于10000
。 第三行包含一个整数a
,为待查找的数。 输出 如果a
在数列中出现了,输出它第一次出现的位置(位置从1
开始编号),否则输出-1
。
测试说明
样例输入: 6
1 9 4 8 3 9
9
样例输出: 2
提示: 数据规模与约定。 1 <= n <= 1000
#include<stdio.h>
int find(int n,int a[],int key)
{
int index=-1;
int i;
for(i=0;i<n;i++)
{
if(a[i]==key)
{
index=i+1;
break;
}
}
return index;
}
int main(void)
{
/*********Begin*********/
int n,a;
int i;
int aa[1000];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&aa[i]);
}
scanf("%d",&a);
printf("%d",find(n,aa,a));
/*********End**********/
return 0;
}
第3关:计算数组中元素的最大值及其所在的行列下标值
任务描述
题目描述:按如下函数原型编程从键盘输入一个m
行n
列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中m
和n
的值由用户键盘输入。已知m
和n
的值都不超过10
。
相关知识(略)
输入
输入数组大小:"%d,%d"
下面输入数组中元素。
输出
输出格式: 数组大小输入提示信息:"Input m, n:"
数组元素输入提示信息:"Input %d*%d array: "
输出格式:"max=%d, row=%d, col=%d"
样例输入
5,5` `1 2 3 4 5` `4 5 6 100 2` `3 2 1 5 6` `1 2 3 5 4` `3 5 6 4 8
样例输出
Input m, n:Input 5*5 array:` `max=100, row=2, col=4
开始你的任务吧,祝你成功!
编程要求
根据提示,在右侧编辑器Begin-End
处补充代码。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[5][5],max,i,j,p,q,m,n;
printf("Input m, n:");
scanf("%d,%d",&m,&n);
printf("Input %d*%d array:\n",m,n);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
max=a[0][0];
p=q=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(a[i][j]>max)
{
max=a[i][j];
p=i;
q=j;
}
printf("max=%d, row=%d, col=%d",max,p+1,q+1);
/*********End**********/
return 0;
}
第4关:二分查找
任务描述
题目描述:将n
个从小到大排序的整数(n<1000000
)从1~n
进行编号,并一个待查找的整数m
,请使用二分法进行查找。 ####相关知识(略) ####编程要求 根据提示,在右侧编辑器Begin-End
处补充代码。 输入 输入包括3
行,第一行为整数n
,第二行包括n
个整数,以空格分隔,第三行为整数m
。 输出 如果能够在序列中找到整数m
,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None
。
测试说明
样例输入: 10
1 2 4 5 6 7 8 9 10 11
10
样例输出: 9
#include<stdio.h>
int a[1000005],n,t;
int BS()
{
int l=0,r=n-1;
while(l<=r)
{
int m=(l+r)>>1;
if(t<a[m])
r=m-1;
else if(t>a[m])
l=m+1;
else if(a[m-1]<t)
return m;
else r=m-1;
}
return -1;
}
int main(void)
{
/*********Begin*********/
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&t);
if(a[0]==t)
printf("1");
else
{
int f=BS();
if(f!=-1)
{
printf("%d",f+1);
}
else
printf("None");
}
}
/*********End**********/
return 0;
}
第5关:鞍点
任务描述
题目描述:找出具有m
行n
列二维数组Array
的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10
。
相关知识(略)
编程要求
输入
输入数据有多行,第一行有两个数m
和n
,下面有m
行,每行有n
个数。
输出
按下列格式输出鞍点: Array[i][j]=x
其中x
代表鞍点,i
和j
为鞍点所在的数组行和列下标,我们规定数组下标从0
开始。 一个二维数组并不一定存在鞍点,此时请输出None
我们保证不会出现两个鞍点的情况,比如: 3 3
1 2 3
1 2 3
3 6 8
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
样例输入:
3 3` `1 2 3` `4 5 6` `7 8 9
样例输出:
Array[0][2]=3
#include<stdio.h>
#define N 10
int Maxcol(int a[][N],int n,int row )
{
int i,maxcol=0;
for(i=1;i<n;i++)
if(a[row][i]>a[row][maxcol])
maxcol=i;
return maxcol;
}
int Minrow(int a[][N],int m,int col)
{
int i,minrow=0;
for(i=1;i<m;i++)
if(a[i][col]<a[minrow][col])
minrow=i;
return minrow;
}
int main(void)
{
/*********Begin*********/
int m,n,i,j;
int maxcol,minrow;
int a[N][N];
scanf("%d%d",&m,&n);
for(i=0;i<m;i++) for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
for(i=0;i<m;i++)
{
maxcol=Maxcol(a,n,i);
minrow=Minrow(a,m,maxcol);
if(i==minrow)
{
printf("Array[%d][%d]=%d",i,maxcol,a[i][maxcol]);
break;
}
}
if(i>=m) printf("None");
/*********End**********/
return 0;
}
第6关:删除最大值
任务描述
题目描述:输入10
个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写删除最大值的小程序。
输入
输入10
个互不相同整数
输出
输出删除最大元素后的数组
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
样例输入:
1 2 3 4 5 6 7 8 9 0
样例输出:
1 2 3 4 5 6 7 8 0
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[10];
int MAX=-1;
for(int i=0;i<10;i++)
scanf("%d",&a[i]);
for(int i=0;i<10;i++)
{
if(a[i]>MAX)
MAX=a[i];
}
for(int i=0;i<10;i++)
{
if(a[i]==MAX) continue;
printf("%d ",a[i]);
}
/*********End**********/
return 0;
}
第7关:杨辉三角
任务描述
题目描述:还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形: 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充,完成编写杨辉三角的小程序。
测试说明
平台会对您的代码进行运行测试,如果实际输出与预期输出相同,则算通关。
输出
打印出杨辉三角图形的10
行。格式见题目描述部分。每个整数后面接一个空格来分隔开整数
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int a[10][10];
int num=1;
for(int i=0;i<10;i++)
a[i][0]=1;
for(int i=1;i<10;i++)
{
for(int j=1;j<10;j++)
{
if(j==num)
{
num++;
a[i][j]=1;
break;
}
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
num=1;
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
if(j==num)
{
num++;
break;
}
if(j==num-1)
printf("%d",a[i][j]);
else printf("%d",a[i][j]);
}
printf("\n");
}
/*********End**********/
return 0;
}
字符数组
第1关:字符逆序
任务描述
题目描述:输入一个字符串,输出反序后的字符串。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 一行字符 输出 逆序后的字符串
测试说明
样例输入: 123456abcdef
样例输出: fedcba654321
特别注意:样例输出没有进行换行操作
#include<stdio.h>
int main(void)
{
/*********Begin*********/
char n[200];
int i=0,temp;
int len=0;
gets(n);
while(n[i]!=0)
{
len++;
i++;
}
int left=0,right=len-1;
while(left<right)
{
temp=n[left];
n[left]=n[right];
n[right]=temp;
left++;
right--;
}
for(i=0;i<len;i++)
printf("%c",n[i]);
/*********End**********/
return 0;
}
第2关:字符统计
任务描述
题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 输入数据有多行,第一行是一个整数n
,表示测试实例的个数,后面跟着n
行,每行包括一个由字母和数字组成的字符串。 输出 对于每个测试实例,输出该串中数值的个数,每个输出占一行。、
测试说明
样例输入: 2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf
样例输出: 6
9
#include<stdio.h>
int main(void)
{
/*********Begin*********/
int n,count,i,k,j,w;
char a[100];
scanf("%d",&n);
w = n;
int b[100]={0};
while(n > 0)
{
count = 0;
scanf("%s",a);
k = strlen(a);
for(i=0; i<k; i++)
{
if(a[i]<='9' && a[i]>='0')
{
count++;
}
}
b[n-1] = count;
n--;
}
for(j=w-1; j>=0; j--)
{
printf("%d", b[j]);
if(j>0)
printf("\n");
}
/*********End**********/
return 0;
}
第3关:字符插入
任务描述
题目描述:输入两个字符串a
和b
,将b
串中的最大字符插入到a
串中最小字符后面。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 输入一段文字 输出 输入两个字符串a
和b
。
测试说明
样例输入: MynameisAmy
MynameisJane
样例输出: MynameisAymy
提示: 字符串长度不超过100
**注意:使用gets()*函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。 *推荐使用:fgets()函数。
#include <stdio.h>
#include <string.h>
int main(void)
{
/*********Begin*********/
char a[100],b[100];
int i,j,n,m,min,max;
gets(a);
m=strlen(a);
for(i=0,min=0;i<m;i++)
if(a[i]<a[min])
min=i;
gets(b);
n=strlen(b);
for(i=0,max=0;i<n;i++)
if(b[i]>b[max])
max=i;
for(j=m+1;j>min;j--)
a[j]=a[j-1];
a[j+1]=b[max];
puts(a);
return 0;
/*********End**********/
return 0;
}
第4关:字符串处理
任务描述
题目描述:编写程序,输入字符串s1
和s2
以及插入位置f
,在字符串s1
中的指定位置f处插入字符串s2
。如输入"BEIJING"
, "123"
, 3
,则输出:"BEI123JING"
。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 第一行和第二行分别输入两个字符串s1
和s2
,第三行输入插入位置f
。
每个字符串的长度不超过100
个字符。 输出 输出一行插入后的字符串。
测试说明
样例输入: BEIJING
123
3
样例输出: BEI123JING
**注意:使用gets()*函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。 *推荐使用:fgets()函数。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
char a[100],b[100];
int i,j,pos;
gets(a);
gets(b);
scanf("%d",&pos);
for(i=0;i<strlen(a);i++)
{
printf("%c",a[i]);
if(i+1==pos)
{
for(j=0;j<strlen(b);j++)
printf("%c",b[j]);
}
}
/*********End**********/
return 0;
}
第5关:字符串统计
任务描述
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop
作为最后输入的字符串。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 输入一段文字 输出 输入一段字符,以stop
作为最后输入的字符串。
测试说明
样例输入: My name is Amy
My name is Jane
stop
样例输出: 11 name
12 name
提示: 字符串长度不超过100
。
注意:使用gets()
函数会引起警告,但正确使用不影响测评结果。 推荐使用:fgets()
函数。
#include<stdio.h>
#include <string.h>
int main(void)
{
/*********Begin*********/
char a[100];
int i, j, pos = 0;
int str_len, word_len, max_word_len;
while(1) {
str_len = word_len = max_word_len = 0;
fgets(a, 100, stdin);//fgets函数的用法
if (strlen(a) <= 1)//输入的字符只有一个的情况
continue;
if (strlen(a) < 99) //remove '\n'
a[strlen(a)-1] = 0;
if(strncmp(a,"stop", strlen("stop"))==0)
break;
for(i = 0; a[i] !='\0'; i++) {
if(a[i] != ' ') {
word_len++;
str_len++;
continue;
}
if (word_len > max_word_len) {
max_word_len = word_len;
pos = i - word_len;
}
word_len = 0;
}
if (word_len > max_word_len) {
max_word_len = word_len;
pos = i - word_len;
}
printf("%d ", str_len);
for (i = pos; i < pos + max_word_len; i++)
printf("%c", a[i]);
putchar(10);
}
/*********End**********/
return 0;
}
第6关:字符串排序
任务描述
题目描述:输入3
行,每行n
个字符串,按由小到大的顺序输出
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 3
行字符串 输出 按照从小到大输出成3
行
测试说明
样例输入: cde
afg
abc
样例输出: abc
afg
cde
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char a[30],b[30],c[30],max[30];
scanf("%s %s %s",&a,&b,&c);
if(strcmp(a,b)>0)
{
strcpy(max,a);
strcpy(a,b);
strcpy(b,max);
}
if(strcmp(a,c)>0)
{
strcpy(max,a);
strcpy(a,c);
strcpy(c,max);
}
if(strcmp(b,c)>0)
{
strcpy(max,b);
strcpy(b,c);
strcpy(c,max);
}
printf("%s\n%s\n%s",a,b,c);
/*********End**********/
return 0;
}
s1和
s2,第三行输入插入位置
f`。
每个字符串的长度不超过100
个字符。 输出 输出一行插入后的字符串。
测试说明
样例输入: BEIJING
123
3
样例输出: BEI123JING
**注意:使用gets()*函数会引起警告并不是报错,只要代码编译正确并不会影响测评结果。 *推荐使用:fgets()函数。
#include<stdio.h>
int main(void)
{
/*********Begin*********/
char a[100],b[100];
int i,j,pos;
gets(a);
gets(b);
scanf("%d",&pos);
for(i=0;i<strlen(a);i++)
{
printf("%c",a[i]);
if(i+1==pos)
{
for(j=0;j<strlen(b);j++)
printf("%c",b[j]);
}
}
/*********End**********/
return 0;
}
第5关:字符串统计
任务描述
题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop
作为最后输入的字符串。
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 输入一段文字 输出 输入一段字符,以stop
作为最后输入的字符串。
测试说明
样例输入: My name is Amy
My name is Jane
stop
样例输出: 11 name
12 name
提示: 字符串长度不超过100
。
注意:使用gets()
函数会引起警告,但正确使用不影响测评结果。 推荐使用:fgets()
函数。
#include<stdio.h>
#include <string.h>
int main(void)
{
/*********Begin*********/
char a[100];
int i, j, pos = 0;
int str_len, word_len, max_word_len;
while(1) {
str_len = word_len = max_word_len = 0;
fgets(a, 100, stdin);//fgets函数的用法
if (strlen(a) <= 1)//输入的字符只有一个的情况
continue;
if (strlen(a) < 99) //remove '\n'
a[strlen(a)-1] = 0;
if(strncmp(a,"stop", strlen("stop"))==0)
break;
for(i = 0; a[i] !='\0'; i++) {
if(a[i] != ' ') {
word_len++;
str_len++;
continue;
}
if (word_len > max_word_len) {
max_word_len = word_len;
pos = i - word_len;
}
word_len = 0;
}
if (word_len > max_word_len) {
max_word_len = word_len;
pos = i - word_len;
}
printf("%d ", str_len);
for (i = pos; i < pos + max_word_len; i++)
printf("%c", a[i]);
putchar(10);
}
/*********End**********/
return 0;
}
第6关:字符串排序
任务描述
题目描述:输入3
行,每行n
个字符串,按由小到大的顺序输出
相关知识(略)
编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End
区域内进行代码补充。 输入 3
行字符串 输出 按照从小到大输出成3
行
测试说明
样例输入: cde
afg
abc
样例输出: abc
afg
cde
#include<stdio.h>
#include<string.h>
int main(void)
{
/*********Begin*********/
char a[30],b[30],c[30],max[30];
scanf("%s %s %s",&a,&b,&c);
if(strcmp(a,b)>0)
{
strcpy(max,a);
strcpy(a,b);
strcpy(b,max);
}
if(strcmp(a,c)>0)
{
strcpy(max,a);
strcpy(a,c);
strcpy(c,max);
}
if(strcmp(b,c)>0)
{
strcpy(max,b);
strcpy(b,c);
strcpy(c,max);
}
printf("%s\n%s\n%s",a,b,c);
/*********End**********/
return 0;
}