C程序设计基础(厦门⼤学mooc)
1、求圆的周长和⾯积
输⼊圆的半径,计算并输出其周长和⾯积。常量pi的值取3.14159,周长和⾯积只输出⼩数点后2位数字。
输⼊格式:
输⼊圆的半径,半径为浮点型数据
输出格式:
第⼀⾏输出周长(只显⽰⾄⼩数点后2位数字)第⼆⾏输出⾯积(只显⽰⾄⼩数点后2位数字)
输⼊样例:
5
输出样例:
31.42
78.54
1 #include <stdio.h>
2#define PI 3.14159
3int main()
4 {
5float r;
6    scanf("%f",&r);
7
8    printf("%.2f\n%.2f",2*PI*r,PI*r*r);
9
10return0;
11 }
2、求个、⼗、百、千、万位数及和
从键盘输⼊⼀个正整数,然后求出它的个位数、⼗位数、百位数、千位数和万位数,并按样例的格式,打印出这五位数字的和。输⼊格式:
输⼊⼀个正整数
输出格式:
和(万位数+千位数+百位数+⼗位数+个位数=和)
输⼊样例:
123
输出样例:
6(0+0+1+2+3=6)
1 #include <stdio.h>
2
3int main()
4 {
5int i,a,b,c,d,e;
6    scanf("%d",&i);
7
8    a = i/10000%10;
9    b = i/1000%10;
10    c = i/100%10;
11    d = i/10%10;
12    e = i%10;
13    printf("%d(%d+%d+%d+%d+%d=%d)",a+b+c+d+e,a,b,c,d,e,a+b+c+d+e);
14
15return0;
16 }
3、分段函数
编写程序,根据分段函数y=f(x)的定义,输⼊x,输出y的值。
提⽰:
1、注意数学公式的书写规则:乘号*不能少,开根号⽤sqrt函数,不要忘记加#include
2、注意条件的书写:在 C 中 -1<x≤0 应写为 -1<x && x<=0。
允许不同的编程⽅法
输⼊格式:
输⼊x的值,x为浮点型
输出格式:
输出f(x)的值,保留2位⼩数
输⼊样例:
-3.1
输出样例:
-60.58
1 #include<stdio.h>
2 #include <string.h>
3 #include <math.h>
4int main()
5 {
6float x;
7    scanf("%f",&x);
8if(x<=-1)
9        printf("%.2f",2*x*x*x-1);
10else if(x<=0 && x>-1)
11        printf("%.2f",x*x);
12else if(x<=1 && x>0)
13        printf("%.2f",sqrt(x));
14else if(x>1)
15        printf("%.2f",3*x+2);
16return0;
17 }
4、计算商品⾦额
某商场清仓,商品打折销售,现需要编⼀个新的程序:按清仓价格计算出客户应⽀付的商品⾦额。商品清仓价格详情如下:
商品分书籍和⽔果,按重量分段计费:
(1)1000g以内(含1kg),每重200g(不⾜200g按200g计算)书籍4.5元,⽔果7元
(2)1000g以上部分,每重300g(不⾜300g按300g计算)书籍6元,⽔果8.5元
提⽰:
不⾜200g按200g计算,可以分2种情况考虑(能整除200、不能整除200),可使⽤ % 运算符。
也允许使⽤其它⽅法处理。
MOOC第四周课件“附加例题解析与作业指导”中有“编程作业第2题⽅法指导”,需要的同学可查阅。输⼊格式:
输⼊两个正整数w、c,以空格分隔,
其中,w代表重量,单位g;c为1或2,1代表书籍,2代表⽔果。
输出格式:
输出应⽀付的⾦额,保留两位⼩数。
输⼊样例1:
950 1
输出样例1:
22.50
输⼊样例2:
1500  2
输出样例2:
52.00
1 #include<stdio.h>
2
3struct price{
4float prices[2];
5int g;
6 };
7
8float fun(int w, int c, struct price pr);
9
10int main()
11 {
12struct price pr1{4.5, 7, 200}, pr2{6, 8.5, 300};
13
14int w, c;
15    scanf("%d%d",&w, &c);/* 重量物品种类 */
16
17if( w > 1000 )
18        printf("%.2f",fun(1000, c, pr1) + fun( w-1000, c, pr2 )); 19else
20        printf("%.2f",fun(w, c, pr1));
21
22return0;
23 }
24
25float fun(int w, int c, struct price pr)
26 {
27float price = pr.prices[c-1];    /* 单价 */
28int g = pr.g;  /* 计价重量单位 */
29
30int add = w%g ? 1 : 0;/* 不⾜取整 */
31
32return ( w/g + add ) * price;
33 }
1 #include<stdio.h>
2
3float fun(int w, int c, int flag = 0);
4
5int main()
6 {
7int w, c;
8    scanf("%d%d",&w, &c);/* 重量物品种类 */
9
10if( w > 1000 )
11        printf("%.2f",fun(1000, c) + fun( w-1000, c, 1 ));
12else
13        printf("%.2f",fun(w, c));
14
15return0;
16 }
17
18float fun(int w, int c, int flag)/* flag分段计费标志 */
c程序设计pdf下载
19 {
20float price1[3] = {0.0,4.5,7};
21float price2[3] = {0.0,6,8.5};
22
23float price = !flag ? price1[c] : price2[c];
24int g = !flag ? 200 : 300; /* 计价重量单位 */
25
26int add = w%g ? 1 : 0;/* 不⾜取整 */
27
28return ( w/g + add ) * price;
29 }
1 #include<stdio.h>
2 #include <string.h>
3 #include <math.h>
4
5float fun(int w,int c,int g, float c1, float c2);
6
7int main()
8 {
9int w,c;
10float f=0;
11    scanf("%d%d",&w,&c);
12
13int g = 200; float c1=4.5, c2=7;
14if(w<1000)//不⾜1000计费
15        f += fun(w,c,g,c1,c2);
16else{ //超过1000
17        f += fun(1000,c,g,c1,c2);//1000以内计费
18
19        w -= 1000;    //超过部分计费
20        g=300,c1=6,c2=8.5;
21        f += fun(w,c,g,c1,c2);
22    }
23    printf("%.2f",f);
24
25return0;
26 }
27
28float fun(int w,int c,int g, float c1, float c2)
29 {
30float f = 0;
31if(w%g==0){
32if(c==1){
33            f = w/g*c1;
34        }
35else{
36            f = w/g*c2;
37        }
38    }
39else{
40if(c==1){
41            f = (w/g+1)*c1;
42        }
43else{
44            f = (w/g+1)*c2;
45        }
46    }
47return f;
48 }
5、输出满⾜条件的数据
输⼊⾃然数n,输出1⾄n之间所有满⾜⽤3除余2、⽤5除余3、⽤7除余2的数,要求分⾏输出,每⾏5个,每个数据占5列。提⽰:
(1)可以模仿本周 for语句-----“符合要求的数”中的例⼦
(2)输出占5列可以使⽤ %5d
输⼊格式:
输⼊⼀个⾃然数n
输出格式:
每⾏5个,每个数据占5列
输⼊样例:
1000
输出样例:
23  128  233  338  443
548  653  758  863  968
1 #include <stdio.h>
2 #include <math.h>
3int main()
4 {
5int n, count=0;
6    scanf("%d",&n);
7for(int i=1; i<=n; ++i){
8if(i%3==2 && i%5==3 && i%7==2){
9            printf("%5d",i);
10            count++;
11if(count%5==0)
12                printf("\n");
13        }
14    }
15return0;
16 }
6、第⼏天完成长跑任务
学校进⾏长跑训练,规定学⽣第⼀天训练300⽶,第⼆天训练337.5⽶,第三天训练379.688⽶,......,后⼀天训练长度是前⼀天的 1+1/8倍,输⼊⼀个正整数x,判断学⽣第⼏天训练的长度开始超过x⽶?
注意:
在编程中 1/8 要写为1.0/8
可参考本周MOOC课件“附加例题解析”---------“while附加例题”**
输⼊格式:
输⼊⼀个正整数 x
输出格式:
第k天,k为训练的长度刚开始超过x⽶的天数
输⼊样例:
10000
输出样例:
第31天
1 #include <stdio.h>
2 #include <math.h>
3int main()
4 {
5int x, count=1;
6double sum=300;
7    scanf("%d",&x);
8while(sum<x)
9    {
10        sum = sum + sum/8;
11        count++;
12    }
13    printf("第%d天",count);
14return0;
15 }
7、因式分解
⼆次三项式,p>0,q>0,
如果常数项 q 可分解为2个因数a,b的积,并且a+b=p ,那么就可分解为(x+a)(x+b) .
编写因式分解的程序,输⼊p和q的值,如果可以因式分解,则输出因式分解的结果;否则,输出“⽆分解式”。
提⽰:
(可以模仿本周MOOC for语句-----“判定素数”的例题)
⽅法引导:(允许不同的编程⽅法)
1)可以设计⼀个标志变量flag=0,当有分解式时,置为1。
2) 循环测试不⼤于sqrt(q)的范围内的每个数,
{  若a是 q 的因数,则b=q/a
判断是否满⾜a+b=p,是则有分解
{  输出分解式
flag置为1  }
}
3) 循环结束后,如果flag的值为0,输出“⽆分解式”.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。