1

任务描述

本关需要你完成求圆的面积S及圆的周长C的小程序。

相关知识

算术运算符

下方显示了 C 语言支持的算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

  • A + B 将得到 30

  • A - B 将得到 -10

  • A * B 将得到 200

  • B / A 将得到 2

  • B % A 将得到 0 (描述:取模运算符,整除后的余数)。

圆的周长/面积公式

这里规定圆周率约等于3.14,半径为r

那么,周长公式为:

C=2∗3.14∗r

面积公式为:

S=3.14∗r2

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

r为圆的半径,c为圆的周长,s为圆的面积,输入圆的半径,通过相应的公式,输出圆面积及圆周长。

请严格按照下面的要求编写输入输出函数的格式,否则不能得分。

  • 绿色字体是说明性文字,不是程序内容;

  • 黑色字体为输出内容;

  • 红色字体为输入内容;

  • 所有标点符号均为英文标点。

效果如下:

#include <stdio.h>
int main() {
	float r, s, c;
	printf("请输入圆半径r:");
	scanf("%f", &r);
	c = 2 * 3.14 * r;
	s = 3.14 * r * r;
	printf("圆面积S=%lf,圆周长C=%lf\n", s, c);
	return 0;
}

2

任务描述

本关需要你完成计算物体在某个点的末速度和位移的小程序。

相关知识

初始速度v0,加速度a,时间t,那么:

末速度v公式为:

v=v0+a∗t

位移s公式为:

s=v0∗t+0.5∗a∗t∗t

编程要求

已知时间t、加速度a和初始速度v0,根据物理公式,输出物体在某个时间点的末速度和位移。

程序会对你编写的代码测试运行多次。

例:

测试输入:
30 0.19 0 //时间 加速度 初始速度

预期输出:

当初始速度为0.000000时
30.000000s时的速度为5.700000
30.000000s时的位移为85.500000

#include <stdio.h>

int main() {
	float t, a, v, s, v0;
	scanf("%f%f%f", &t, &a, &v0);
	v = v0 + a * t;
	s = v0 * t + 0.5 * a * t * t;
	printf("当初始速度为%f时\n", v0);
	printf("%fs时的速度为%f\n%fs时的位移为%f\n", t, v, t, s);
	return 0;
}

3

任务描述

本关需要你完成一个计算平面两点间距离(保留2位小数)的小程序。

相关知识

距离公式

空间中任意两点的坐标为 x1,y1x2,y2

则两点间的距离公式为sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1))

sqrt简介

功能:计算一个非负实数的平方根。

比如:计算16的平方根sqrt(16) 就可以了。

编程要求

x1 y1表示第一个点的坐标;x2 y2表示第二个点的坐标;均为float类型。

输入格式:x1 y1 x2 y2

测试举例:

测试输入:0 0 3 4
预期输出:5.00

提示: 使用math.h中的sqrt()函数,不要加入额外的输入输出

#include <stdio.h>

#include <math.h>

int main()

{ 

    double x1,y1,x2,y2,d;

    scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2);

    d = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

    printf("%.2f",d);

    return 0;

}

4

任务描述

本关请完成将一个华氏温度F,转换成摄氏温度C输出的小程序。

相关知识

算术表达式

算术表达式是指数学课程中,由数字和运算符号组成的式子,可以简单清晰地记录或描述计算过程和内容。

例如:

 
 
  1. (a-b)/c*2+'a'+15%-4

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

输入一个华氏温度F,要求输出摄氏温度C

计算公式为:C=5/9 (F−32),输出要有文字说明,取2位小数。

效果如下:

#include <stdio.h>

int main() {
	double C, F;
	scanf("%lf", &F);
	C=5.0/9*(F-32);
	printf("摄氏温度为:%.2lf", C);
}

5

任务描述

本关需要使用for循环控制语句来完成求分数序列和。

相关知识

让我们再次回顾C语言循环控制语句for循环。

for循环

C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为:

 
 
  1. for(循环变量赋初值; 循环条件; 循环变量增量) 语句

它的执行过程如下图所示:

  1. 先求解表达式1

  2. 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3步;若其值为假(0),则结束循环,转到第5步;

  3. 求解表达式3

  4. 转回上面第2步继续执行;

  5. 循环结束,执行for语句下面的一个语句。

例如:

  1. for( i=1; i<=100; i++ ) sum=sum+i;

for语句使用注意事项:

  1. 省略了“表达式1(循环变量赋初值)”,表示不对循环控制变量赋初值;

  2. 省略了“表达式2(循环条件)”,则不做其它处理时便成为死循环;

  3. 省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

编程要求

有一分数序列:2/13/25/38/513/821/13...求出这个数列的前n项之和的整数部分。

n的值运行时通过键盘输入给定,并且n<=30

输出值只保留整数(不要四舍五入)。

效果如下:

输入:20

输出:32。 

#include <stdio.h>

int main() {
	float a=2,b=1,i,s=0,n;
	scanf("%f", &n);
	for ( i = 1; i <= n; i++) {
		a=a+b;
		b=a-b;
		s+=(a/b);
	}

	printf("%2.f", s);
}

6

任务描述

本关需要你完成一个求学生平均成绩的小程序。

相关知识

上关我们回顾了For循环控制语句,本关我们继续回顾while循环和do-while循环语句。

while循环

while循环的一般形式为:

  1. while(表达式){
  2. 语句块
  3. }

其执行过程如下图所示:

其中表达式称为循环条件,语句块称为循环体。

  1. 计算while后面括号里表达式的值,若其结果非0,则转入(2),否则转(3);
  2. 执行循环体,转(1);
  3. 退出循环,执行循环体下面的语句。

由于是先执行判断后执行循环体,所以循环体可能一次都不执行。
循环体可以为空语句

例如:

  1. #include <stdio.h>
  2. int main(void){
  3. int i=1, sum=0;
  4. while(i<=100){
  5. sum+=i;
  6. i++;
  7. }
  8. printf("%d
  9. ",sum);
  10. return 0;
  11. }

do-while循环语句

do-while循环的一般形式为:

  1. do{
  2. 语句块
  3. }while(表达式);

其执行过程如下图所示:

  1. 执行循环体,转(2);

  2. 计算while后面括号里表达式的值,若其结果非0,则转入(1),否则转(3);

  3. 退出循环,执行循环体下面的语句。

注意:

  • do……while语句最后的分号(;)不可少,否则提示出错。循环体至少执行一次。

例如:

  1. #include<stdio.h>
  2. void main(void)
  3. {
  4. int i=1,s=0; /*赋初值*/
  5. do
  6. {
  7. s=s+i; /*求一千以内奇数的和*/
  8. i=i+2; /*这里是循环体*/
  9. }
  10. while(i<=1000); /*不要忘记分号,while这写条件,不满足则退出程序*/
  11. printf("一千以内奇数的和为:%d
  12. ",s);
  13. }

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

输入:学生人数和每个人的成绩。
输出:平均成绩。

当输入的学生人数小于等于0时,输出平均成绩为0分!

效果如下:

#include<stdio.h>
	int main()
	{ 
	  int a,i;
	  double b,c=0;
	  scanf("%d",&a);
	  if(a<=0)
	  {
		  printf("the number of students:the scores:average=0.00\n");
	  }
	  else
	  	{
			for(i=1;i<=a;i++)
	  		{scanf(" %lf",&b);  
			c=c+b;}	
	  	printf("the number of students:the scores:average=%.2f\n",c/a);
		  }
       return 0;
	}

7

任务描述

本关需要你完成整数间进制转换的小程序。

相关知识

什么是进制?进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,类似的tally mark计数等)。

对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位

计算机中常用的进制有二进制、八进制、十进制、十六进制。本关我们将回顾十进制和十六进制。

十进制

十进制的基数为10,数码由0-9组成,计数规律逢十进一。十进制编码几乎就是数值本身。

十六进制

十六进制,它由0-9A-F(它们分别表示十进制数10~15)组成,字母不区分大小写。十六进制数运算规律是逢十六进一,即基数R=16=2^4,通常在表示时用尾部标志H或下标16以示区别,在c语言中用添加前缀0x以表示十六进制数。

例如:十六进制数4AC8可写成(4AC8)16,或写成4AC8H

十六进制转十进制

把十六进制数按位权形式展开多项式和的形式,求其最后的和,就是其对应的十进制数——简称“按权求和”。

例:把(38A.11)16转换为十进制数。

解:

  1. (38A.11)16
  2. =3×16的2次方+8×16的1次方+10×16的0次方+1×16的-1次方+1×16的-2次方
  3. =768+128+10+0.0625+0.0039
  4. =906.0664

十进制转十六进制

一个十进制整数转换为十六进制整数通常采用除十六取余法,即用十六连续除十进制数,直到商为0,逆序排列余数即可得到——简称除十六取余法。

例:将25转换为十六进制数。

解:

  1. 25÷16=1 余数9
  2. 1÷16=0 余数1
  3. 所以25=(19)16

编程要求

编写程序,将十进制正整数转成十六进制字符串输出。效果如下:

输入:17。 输出:11

#include <stdio.h>
int main()
{
     int a,b,i=0,j=0;
    char sz[]="0123456789ABCDEF";
    char h[16];
    scanf("%d\n",&a);
    while(a)
    {
        h[i++]=sz[a%16];
        a=a/16;
    }
    for (j=i-1;j>=0;--j)
        printf("%c",h[j]);
        return 0;

}

8

任务描述

本关需要你完成在数字中插入千分位分隔符的小程序。

相关知识

什么是千分位分隔符呢?千位分隔符,其实就是数字中的逗号。依西方的习惯,人们在数字中加进一个符号,以免因数字位数太多而难以看出它的值。所以人们在数字中,每隔三位数加进一个逗号,也就是千位分隔符,以便更加容易认出数值。

C语言中编译千分位分隔符涉及到循环控制语句,if嵌套语句等,总的来说就是循环判断综合。

例如:

  1. int main()
  2. {
  3. int i = 1, n, m, p, q,t;
  4. printf("Please input an integer:");
  5. scanf("%d", &n);
  6. t = n;//copy一个副本
  7. printf("The result is:");
  8. while ((n / 10) != 0){
  9. n = n / 10;
  10. i++;
  11. }//到这 n不存在了
  12. i = i - 1;
  13. p = 1;
  14. for (q = 1; q <= i; q++){
  15. p = p * 10;
  16. }
  17. while (i >= 0){
  18. m = t / p;
  19. t = t - m*p;
  20. printf("%d", m);
  21. p = p / 10;
  22. if (i % 3 == 0 && i != 0){
  23. printf(",");
  24. }
  25. i = i - 1;
  26. }
  27. return 0;
  28. }

编程要求

在输入的数字中插入千分位分隔符并将其输出。

效果如下:

输入:1234567。 输出:1,234,567

#include <stdio.h>
int main()
{
     long int i = 1,n,m,p,q,t;  

scanf("%ld", &n);  
t = n; 
while ((n/10) != 0){  
    n = n/10;  
    i++;  
}  
i=i-1; 
p=1;  
for (q=1; q<=i; q++){  
    p=p*10;  
}  
while (i>=0){  
    m=t/p;  
    t=t-m*p;  
    printf("%d", m);  
    p = p/10;  
    if (i%3==0 && i!=0){  
        printf(",");  
    }  
    i=i-1;  
}  
return 0;

}

9

任务描述

本关需要你完成一个常规的歌手评分系统的小程序。

相关知识

本关继续强化C语言循环控制语句和if判断语句练习。前面的几个关卡我们回顾了循环控制语句的while循环语句、do-while循环语句和for循环语句,本关将带你回顾判断语句if

判断语句要求程序指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。

C 语言把任何非零和非空的值假定为 true,把0null假定为 false

if语句

用法如下:

  1. if(表达式) 语句

功能:表达式为真,则执行语句;表达式为假,则跳过语句执行程序的下面的代码。

if的控制范围:

  1. if只能控制紧临的第一种语句执行或不执行;
  2. if(表达式)
  3. 语句A;//属于If控制
  4. 语句B;//不属于if控制
  5. if可以控制{}内的所有的语句。
  6. if(表达式)
  7. {
  8. 语句A;
  9. 语句B;
  10. }

在一般情况下,为了代码的整齐、易懂,就算只有一条语句要控制,也会用{}括起来。

编程要求

歌手评分系统:有7个评委对歌手打分,请编程计算歌手的成绩。
规则:去掉一个最高分,去掉一个最低分,求平均分,就是歌手应得分。

效果如下:

输入:99 98.5 96 92.5 96.5 90 93。 输出:score=95.30

#include<stdio.h>
#include<stdlib.h>
int main()
{
    double a[10];
    double sum=0.0;
    for(int i=0;i<7;i++){
        scanf("%lf",&a[i]);
    }
    double max=a[0];
    double min=a[0];
    for(int i=0;i<7;i++){
        if(a[i]>max)max=a[i];
        if(a[i]<min)min=a[i];
        sum+=a[i];
    }
    sum=sum-max-min;
    printf("score=%.2lf",sum/5);
    return 0;

}

更多推荐

头歌作业C语言基本语法练习题