当前位置:首页 » 《随便一记》 » 正文

头歌实训平台C语言答案

27 人参与  2023年03月30日 18:41  分类 : 《随便一记》  评论

点击全文阅读


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关:选择结构-分段函数问题

任务描述

本关任务:编写程序,根据输入的值,输出函数的值。

有一个函数,定义如下

img

写一段程序,输入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关:学生成绩等级换算

任务描述

本关任务:给出一百分制成绩,要求输出成绩等级ABCDE90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E,如果输入数据不在0~100范围内,请输出一行:“Score is error!”。

相关知识

输入

从键盘输入一个成绩,成绩可以使浮点数。

输出

(1)如果输入数据在0100范围内:一个字符,表示成绩等级。 (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 30int 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,则面积:

img

编程要求

根据提示,在右侧编辑器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型浮点数,rh;输出:圆周长C1、圆球表面积Sb、圆柱体积Vb。 保留两位小数,每个结果后换行。

测试说明

平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。

样例输入: 1.5,3

样例输出: C1=9.42 Sb=28.26 Vb=21.20

*提示*

圆球表面积计算公式为s=4π**r2,r为球的半径。

圆柱体体积计算公式为:V=π**r2hr为半径,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个区域: img 快递费按邮件重量计算,由起重费用、续重费用两部分构成:

(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!”。

img

相关知识(略)

编程要求

根据提示,在右侧编辑器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     Purchase385      $ 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处补充代码,并按照要求完成本关任务。

输入 从键盘输入MN的值。

输出 它在第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关:最大公约数和最小公倍数

任务描述

本关任务:输入两个正整数mn,求其最大公约数和最小公倍数。

相关知识(略)

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,输入两个正整数mn,求其最大公约数和最小公倍数。

输入 从键盘上任意输入两个数。

输出 分两行输出,第一行输出:最大公约数是多少;第二行输出最小公倍数是多少。

测试说明

平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。 样例输入: 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+…的值

任务描述

本关任务:键盘输入正整数an,编程 s=a+aa+aaa+aaaa+aa...ana)的值。 例如: a=2n=5时,表示计算由2组成的数的和:2+22+222+2222+22222 ( 此时 共有5个数相加)。

输入:5 3 表示3个由5组成的数相加,即计算5+55+555的值,输出:615

输入:5 4 表示计算5+55+555+5555的值,输出:6170

相关知识

在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。

C中可利用whilefordo-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");}

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下: 键盘输入正整数an,编程 s=a+aa+aaa+aaaa+aa...ana)的值。 例如: a=2n=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分! 例如:

img

img

img

img

相关知识

在编程中,我们常常遇到需要将一条语句或者一段代码重复运行多次的情况,如没有循环语句,需逐条编写,会导致程序的繁杂与冗余。

C中可利用whilefordo-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");}

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下: 编程实现:编写一个程序,输入学生人数和每个人的成绩,计算平均成绩。 ######注意:当输入的学生人数小于等于0时,输出平均成绩为0分! 例如:

img

img

img

img

-

本关涉及的代码文件的代码框架如下:

#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中可利用whilefordo-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");}

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下: 计算正整数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中可利用whilefordo-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");}

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下: 编程实现:任意输入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中可利用whilefordo-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");}

编程要求

本关的编程任务是补全右侧代码片段中BeginEnd中间的代码,具体要求如下: 求出所有的水仙花数。 **提示:**所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。比如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关:指针变量作为函数参数实现两变量交换值

任务描述

题目描述:对输入的两个整数ab,用指针变量作为函数参数,交换ab的值。 ####输入 两个整数a b ####输出 输出用函数交换处理后的值a b ####样例输入 1 2 ####样例输出 2 1


开始你的任务吧,祝你成功!

** [TOC]


任务描述

题目描述:对输入的两个整数ab,用指针变量作为函数参数,交换ab的值。 ####相关知识(略) ####编程要求 请仔细阅读右侧代码,结合相关知识,在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个人开始报数(从13报数),凡报到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);elseprintf("%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关:亲密数

任务描述

题目描述:两个不同的自然数AB,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数AB称为亲密数。求3000以内的全部亲密数。

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 无需输入 输出 3000以内的全部亲密数(输出格式:(A,B),不加换行,不加分隔符号) 一对亲密数只输出一次,小的在前

测试说明

样例输出: (220,284)(1184,1210)(2620,2924)

提示:

按照亲密数定义,要判断数a是否有亲密数,只要计算出a的全部因子的累加和为b,再计算b的全部因子的累加和为n,若n等于a则可判定ab是亲密数。计算数a的各因子的算法:

用a依次对i(i=1~a/2)进行模运算,若模运算结果等于0,则ia的一个因子;否则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关:计算数组中元素的最大值及其所在的行列下标值

任务描述

题目描述:按如下函数原型编程从键盘输入一个mn列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中mn的值由用户键盘输入。已知mn的值都不超过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关:鞍点

任务描述

题目描述:找出具有mn列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10

相关知识(略)

编程要求

输入

输入数据有多行,第一行有两个数mn,下面有m行,每行有n个数。

输出

按下列格式输出鞍点: Array[i][j]=x 其中x代表鞍点,ij为鞍点所在的数组行和列下标,我们规定数组下标从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 10int 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关:字符插入

任务描述

题目描述:输入两个字符串ab,将b串中的最大字符插入到a串中最小字符后面。

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 输入一段文字 输出 输入两个字符串ab

测试说明

样例输入: 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关:字符串处理

任务描述

题目描述:编写程序,输入字符串s1s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING""123"3,则输出:"BEI123JING"

相关知识(略)

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。 输入 第一行和第二行分别输入两个字符串s1s2,第三行输入插入位置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;}

s1s2,第三行输入插入位置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;}

点击全文阅读


本文链接:http://zhangshiyu.com/post/57465.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1