• C程序设计基础(厦门大学mooc)


    1、求圆的周长和面积 

    输入圆的半径,计算并输出其周长和面积。常量pi的值取3.14159,周长和面积只输出小数点后2位数字。

    输入格式:

    输入圆的半径,半径为浮点型数据

    输出格式:

    第一行输出周长(只显示至小数点后2位数字) 第二行输出面积(只显示至小数点后2位数字)

    输入样例:

    5
    

    输出样例:

    31.42
    78.54
     1 #include <stdio.h> 
     2 #define PI 3.14159
     3 int main()
     4 {
     5     float r;
     6     scanf("%f",&r);
     7     
     8     printf("%.2f
    %.2f",2*PI*r,PI*r*r);
     9 
    10     return 0;
    11 }

    2、求个、十、百、千、万位数及和 

    从键盘输入一个正整数,然后求出它的个位数、十位数、百位数、千位数和万位数,并按样例的格式,打印出这五位数字的和。

    输入格式:

    输入一个正整数

    输出格式:

    和(万位数+千位数+百位数+十位数+个位数=和)

    输入样例:

    123
    

    输出样例:

    6(0+0+1+2+3=6)
     1 #include <stdio.h> 
     2 
     3 int main()
     4 {
     5     int 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 
    15     return 0;
    16 }

    3、分段函数 

    编写程序,根据分段函数y=f(x)的定义,输入x,输出y的值。

    分支.png

    提示:

    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>
     4 int main()
     5 {
     6     float x;
     7     scanf("%f",&x);
     8     if(x<=-1)
     9         printf("%.2f",2*x*x*x-1);
    10     else if(x<=0 && x>-1)
    11         printf("%.2f",x*x);
    12     else if(x<=1 && x>0)
    13         printf("%.2f",sqrt(x));
    14     else if(x>1)
    15         printf("%.2f",3*x+2);
    16     return 0;
    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 
     3 struct price{
     4     float prices[2];
     5     int g;
     6 };
     7 
     8 float fun(int w, int c, struct price pr);
     9 
    10 int main()
    11 {
    12     struct price pr1{4.5, 7, 200}, pr2{6, 8.5, 300};
    13     
    14     int w, c;  
    15     scanf("%d%d",&w, &c);/* 重量 物品种类 */
    16     
    17     if( w > 1000 )
    18         printf("%.2f",fun(1000, c, pr1) + fun( w-1000, c, pr2 ));
    19     else
    20         printf("%.2f",fun(w, c, pr1));
    21     
    22     return 0;
    23 }
    24 
    25 float fun(int w, int c, struct price pr)
    26 {   
    27     float price = pr.prices[c-1];    /* 单价 */
    28     int g = pr.g;  /* 计价重量单位 */
    29     
    30     int add = w%g ? 1 : 0;/* 不足取整 */
    31     
    32     return ( w/g + add ) * price; 
    33 }
     1 #include<stdio.h>
     2 
     3 float fun(int w, int c, int flag = 0);
     4 
     5 int main()
     6 {
     7     int w, c;  
     8     scanf("%d%d",&w, &c);/* 重量 物品种类 */
     9     
    10     if( w > 1000 )
    11         printf("%.2f",fun(1000, c) + fun( w-1000, c, 1 ));
    12     else
    13         printf("%.2f",fun(w, c));
    14     
    15     return 0;
    16 }
    17 
    18 float fun(int w, int c, int flag)/* flag分段计费标志 */
    19 {   
    20     float price1[3] = {0.0,4.5,7};
    21     float price2[3] = {0.0,6,8.5};
    22     
    23     float price = !flag ? price1[c] : price2[c];    
    24     int g = !flag ? 200 : 300; /* 计价重量单位 */
    25     
    26     int add = w%g ? 1 : 0;/* 不足取整 */
    27     
    28     return ( w/g + add ) * price; 
    29 }
     1 #include<stdio.h>
     2 #include <string.h>
     3 #include <math.h>
     4 
     5 float fun(int w,int c,int g, float c1, float c2);
     6 
     7 int main()
     8 {
     9     int w,c;
    10     float f=0;
    11     scanf("%d%d",&w,&c);
    12 
    13     int g = 200; float c1=4.5, c2=7;
    14     if(w<1000)//不足1000计费
    15         f += fun(w,c,g,c1,c2);
    16     else{ //超过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     
    25     return 0;
    26 }
    27 
    28 float fun(int w,int c,int g, float c1, float c2)
    29 {
    30     float f = 0;
    31     if(w%g==0){
    32         if(c==1){
    33             f = w/g*c1;
    34         }
    35         else{
    36             f = w/g*c2;
    37         }
    38     }
    39     else{
    40         if(c==1){
    41             f = (w/g+1)*c1;
    42         }
    43         else{
    44             f = (w/g+1)*c2;
    45         }
    46     }
    47     return 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>
     3 int main()
     4 {
     5     int n, count=0;
     6     scanf("%d",&n);    
     7     for(int i=1; i<=n; ++i){
     8         if(i%3==2 && i%5==3 && i%7==2){
     9             printf("%5d",i);
    10             count++;
    11             if(count%5==0)
    12                 printf("
    ");
    13         }
    14     }    
    15     return 0;
    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>
     3 int main()
     4 {
     5     int x, count=1;
     6     double sum=300;
     7     scanf("%d",&x);    
     8     while(sum<x)
     9     {
    10         sum = sum + sum/8;
    11         count++;
    12     }
    13     printf("第%d天",count);
    14     return 0;
    15 }

    7、因式分解 

    二次三项式G1.JPG ,p>0,q>0,

    如果常数项 q 可分解为2个因数a,b的积,并且a+b=p ,那么 G1.JPG 就可分解为(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,输出“无分解式”.

    输入格式:

    在一行内输入p、q的值,用空格分隔,其中p、q为整数,p>0,q>0

    输出格式:

    输出因式分解的结果;不能分解,则输出“无分解式”

    输入样例1:

    7   6
    

    输出样例1:

    (x+1)(x+6)
    

    输入样例2:

    7   5
    

    输出样例2:

    无分解式
     1 #include <stdio.h>
     2 #include <math.h>
     3 int main()
     4 {
     5     int p,q, flag=0;
     6     scanf("%d%d",&p,&q);    
     7     for(int i=1; i<=q*q; ++i){
     8         if(q%i==0 && (i+q/i == p)){
     9             printf("(x+%d)(x+%d)",i,q/i);
    10             flag = 1;
    11             break;
    12         }        
    13     }
    14     if(!flag)
    15         printf("无分解式");    
    16     return 0;
    17 }

    8、输出1~50之间的所有奇数  

    用for循环语句编程输出1~50之间的所有奇数,两数之间以空格分隔,同时,最后一个数49之后带一个空格。

    输入格式:

    输出格式:

    两数之间隔1个空格,最后一个数49之后也有一个空格

    输入样例:

    
    

    输出样例:

    1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 
     1 #include <stdio.h>
     2 #include <math.h>
     3 int main()
     4 {
     5     for(int i=1; i<50; ++i){
     6         if(i%2){
     7             printf("%d ",i);
     8         }        
     9     }
    10     return 0;
    11 }

    9、计算1+1/2+1/3+1/4+...+1/n的值

    输入整数n,计算1+1/2+1/3+1/4+...+1/n的值,并输出。

    输入格式:

    输入一个整数n

    输出格式:

    输出公式的和,采用 %f 的格式

    输入样例:

    200
    

    输出样例:

    5.878032
     1 #include <stdio.h>
     2 #include <math.h>
     3 int main()
     4 {
     5     float sum = 0;
     6     int n;
     7     scanf("%d",&n);
     8     for(int i=1; i<=n; ++i){
     9         sum += 1.0/i;        
    10     }
    11     printf("%f",sum);
    12     return 0;
    13 }

    10、统计输入数的个数及平均值。 

    输入一组正整数,以-1作为结束标记,统计输入正整数的个数,并计算其平均值。

    输入格式:

    输入一组正整数,数与数之间用空格分隔,最后一个为-1

    输出格式:

    分2行输出, 第一行输出个数, 第二行输出平均值,采用%f的输出格式

    输入样例:

    1 2 3 -1
    

    输出样例:

    3
    2.000000
     1 #include <stdio.h>
     2 #include <math.h>
     3 int main()
     4 {
     5     float sum = 0;
     6     int x, count = 0;
     7     while(scanf("%d",&x) && x>0){
     8         sum += x;
     9         count++;
    10     }
    11     printf("%d
    %f",count,sum/count);
    12     return 0;
    13 }

    11、珠宝鉴定大赛

    某珠宝鉴定大赛,由主持人输入珠宝的真实价格,再由8位参赛选手输入各自估计的价格,估价与真实价格最接近的选手获胜。

    (注:程序不考虑估价相同的情况,只需输出一位估价最接近的选手。)

    提示:

    1、价格是浮点数,求绝对值函数应使用fabs(x)
    2、该题是求最小值的题目,求 fabs(估价-真实价格) 的最小值

    可参考MOOC第6周课件“附加例题解析”中“求最值及其位置”文档

    输入格式:

    第一行输入 :珠宝的真实价格

    第二行输入 :选手估计的价格(单位:万)

    输出格式:

    获胜选手的序号

    最接近的估价(保留1位小数,使用%.1f)

    输入样例:

    6.5
    0.8    12    3    6.4    9.5    0.75    5.4    71
    

    输出样例:

    4
    6.4
     1 #include <stdio.h>
     2 #include <math.h>
     3 #include <string.h>
     4 int main()
     5 {    
     6     int n=8, ti=0;
     7     float key, x, t;
     8     scanf("%f%f",&key,&t);
     9     
    10     for(int i=1; i<8; ++i){
    11         scanf("%f",&x);
    12         if(fabs(key-x)<fabs(key-t)){
    13             t = x;
    14             ti = i;
    15         }            
    16     }
    17     printf("%d
    %.1f
    ",ti+1,t);
    18     return 0;
    19 }

    12、求解马克思手稿中的数学题 

    求解马克思手稿中的数学题:

    有30个人,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?(男人、女人和小孩都至少有1人)

    提示:

    可以参照MOOC第六周教学内容: 常用算法举例----穷举法“百鸡问题”

    输入格式:

    输出格式:

    按样例格式输出,每行一个组合,中间用逗号分隔

    输入样例:

    输出样例:

    man=1,woman=18,child=11
    man=2,woman=16,child=12
    man=3,woman=14,child=13
    man=4,woman=12,child=14
    man=5,woman=10,child=15
    man=6,woman=8,child=16
    man=7,woman=6,child=17
    man=8,woman=4,child=18
    man=9,woman=2,child=19
     1 #include <stdio.h>
     2 #include <math.h>
     3 #include <string.h>
     4 int main()
     5 {    
     6     int man,woman,child;
     7     for(man=1; man<50/3; ++man){
     8         for(woman=1; woman<50/2; ++woman){
     9             child = 30 - man - woman;
    10             if(man*3+woman*2+child==50)
    11                 printf("man=%d,woman=%d,child=%d
    ",man,woman,child);
    12         }
    13     }
    14     return 0;
    15 }

    13、判断完数 

    一个正整数如果恰好等于它的因子(不包括自己)之和,这个数就称为“完数”。例如,6的因子为1、2、3,且6=1+2+3,因此6是完数。输入一个正整数,判断该数是否为完数。

    输入格式:

    输入一个正整数

    输出格式:

    判断结果,是完数 或 不是完数

    输入样例1:

    6
    

    输出样例1:

    是完数
    

    输入样例2:

    53
    

    输出样例2:

    不是完数
     1 #include <stdio.h>
     2 #include <math.h>
     3 #include <string.h>
     4 
     5 int sum(int n){
     6     int s=0;
     7     for(int i=1;i<n;i++){
     8         if(n%i==0){
     9             s += i;
    10         }
    11     }   
    12     return s==n;
    13 }
    14 
    15 int main()
    16 {    
    17     int n;
    18     scanf("%d",&n);
    19     if(sum(n))
    20         printf("是完数
    ");
    21     else
    22         printf("不是完数
    ");
    23     return 0;
    24 }

    14、最小公倍数 

    输入两个正整数m和n,求其最小公倍数。

    输入格式:

    输入两个正整数m和n,中间用空格分隔

    输出格式:

    输出最小公倍数

    输入样例:

    8 6
    

    输出样例:

    24
    #include<stdio.h>
    #include<stdlib.h>
    
    int LCM(int x, int y);
    int main()
    {
        int a,b;
        scanf("%d%d",&a,&b);   
        printf("%d",LCM(a,b));
        return 0;
    }
    
    int LCM(int x, int y){
        int t = x>y?x:y;
        while(x%t||y%t) t--; //最大公约数
        return x/t*y; //最小公倍数
    }

    15、求多项式的值 

    编写函数,计算多项式f(x)=3*x*x*x+2*x*x+5*x+1的值,并返回该值。

    提示:

    可以模仿MOOC第七周课件“函数的定义、调用、声明”内第一个文档“请先动手做”的例题。

    函数接口定义:

    在这里描述函数接口。例如:
    int f(int x)
    

    其中 x 是用户传入的参数, x 的值不超过int的范围。函数返回 3*x*x*x+2*x*x+5*x+1 的结果。

    裁判测试程序样例:

    在main函数中调用 f 函数,计算并输出f(1),f(2),f(12),f(15),f(25)的值 请在下面指定位置填写f函数

    #include <stdio.h>
    int f(int x);
    int main()
    {
        printf("%d
    ",f(1)+f(2)+f(12)+f(15)+f(25));
    
        return 0;
    }
    /* f(x)函数的代码嵌套在这里 */
    
    
    

    输出样例:

    在这里给出相应的输出。例如:

    64489

    1 int f(int x)
    2 {
    3     return 3*x*x*x+2*x*x+5*x+1;
    4 }

    16、求正整数n从右边开始数的第k个数字

    写一个函数int qshu(n,k),求正整数n从右边开始数的第k个数字, 该函数返回这个数字。例如n为12345,k为2,则该函数返回4。

    提示:

    1、n反复除以10,当除第k-1次后,商的个位数就是第k个数字,再用%10运算取出商的个位数。

    2、可以参考MOOC第二周课堂讨论“讨论一类赋值语句的特点”置顶贴的例子

    函数接口定义:

    int qshu(int n,int k);
    

    其中 n 和 k 都是用户传入的参数。 n、k 的值不超过int的范围,函数须返回 n 从右边数第 k 个数字。

    裁判测试程序样例:

    在main()中设计测试qshu函数:输入正整数n和k,调用qshu(n,k)函数,根据返回值,输出第k个数字。 请在下面指定位置完善qshu函数

    #include<stdio.h>
    int qshu(int n,int k);
    int main()
    {
        int n,k;
    
        scanf("%d",&n);
        scanf("%d",&k);
        printf("%d从右边数的第%d个数是%d",n,k,qshu(n,k));
    
        return 0;
    }
    /* 请在这里编写qshu函数 */
    

    输入样例:

    12345
    2
    

    输出样例:

    12345从右边数的第2个数是4
    1 int qshu(int n,int k){
    2     int num;
    3     while(k--){
    4         num = n%10;
    5         n /= 10;
    6     }
    7     return num;
    8 }

    17、求2个数的最小值函数 

    编写函数求两个整数的最小值,并返回最小者。

    例如,两个整数3与54,则该函数应该返回3。

    函数接口定义:

    int  min(int x,int y);
    

    其中 x 和 y 都是用户传入的参数。 x、y 的值不超过int的范围,函数须返回 x 与 y 中的最小值。

    裁判测试程序样例:

    主函数中通过键盘输入三个整数,通过2次调用min函数,输出其中的最小值。 请在下面指定位置编写min函数

    #include <stdio.h>
    
    int  min(int x,int y);
    
    int main()
    
    {
    
        int x,y,z;
    
        scanf("%d%d%d",&x,&y,&z);
    
        printf("最小数是%d",min(min(x,y),z));
    
        return 0;
    
    }
    
    /* 请在这里编写min函数 */
    

    输入样例:

    1 4 -2
    

    输出样例:

    在这里给出相应的输出。例如:

    最小数是-2
    int  min(int x,int y){
        return x>y?y:x;
    }

    18、水仙花数函数 

    编写求水仙花数的函数sxhsu(int i):功能判断 i 是否为水仙花数,如果是,则函数返回1;如果不是,则返回0。例如:x如果是153,则该函数应该返回1;x如果是253,则该函数应该返回0。

    (水仙花数是指三位数中 个位数的立方+十位数的立方+百位数的立方=该数,例如,153=1的立方+5的立方+3的立方)

    函数接口定义:

    int sxhs(int i);
    

    其中 i 是用户传入的参数, i 的值不超过int的范围。如果 i 是水仙花数,则函数返回1;如果不是,则返回0。。

    裁判测试程序样例:

    main()中输入a、b的值(3位数),调用sxhsu函数,求出[a,b]区间中的所有水仙花数,一行输出1个。 请在下面指定位置填写sxhs函数

    #include <stdio.h>
    int sxhs(int i);
    int main() 
    { 
    int i,a,b; 
    scanf("%d%d",&a,&b);
    
    for(i=a;i<=b;i++) 
      if(sxhs(i)==1) printf("%d
    ",i);
    } 
    
    /* 请在这里填写sxhs函数 */
    

    输入样例:

    100 999
    

    输出样例:

    153
    370
    371
    407
    1 int sxhs(int i){
    2     int a=i%10;
    3     int b=i/10%10;
    4     int c=i/100;
    5     if(a*a*a+b*b*b+c*c*c==i)
    6         return 1;
    7     return 0;
    8 }

    19、绘制图形 

    编写两个函数:

    函数void triangle(int n),该函数的功能是输出由n行星号组成的直角三角形,第一行1个,每行递增2个

    函数void rectangle(int n),该函数的功能是输出矩形,n行,每行3个*;

    函数接口定义:

    void triangle(int n);
    

    其中 n 是用户传入的参数, n 的值不超过int的范围,函数输出由n行星号组成的直角三角形,第一行1个,每行递增2个

    void rectangle(int n);
    

    其中 n 是用户传入的参数, n 的值不超过int的范围,函数输出矩形,n行,每行3个*。

    裁判测试程序样例:

    main函数的功能:第一行输入图形的行数(大于3),第二行输入图形样式号(1或2或3,其中,1---三角形 2---矩形 3---小旗 ),最后输出指定行数的相应图形。 例如,当输入 5 3 输出小旗(小旗由5行的三角形和5行矩形组成) 请在指定的位置填写triangle和rectangle函数

    #include <stdio.h>
    
    void triangle(int n);
    void rectangle(int n);
    int main()
    {int k,i;
     scanf("%d",&i);
     scanf("%d",&k);
     if(1==k) triangle(i);
     if(2==k) rectangle(i);
     if(3==k) {triangle(i);rectangle(i);}	
      return 0;
    }
    /* 请在这里填写函数 */
    

    输入样例:

    5
    3
    

    输出样例:

    *
    ***
    *****
    *******
    *********
    ***
    ***
    ***
    ***
    ***
     1 void triangle(int n){
     2     for(int i=0; i<n; ++i){
     3         int t=2*i+1;
     4         while(t--)
     5             printf("*");
     6         printf("
    ");
     7     }
     8 }
     9 void rectangle(int n){
    10     while(n--)
    11         printf("***
    ");
    12 }

    20、输出问候语

    根据用户输入的时间,输出不同的问候语。

    要求输入24小时制的时间,当输入:

       6:00-11:59,输出“上午好”;
    
       12:00-17:59,输出“下午好”;
    
       18:00-24:00 或 0:00-5:59,输出“晚上好”。

    提示:

    (1)在scanf的格式控制字符串中使用冒号 : 设置输入格式,获取小时,可参考“分数输入案例”

    (2)可以用3个单分支if语句完成:

        如果小时在6-11之间,输出“上午好”
    
        如果小时在12-17之间,输出“下午好”
    
        如果小时在18-24或者0-5之间,输出“晚上好”

    需要更多样例参考的同学可查阅第3周MOOC课件 “ 选择结构初步 ” 里的最后一个文档 “ 习题解析 ”中第1题

    输入格式:

    小时:分

    输出格式:

    问候语

    输入样例:

    18:00
    

    输出样例:

    晚上好
     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int a,b;
     6     scanf("%d:%02d",&a,&b);
     7     if(a>=6 && a<=11)
     8         printf("上午好");
     9     else if(a>=12 && a<=17)
    10         printf("下午好");
    11     else 
    12         printf("晚上好");
    13     return 0;
    14 }

    21、学号信息提取

    某学校的学生编号由12位数字组成,其中前3位是学院代码,第4至7位是入学年份,第8-9位是专业代码,最后3位是班级座号,请编程:输入学号,输出该生的入学年份、学院代码、班级座号。

    提示:

    (1)在scanf函数中使用%md截取所需的数字,可参考MOOC第3周课件“scanf的附加说明项-数据截取”中的案例

    (2)输出005时,使用printf的附加说明符%0md

    输入格式:

    输入学号(由12位数字组成)

    输出格式:

    输出入学年份、学院代码、班级座号,其中班级座号是3位数,不足3位,前面补0

    输入样例:

    312201603005
    

    输出样例:

    入学年份:2016
    学院代码:312
    班级座号:005
     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int a,b,d,c;
     6     scanf("%3d%4d%2d%3d",&a,&b,&d,&c);
     7     
     8     printf("入学年份:%d
    学院代码:%d
    班级座号:%03d
    ",b,a,c);
     9     
    10     return 0;
    11 }

    22、判断奇偶数

    输入一个整数,当它是偶数时,输出“该数是偶数”,否则,输出“该数是奇数”。

    输入格式:

    输入一个整数

    输出格式:

    输出判断结果:该数是偶数,或,该数是奇数

    输入样例:

    5
    

    输出样例:

    该数是奇数
     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     if(n%2)
     8         printf("该数是奇数");
     9     else
    10         printf("该数是偶数");
    11     return 0;
    12 }

    23、判断三角形 

    输入三角形三条边的长度,判断是否构成三角形。

    输入格式:

    输入三角形三条边的长度(整型)

    输出格式:

    输出判断结果,是三角形,或 ,不是三角形

    输入样例:

    3 4 5
    

    输出样例:

    是三角形
     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int a,b,c;
     6     scanf("%d%d%d",&a,&b,&c);
     7     if(a+b>c && b+c>a && c+a>b)
     8         printf("是三角形");
     9     else
    10         printf("不是三角形");
    11     return 0;
    12 }

    24、判断成绩是否合格 

    输入成绩,如果在0~59之间,则输出不合格,否则,不输出任何结果。

    输入格式:

    输入成绩,成绩为整数

    输出格式:

    不合格 或 无输出

    输入样例:

    56
    

    输出样例:

    不合格
     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5     int n;
     6     scanf("%d",&n);
     7     if(n>=0 && n<=59)
     8         printf("不合格");
     9     return 0;
    10 }

    25、求4个数的最大数 

    输入四个整数,输出其中的最大数。

    输入格式:

    输入四个整数,数与数之间以空格分隔

    输出格式:

    输出最大数

    输入样例:

    5 9 12 3
    

    输出样例:

    12
     1 #include <stdio.h>
     2 
     3 int fun(int a, int b)
     4 {
     5     return a>b?a:b;
     6 }
     7 
     8 int main()
     9 {
    10     int a,b,c,d;
    11     scanf("%d%d%d%d",&a,&b,&c,&d);
    12     printf("%d",fun(fun(a,b),fun(c,d)));
    13     return 0;
    14 }

    26、歌唱比赛的评分程序 

    某歌唱比赛分2阶段:乐理知识竞赛和演唱比赛。每阶段的比赛,评委人数可能不同,要计算出每个阶段选手的平均得分、最高分、最低分。

    其中,

             乐理知识平均分=乐理知识评委的总分数/评委的人数
             演唱平均分=演唱评委的总分数/评委的人数
    

    函数接口定义:

    编写float statistic(int num)函数与print_m( )函数。

    float statistic(int num)函数,其中num是评委的人数,函数的功能是:
    输入每位评委的分数,求平均分、最高分、最低分,函数返回值为平均分。
    

    其中 num 是用户传入的参数, num 的值不超过int的范围。函数须返回平均分。

    print_m( )函数,函数的功能是:输出最高分、最低分。
    

    其中  用户传入的参数,函数无返回值。

    提示: statistic函数只能用return语句返回一个值(平均分),最高分、最低分无法直接return,可以设计2个全局变量,用于保存并传递每次调用statistic函数求出的最高分、最低分。

    裁判测试程序样例:

    main()函数,完成如下功能:输入各类评委的人数,2次调用statistic(int num)函数与print_m( )函数,分别求乐理知识、演唱的平均分、最高分、最低分,并输出。

    #include <stdio.h>
    int main()
    {
      int num1,num2;
      float avg1,avg2;
      float  statistic(int num);
      void print_m( );
      scanf("%d",&num1);       //输入乐理评委的人数
      avg1= statistic(num1);
      printf("乐理知识的平均分是%.2f
    ",avg1);
      print_m( );
      scanf("%d",&num2);     //输入演唱评委的人数
      avg2= statistic(num2);
      printf("演唱的平均分是%.2f
    ",avg2);
      print_m( );
    }
    
    /* 请在这里填写答案 */
    

    输入格式:

    第一行按序输入乐理评委的人数、各评委的分数,中间用空格分隔

    第二行按序输入演唱评委的人数、各评委的分数,中间用空格分隔

    输出格式:

    第1-3行按样例格式输出乐理知识的平均分、最高分、最低分,一行一个

    第4-6行按样例格式输出演唱的平均分、最高分、最低分,一行一个

    输入样例:

    3  98.6  96.5  92
    5  88    86    85.6  84  87
    

    输出样例:

    乐理知识的平均分是95.70
    最高分是98.60
    最低分是92.00
    演唱的平均分是86.12
    最高分是88.00
    最低分是84.00
     1 float highest,lowest;
     2 float  statistic(int num)
     3 {
     4     float sum = 0,score;
     5     scanf("%f",&score);
     6     highest = score, lowest = score, sum = score;
     7     
     8     for(int i=2; i<=num; ++i){
     9         scanf("%f",&score);
    10         if(score>highest)
    11             highest = score;
    12         if(score<lowest)
    13             lowest = score;
    14         sum +=score;
    15     }
    16     return sum/num;
    17 }
    18 void print_m( ){
    19     printf("最高分是%.2f
    ",highest);
    20     printf("最低分是%.2f
    ",lowest);
    21 }

    27、求完数(函数练习)

    编写判别完数的函数wanshu(int x):功能判断x是否为完数,如果是,则返回1,不是,则返回0。

    在main()函数中,输入n,调用判别完数的函数,求出 1-n 以内所有的完数并输出。

    输入格式:

    输入n,n为整数。

    输出格式:

    输出完数,一行一个

    输入样例:

    100
    

    输出样例:

    6
    28
     1 #include <stdio.h>
     2 
     3 int wanshu(int x){
     4     int sum=0,t=x;
     5     while(--t)
     6     {
     7         if(x%t==0)
     8             sum+=t;
     9     }
    10     if(sum==x)
    11         return 1;
    12     return 0;
    13 }
    14 int main()
    15 {
    16   int n;
    17   scanf("%d",&n);                                     
    18   for(int i=1; i<=n; ++i)
    19       if(wanshu(i))
    20           printf("%d
    ",i);
    21 }

    28、计算阶乘和数 

    计算阶乘和数。假设有这样一个三位数m,其百位、十位和个位数字分别是a、b、c,如果m= a!+b!+c!,则这个三位数就称为三位阶乘和数(约定0!=1)。

    编写计算n的阶乘的函数:long fact(int n);函数返回值是n! 。

    在主程序中输入n,调用fact函数,判断该数是否为阶乘和数。

    输入格式:

    输入n,n为[100,999]间的整数。

    输出格式:

    判断结果,是阶乘和数不是阶乘和数

    输入样例:

    300
    

    输出样例:

    不是阶乘和数
     1 #include <stdio.h>
     2 long fact(int n);
     3 int fun(int n);
     4 int main()
     5 {
     6   int n;
     7   scanf("%d",&n);                                     
     8   if(!fun(n))
     9       printf("不是阶乘和数");
    10   else
    11       printf("是阶乘和数");
    12  
    13 }
    14 long fact(int n){
    15     long f = 1;
    16     for(int i=1; i<=n; ++i)
    17         f *= i;
    18     return f;
    19 }
    20 int fun(int n){
    21     int a = n%10;
    22     int b = n/10%10;
    23     int c = n/100;
    24     if(fact(a)+fact(b)+fact(c)==n)
    25         return 1;
    26     return 0;
    27 }

    29、求最大公约数 

    写函数,int fun1(int m,int n)求两个整数的最大公约数,返回值为最大公约数。

    在主函数中输入两个整数,调用fun1函数求两个整数的最大公约数,并输出结果,

    输入格式:

    输入两个整数,用空格分隔

    输出格式:

    输出最大公约数

    输入样例:

    18  24
    

    输出样例:

    6
     1 #include <stdio.h>
     2 int fun1(int m,int n);
     3 int main()
     4 {
     5   int m,n;
     6   scanf("%d%d",&m,&n);                                     
     7   printf("%d
    ",fun1(m,n));
     8  
     9 }
    10 int fun1(int m,int n){
    11     int t = m<n?m:n;
    12     
    13     while(m%t||n%t) t--;         
    14     /* while(t)
    15     {
    16         if(m%t==0&&n%t==0)
    17             break;
    18         t--;
    19     } */
    20     return t;
    21 }

    30、求最小公倍数 

    写函数,int fun2(int m,int n)求两个整数的最小公倍数,返回值为最小公倍数。

    在主函数中输入两个整数,调用这个函数求两个整数的最小公倍数,并输出结果,

    输入格式:

    输入两个整数,用空格分隔。

    输出格式:

    输出最小公倍数

    输入样例:

    6  4
    

    输出样例:

    12
     1 #include <stdio.h>
     2 int fun1(int m,int n);
     3 int fun2(int m,int n);
     4 int main()
     5 {
     6   int m,n;
     7   scanf("%d%d",&m,&n);                                     
     8   printf("%d
    ",fun2(m,n));
     9  
    10 }
    11 int fun1(int m,int n){
    12     int t = m<n?m:n;
    13     while(t)
    14     {
    15         if(m%t==0&&n%t==0)
    16             return t;
    17         t--;
    18     }
    19     return t;
    20 }
    21 int fun2(int m,int n){
    22     return m/fun1(m,n)*n;
    23 }

    31、文本加密 

    文本加密。输入一个英文句子,以 . 结束。将其中所有的大写英文字母+3,小写英文字母-3,非英文字母不变,输出加密后的句子。

    提示:

    (1)当读入的字符为‘.’ 时,可判断输入结束。(即循环条件是:读入的字符!='.')

    (2)判断变量c1的值是否为大写字母可以这样写:

    if(c1>='A' && c1<='Z') 或 if(c1>=65 && c1<= 90)

    输入格式:

    输入一行英文句子,以 . 结束。

    输出格式:

    输出加密后的句子。

    输入样例:

    This book is AI.
    

    输出样例:

    Wefp _llh fp DL.
     1 #include<stdio.h>
     2 #define N 100
     3 int main()
     4 {
     5     char s[N] = "";
     6     gets(s);
     7     char *p = s;
     8     while(*p)
     9     {
    10         if(*p>='A' && *p<='Z')
    11             *p+=3;
    12         if(*p>='a' && *p<='z')
    13             *p-=3;
    14         printf("%c",*p);
    15         p++;
    16     }
    17     return 0;
    18 }

    32、统计句子中元音字母的个数 

    输入一个英文句子,已知:第一个字符是大写,其它字符都是小写,句子以 . 结束。

    判断首字母是否为元音字母,并统计句子中元音字母(a、e、i、o、u)的个数,若首字符是大写元音字母,也要统计在内。

    提示:

    (1)可参考MOOC第9周课件“附加例题解析”中“字符编程例题1”第1题的编程方法。

    (2)当读入的字符为 '.' 时,可判断输入结束。

    输入格式:

    第一个字符是大写,其它字符都是小写,句子以 . 结束。

    输出格式:

    第一行输出判断结果,不是

    第二行输出元音字母的个数(首字符是大写元音字母+句中小写元音字母个数)。

    输入样例:

    Open the door,please.
    

    输出样例:

    是
    8
     1 #include<stdio.h>
     2 #define N 100
     3 
     4 int fun(char ch)
     5 {
     6     return ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u';
     7 }
     8 int main()
     9 {
    10     char s[N] = "";
    11     gets(s);
    12     char *p = s;
    13     int count=0;
    14     if(fun(*p+32)){
    15         printf("");
    16         count++;
    17     }        
    18     else
    19         printf("不是
    ");    
    20     while(*p++)
    21     {
    22         if(fun(*p))
    23             count++;
    24     }
    25     printf("%d
    ",count);
    26     return 0;
    27 }

    33、数字翻译程序 

    编写简单的数字翻译程序:

    当输入1-5的数字时,翻译成对应的英文(小写),并输出。

    当输入字符e时,结束程序。

    提示:

    允许不同的编程方法,可以模仿第9周单元测试中统计车辆的多选题编写。

    输入格式:

    一行输入一个数字,输入e结束

    输出格式:

    一行输出一个对应的英文(小写)

    输入样例:

    1
    2
    e
    

    输出样例:

    one
    two
     1 #include<stdio.h>
     2 #define N 100
     3 int main()
     4 {
     5     char ch;
     6     while((ch=getchar())!='e')
     7     {
     8         switch(ch){
     9             case '1':printf("one
    ");break;
    10             case '2':printf("two
    ");break;
    11             case '3':printf("three
    ");break;
    12             case '4':printf("four
    ");break;
    13             case '5':printf("five
    ");break;
    14         }
    15     }
    16     return 0;
    17 }

    34、输出平均值之上的数 

    有一维数组int a[20],先输入值,然后计算平均值,并输出高于平均值的所有数组元素。

    输入格式:

    输入20个整数,用空格分隔

    输出格式:

    第一行:输出平均数,保留2位小数

    第二行:顺序输出高于平均值的数组元素,元素间用2个空格分隔。(最后一个元素后也带2个空格)

    输入样例:

    1  2   3   4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20
    

    输出样例:

    10.50
    11  12  13  14  15  16  17  18  19  20  
    
     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     int a[20] = {0};
     6     double sum=0;
     7     for(int i=0; i<20; ++i){
     8         scanf("%d",&a[i]);
     9         sum += a[i];
    10     }
    11     printf("%.2f
    ",sum/20);
    12     for(int i=0; i<20; ++i){
    13         if(a[i]>sum/20)
    14             printf("%d  ",a[i]);
    15     }
    16     return 0;
    17 }

    35、选课程序 

    有10位学生需要选课,数组score[i]存储第 i 位学生的分数:

      int score[11] = {0,80,70,90,100, 81,95,86,45,78,91};             

    现有序号为1、2、3、4的课程待选。输入每位学生选的课程号,保存在数组no中,其中no[i]存储第 i 位学生想选的课程号。

    请编写选课程序,规则如下:

    每门课程只余1个名额,只能录取选课学生中分数最高者。

    程序运行结果:输出各课程录取的学生号及分数 ,如果某课程无人选修,则输出“...号课程无人报”。

    输入格式:

    按序输入每位学生选的课程号,中间用空格分隔

    输出格式:

    一行输出一门课程的录取结果。

    在printf中用%d号课程录取第%d位学生%d分 格式输出各课程号录取的学生及分数。

    如果课程无人报,则输出i号课程无人报。

    输入样例:

    1 2 1 2 2 1 4 4 4 4
    

    输出样例:

    1号课程录取第6位学生95分
    2号课程录取第4位学生100分
    3号课程无人报
    4号课程录取第10位学生91分
     1 #include <stdio.h>
     2 struct course{
     3     int score;
     4     int index;
     5 }COURSE[5] = {0};
     6 int main()
     7 {
     8     int score[11] = {0,80,70,90,100, 81,95,86,45,78,91};
     9     int no[11] = {0};
    10     
    11     for(int i=1; i<=10; ++i)
    12         scanf("%d",&no[i]);
    13      
    14     for(int j=1; j<=10; ++j){   
    15         if(COURSE[no[j]].score<score[j]){
    16             COURSE[no[j]].score = score[j];
    17             COURSE[no[j]].index = j;
    18         }                   
    19     }
    20      
    21     for(int i=1;i<5;++i)
    22         if(COURSE[i].score)
    23             printf("%d号课程录取第%d位学生%d分
    ",i,COURSE[i].index,COURSE[i].score);
    24         else
    25             printf("%d号课程无人报
    ",i);
    26     return 0;
    27 }
     1 #include<stdio.h>
     2 
     3 int main()
     4 {
     5     int score[11] = {0,80,70,90,100, 81,95,86,45,78,91};             
     6     int no[11] = {0};
     7     int course[5] = {0};
     8     int index[5] = {0};
     9     for(int i=1; i<=10; ++i)
    10         scanf("%d",&no[i]);
    11     
    12     for(int j=1; j<=10; ++j){    
    13         if(course[no[j]]<score[j]){
    14             course[no[j]] = score[j];
    15             index[no[j]] = j;
    16         }                    
    17     }
    18     
    19     for(int i=1;i<5;++i)
    20         if(course[i])
    21             printf("%d号课程录取第%d位学生%d分
    ",i,index[i],course[i]);
    22         else
    23             printf("%d号课程无人报
    ",i);
    24     return 0;
    25 }

    36、统计单词的个数 

    编程:输入一行字符,统计其中有多少个单词,单词之间用空格,逗号,或句号分隔开。

    提示:

    1、可以模仿“字符数组应用举例”中的第一个例题。

    2、如果一行字符中,前一个是“英文的空格或逗号或句号”,并且后一个是字母时,单词数加1

    输入格式:

    一行字符,长度不超过254个,由英文的空格,逗号,句号和字母组成。

    输出格式:

    包含的单词数

    输入样例1:

    Life is a journey, not a destination.
    

    输出样例1:

    7
    

    输入样例2:

    HELLO WORLD.
    

    输出样例2:

    2
     1 #include <stdio.h>
     2 #define N 256
     3 int main( )
     4 {    
     5     char s[N] = "";
     6     gets(s);
     7     int count = 0;
     8     char *p = s;
     9     while(*p)
    10     {
    11         if(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'){
    12             count++;
    13             while(*p&&(*p>='a'&&*p<='z'||*p>='A'&&*p<='Z'))
    14                 p++;
    15             if(*p=='')
    16                 break;
    17         }
    18         p++;
    19     }
    20     printf("%d
    ",count);
    21     return 0;
    22 }

    37、计算对角线以上所有元素之和

    编程:输入一个4*4的整数矩阵,计算对角线以上所有元素之和。

    提示:

    定义二维数组a保存输入的数,则对角线以上元素保存在a[i][j](j>i)

    可以模仿本周的判断题编写,也可以采用不同的编程方式

    输入格式:

    4*4的整数矩阵,每行数据之间以空格分开

    输出格式:

    输入样例:

    1  2  3  4
    5  7  8  1
    4  2  7  98
    71  8  5  65
    

    输出样例:

    116
     1 #include <stdio.h>
     2 int main ()
     3 {
     4     int i,j,a[4][4],sum=0;
     5     for(i=0; i<4; ++i){
     6         for(j=0; j<4; ++j){
     7             scanf("%d",&a[i][j]);
     8             if(j>i)
     9                 sum += a[i][j];
    10         }
    11     }
    12     printf("%d
    ",sum);
    13     return 0;
    14 }

    38、两点之间的距离与相对位置 

    定义一个结构体,用于表示平面上的一个点。

    结构体名为point,有3个成员项float x(横坐标)、float y(纵坐标)、int quadrant(象限)

    按序输入每个点的横坐标、纵坐标、象限位置,求两点之间的距离、判断是否在同一象限,然后输出结果。

    (注:象限为i,表示点在第i象限

    提示:

    输入point的成员数据时,不要忘记取地址符 &

    输入格式:

    一行一个点的横坐标、纵坐标、象限位置,中间用空格分隔

    输出格式:

    第一行以%f的格式输出距离

    第二行输出象限判断结果: 不在同一象限在同一象限

    输入样例:

    2.5    3    1 
    -1.2   5    2
    

    输出样例:

    4.205948
    不在同一象限
     1 #include <stdio.h>
     2 #include <math.h>
     3 typedef struct point POINT;
     4 struct point{
     5     float x,y;
     6     int quadrant;
     7 };
     8 int main ()
     9 {
    10     POINT p1,p2;
    11     scanf("%f%f%d",&p1.x,&p1.y,&p1.quadrant);
    12     scanf("%f%f%d",&p2.x,&p2.y,&p2.quadrant);
    13     printf("%f
    ",sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
    14     if(p1.quadrant==p2.quadrant)
    15         printf("在同一象限
    ");
    16     else
    17         printf("不在同一象限
    ");
    18     return 0;
    19 }

    39、编号为1, 2, …, n的n名同学玩抽卡牌游戏,每人抽5张卡牌,其中数字卡牌的点数只能是1-9,另有字母卡牌D,D卡牌点数=最近一次抽中的卡牌的点数乘以2倍。

    请编写一个程序求各同学抽出卡牌的总点数,并输出总点数最小值及抽出它的同学的编号。

    例如:抽出的卡牌序列为31D,点数和为3+1*2=5点,卡牌序列D92,点数和为0*2+9+2=11点。

    ---------------------------------------------------------------------------

    输入格式:

    第一行输入n

    第i行输入编号i-1的同学抽出的卡牌序列

    输出格式:

    min=总点数最小值,no=总点数最小的同学的编号

    如果有相同的最小点数,输出编号大者。

    ---------------------------------------------------------------------------

    输入样例1:

    3

    2D212

    345D1

    1211D

    输出样例1:

    min=6 , no=3

    提示:

    1、可以定义一个数组(长度>5)保存抽出的卡牌序列,例如,char card[6];

    2、使用scanf("%c",&card[j]);读入每一张卡牌,注意,%c前有一个空格,读入时能跳过空格与换行回车符。

     1 #include <stdio.h>
     2 int  main()
     3 {
     4     int i,j;
     5     int min=0,mini=0;//最小值及相应序号
     6     int sum=0,temp=0;//累计 字符的临时存储
     7     char c;
     8     int n,flag=0; //flag, min 赋初值标志
     9     scanf("%d",&n); //输入 n
    10     getchar();//去回车
    11     for(i=1; i<=n; ++i){
    12         sum = 0,temp=0;    //累计、临时赋初值        
    13         for(j=0; j<5; ++j)
    14         {            
    15             scanf("%c",&c);//读取字符
    16             if(c=='D')
    17                 sum += temp;//D 是上次的读取的二倍
    18             else{
    19                 temp = c-'0';//记录读取的字符,遇到D再次累计
    20                 sum += c-'0';//累计读取的字符
    21             }            
    22         }
    23         //printf("%d
    ",sum);
    24         getchar();//去回车
    25         if(!flag) {  
    26             min = sum; //min 赋初值
    27             flag =1;
    28         }
    29         if(min>=sum){ //更新最小值
    30             min = sum;
    31             mini = i;
    32         }        
    33     }
    34     printf("min=%d , no=%d",min,mini);    
    35     return 0;
    36 }
     1 #include <stdio.h>
     2 int  main()
     3 {
     4     int i,j;
     5     int min=0,mini=0;//最小值及相应序号
     6     int sum=0,temp=0;//累计 字符的临时存储
     7     char c;
     8     int n,flag=0; //flag, min 赋初值标志
     9     scanf("%d",&n); //输入 n
    10     for(i=1; i<=n; ++i){
    11         sum = 0,temp=0;    //累计、临时赋初值        
    12         for(j=0; j<5; ++j)
    13         {            
    14             scanf(" %c",&c);//去回车, 读取字符
    15             if(c=='D')
    16                 sum += temp;//D 是上次的读取的二倍
    17             else{
    18                 temp = c-'0';//记录读取的字符,遇到D再次累计
    19                 sum += c-'0';//累计读取的字符
    20             }            
    21         }
    22         if(!flag) {  
    23             min = sum; //min 赋初值
    24             mini = i;
    25             flag =1;
    26         }
    27         if(min>=sum){ //更新最小值,有相同的最小点数,输出编号大者
    28             min = sum;
    29             mini = i;
    30         }        
    31     }
    32     printf("min=%d , no=%d",min,mini);    
    33     return 0;
    34 }
     1 #include <stdio.h>
     2 int  main()
     3 {
     4     int n,min=0,mini=0,flag=0;//学生编号,最小值及相应序号    
     5     scanf("%d",&n);
     6     for(int i=1; i<=n; ++i)
     7     {
     8         int sum=0,temp=0,j=0;//累计,字符的临时存储
     9         char s[256] = "";
    10         scanf("%s",&s);
    11         while(s[j])
    12         {
    13             if(s[j]=='D')
    14                 sum += temp;//D 是上次的读取的二倍
    15             else{
    16                 temp = s[j]-'0';//记录读取的字符,遇到D再次累计
    17                 sum += s[j]-'0';//累计读取的字符
    18             }  
    19             j++;
    20         }
    21         if(!flag){  
    22             min = sum; //min 赋初值
    23             mini = i;
    24             flag =1;
    25         }
    26         if(min>=sum){ //更新最小值,有相同的最小点数,输出编号大者
    27             min = sum;
    28             mini = i;
    29         }           
    30     }
    31     printf("min=%d , no=%d",min,mini);    
    32     return 0;
    33 }
  • 相关阅读:
    数字电路与系统-组合逻辑电路逻辑冒险
    数字电路与系统-组合逻辑电路竞争与冒险
    数字电路与系统-组合逻辑电路理论分析(视频)
    数字电路与系统-逻辑函数最后的总结
    微信小程序--成语猜猜看
    微信小程序开发中如何实现侧边栏的滑动效果?
    强力推荐微信小程序之简易计算器,很适合小白程序员
    【微信小程序】自定义模态框实例
    编程微刊第四期文章汇总(2018.4)
    ajax实现简单的点击左侧菜单,右侧加载不同网页
  • 原文地址:https://www.cnblogs.com/GoldenEllipsis/p/11614160.html
Copyright © 2020-2023  润新知