• C primer plus 6 编程练习答案


    环境:vs2017

      1 /**编程练习2**/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     printf("张三
    ");
      7     printf("张
    三
    ");
      8     printf("");
      9     printf("");
     10     getchar();
     11     return 0;
     12 }
     13 /*2*/
     14 #include<stdio.h>
     15 int main(void)
     16 {
     17     printf("姓名:张三
    地址:中国
    ");
     18     getchar();
     19     return 0;
     20 }
     21 /*3*/
     22 #include<stdio.h>
     23 int main(void)
     24 {
     25     int    age = 0, days = 0;
     26     printf("请输入您的年龄:");
     27     scanf_s("%d", &age);
     28     days = age * 365;
     29     printf("您的年龄为:%d
    您的年龄转换成天数为:%d
    ", age, days);
     30     getchar();
     31     getchar();
     32     return 0;
     33 }
     34 /*4*/
     35 #include<stdio.h>
     36 void jolly(void);
     37 void deny(void);
     38 int main(void)
     39 {
     40     jolly();
     41     jolly();
     42     jolly();
     43     deny();
     44     getchar();
     45     return 0;
     46 }
     47 void jolly(void)
     48 {
     49     printf("For he's a jolly good fellow!
    ");
     50 }
     51 void deny(void)
     52 {
     53     printf("Which nobagy can deny!
    ");
     54 }
     55 /*5*/
     56 #include<stdio.h>
     57 void br(void);
     58 void ic(void);
     59 int main(void)
     60 {
     61     br();
     62     ic();
     63     printf("India,China,
    ");
     64     printf("Brazil,Russia
    ");
     65     getchar();
     66     return 0;
     67 }
     68 void br(void)
     69 {
     70     printf("Brazil,Russia,");
     71 }
     72 void ic(void)
     73 {
     74     printf("India,China
    ");
     75 }
     76 /*6*/
     77 #include<stdio.h>
     78 int main(void)
     79 {
     80     int toes = 10;
     81     printf("toes为:%d
    toes的2倍为:%d
    toes的平方为:%d
    ", toes, 2 * toes, toes*toes);
     82     getchar();
     83     return 0;
     84 }
     85 /*7*/
     86 #include<stdio.h>
     87 void smile(void);
     88 int main(void)
     89 {
     90     smile();
     91     smile();
     92     smile();
     93     printf("
    ");
     94     smile();
     95     smile();
     96     printf("
    ");
     97     smile();
     98     printf("
    ");
     99     getchar();
    100     return 0;
    101 }
    102 void smile(void)
    103 {
    104     printf("Smile!");
    105 }
    106 /*8*/
    107 #include<stdio.h>
    108 void one_three(void);
    109 void two(void);
    110 int main(void)
    111 {
    112     printf("starting now:
    ");
    113     one_three();
    114     printf("done!
    ");
    115     getchar();
    116     return 0;
    117 }
    118 void one_three(void)
    119 {
    120     printf("one
    ");
    121     two();
    122     printf("three
    ");
    123 }
    124 void two(void)
    125 {
    126     printf("two
    ");
    127 }
      1 /**编程练习3**/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     int    a;
      7     float b,c;
      8     a = 10000000000;//整数上溢
      9     b = 3.4E38 + 10.0f;//浮点数上溢
     10     c = 0.1234E-10 / 10;//浮点数下溢
     11     printf("%d
    %f
    %f
    ",a, b, c);
     12     getchar();
     13     return 0;
     14 }
     15 /*2*/
     16 #include<stdio.h>
     17 int main(void)
     18 {
     19     int a = 0;
     20     printf("请输入一个0-127中的一个整数:");
     21     scanf_s("%d", &a);
     22     printf("该数对应的ASCLL码为:%c
    ", a);
     23     getchar();
     24     getchar();
     25     return 0;
     26 }
     27 /*3*/
     28 #include<stdio.h>
     29 int main(void)
     30 {
     31     printf("a");//警报
     32     printf("Startled by the sudden sound,Sally shouted,
    ");
     33     printf(""By the Grate Pumpkin,what was that!"");
     34     getchar();
     35     return 0;
     36 }
     37 /*4*/
     38 #include<stdio.h>
     39 int main(void)
     40 {
     41     float a;
     42     printf("输入一个小数:");
     43     scanf_s("%f", &a);
     44     printf("%f
    %e
    %.2a
    ", a, a, a);
     45     getchar();
     46     getchar();
     47     return 0;
     48 }
     49 /*5*/
     50 #include<stdio.h>
     51 int main(void)
     52 {
     53     int age = 0;
     54     long min = 0;
     55     printf("请输入您的年龄:");
     56     scanf_s("%ld", &age);
     57     min = age * 3.156E7;
     58     printf("转换为秒为:%ld秒
    ", min);
     59     getchar();
     60     getchar();
     61     return 0;
     62 }
     63 /*6*/
     64 #include<stdio.h>
     65 int    main(void)
     66 {
     67     double a,c;
     68     int b;
     69     printf("请输入水的夸脱数:");
     70     scanf_s("%d", &b);
     71     a = 950 * 3.0E-23;
     72     c = a * b;
     73     printf("水分子数量为:%e
    ", c);
     74     getchar();
     75     getchar();
     76     return 0;
     77 }
     78 /*7*/
     79 #include<stdio.h>
     80 int main()
     81 {
     82     float tall_m, tall_cm;
     83     printf("请输入您的身高:");
     84     scanf_s("%f", &tall_m);
     85     tall_cm = 2.54*tall_m;
     86     printf("%.2f英寸转化为厘米为:%f厘米",tall_m, tall_cm);
     87     getchar();
     88     getchar();
     89     return 0;
     90 }
     91 /*8*/
     92 #include<stdio.h>
     93 int main()
     94 {
     95     float cup,p,a,t,c;
     96     printf("请输入杯数:");
     97     scanf_s("%f", &cup);
     98     p = cup/2;
     99     a = 8 * cup;
    100     t = 2 * a;
    101     c = 3 * t;
    102     printf("%f杯等于%f品脱,%f杯等于%f盎司,%f盎司等于%f大汤勺,%f大汤勺等于%f茶勺
    ", cup, p, cup, a, a, t, t, c);
    103     getchar();
    104     getchar();
    105     return 0;
    106 }
      1 /**编程练习4**/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     char surname[40] ;
      7     char  name[40];
      8     printf("请输入您的名:
    ");
      9     scanf_s("%s",name,40);////////////////////////////////注意!!!scanf_s()在输入数组时需要指明字段大小/////////////////////////////////////////
     10     printf("请输入您的姓:
    ");
     11     scanf_s("%s",surname,40);
     12     printf("您的名为:%s
    姓为:%s
    ", name, surname);
     13     getchar();
     14     getchar();
     15     //getchar();
     16     return 0;
     17 }
     18 /*2*/
     19 #include<stdio.h>
     20 #include<string.h>
     21 int main(void)
     22 {
     23     char name[40];
     24     printf("请输入名字:
    ");
     25     scanf_s("%s", name, 40);
     26     printf(""%20s"
    ", name);
     27     printf(""%-20s"
    ", name);
     28     printf(""%*s"
    ", strlen(name) + 3, name);
     29     getchar();
     30     getchar();
     31     return 0;
     32 }
     33 /*3*/
     34 #include<stdio.h>
     35 int main(void)
     36 {
     37     float a;
     38     printf("输入一个小数:21.29
    ");
     39     scanf_s("%f", &a);
     40     printf("输入的数是:%.1f或%.1e
    ", a,a);
     41     printf("输入的数是:%2.2f或%.3E
    ", a, a);
     42     getchar();
     43     getchar();
     44     return 0;
     45 }
     46 /*4*/
     47 #include<stdio.h>
     48 int main(void)
     49 {
     50     float heigh;
     51     char name[40];
     52     printf("请输入你的姓名:
    ");
     53     scanf_s("%s", name, 40);
     54     printf("请输入你的身高(米):
    ");
     55     scanf_s("%f", &heigh);
     56     printf("%s,你有%.3f米高", name,heigh);
     57     getchar();
     58     getchar();
     59     return 0;
     60 }
     61 /*5*/
     62 #include<stdio.h>
     63 int main(xoid)
     64 {
     65     float speed, size, time;
     66     printf("请输入以兆位每秒(Mb/s)为单位的下载速度和以兆(MB)为单位的文件大小
    ");
     67     scanf_s("%f %f", &speed,&size);
     68     time = 8 * size / speed;
     69     printf("At %.2f megabits per second,a file of %.2f megabytes
    
     70  downloads in %.2f seconds.
    ",speed,size,time);
     71     getchar();
     72     getchar();
     73     return 0;
     74 }
     75 /*6*/
     76 #include<stdio.h>
     77 #include<string.h>
     78 int main(void)
     79 {
     80     char surname[40];
     81     char name[40];
     82     int length1,length2;
     83     printf("输入姓:
    ");
     84     scanf_s("%s", surname, 40);
     85     printf("输入名:
    ");
     86     scanf_s("%s", name, 40);
     87     length1 = strlen(surname);
     88     length2 = strlen(name);
     89     printf("%s %s
    ", surname, name);
     90     printf("%*d %*d
    ", length1, length1,length2,length2);
     91     printf("%s %s
    ", surname, name);
     92     printf("%-*d %-*d
    ", length1, length1, length2, length2);
     93     getchar();
     94     getchar();
     95     return 0;
     96 }
     97 /*7*/
     98 #include<stdio.h>
     99 #include<float.h>
    100 int main(void)
    101 {
    102     double a=1.0 / 3.0;
    103     float b=1.0 / 3.0;
    104     printf("a=%.6f	b=%.6f
    ", a, b);
    105     printf("a=%.12f	b=%.12f
    ", a, b);
    106     printf("a=%.16f	b=%.16f
    ", a, b);
    107     printf("float类型的最小有效数字为:%d	double类型的最小有效数字为:%d
    ", FLT_DIG, DBL_DIG);
    108     getchar();
    109     return 0;
    110 }
    111 /*8*/
    112 #include<stdio.h>
    113 #define GALLON 3.785 //1加仑等于3.785升
    114 #define MILE 1.609   //1英里等于1.609千米
    115 int main(void)
    116 {
    117     float gallon, mile;
    118     printf("输入旅行里程:
    ");
    119     scanf_s("%f", &mile);
    120     printf("输入消耗汽油量:
    ");
    121     scanf_s("%f", &gallon);
    122     printf("油耗为:%.1f英里/加仑
    ", mile / gallon);
    123     printf("油耗转换为:%.1f升/100公里
    ", gallon*GALLON / (mile*MILE) * 100);
    124     getchar();
    125     getchar();
    126     return 0;
    127 }
      1 /****编程练习5****/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     const int m_to_h = 60;
      7     int m,h,left;
      8     printf("输入一个时间(分钟):
    ");
      9     scanf_s("%d", &m);
     10     while (m>0)
     11     {
     12         h = m/m_to_h;
     13         left=m%m_to_h;
     14         printf("%d分钟转化为小时为:%d小时%d分钟
    ", m, h,left);
     15         scanf_s("%d", &m);
     16     }
     17     getchar();
     18     //getchar();
     19     return 0;
     20 }
     21 /*2*/
     22 #include<stdio.h>
     23 int main(void)
     24 {
     25     int a,b;
     26     printf("请输入一个整数:
    ");
     27     scanf_s("%d", &a);
     28     b = a + 10;
     29     while (a<=b)
     30     {
     31         printf("打印比该数大10的整数为:%d
    ", a);
     32         a++;
     33     }
     34     getchar();
     35     getchar();
     36     return 0;
     37 }
     38 /*3*/
     39 #include<stdio.h>
     40 int main(void)
     41 {
     42     const int day_to_week = 7;
     43     int days,week,left;
     44     printf("请输入天数:
    ");
     45     scanf_s("%d", &days);
     46     while (days>0)
     47     {
     48         week = days/day_to_week;
     49         left = days%day_to_week;
     50         printf("%d天转化为%d周%d天
    ", days, week, left);
     51         scanf_s("%d", &days);
     52     }
     53     getchar();
     54     getchar();
     55     return 0;
     56 }
     57 /*4*/
     58 #include<stdio.h>
     59 #define FEET_TO_CM 30.48
     60 #define INCHE_TO_CM 2.54
     61 int main(void)
     62 {
     63     float heigh,inches;//inches英寸
     64     int foot;//英尺
     65     printf("输入身高(cm):
    ");
     66     scanf_s("%f", &heigh);
     67     while (heigh>0)
     68     {
     69         foot = heigh / FEET_TO_CM;
     70         inches = (heigh - foot * FEET_TO_CM) / INCHE_TO_CM;
     71         printf("%.2fcm=%d英尺%.2f英寸", heigh, foot, inches);
     72         scanf_s("%f", &heigh);
     73     }
     74     getchar();
     75     //getchar();
     76     return 0;
     77 }
     78 /*5*/
     79 #include<stdio.h>
     80 int main(void)
     81 {
     82     int sum=0, count=0,day=0;
     83     printf("输入天数:
    ");
     84     scanf_s("%d", &day);
     85     while (count++<day)
     86     {
     87         sum = sum + count;
     88     }
     89     printf("%d天挣了%d元钱
    ", day, sum);
     90     getchar();
     91     getchar();
     92     return 0;
     93 }
     94 /*6*/
     95 #include<stdio.h>
     96 int main(void)
     97 {
     98     int sum = 0, count = 0, day = 0;
     99     printf("输入天数:
    ");
    100     scanf_s("%d", &day);
    101     while (count++ < day)
    102     {
    103         sum = sum + count*count;
    104     }
    105     printf("%d天挣了%d元钱
    ", day, sum);
    106     getchar();
    107     getchar();
    108     return 0;
    109 }
    110 /*7*/
    111 #include<stdio.h>
    112 void value3(double a);
    113 int main(void)
    114 {
    115     double a;
    116     printf("输入一个小数:
    ");
    117     scanf_s("%lf", &a);
    118     value3(a);
    119     getchar();
    120     getchar();
    121     return 0;
    122 }
    123 void value3(double a)
    124 {
    125     double b;
    126     b = a * a*a;
    127     printf("%lf立方为:%lf
    ", a, b);
    128 }
    129 /*8*/
    130 #include<stdio.h>
    131 int main(void)
    132 {
    133     int a, b;
    134     printf("	*****求模运算*****	
    ");
    135     printf("输入一个数作为第2个运算对象:
    ");
    136     scanf_s("%d", &a);
    137     printf("输入第二个数作为第1个运算对象:
    ");
    138     scanf_s("%d", &b);
    139     printf("求模运算%d%%%d=%d
    ", b, a, b%a);
    140     printf("输入下一个数作为第1个运算对象:
    ");
    141     scanf_s("%d", &b);
    142     while (b>0)
    143     {
    144         printf("求模运算%d%%%d=%d
    ", b, a, b%a);
    145         printf("输入下一个数作为第1个运算对象:
    ");
    146         scanf_s("%d", &b);
    147     }
    148     printf("结束
    ");
    149     getchar();
    150     getchar();
    151     return 0;
    152 }
    153 /*9*/
    154 #include<stdio.h>
    155 void Temperatures(double h_tem);
    156 int main(void)
    157 {
    158     double h_tem;//华氏度
    159     printf("请输入华氏温度(输入非数字以退出):
    ");
    160     while (scanf_s("%lf", &h_tem)==1)
    161     {
    162         Temperatures(h_tem);
    163         printf("请输入华氏温度(输入非数字以退出):
    ");
    164     }
    165     printf("程序退出
    ");
    166     getchar();
    167     getchar();
    168     return 0; 
    169 }
    170 void Temperatures(double h_tem)
    171 {
    172     double s_tem;//摄氏度
    173     double k_tem;//开氏度
    174     const double h_to_s = 32.0;//华氏度转摄氏度要用到的常量值
    175     const double s_to_k = 273.16;//摄氏度转开氏度要用到的常量值
    176     s_tem = 5.0 / 9.0 * (h_tem - h_to_s);
    177     k_tem = s_tem + s_to_k;
    178     printf("%.2lf华氏度等于%.2lf摄氏度和%.2lf开氏度
    ", h_tem, s_tem, k_tem);
    179 }
      1 /****编程练习6****/
      2 /*1*/
      3 #include<stdio.h>
      4 #define size 26
      5 int main(void)
      6 {
      7     char ch[size];
      8     int a;
      9     for (a = 0; a<size; a++)
     10         ch[a] = 'a' + a;
     11     for (a = 0;a < size;a++)
     12         printf("%c", ch[a]);
     13     getchar();
     14     return 0;
     15 }
     16 /*2*/
     17 #include<stdio.h>
     18 int main(void)
     19 {
     20     int row, clo;
     21     char ch = '$';
     22     for (row=0;  row< 5; row++)
     23     {
     24         for (clo = 0; clo < row + 1; clo++)
     25             printf("%c",ch);
     26         printf("
    ");
     27     }
     28     getchar();
     29     return 0;
     30 }
     31 /*3*/
     32 #include<stdio.h>
     33 int main(void)
     34 {
     35     char ch = 'F';
     36     char start, end;
     37     for (end=ch;end>='A'; end--)
     38     {
     39         for (start=ch;start>=end;start--)
     40             printf("%c", start);
     41         printf("
    ");
     42     }
     43     getchar();
     44     return 0;
     45 }
     46 /*4*/
     47 #include<stdio.h>
     48 int main(void)
     49 {
     50     const char end = 'U';
     51     char start;
     52     int row, clo;
     53     for (row=0,start = 'A'; start<=end;row++ )
     54     {
     55         for (clo = 0;clo <= row;clo++)
     56         {
     57             printf("%c", start);
     58             start++;
     59         }
     60         printf("
    ");
     61     }
     62     getchar();
     63     return 0;
     64 }
     65 /*5*/
     66 #include<stdio.h>
     67 int main(void)
     68 {
     69     char start = 'A';
     70     char end;
     71     char ch = start;
     72     int row, clo;
     73     printf("输入一个大写字母:
    ");
     74     scanf_s("%c", &end);
     75     printf("  字母金字塔
    ");
     76     for ( row=0; row <= end-start; row++,ch = start)
     77     {
     78         for (clo = 0;clo < end - start - row;clo++)
     79             printf(" ");
     80         for (int k = 0;k <= row;k++)
     81         {
     82             printf("%c", ch);
     83             ch++;
     84         }
     85         ch -= 2;
     86         for (int c = 0;c < row;c++)
     87         {
     88                 printf("%c", ch);
     89             ch--;
     90         }
     91         printf("
    ");
     92     }
     93     getchar();
     94     getchar();
     95     return 0;
     96 }
     97 /*6*/
     98 #include <stdio.h> 
     99 int main( void ) 
    100 {    
    101     int start, end;
    102     printf("输入开始的数字:
    ");
    103     scanf_s("%d", &start);
    104     printf("输入结束数字:
    ");
    105     scanf_s("%d", &end);
    106     printf("原数	平方	立方
    ");
    107     for (start;start <= end;start++)
    108     {
    109         printf("%d	%d	%d
    ", start, start*start, start*start*start);
    110     }
    111     getchar();
    112     getchar();
    113     return 0;
    114 }
    115 /*7*/
    116 #include<stdio.h>
    117 #include<string.h>
    118 #define SIZE 40
    119 int main(void)
    120 {
    121     char word[SIZE];
    122     int i;
    123     printf("请输入一个单词:
    ");
    124     scanf_s("%s", word, 40);
    125     printf("该单词有%d个字母,单词是%s
    ", strlen(word), word);
    126     printf("倒序为:");
    127     for (i = strlen(word - 1);i >= 0;i--)//strlen(word - 1)跳过字符串后面的空格
    128         printf("%c", word[i]);
    129     printf("
    ");
    130     getchar();
    131     getchar();
    132     return 0;
    133 }
    134 /*8*/
    135 #include<stdio.h>
    136 int main(void)
    137 {
    138     double a, b;
    139     int status;//输入状态
    140     printf("输入2个浮点数(输入q退出):
    ");
    141     while (scanf_s("%lf%lf", &a, &b) == 2)//验证是否输入了2个值
    142     {
    143         printf("结果是%.3lf", (a - b) / (a*b));
    144         printf("继续输入2个浮点数(输入q退出):
    ");
    145     }
    146     getchar();
    147     return 0;
    148 }
    149 /*9*/
    150 #include<stdio.h>
    151 float result(float a, float b);
    152 int main(void)
    153 {
    154     double a, b;
    155     int status;//输入状态
    156     printf("输入2个浮点数(输入q退出):
    ");
    157     while (scanf_s("%lf%lf", &a, &b) == 2)//验证是否输入了2个值
    158     {
    159         printf("结果是%.3lf", result(a,b));
    160         printf("继续输入2个浮点数(输入q退出):
    ");
    161     }
    162     getchar();
    163     return 0;
    164 }
    165 float result(float a, float b)
    166 {
    167     float result;//result名称不唯一
    168     result = (a - b) / (a*b);
    169     return result;
    170 }
    171 /*10*/
    172 #include<stdio.h>
    173 int main(void)
    174 {
    175     int up, down;//上限和下限
    176     printf("输入上限整数和下限整数:
    ");
    177     scanf_s("%d %d", &up, &down);
    178     while (up>down)
    179     {
    180         int sum = 0;//初始化平方和sum
    181         for (int i = sum;i <= up;i++)
    182             sum = sum + i * i;
    183         printf("平方和从%d到%d是%d
    ", up*up, down*down, sum);
    184         printf("继续输入上限整数和下限整数:
    ");
    185         scanf_s("%d %d", &up, &down);
    186     }
    187     printf("结束!
    ");
    188     getchar();
    189     getchar();
    190     return 0;
    191 }
    192 /*11*/
    193 #include<stdio.h>
    194 #define SIZE 8
    195 int main(void)
    196 {
    197     int a[SIZE];
    198     int i;
    199     for ( i = 0; i < SIZE; i++)
    200         scanf_s("%d", &a[i]);
    201         for (i = SIZE - 1;i >= 0;i--)
    202             printf("%d", a[i]);
    203     getchar();
    204     getchar();
    205     return 0;
    206 }
    207 /*12*/
    208 #include<stdio.h>
    209 int main(void)
    210 {
    211     int times;
    212     float count1 = 1.0f;//分母
    213     float count2 = 1.0f;//分母
    214     float sum1 = 0.0;
    215     float sum2 = 0.0;
    216     printf("输入计算次数(输入0或负数退出):
    ");
    217     scanf_s("%d", &times);
    218     for (int i = 1;i <= times;i++, count1++)
    219         sum1 = sum1 + 1.0 / count1;
    220     for (int j = 1;j <= times;j++, count2++)
    221     {
    222         if (j%2==0)
    223         {
    224             sum2 = sum2 - 1.0 / count2;
    225         }
    226         else
    227         {
    228             sum2 = sum2 + 1.0 / count2;
    229         }
    230     }
    231     printf("第一个公式的计算结果为:%f
    ", sum1);
    232     printf("第二个公式的计算结果为:%f
    ", sum2);
    233     getchar();
    234     getchar();
    235     return 0;
    236 }
    237 /*13*/
    238 #include<stdio.h>
    239 #define SIZE 8
    240 int main(void)
    241 {
    242     int arry[SIZE];
    243     int i, n;
    244     for (i = 0, n = 2;i < SIZE;i++, n *= 2)
    245         arry[i] = n;
    246     i = 0;
    247     do
    248     {
    249         printf("%d
    ", arry[i]);
    250         i++;
    251     } while (i<SIZE);
    252     getchar();
    253     return 0;
    254 }
    255 /*14*/
    256 #include<stdio.h>
    257 #define SIZE 8
    258 int main(void)
    259 {
    260     double arry1[SIZE];
    261     double arry2[SIZE];
    262     int i;
    263 
    264     printf("输入值:
    ");
    265     for (i = 0;i < SIZE;i++)
    266         scanf_s("%lf", &arry1[i]);//读入第一个数组
    267     arry2[0] = arry1[0];//初始化第二个数组
    268     for (i = 1;i < SIZE;i++)
    269         arry2[i] = arry2[i - 1] + arry1[i];//计算第二个元组各数之和
    270     for (i = 0;i < SIZE;i++)
    271         printf("%8.2lf", arry1[i]);
    272     printf("
    ");
    273     for (i = 0;i < SIZE;i++)
    274         printf("%8.2lf", arry2[i]);
    275     
    276     getchar();
    277     getchar();
    278     return 0;
    279 }
    280 /*15*/
    281 #include<stdio.h>
    282 #define SIZE 255
    283 int main(void)
    284 {
    285     char arry[SIZE];
    286     int i = -1;
    287     printf("输入一个单词:
    ");
    288     do
    289     {
    290         i++;//由arry[0]开始循环读入
    291         scanf_s("%c", &arry[i]);
    292     } while (arry[i]!='
    ');
    293     for (;i >= 0;i--)
    294         printf("%c", arry[i]);
    295     getchar();
    296     return 0;
    297 }
    298 /*16*/
    299 #include<stdio.h>
    300 #define Daphne_RATE 0.10    //Daphne利率
    301 #define Deiedre_RATE 0.05   //Deiedre利率
    302 #define MONEY 100.0        //投资100元
    303 int main(void)
    304 {
    305     int year=0;
    306     double Daphne_money=MONEY;   //Daphne的投资额
    307     double Deiedre_money=MONEY;  //Deiedre的投资额
    308     while (Deiedre_money <= Daphne_money)   //当Deiedre投资额超过Daphne的投资额退出循环
    309     {
    310         year++;
    311         Daphne_money = Daphne_money + MONEY * Daphne_RATE;
    312         Deiedre_money = Deiedre_money + Deiedre_money * Deiedre_RATE;
    313     }
    314     printf("用了%d年Deiedre的投资额超过Daphne的投资额
    ", year);
    315     printf("Daphne的投资额为:%f	Deiedre的投资额为%f
    ", Daphne_money, Deiedre_money);
    316     getchar();
    317     return 0;
    318 }
    319 /*17*/
    320 #include<stdio.h>
    321 #define RATE 0.08
    322 int main(void)
    323 {
    324     double money = 100;
    325     int year = 0;
    326     while (money>0)
    327     {
    328         year++;
    329         money = money + money * RATE;
    330         money = money - 10;
    331     }
    332     printf("%d年后Chuckie会取完账户里的钱
    ", year);
    333     getchar();
    334     return 0;
    335 }
    336 /*18*/
    337 #include<stdio.h>
    338 #define DB_NUMBER 150    //邓巴数
    339 int main(void)
    340 {
    341     int weeks = 1;
    342     int friends = 5;
    343     while (friends<DB_NUMBER)
    344     {
    345         friends = (friends - weeks) * 2;
    346         printf("%d周后,Rabnud博士有%d个朋友
    ", weeks, friends);
    347         weeks++;
    348     }
    349     getchar();
    350     return 0;
    351 }
      1 /*****编程练习7*****/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     char  ch;
      7     int spa_count=0, lin_count=0, oth_count=0;   //空格数,换行符数,其他字符数
      8     printf("输入字符进行统计(输入字符‘#’退出程序):
    ");
      9     while ((ch=getchar())!='#')
     10     {
     11         if (ch == ' ')
     12             spa_count++;
     13         else if (ch == '
    ')
     14             lin_count++;
     15         else
     16             oth_count++;
     17     }
     18     printf("你输入的字符中空格数有%d个,换行符有%d个,其他字符数有%d个
    ", spa_count, lin_count, oth_count);
     19     getchar();
     20     getchar();
     21     return 0;
     22 }
     23 /*2*/
     24 #include<stdio.h>
     25 int main(void)
     26 {
     27     char ch;
     28     const int line = 8;
     29     int chsum = 0;//统计字符数
     30     printf("输入字符进行统计(输入‘#’字符结束):
    ");
     31     while ((ch=getchar())!='#')
     32     {
     33         printf("%c:%d	", ch, ch);
     34         chsum++;
     35         if (chsum%line == 0)
     36             printf("
    ");
     37     }
     38     printf("
    ");
     39     getchar();
     40     getchar();
     41     return 0;
     42 }
     43 /*3*/
     44 #include<stdio.h>
     45 int main(void)
     46 {
     47     int a;
     48     int ou_count = 0;//偶数个数
     49     int ji_count = 0;//奇数个数
     50     int ou_sum = 0;//偶数的和
     51     int ji_sum = 0;//奇数和
     52     float ou_average;//偶数平均值
     53     float ji_average;//奇数平均值
     54     printf("输入整数进行计算(输入‘0’结束):");
     55     while (scanf_s("%d", &a) == 1 && a != 0)
     56     {
     57         if (a % 2 == 0)
     58         {
     59             ou_count++;
     60             ou_sum += a;
     61         }
     62         else
     63         {
     64             ji_count++;
     65             ji_sum += a;
     66         }
     67     }
     68         printf("偶数个数:%d
    ", ou_count);
     69         if (ou_count>0)
     70         {
     71             ou_average = ou_sum / ou_count;
     72             printf("偶数平均值为:%.2f
    ", ou_average);
     73         }
     74         printf("奇数个数:%d
    ", ji_count);
     75         if (ji_count>0)
     76         {
     77             ji_average = ji_sum / ji_count;
     78             printf("奇数平均值为:%.2f
    ", ji_average);
     79         }
     80     printf("结束
    ");
     81     getchar();
     82     getchar();
     83     return 0;
     84 }
     85 /*4*/
     86 #include<stdio.h>
     87 int main(void)
     88 {
     89     char ch;
     90     int count1=0;//替换句号的次数
     91     int count2=0;//替换感叹号的次数
     92     printf("输入字符进行统计(输入‘#’结束):
    ");
     93     while ((ch=getchar())!='#')
     94     {
     95         if (ch == '.')
     96         {
     97             putchar('!');
     98             count1++;
     99         }
    100         else if (ch == '!')
    101         {
    102             putchar('!');
    103             putchar('!');
    104             count2++;
    105         }
    106         else
    107             putchar(ch);
    108     }
    109     printf("
    '!'替代'.'进行了%d次
    ", count1);
    110     printf("'!!'替代'!'进行了%d次
    ", count2);
    111     getchar();
    112     getchar();
    113     return 0;
    114 }
    115 /*5*/
    116 #include<stdio.h>
    117 int main(void)
    118 {
    119     char ch;
    120     int count1 = 0;//替换句号的次数
    121     int count2 = 0;//替换感叹号的次数
    122     printf("输入字符进行统计(输入‘#’结束):
    ");
    123     while ((ch = getchar()) != '#')
    124     {
    125         switch (ch)
    126         {
    127         case'.':
    128             putchar('!');
    129             count1++;
    130             break;
    131         case'!':
    132             putchar('!');
    133             putchar('!');
    134             count2++;
    135             break;
    136         default:
    137             putchar(ch);
    138         }
    139     }
    140     printf("
    '!'替代'.'进行了%d次
    ", count1);
    141     printf("'!!'替代'!'进行了%d次
    ", count2);
    142     getchar();
    143     getchar();
    144     return 0;
    145 }
    146 /*6*/
    147 #include<stdio.h>
    148 int main(void)
    149 {
    150     char ch;
    151     char fir, sec;//第一个接收到的字符和第二个字符
    152     int count = 0;//ei出现的次数
    153     printf("输入进行统计(输入‘#’结束):
    ");
    154     while ((ch=getchar())!='#')
    155     {
    156         if (ch=='e')
    157         {
    158             fir = ch;
    159             continue;
    160         }
    161         if (ch=='i')
    162         {
    163             sec = ch;
    164 
    165             if (fir == 'e'&&sec == 'i')
    166                 count++;                //判断前一个字符是‘e’,第二个是‘i’,则次数加1
    167             //初始化fir和sec
    168             fir = 'a';
    169             sec = 'a';
    170             continue;
    171         }
    172         continue;
    173     }
    174     printf("'ei'出现了%d次
    ",count);
    175     getchar();
    176     getchar();
    177     return 0;
    178 }
    179 /*7*/
    180 #include<stdio.h>
    181 #define BASE_MONEY 10.00//基本工资
    182 #define BASE_TIME 40//基本加班时间
    183 #define OVER_TIME 1.5//超过基本时间
    184 #define MONY1 300//税率分界线1
    185 #define MONY2 150//税率分界线2
    186 #define RATE1 0.15//MONY1前的税率
    187 #define RATE2 0.20//MONY2的税率
    188 #define RATE3 0.25//剩下的税率
    189 int main(void)
    190 {
    191     double hours;//一周工作时间
    192     double sum;//工资总数
    193     double rate_mony;//税金
    194     double income;//净收入
    195     printf("输入一周工作小时数:
    ");
    196     scanf_s("%lf", &hours);
    197     if (hours <= BASE_TIME)
    198         sum = hours * BASE_MONEY;
    199     else
    200         sum = BASE_TIME * BASE_MONEY + (hours - BASE_TIME)*BASE_MONEY*OVER_TIME;
    201     if (sum <= MONY1)
    202         rate_mony = sum * RATE1;
    203     else if (sum <= MONY1 + MONY2)
    204         rate_mony = MONY1 * RATE1 + (sum - MONY1)*RATE2;
    205     else
    206         rate_mony = MONY1 * RATE1 + MONY2 * RATE2 + (sum - MONY1 - MONY2)*RATE3;
    207     income = sum - rate_mony;
    208     printf("工资总额是:%.2lf	税金是:%.2lf	净收入是:%.2lf
    ", sum, rate_mony, income);
    209     getchar();
    210     getchar();
    211     return 0;
    212 }
    213 /*8*/
    214 #include<stdio.h>
    215 #define BASE_TIME 40     //基本加班时间
    216 #define OVER_TIME 1.5    //超过基本时间
    217 #define MONY1 300       //税率分界线1
    218 #define MONY2 150          //税率分界线2
    219 #define BASE_LEVEL1 8.75
    220 #define BASE_LEVEL2 9.33
    221 #define BASE_LEVEL3 10.00
    222 #define BASE_LEVEL4 11.20
    223 #define RATE1 0.15             //MONY1前的税率
    224 #define RATE2 0.20            //MONY2的税率
    225 #define RATE3 0.25           //剩下的税率
    226 int main(void)
    227 {
    228     int choice;
    229     double basy_money;
    230     double hours;            //一周工作时间
    231     double sum;             //工资总数
    232     double rate_money;      //税金
    233     double income;        //净收入
    234     printf("*******************************************************
    ");
    235     printf("输入与薪资或操作对应的编号进行操作:
    ");
    236     printf("1) $8.75/hours      	2) $9.33/hours
    ");
    237     printf("3) $10.00/hours     	4) $11.20/hours
    ");
    238     printf("5) 退出
    ");
    239     printf("*******************************************************
    ");
    240     while (scanf_s("%d",&choice) == 1 && choice != 5)
    241     {
    242         switch (choice)
    243         {
    244         case 1:
    245             basy_money = BASE_LEVEL1;
    246             break;
    247         case 2:
    248             basy_money = BASE_LEVEL2;
    249             break;
    250         case 3:
    251             basy_money = BASE_LEVEL3;
    252             break;
    253         case 4:
    254             basy_money = BASE_LEVEL4;
    255             break;
    256         default:
    257             printf("请输入1-4数字进行选择(输入数字5退出)。
    请输入正确的数字
    ");
    258             continue;
    259         }
    260         printf("输入一周工作小时数:
    ");
    261         scanf_s("%lf", &hours);
    262         if (hours <= BASE_TIME)
    263             sum = basy_money * hours;
    264         else
    265             sum = BASE_TIME * basy_money + (hours - BASE_TIME)*basy_money*OVER_TIME;
    266         if (sum <= MONY1)
    267             rate_money = sum * RATE1;
    268         else if (sum <= (MONY1 + MONY2))
    269             rate_money = MONY1 * RATE1 + (sum - MONY1) * RATE2;
    270         else
    271             rate_money = MONY1 * RATE1 + MONY2 * RATE2 + (sum - MONY1 - MONY2)*RATE3;
    272         income = sum - rate_money;
    273         printf("工资总额是:%.2lf	税金是:%.2lf	净收入是:%.2lf
    ", sum, rate_money, income);
    274         printf("输入下一个数字继续
    ");
    275     }
    276     getchar();
    277     return 0;
    278 }
    279 /*9*/
    280 #include<stdio.h>
    281 #include<stdbool.h>
    282 int main(void)
    283 {
    284     int limit;//输入的数
    285     int num;
    286     int div;
    287     bool numIsPrime;   //判断是否为素数
    288     printf("输入正整数:");
    289     while (scanf_s("%d",&limit) == 1 && limit > 0)
    290     {
    291         if (limit > 1)
    292             printf("以下为素数:
    ", limit);
    293         else
    294             printf("没有素数
    ");
    295         for (num=2 ; num <= limit; num++)
    296         {
    297             for (div = 2, numIsPrime = true;(div*div) <= num;div++)
    298                 if (num%div == 0)
    299                     numIsPrime = false;
    300             if (numIsPrime)
    301                 printf("%d是素数。
    ", num);
    302         }
    303         printf("输入正整数(输入q退出):");
    304     }
    305     printf("结束
    ");
    306     getchar();
    307     return 0;
    308 }
    309 /*10*/
    310 #include<stdio.h>
    311 #define LEVEL1 17850
    312 #define LEVEL2 23900
    313 #define LEVEL3 29750
    314 #define LEVEL4 14875
    315 #define RATE1 0.15
    316 #define RATE2 0.28
    317 int main(void)
    318 {
    319     int choice;             //选择号码
    320     long level;            //税金等级    
    321     double income;         //收入
    322     double taxmoney;       //税金
    323     printf("****************************************************************************
    ");
    324     printf("输入类别编号:
    ");
    325     printf("1) 单身   	2) 户主   	3) 已婚,共有   	4) 已婚,离异
    ");
    326     printf("5) 退出
    ");
    327     printf("****************************************************************************
    ");
    328     while (scanf_s("%d",&choice) == 1 && choice != 5)
    329     {
    330         switch (choice)
    331         {
    332         case 1:
    333             level = LEVEL1;
    334             break;
    335         case 2:
    336             level = LEVEL2;
    337             break;
    338         case 3:
    339             level = LEVEL3;
    340             break;
    341         case 4:
    342             level = LEVEL4;
    343             break;
    344         default:
    345             printf("请输入1-4数字进行选择(输入数字5退出)。
    请输入正确的数字
    ");
    346             break;
    347         }
    348         printf("请输入你的收入:");
    349         scanf_s("%lf", &income);
    350         if (income <= level)
    351             taxmoney = income * RATE1;
    352         else
    353             taxmoney = level * RATE1 + (income - level)*RATE2;
    354         printf("你的税金为%.2lf元
    ", taxmoney);
    355         printf("继续输入选择(输入5退出):
    ");
    356     }
    357     getchar();
    358     return 0;
    359 }
    360 /*11*/
    361 #include<stdio.h>
    362 #define Y_PRICE 2.05        //洋蓟 单价
    363 #define T_PRICE 1.15        //甜菜
    364 #define H_PRICE 1.09       //胡萝卜
    365 #define DISCOUNT 0.05      //折扣优惠
    366 
    367 #define WEIGHT_LEVEL1 5      //重量层次
    368 #define WEIGHT_LEVEL2 20
    369 
    370 #define TRANS_LEVEL1 6.5      //运费和包装费层次
    371 #define TRANS_LEVEL2 14
    372 
    373 #define TRANS_LEVEL3 0.5       //额外增费
    374 int main(void)
    375 {
    376     char ch;       //选择字符
    377     float input;     //输入磅数
    378     float y_weight = 0;   //洋蓟磅数
    379     float t_weight = 0;    //甜菜磅数
    380     float h_weight = 0;     //胡萝卜磅数
    381     float total_weight;   //总重
    382     float cost;            //花费
    383     float total_cost;         //总花费:买菜+运费
    384     float discount;           //折扣
    385     float tran_cost;         //运费
    386     float total_all;
    387     printf("************************************************
    ");
    388     printf("输入编号进行选择:
    ");
    389     printf("a:洋蓟	b:甜菜	c:胡萝卜
    q:退出并打印账单
    ");
    390     printf("************************************************
    ");
    391     while ((ch = getchar()) != 'q')
    392     {
    393         if (ch == '
    ')
    394             continue;
    395         while (getchar() != '
    ')
    396             continue;
    397         switch (ch)
    398         {
    399         case 'a':
    400             printf("输入洋蓟的磅数:");
    401             scanf_s("%f", &input);
    402             y_weight = y_weight + input;
    403             break;
    404         case 'b':
    405             printf("输入甜菜的磅数:");
    406             scanf_s("%f", &input);
    407             t_weight = t_weight + input;
    408             break;
    409         case 'c':
    410             printf("输入胡萝卜的磅数:");
    411             scanf_s("%f", &input);
    412             h_weight = h_weight + input;
    413             break;
    414         default:
    415             printf("输入错误,请输入a,b,c选择蔬菜,q退出
    ");
    416             break;
    417         }
    418         printf("继续输入进行购物
    ");
    419     }
    420     total_weight = y_weight + t_weight + h_weight;
    421     cost = y_weight * Y_PRICE + t_weight * T_PRICE + h_weight * H_PRICE;
    422     if (cost >= 100)
    423         discount = cost * DISCOUNT;
    424     else
    425         discount = 0;
    426     if (total_weight <= 0)
    427         tran_cost = 0;
    428     else if (total_weight <= WEIGHT_LEVEL1)
    429         tran_cost = TRANS_LEVEL1;
    430     else if (total_weight <= WEIGHT_LEVEL2)
    431         tran_cost = TRANS_LEVEL2;
    432     else
    433         tran_cost = TRANS_LEVEL2 + TRANS_LEVEL3 * total_weight;
    434     total_all = cost + tran_cost - discount;
    435     printf("你的订单如下:
    ");
    436     printf("2.05美元/磅的洋蓟订购了%.2f磅
    ", y_weight);
    437     printf("1.15美元/磅的甜菜订购了%.2f磅
    ", t_weight);
    438     printf("1.09美元/磅的胡萝卜订购了%.2f磅
    ", h_weight);
    439     printf("买蔬菜的费用为:%.2f
    ", cost);
    440     if(cost>100)
    441         printf("折扣为:%.2f
    ", discount);
    442     printf("运费和包装费为:%.2f
    ", tran_cost);
    443     printf("所有费用为:%.2f
    ", total_all);
    444     getchar();
    445     getchar();
    446     return 0;
    447 }
      1 /****编程练习8****/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     char ch;
      7     int a = 0;
      8     while ((ch=getchar())!=EOF)
      9         a++;
     10     printf("读取到%d个字符。
    ", a);
     11     getchar();
     12     return 0;
     13 }
     14 /*2*/
     15 #include<stdio.h>
     16 int main(void)
     17 {
     18     char ch;
     19     int i=0;            //统计每行的值
     20     while ((ch=getchar())!=EOF)
     21     {
     22         if (ch == '
    ')
     23         {
     24             putchar('\');
     25             putchar('n');
     26             printf(" %d
    ", ch);
     27             i = 0;
     28         }
     29         else if (ch == '	')
     30         {
     31             putchar('\');
     32             putchar('t');
     33             printf("%d
    ", ch);
     34         }
     35         else if (ch < ' ')
     36         {
     37             putchar('^');
     38             putchar(ch + 64);
     39             printf("%d	", ch);
     40         }
     41         else
     42             printf("%c %d	", ch, ch);
     43         if (++i == 10)
     44         {
     45             printf("
    ");
     46             i = 0;
     47         }
     48     }
     49     getchar();
     50     return 0;
     51 }
     52 /*3*/
     53 #include<stdio.h>
     54 #include<ctype.h>
     55 int main(void)
     56 {
     57     int ch;
     58                                  //统计个数,用不到负数
     59     unsigned A_count = 0;        //大写
     60     unsigned a_count = 0;        //小写
     61     unsigned oth_count = 0;       //其他字符个数
     62     while ((ch=getchar())!=EOF)
     63     {
     64         //if (isupper(ch))         //用isupper()函数判断是否为大写
     65         if(ch>='A'&&ch<='Z')       //可以用该行替换上一行,这种方法不用再调用ctype.h
     66             A_count++;
     67         else if (islower(ch))      //用islower()函数判断是否为小写    
     68             a_count++;
     69         else
     70             oth_count++;
     71     }
     72     printf("输入中大写字母有%d个
    ", A_count);
     73     printf("小写字母有%d个
    ", a_count);
     74     printf("其他字符有%d个
    ", oth_count);
     75     getchar();
     76     return 0;
     77 }
     78 /*4*/
     79 #include<stdio.h>
     80 #include<ctype.h>
     81 #include<stdbool.h>
     82 int main(void)
     83 {
     84     char ch;
     85     int words = 0, count = 0;      //单词   字母总数
     86     bool inword = false;           //判断是否是一个单词
     87     float average;
     88     while ((ch=getchar())!=EOF)
     89     {
     90         if (isalpha(ch))
     91             count++;               //如果是个字符,字母+1
     92         if (!isspace(ch) && !inword)
     93         {
     94             inword = true;
     95             words++;               //如果不是空格且inword为true,单词+1
     96         }
     97         if (isspace(ch) && inword)
     98             inword = false;           //如果是个空格,且inword为true,此时并不是个完整单词,需要初始化inword
     99         if (ispunct(ch))
    100             continue;               //如果是字符,中断本次循环
    101     }
    102     average = count / words;
    103     printf("平均每个单词有%.2f个字母", average);
    104     getchar();
    105     return 0;
    106 }
    107 /*5*/
    108 #include<stdio.h>
    109 int main(void)
    110 {
    111     int high = 100;
    112     int low = 1;
    113     int    guess=(low+high)/2;
    114     char response;
    115     printf("你在1-100中选一个数字,我能猜出那个数字!");
    116     printf("
    如果我回答正确,就输入'y'");
    117     printf("
    如果我猜的数太高,就输入'h'");
    118     printf("
    如果我猜的数太小,就输入'l'
    ");
    119     printf("你选择的数字是 %d?
    ", guess);
    120     while ((response=getchar())!='y')
    121     {
    122         if (response == '
    ')
    123             continue;
    124         if (response != 'h'&&response != 'l')
    125         {
    126             printf("对不起,输入错误!请重新输入!
    ");
    127             continue;
    128         }
    129         if (response == 'h')
    130             high = guess - 1;
    131         else if (response == 'l')
    132             low = guess + 1;
    133         guess = (high + low) / 2;
    134         printf("你选择的数字是 %d?
    ", guess);
    135     }
    136     printf("哈哈!我猜对了!
    ");
    137     getchar();
    138     getchar();
    139     return 0;
    140 }
    141 /*6*/
    142 #include<stdio.h>
    143 #include<ctype.h>
    144 char get_first(void);
    145 int main(void)
    146 {
    147     char ch;
    148     ch = get_first();
    149     putchar(ch);
    150     getchar();
    151     return 0;
    152 }
    153 char get_first(void)
    154 {
    155     char ch;
    156     ch = getchar();
    157     while (isspace(ch))
    158         ch = getchar();
    159     while (getchar() != '
    ')
    160         continue;
    161     return ch;
    162 }
    163 /*7*/
    164 #include<stdio.h>
    165 #include<ctype.h>
    166 #include<math.h>
    167 #define BASY_MONEY1 8.75       //基本工资
    168 #define BASY_MONEY2 9.33
    169 #define BASY_MONEY3 10.00
    170 #define BASY_MONEY4 11.20
    171 
    172 #define BASY_TIME 40         //基本工作时间
    173 #define EXTR_TIME 1.5         //加班
    174 
    175 #define LIN_MONEY1 300       //税率分界线
    176 #define LIN_MONEY2 150       
    177 
    178 #define RATE1 0.15            //税率
    179 #define RATE2 0.20
    180 #define RATE3 0.25
    181 int get_first(void);          //创建函数,如果输入为空,则丢弃
    182 int main(void)
    183 {
    184     char ch;
    185     double basy_money;
    186     double hours;
    187     double sum;           //工资总数
    188     double rate_money;    //税金
    189     double income;        //净收入
    190     printf("*******************************************************
    ");
    191     printf("输入与薪资或操作对应的编号进行操作:
    ");
    192     printf("a) $8.75/hours      	b) $9.33/hours
    ");
    193     printf("c) $10.00/hours     	d) $11.20/hours
    ");
    194     printf("q) 退出
    ");
    195     printf("*******************************************************
    ");
    196     while ((ch=get_first())!='q')   //调用get_first()函数
    197     {
    198         if (ch =='
    ')
    199             continue;
    200         ch = tolower(ch);       //将大写字母转为小写
    201         switch (ch)
    202         {
    203         case 'a':
    204             basy_money = BASY_MONEY1; break;
    205         case 'b':
    206             basy_money = BASY_MONEY2; break;
    207             case 'c':
    208                 basy_money = BASY_MONEY3; break;
    209             case 'd':
    210                 basy_money = BASY_MONEY4; break;
    211         default:
    212             printf("请输入a-d进行选择(输入q退出)。
    请输入正确的数字
    "); break;
    213         }
    214         printf("输入一周工作小时数:
    ");
    215         scanf_s("%lf", &hours);
    216         if (hours <= BASY_TIME)
    217             sum = basy_money * hours;
    218         else
    219             sum = basy_money * BASY_TIME + (hours - BASY_TIME)*basy_money*EXTR_TIME;
    220         if (sum <= LIN_MONEY1)
    221             rate_money = sum * RATE1;
    222         else if (sum <= (LIN_MONEY1 + LIN_MONEY2))
    223             rate_money = LIN_MONEY1*RATE1 + (sum - LIN_MONEY1)*RATE2;
    224         else
    225             rate_money = LIN_MONEY1 * RATE1 + LIN_MONEY2 * RATE2 + BASY_MONEY2 + (sum - LIN_MONEY1 - LIN_MONEY2)*RATE3;
    226         income = sum - rate_money;
    227         printf("工资总额是:%.2lf	税金是:%.2lf	净收入是:%.2lf
    ", sum, rate_money, income);
    228         printf("输入下一个数字继续
    ");
    229     }
    230     getchar();
    231     return 0;
    232 }
    233 int get_first(void)
    234 {
    235     int ch;
    236     ch = getchar();
    237     while (isspace(ch))
    238         ch = getchar();
    239     while (getchar() != '
    ')
    240         continue;
    241     return ch;
    242 }
    243 /*8*/
    244 #include<stdio.h>
    245 #include<ctype.h>
    246 int get_first(void);
    247 float get_num(void);
    248 int main(void)
    249 {
    250     char ch;
    251     float first, second;
    252     printf("输入你想进行运算的选项:
    ");
    253     printf("a.加法	s.减法
    ");
    254     printf("m.乘法	d.除法
    ");
    255     printf("q.退出
    ");
    256     while ((ch=get_first())!='q')
    257     {
    258         ch = tolower(ch);
    259         if (ch != 'a'&& ch != 's'&& ch != 'm'&& ch != 'd')
    260         {
    261             printf("你只能输入a,s,m,d,q中的一个:");
    262             continue;
    263         }
    264         printf("输入第一个数:");
    265         first = get_num();
    266         printf("输入第二个数:");
    267         second = get_num();
    268         if (ch == 'd')
    269         {
    270             while (second == 0)
    271             {
    272                 printf("输入一个大于0的数:");
    273                 second = get_num();
    274             }
    275         }
    276         switch (ch)
    277         {
    278         case 'a':
    279             printf("%.1f+%.1f=%.1f
    ", first, second, first + second); break;
    280         case 's':
    281             printf("%.1f-%.1f=%.1f
    ", first, second, first - second); break;
    282         case 'm':
    283             printf("%.1f*%.1f=%.1f
    ", first, second, first*second); break;
    284         case 'd':
    285             printf("%.1f/%.1f=%.1f
    ", first, second, first / second); break;
    286         default:
    287             ;
    288             break;
    289         }
    290         printf("输入你想进行运算的选项:
    ");
    291         printf("a.加法	s.减法
    ");
    292         printf("m.乘法	d.除法
    ");
    293         printf("q.退出
    ");
    294     }
    295     getchar();
    296     return 0;
    297 }
    298 int get_first(void)
    299 {
    300     int ch;
    301     while ((ch = getchar()) == ' ' || ch == '	' || ch == '
    ')
    302         continue;
    303     while (getchar() != '
    ')
    304         continue;
    305     return ch;
    306 }
    307 float get_num(void)
    308 {
    309     float input;
    310     char ch;
    311     while (scanf_s("%f",&input)!=1)
    312     {
    313         while ((ch = getchar()) != '
    ')
    314             putchar(ch);
    315         printf("%c不是数字
    请输入例如2.5,-1.78E8,3之类的数字:",ch);
    316     }
    317     return input;
    318 }
      1 /****编程练习8****/
      2 /*1*/
      3 #include<stdio.h>
      4 int main(void)
      5 {
      6     char ch;
      7     int a = 0;
      8     while ((ch=getchar())!=EOF)
      9         a++;
     10     printf("读取到%d个字符。
    ", a);
     11     getchar();
     12     return 0;
     13 }
     14 /*2*/
     15 #include<stdio.h>
     16 int main(void)
     17 {
     18     char ch;
     19     int i=0;            //统计每行的值
     20     while ((ch=getchar())!=EOF)
     21     {
     22         if (ch == '
    ')
     23         {
     24             putchar('\');
     25             putchar('n');
     26             printf(" %d
    ", ch);
     27             i = 0;
     28         }
     29         else if (ch == '	')
     30         {
     31             putchar('\');
     32             putchar('t');
     33             printf("%d
    ", ch);
     34         }
     35         else if (ch < ' ')
     36         {
     37             putchar('^');
     38             putchar(ch + 64);
     39             printf("%d	", ch);
     40         }
     41         else
     42             printf("%c %d	", ch, ch);
     43         if (++i == 10)
     44         {
     45             printf("
    ");
     46             i = 0;
     47         }
     48     }
     49     getchar();
     50     return 0;
     51 }
     52 /*3*/
     53 #include<stdio.h>
     54 #include<ctype.h>
     55 int main(void)
     56 {
     57     int ch;
     58                                  //统计个数,用不到负数
     59     unsigned A_count = 0;        //大写
     60     unsigned a_count = 0;        //小写
     61     unsigned oth_count = 0;       //其他字符个数
     62     while ((ch=getchar())!=EOF)
     63     {
     64         //if (isupper(ch))         //用isupper()函数判断是否为大写
     65         if(ch>='A'&&ch<='Z')       //可以用该行替换上一行,这种方法不用再调用ctype.h
     66             A_count++;
     67         else if (islower(ch))      //用islower()函数判断是否为小写    
     68             a_count++;
     69         else
     70             oth_count++;
     71     }
     72     printf("输入中大写字母有%d个
    ", A_count);
     73     printf("小写字母有%d个
    ", a_count);
     74     printf("其他字符有%d个
    ", oth_count);
     75     getchar();
     76     return 0;
     77 }
     78 /*4*/
     79 #include<stdio.h>
     80 #include<ctype.h>
     81 #include<stdbool.h>
     82 int main(void)
     83 {
     84     char ch;
     85     int words = 0, count = 0;      //单词   字母总数
     86     bool inword = false;           //判断是否是一个单词
     87     float average;
     88     while ((ch=getchar())!=EOF)
     89     {
     90         if (isalpha(ch))
     91             count++;               //如果是个字符,字母+1
     92         if (!isspace(ch) && !inword)
     93         {
     94             inword = true;
     95             words++;               //如果不是空格且inword为true,单词+1
     96         }
     97         if (isspace(ch) && inword)
     98             inword = false;           //如果是个空格,且inword为true,此时并不是个完整单词,需要初始化inword
     99         if (ispunct(ch))
    100             continue;               //如果是字符,中断本次循环
    101     }
    102     average = count / words;
    103     printf("平均每个单词有%.2f个字母", average);
    104     getchar();
    105     return 0;
    106 }
    107 /*5*/
    108 #include<stdio.h>
    109 int main(void)
    110 {
    111     int high = 100;
    112     int low = 1;
    113     int    guess=(low+high)/2;
    114     char response;
    115     printf("你在1-100中选一个数字,我能猜出那个数字!");
    116     printf("
    如果我回答正确,就输入'y'");
    117     printf("
    如果我猜的数太高,就输入'h'");
    118     printf("
    如果我猜的数太小,就输入'l'
    ");
    119     printf("你选择的数字是 %d?
    ", guess);
    120     while ((response=getchar())!='y')
    121     {
    122         if (response == '
    ')
    123             continue;
    124         if (response != 'h'&&response != 'l')
    125         {
    126             printf("对不起,输入错误!请重新输入!
    ");
    127             continue;
    128         }
    129         if (response == 'h')
    130             high = guess - 1;
    131         else if (response == 'l')
    132             low = guess + 1;
    133         guess = (high + low) / 2;
    134         printf("你选择的数字是 %d?
    ", guess);
    135     }
    136     printf("哈哈!我猜对了!
    ");
    137     getchar();
    138     getchar();
    139     return 0;
    140 }
    141 /*6*/
    142 #include<stdio.h>
    143 #include<ctype.h>
    144 char get_first(void);
    145 int main(void)
    146 {
    147     char ch;
    148     ch = get_first();
    149     putchar(ch);
    150     getchar();
    151     return 0;
    152 }
    153 char get_first(void)
    154 {
    155     char ch;
    156     ch = getchar();
    157     while (isspace(ch))
    158         ch = getchar();
    159     while (getchar() != '
    ')
    160         continue;
    161     return ch;
    162 }
    163 /*7*/
    164 #include<stdio.h>
    165 #include<ctype.h>
    166 #include<math.h>
    167 #define BASY_MONEY1 8.75       //基本工资
    168 #define BASY_MONEY2 9.33
    169 #define BASY_MONEY3 10.00
    170 #define BASY_MONEY4 11.20
    171 
    172 #define BASY_TIME 40         //基本工作时间
    173 #define EXTR_TIME 1.5         //加班
    174 
    175 #define LIN_MONEY1 300       //税率分界线
    176 #define LIN_MONEY2 150       
    177 
    178 #define RATE1 0.15            //税率
    179 #define RATE2 0.20
    180 #define RATE3 0.25
    181 int get_first(void);          //创建函数,如果输入为空,则丢弃
    182 int main(void)
    183 {
    184     char ch;
    185     double basy_money;
    186     double hours;
    187     double sum;           //工资总数
    188     double rate_money;    //税金
    189     double income;        //净收入
    190     printf("*******************************************************
    ");
    191     printf("输入与薪资或操作对应的编号进行操作:
    ");
    192     printf("a) $8.75/hours      	b) $9.33/hours
    ");
    193     printf("c) $10.00/hours     	d) $11.20/hours
    ");
    194     printf("q) 退出
    ");
    195     printf("*******************************************************
    ");
    196     while ((ch=get_first())!='q')   //调用get_first()函数
    197     {
    198         if (ch =='
    ')
    199             continue;
    200         ch = tolower(ch);       //将大写字母转为小写
    201         switch (ch)
    202         {
    203         case 'a':
    204             basy_money = BASY_MONEY1; break;
    205         case 'b':
    206             basy_money = BASY_MONEY2; break;
    207             case 'c':
    208                 basy_money = BASY_MONEY3; break;
    209             case 'd':
    210                 basy_money = BASY_MONEY4; break;
    211         default:
    212             printf("请输入a-d进行选择(输入q退出)。
    请输入正确的数字
    "); break;
    213         }
    214         printf("输入一周工作小时数:
    ");
    215         scanf_s("%lf", &hours);
    216         if (hours <= BASY_TIME)
    217             sum = basy_money * hours;
    218         else
    219             sum = basy_money * BASY_TIME + (hours - BASY_TIME)*basy_money*EXTR_TIME;
    220         if (sum <= LIN_MONEY1)
    221             rate_money = sum * RATE1;
    222         else if (sum <= (LIN_MONEY1 + LIN_MONEY2))
    223             rate_money = LIN_MONEY1*RATE1 + (sum - LIN_MONEY1)*RATE2;
    224         else
    225             rate_money = LIN_MONEY1 * RATE1 + LIN_MONEY2 * RATE2 + BASY_MONEY2 + (sum - LIN_MONEY1 - LIN_MONEY2)*RATE3;
    226         income = sum - rate_money;
    227         printf("工资总额是:%.2lf	税金是:%.2lf	净收入是:%.2lf
    ", sum, rate_money, income);
    228         printf("输入下一个数字继续
    ");
    229     }
    230     getchar();
    231     return 0;
    232 }
    233 int get_first(void)
    234 {
    235     int ch;
    236     ch = getchar();
    237     while (isspace(ch))
    238         ch = getchar();
    239     while (getchar() != '
    ')
    240         continue;
    241     return ch;
    242 }
    243 /*8*/
    244 #include<stdio.h>
    245 #include<ctype.h>
    246 int get_first(void);
    247 float get_num(void);
    248 int main(void)
    249 {
    250     char ch;
    251     float first, second;
    252     printf("输入你想进行运算的选项:
    ");
    253     printf("a.加法	s.减法
    ");
    254     printf("m.乘法	d.除法
    ");
    255     printf("q.退出
    ");
    256     while ((ch=get_first())!='q')
    257     {
    258         ch = tolower(ch);
    259         if (ch != 'a'&& ch != 's'&& ch != 'm'&& ch != 'd')
    260         {
    261             printf("你只能输入a,s,m,d,q中的一个:");
    262             continue;
    263         }
    264         printf("输入第一个数:");
    265         first = get_num();
    266         printf("输入第二个数:");
    267         second = get_num();
    268         if (ch == 'd')
    269         {
    270             while (second == 0)
    271             {
    272                 printf("输入一个大于0的数:");
    273                 second = get_num();
    274             }
    275         }
    276         switch (ch)
    277         {
    278         case 'a':
    279             printf("%.1f+%.1f=%.1f
    ", first, second, first + second); break;
    280         case 's':
    281             printf("%.1f-%.1f=%.1f
    ", first, second, first - second); break;
    282         case 'm':
    283             printf("%.1f*%.1f=%.1f
    ", first, second, first*second); break;
    284         case 'd':
    285             printf("%.1f/%.1f=%.1f
    ", first, second, first / second); break;
    286         default:
    287             ;
    288             break;
    289         }
    290         printf("输入你想进行运算的选项:
    ");
    291         printf("a.加法	s.减法
    ");
    292         printf("m.乘法	d.除法
    ");
    293         printf("q.退出
    ");
    294     }
    295     getchar();
    296     return 0;
    297 }
    298 int get_first(void)
    299 {
    300     int ch;
    301     while ((ch = getchar()) == ' ' || ch == '	' || ch == '
    ')
    302         continue;
    303     while (getchar() != '
    ')
    304         continue;
    305     return ch;
    306 }
    307 float get_num(void)
    308 {
    309     float input;
    310     char ch;
    311     while (scanf_s("%f",&input)!=1)
    312     {
    313         while ((ch = getchar()) != '
    ')
    314             putchar(ch);
    315         printf("%c不是数字
    请输入例如2.5,-1.78E8,3之类的数字:",ch);
    316     }
    317     return input;
    318 }
      1 /*********编程练习9***********/
      2 /*复习题9*/
      3 #include<stdio.h>
      4 void mennu(void);        //菜单函数
      5 int limt(int up, int down);    //上下限函数
      6 int main(void)
      7 {
      8     int ch;
      9     mennu();
     10     while ((ch=limt(4,1))!=4)
     11     {
     12         printf("%d一个正确的选择!
    ",ch);
     13         mennu();
     14     }
     15     getchar();
     16     getchar();
     17     getchar();
     18     return 0;
     19 }
     20 void mennu(void)
     21 {
     22     printf("请选择列表中对应的数字:
    ");
     23     printf("1) 复制文件 	2) 移动文件
    ");
     24     printf("3) 删除文件 	4) 退出
    ");
     25     printf("输入你选择的数字:
    ");
     26 }
     27 int limt(int up, int down)
     28 {
     29     int input;
     30     int a=scanf_s("%d", &input);
     31     while (a==1&&(input > up || input < down))
     32     {
     33         printf("输入数值超过限制!
    ");
     34         mennu();
     35         scanf_s("%d", &input);
     36     }
     37     if (a!=1)
     38     {
     39         printf("没有数字输入!
    ");
     40         input = 4;
     41     }
     42     return input;
     43 }
     44 /*编程练习1*/
     45 #include<stdio.h>
     46 double min(double x, double y);       
     47 int main(void)
     48 {
     49     double a, b;
     50     printf("输入两个小数,将输出较小的值(输入q退出):
    ");
     51     while (scanf_s("%lf %lf", &a, &b)==2)
     52     {
     53         printf("%lf和%lf中较小的数是:%lf", a, b, min(a, b));
     54         printf("继续输入进行比较(输入q退出):
    ");
     55     }
     56     getchar();
     57     return 0;
     58 }
     59 double min(double x, double y)
     60 {
     61     return x < y ? x : y;
     62 }
     63 /*2*/
     64 #include<stdio.h>
     65 void chline(char ch, int i, int j);
     66 int main(void)
     67 {
     68     char c;
     69     int row;
     70     int clum;
     71     printf("该程序要求输入一个字符并按输入的行列数打印
    ");
     72     printf("输入你想打印的字符:");
     73     scanf_s("%c", &c);
     74     printf("输入你想打印的行和列(用空格分开):");
     75     scanf_s("%d %d", &row, &clum);
     76     printf("
    ");
     77     chline(c, row, clum);
     78     getchar();
     79     getchar();
     80     return 0;
     81 
     82 }
     83 void chline(char ch, int i, int j)
     84 {
     85     for (int x = 0; x < i; x++)
     86     {
     87         for (int y = 0; y < j; y++)
     88             putchar(ch);
     89         putchar('
    ');
     90     }
     91 }
     92 /*3*/
     93 #include<stdio.h>
     94 void chline(char ch, int i, int j);
     95 int main(void)
     96 {
     97     char ch;
     98     int row, clo;
     99     printf("输入想要打印的字符:");
    100     while ((ch=getchar())!='#')
    101     {
    102         if (ch == '
    ')
    103             continue;
    104         printf("输入想要打印的次数和行数:");
    105         if (scanf_s("%d %d", &clo, &row) != 2)
    106             break;
    107         chline(ch, clo, row);
    108         printf("继续输入下一个想打印的字符(输入#退出):");
    109     }
    110     getchar();
    111     return 0;
    112 }
    113 void chline(char ch, int i, int j)
    114 {
    115     for (int x = 0; x < i; x++)
    116             {
    117                 for (int y = 0; y < j; y++)
    118                     putchar(ch);
    119                 putchar('
    ');
    120             }
    121 }
    122 /*4*/
    123 #include<stdio.h>
    124 double Har_average(double num1, double num2);        //调和平均数
    125 int main(void)
    126 {
    127     double a = 3.14, b = 3.15, c;
    128     c=Har_average(a, b);
    129     printf("%lf", c);
    130     getchar();
    131     return 0;
    132 }
    133 double Har_average(double num1, double num2)
    134 {
    135     double down_num1, down_num2, down_avweage;
    136     down_num1 = 1 / num1;
    137     down_num2 = 1 / num2;
    138     down_avweage = 1 / ((down_num1 + down_num2) / 2);
    139     return down_avweage;
    140 }
    141 /*5*/
    142 #include<stdio.h>
    143 void large_of(double *p1, double *p2);
    144 int main(void)
    145 {
    146     double a, b;
    147     printf("输入两个值:");
    148     while (scanf_s("%lf %lf",&a,&b)==2)
    149     {
    150         large_of(&a, &b);
    151         printf("交换后的值为%lf和%lf
    ", a, b);
    152         printf("继续输入(输入q退出):");
    153     }
    154     getchar();
    155     return 0;
    156 }
    157 void large_of(double *p1, double *p2)
    158 {
    159     if (*p1 > *p2)
    160         *p2 = *p1;
    161     else
    162         *p1 = *p2;
    163 }
    164 /*6*/
    165 #include<stdio.h>
    166 void change(double *p1, double *p2, double*p3);
    167 int main(void)
    168 {
    169     double a, b, c;
    170     while (scanf_s("%lf %lf %lf", &a, &b,&c) == 3)
    171             {
    172                 change(&a, &b, &c);
    173                 printf("交换后的值为%lf和%lf和%f
    ", a, b,c);
    174                 printf("继续输入(输入q退出):");
    175             }
    176             getchar();
    177             return 0;
    178 }
    179 void change(double *p1, double *p2, double *p3)
    180 {
    181     double max, min, mid;
    182     max = *p1;
    183     if (max < *p2)
    184         max = *p2;
    185     if (max < *p3)
    186         max = *p3;
    187     min = *p1;
    188     if (min > *p2)
    189         min = *p2;
    190     if (min > *p3)
    191         min = *p3;
    192     mid = *p1 + *p2 + *p3 - max - min;
    193     *p1 = min;
    194     *p2 = mid;
    195     *p3 = max;
    196 }
    197 /*7*/
    198 #include<stdio.h>
    199 #include<ctype.h>
    200 int report(char ch);
    201 int main(void)
    202 {
    203     char ch;
    204     int pos;            //数值位置
    205     printf("请输入字符:");
    206     while ((ch=getchar())!=EOF)
    207     {
    208         if (ch == '
    ')
    209         {
    210             continue;
    211         }
    212         pos = report(ch);
    213         if (pos == -1)
    214         {
    215             printf("%c不是字母!
    ", ch);
    216         }
    217         else
    218         {
    219             printf("%c在字母表中的位置是%d!
    ", ch, pos);
    220         }
    221         printf("继续输入:");
    222     }
    223     getchar();
    224     return 0;
    225 }
    226 int report(char ch)
    227 {
    228     if (isalpha(ch))                 //判断是否为字母
    229     {
    230         return toupper(ch) - 'A' + 1;       //将小写转换为大写;也可以将大写转换为小写,‘A’要改为‘a’
    231     }
    232     else
    233     {
    234         return -1;
    235     }
    236 }
    237 /*8*/
    238 #include<stdio.h>
    239 double power(double n, int p);
    240 int main(void)
    241 {
    242     double x, xpow;
    243     int exp;
    244     printf("输入数字和指数,计算整数幂结果(q退出):");
    245     while (scanf_s("%lf %d",&x,&exp)==2)
    246     {
    247         xpow = power(x, exp);
    248         if (xpow == 1)
    249             continue;
    250         printf("%.3g的%d次幂为%.5g
    ", x, exp, xpow);
    251         printf("继续输入(q退出):");
    252     }
    253     getchar();
    254     return 0;
    255 }
    256 double power(double n, int p)
    257 {
    258     double pow = 1;
    259     if (p == 0)
    260     {
    261         if (n==0)
    262         {
    263             printf("0的0次幂未定义,请输入其它值:
    ");
    264         }
    265         pow = 1;
    266     }
    267     else if (p==0)
    268     {
    269         pow = 0;
    270     }
    271     else if (p>0)
    272     {
    273         for (int i = 1; i <= p; i++)
    274         {
    275             pow *= n;
    276         }
    277     }
    278     else
    279     {
    280         pow = 1 / power(n, -p);     //运用了递归   
    281         ///////不用递归的写法:for(int i=1; i <= -p; i++)
    282          //////////////////       {
    283 ////////////////////////////            pow*=n;
    284 ////////////////////////////         }          //此种方法返回的是 1/pow
    285     }
    286     return pow;
    287 }
    288 /*9*/
    289 ////上题所示/////////
    290 /*10*/
    291 #include<stdio.h>
    292 void to_base_n(int x, int system);
    293 int main(void)
    294 {
    295     int num;
    296     int system_num;
    297     int status;
    298     printf("输入一个整数:");
    299     while (scanf_s("%d",&num)==1)
    300     {
    301         printf("输入进制(2-10):");
    302         while ((status=scanf_s("%d",&system_num))==1&&(system_num<2||system_num>10))
    303         {
    304             printf("输入进制超过限定值,请输入2-10之间的数字:");
    305         }
    306         if (status != 1)
    307             break;
    308         to_base_n(num, system_num);
    309         printf("
    ");
    310         printf("继续输入一个整数(q退出):");
    311     }
    312     getchar();
    313     return 0;
    314 }
    315 void to_base_n(int x, int system)
    316 {
    317     int r;
    318     r = x % system;
    319     if (x >= system)
    320     {
    321         to_base_n(x / system, system);           //递归
    322     }
    323     putchar('0' + r);           //因为putchar()函数只能输出字符,我们要输出的是字符,所以运用ASCALL码值加上r
    324 }
    325 /*11*/
    326 #include<stdio.h>
    327 void Fibonacci(int n);
    328 int main(void)
    329 {
    330     int n;
    331     printf("输入整数:");
    332     while ((scanf_s("%d",&n)==1))
    333     {
    334         Fibonacci(n);
    335         printf("继续输入(q退出):");
    336     }
    337     getchar();
    338     return 0;
    339 }
    340 void Fibonacci(int n)
    341 {
    342     int f1, f2, f3;
    343     printf("斐波那契是:");
    344     for (int i = 1; i <= n; i++)
    345     {
    346         if (i == 1)
    347         {
    348             f1 = 1;
    349             printf("%d", f1);
    350         }
    351         else if (i==2)
    352         {
    353             f2 = 1;
    354             printf("%d", f2);
    355                  }
    356         else
    357         {
    358             f3 = f2 + f1;
    359             f1 = f2;
    360             f2 = f3;
    361             printf("%d", f3);
    362         }
    363         putchar(' ');
    364     }
    365     putchar('
    ');
    366 }
      1 /********编程练习10**********/
      2 /*1*/
      3 #include<stdio.h>
      4 #define MONTHS 12
      5 #define YEARS 5
      6 int main(void)
      7 {
      8     const float rain[YEARS][MONTHS] =        //2010-2014年降水量
      9     {
     10         {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
     11         {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
     12         {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
     13         {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
     14         {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
     15     };
     16     int year, month;
     17     float subtot, total;                     //初始化要放在循环中
     18     printf("年份	降水量
    ");
     19     for (year = 0,total=0; year < YEARS; year++)
     20     {
     21         for (month = 0,subtot = 0; month < MONTHS; month++)
     22             subtot += *(*(rain + year) + month);     //每年每月降水量
     23         printf("%d	%.1f
    ", 2010 + year, subtot);
     24         total += subtot;                            //5年总降水量
     25     }
     26     printf("
    每年的平均降水量为:%.1f
    ", total / YEARS);
     27     printf("每月5年中平均降水量:
    ");
     28     printf(" 1   2   3   4   5   6   7   8   9   10  11  12
    ");
     29     for (month = 0; month < MONTHS; month++)
     30     {
     31         for (year = 0, subtot = 0; year < YEARS; year++)
     32         {
     33             subtot += *(*(rain + year) + month);
     34         }
     35         printf("%4.1f", subtot / YEARS);
     36     }
     37     getchar();
     38     return 0;
     39 }
     40 /*2*/
     41 #include<stdio.h>
     42 void copy_arr(double target[], double source[], int n);
     43 void copy_ptr(double *target, double *source, int n);
     44 void copy_ptrs(double *target, double *source_begin, int *source_end );
     45 int main(void)
     46 {
     47     int i;
     48     double source[5] = { 1.1, 2.2, 3.3, 4.4, 5.5 };
     49     double target1[5];
     50     double target2[5];
     51     double target3[5];
     52     printf("source: ");
     53     for ( i = 0; i < 5; i++)
     54     {
     55         printf("%.1lf", source[i]);
     56         printf(" ");
     57     }
     58     putchar('
    ');
     59     copy_arr(target1, source, 5);
     60     printf("target1:");
     61     for (i = 0; i < 5; i++)
     62     {
     63         printf("%.1lf", target1[i]);
     64         putchar(' ');
     65     }
     66     putchar('
    ');
     67     copy_ptr(target2, source, 5);
     68     printf("target2:");
     69     for ( i = 0; i < 5; i++)
     70     {
     71         printf("%.1lf", *(target2 + i));
     72         putchar(' ');
     73     }
     74     putchar('
    ');
     75     copy_ptrs(target3, source, source+5);
     76     printf("target3:");
     77     for (i = 0; i < 5; i++)
     78     {
     79         printf("%.1lf", target3[i]);
     80         putchar(' ');
     81     }
     82     putchar('
    ');
     83     getchar();
     84     return 0;
     85 }
     86 void copy_arr(double target[], double source[], int n)
     87 {
     88     for (int i = 0; i < n; i++)
     89     {
     90         target[i] = source[i];
     91     }
     92 }
     93 void copy_ptr(double *target, double *source, int n)
     94 {
     95     for (int i = 0; i < n; i++)
     96     {
     97         *(target + i) = *(source + i);
     98     }
     99 }
    100 void copy_ptrs(double *target, double *source_begin, int *source_end)
    101 {
    102     while (source_begin < source_end)
    103     {
    104         *target = *source_begin;
    105         target++;
    106         source_begin++;
    107     }
    108 }
    109 /*3*/
    110 #include<stdio.h>
    111 #define SIZE 10
    112 void show_arr(const arr[], int n);
    113 int max_arr(const arr[], int n);
    114 int main(void)
    115 {
    116     int arr[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };
    117     int max;
    118     show_arr(arr, SIZE);
    119     max = max_arr(arr, SIZE);
    120     printf("%d是数组中的最大值。
    ", max);
    121     getchar();
    122     return 0;
    123 }
    124 int max_arr(const arr[], int n)
    125 {
    126     int max = arr[0];
    127     for (int i = 0; i < n; i++)
    128     {
    129         if (max < arr[i])
    130             max = arr[i];
    131     }
    132     return max;
    133 }
    134 void show_arr(const arr[], int n)
    135 {
    136     for (int i = 0; i < n; i++)
    137     {
    138         printf("%d", arr[i]);
    139         putchar(' ');
    140     }
    141     putchar('
    ');
    142 }
    143 /*4*/
    144 #include<stdio.h>
    145 #define SIZE 10
    146 double max(const arr[], int n);
    147 void show_arr(const arr[], int n);
    148 int main(void)
    149 {
    150     int arr[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };
    151     int max_sub;
    152     show_arr(arr, SIZE);
    153     max_sub = max(arr, SIZE);
    154     printf("最大值的下标是%d
    ", max_sub);
    155     getchar();
    156     return 0;
    157 }
    158 double max(const arr[], int n)
    159 {
    160     int max = arr[0];
    161     int sub;                 //最大值下标
    162     for (int i = 0; i < n; i++)
    163     {
    164         if (max < arr[i])
    165             max = arr[i];
    166         sub = i;
    167     }
    168     return sub;
    169 }
    170 void show_arr(const arr[], int n)
    171 {
    172     for (int i = 0; i < n; i++)
    173     {
    174         printf("%d", arr[i]);
    175         putchar(' ');
    176     }
    177     putchar('
    ');
    178 }
    179 /*5*/
    180 #include<stdio.h>
    181 #define SIZE 10
    182 double diff_val(const double arr[], int n);
    183 int main(void)
    184 {
    185     double arr[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };
    186     double value;
    187     value = diff_val(arr, SIZE);
    188     printf("最大值与最小值的差是%lf
    ", value);
    189     getchar();
    190     return 0;
    191 }
    192 double diff_val(const double arr[], int n)
    193 {
    194     double max = arr[0];
    195     double min = arr[0];
    196     for (int i = 0; i < n; i++)
    197     {
    198         if (max < arr[i])
    199         {
    200             max = arr[i];
    201         }
    202         else if(min>arr[i])
    203         {
    204             min = arr[i];
    205         }
    206     }
    207     return max - min;
    208 }
    209 /*6*/
    210 #include<stdio.h>
    211 #define SIZE 10
    212 void reverse(double arr[], int n);
    213 int main(void)
    214 {
    215     double arr[SIZE] = { 11,33, 22,44,66,55,77,88,99,10 };
    216     printf("排序前的结果是:");
    217     for (int i = 0; i < SIZE; i++)
    218     {
    219         printf("%.2lf", arr[i]);
    220         putchar(' ');
    221     }
    222     putchar('
    ');
    223     reverse(arr, SIZE);
    224     printf("排序后的结果是:");
    225     for (int i = 0; i < SIZE; i++)
    226     {
    227         printf("%.2lf", arr[i]);
    228         putchar(' ');
    229     }
    230     putchar('
    ');
    231     getchar();
    232     return 0;
    233 }
    234 void reverse(double arr[], int n)
    235 {
    236     for (int i = 0; i < n / 2; i++)
    237     {
    238         double tmp = arr[i];
    239         arr[i] = arr[n - 1 - i];
    240         arr[n - 1 - i] = tmp;
    241     }
    242 }
    243 /*7*/
    244 #include<stdio.h>
    245 #define ROWS 3    //
    246 #define COLS 4    //
    247 void copy_arr(double target_arr[][COLS], double source_arr[][COLS], int row);
    248 int main(void)
    249 {
    250     double source_arr[ROWS][COLS] = 
    251     {
    252         {1.1,2.2,3.3,4.4},
    253         {2.2,2.3,2.4,2.5},
    254         {3.3,4.4,5.5,6.6}
    255     };
    256     double target_arr[ROWS][COLS];
    257     copy_arr(target_arr, source_arr, ROWS);
    258     printf("结果为:
    ");
    259     for (int i = 0; i < ROWS; i++)
    260     {
    261         for (int j = 0; j < COLS; j++)
    262         {
    263             printf("%.2lf", target_arr[i][j]);
    264             putchar(' ');
    265         }
    266         putchar('
    ');
    267     }
    268     getchar();
    269     return 0;
    270 }
    271 void copy_arr(double target_arr[][COLS], double source_arr[][COLS], int row)
    272 {
    273     for (int i = 0; i < row; i++)
    274     {
    275         for (int j = 0; j < COLS; j++)
    276         {
    277             target_arr[i][j] = source_arr[i][j];
    278         }
    279     }
    280 }
    281 /*8*/
    282 #include<stdio.h>
    283 #define SIZE1 7
    284 #define SIZE2 3
    285 void copy_arr(int target_arr[],const int source_arr[], int n);
    286 int main(void)
    287 {
    288     int source_arr[SIZE1] = { 1,2,3,4,5,6,7 };
    289     int target_arr[SIZE2];
    290     int values;
    291     copy_arr(target_arr, source_arr + 2, SIZE2);
    292     for (int i = 0; i < SIZE2; i++)
    293     {
    294         printf("%d", target_arr[i]);
    295         putchar(' ');
    296     }
    297     printf("
    ");
    298     getchar();
    299     return 0;
    300 }
    301 void copy_arr(int target_arr[], const int source_arr[], int n)
    302 {
    303     for (int i = 0; i < n; i++)
    304     {
    305         target_arr[i] = source_arr[i];
    306     }
    307 }
    308 /*9*/
    309 #include<stdio.h>
    310 void copy_arr(int rows, double target_arr[][5],double source_arr[][5]);
    311 void show_arr(int rows, double target_arr[][5], double source_arr[][5]);
    312 int main(void)
    313 {
    314     double source_arr[3][5] = 
    315     {
    316         {1.1,2.2,3.3,4.4,5.5},
    317         {2.2,3.3,4.4,5.5,6.6},
    318         {3.3,4.4,5.5,6.6,7.7}
    319     };
    320     double target_arr[3][5];
    321     copy_arr(3, target_arr, source_arr);
    322     show_arr(3, target_arr, source_arr);
    323     getchar();
    324     return 0;
    325 }
    326 void copy_arr(int rows, double target_arr[][5], double source_arr[][5])
    327 {
    328     for (int i = 0; i < rows; i++)
    329     {
    330         for (int j = 0; j < 5; j++)
    331         {
    332             target_arr[i][j] = source_arr[i][j];
    333         }
    334     }
    335 }
    336 void show_arr(int rows, double target_arr[][5], double source_arr[][5])
    337 {
    338     for (int i = 0; i < rows; i++)
    339     {
    340         for (int j = 0; j < 5; j++)
    341         {
    342             printf("%.2lf", source_arr[i][j]);
    343             putchar(' ');
    344         }
    345     }
    346     putchar('
    ');
    347     for (int i = 0; i < rows; i++)
    348     {
    349         for (int j = 0; j < 5; j++)
    350         {
    351             printf("%.2lf", target_arr[i][j]);
    352             putchar(' ');
    353         }
    354     }
    355     putchar('
    ');
    356 }
    357 /*10*/
    358 #include<stdio.h>
    359 void add_arr(int source_arr1[], int source_arr2[], int target_arr[], int n);
    360 int main(void)
    361 {
    362     int    source_arr1[4] = { 2,4,5,8 };
    363     int source_arr2[4] = { 1,0,4,6 };
    364     int target_arr[4];
    365     add_arr(source_arr1, source_arr2, target_arr, 4);
    366     for (int i = 0; i < 4; i++)
    367     {
    368         printf("%d", target_arr[i]);
    369         putchar(' ');
    370     }
    371     putchar('
    ');
    372     getchar();
    373     return 0;
    374 }
    375 void add_arr(int source_arr1[], int source_arr2[], int target_arr[], int n)
    376 {
    377     for (int i = 0; i < n; i++)
    378     {
    379         target_arr[i] = source_arr1[i] + source_arr2[i];
    380     }
    381 }
    382 /*11*/
    383 #include<stdio.h>
    384 void times2_arr(int source_arr[][5], int target_arr[][5], int rows);
    385 void show_arr(int source_arr[][5], int target_arr[][5], int rows);
    386 int main(void)
    387 {
    388     int source_arr[3][5] = 
    389                             {
    390                                 {1,2,3,4,5},
    391                                 {2,3,4,5,6},
    392                                 {3,4,5,6,7}
    393                             };
    394     int target_arr[3][5];
    395     times2_arr(source_arr, target_arr, 3);
    396     show_arr(source_arr, target_arr, 3);
    397     putchar('
    ');
    398     getchar();
    399     return 0;
    400 }
    401 void times2_arr(int source_arr[][5], int target_arr[][5], int rows)
    402 {
    403     for (int i = 0; i < rows; i++)
    404     {
    405         for (int j = 0; j < 5; j++)
    406         {
    407             target_arr[i][j] = 2*source_arr[i][j];
    408         }
    409     }
    410 }
    411 void show_arr(int source_arr[][5], int target_arr[][5], int rows)
    412 {
    413     for (int i = 0; i < rows; i++)
    414     {
    415         for (int j = 0; j < 5; j++)
    416         {
    417             printf("%4d", source_arr[i][j]);
    418             //putchar(' ');
    419             //putchar(' ');
    420         }
    421     }
    422     putchar('
    ');
    423     for (int i = 0; i < rows; i++)
    424     {
    425         for (int j = 0; j < 5; j++)
    426         {
    427             printf("%4d", target_arr[i][j]);
    428             //putchar(' ');
    429         }
    430     }
    431     putchar('
    ');
    432 }
    433 /*12*/
    434 #include<stdio.h>
    435 #define YEARS 5
    436 #define MONTHS 12
    437 void total_rain(const float rain[][MONTHS], int years);
    438 void average(const float rain[][MONTHS], int years);
    439 int main(void)
    440 {
    441     const float rain[YEARS][MONTHS] =        //2010-2014年降水量
    442     {
    443         {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
    444         {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
    445         {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
    446         {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
    447         {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
    448     };
    449     total_rain(rain, YEARS);
    450     printf("JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NEV DEC
    ");
    451     average(rain, YEARS);
    452     putchar('
    ');
    453     getchar();
    454     return 0;
    455 }
    456 void total_rain(const float rain[][MONTHS], int years)
    457 {
    458     int i, j;
    459     float subtotal,total = 0;
    460     for ( i = 0; i < years; i++)          //每次循环需要将total归零。因为计算的是每年每月降水量
    461     {
    462         for ( j = 0, subtotal = 0; j < MONTHS; j++)
    463         {
    464             subtotal += rain[i][j];
    465         }
    466         printf("%d	%.1f
    ", 2010 + i, subtotal);
    467         total += subtotal;
    468     }
    469     printf("5年总降水量为%.1f
    ", total / years);
    470 }
    471 void average(const float rain[][MONTHS], int years)
    472 {
    473     int i, j;
    474     float subtotal;
    475     for ( i = 0; i < MONTHS; i++)
    476     {
    477         for ( j = 0, subtotal = 0; j < years; j++)
    478         {
    479             subtotal += rain[j][i];
    480         }
    481         printf("%-4.1f", subtotal / years);
    482     }
    483 }
    484 /*13*/
    485 #include<stdio.h>
    486 void input_arr(double arr[][5], int rows);
    487 double average_cols(double arr[], int cols);
    488 double average_all(double arr[][5], int rows);
    489 double max_arr(double arr[][5], int rows);
    490 void show_arr(double arr[][5], int rows);
    491 int main(void)
    492 {
    493     double arr[3][5];
    494     printf("输入15个浮点值:
    ");
    495     input_arr(arr, 3);
    496     putchar('
    ');
    497     for (int i = 0; i < 3; i++)
    498     {
    499         printf("%d组数据的平均值是%lf
    ", i+1, average_cols(arr[i], 5));
    500     }
    501     printf("所有数据的平均值是%lf
    ", average_all(arr, 3));
    502     printf("15个数据中最大值为:%lf
    ", max_arr(arr, 3));
    503     show_arr(arr, 3);
    504     getchar();
    505     return 0;
    506 }
    507 void input_arr(double arr[][5], int rows)
    508 {
    509     for (int i = 0; i < rows; i++)
    510     {
    511         printf("请输入第%d组数据:
    ", i + 1);
    512         for (int j = 0; j < 5; j++)
    513         {
    514             scanf_s("%lf", &arr[i][j]);
    515             getchar();
    516         }
    517     }
    518 }
    519 double average_cols(double arr[], int cols)
    520 {
    521     double sum = 0.0;
    522     for (int i = 0; i < cols; i++)
    523     {
    524         sum += arr[i];
    525     }
    526     return (sum / cols);
    527 }
    528 double average_all(double arr[][5], int rows)
    529 {
    530     double sum = 0.0;
    531     for (int i = 0; i < rows; i++)
    532     {
    533         for (int j = 0; j < 5; j++)
    534         {
    535             sum += arr[i][j];
    536         }
    537     }
    538     return (sum / (5 * rows));
    539 }
    540 double max_arr(double arr[][5], int rows)
    541 {
    542     double max = 0.0;
    543     for (int i = 0; i < rows; i++)
    544     {
    545         for (int j = 0; j < 5; j++)
    546         {
    547             if (max<arr[i][j])
    548             {
    549                 max = arr[i][j];
    550             }
    551         }
    552     }
    553     return max;
    554 }
    555 void show_arr(double arr[][5], int rows)
    556 {
    557     for (int i = 0; i < rows; i++)
    558     {
    559         for (int j = 0; j < 5; j++)
    560         {
    561             printf("%lf", arr[i][j]);
    562             putchar(' ');
    563         }
    564         putchar('
    ');
    565     }
    566 }
    567 /*14*/
    568 //////////////我的vs2017似乎不支持变长数组,但大致定义如下
    569 /*#include<stdio.h>
    570 #define ROWS 3
    571 #define COLS 5
    572 void input_arr(int rows,int cols, double arr[rows][cols]);
    573 double average_cols(int cols,double arr[cols]);
    574 double average_all(int rows, int cols, double arr[rows][cols]);
    575 double max_arr(int rows, int cols, double arr[rows][cols]);
    576 void show_arr(int rows, int cols, double arr[rows][cols]);
    577 int main(void)
    578 {
    579 
    580     getchar();
    581     return 0;
    582 }*/

     

  • 相关阅读:
    CS1704问题汇总
    Android hdpi ldpi mdpi xhdpi xxhdpi适配详解
    Mac开发工具汇总
    Objective-C语法之代码块(block)的使用 (转载)
    iOS学习之Object-C语言属性和点语法(转载收集)
    object-c中疑问
    Android ListVeiw控件(转载整理)
    Android Studio--》Gradle Scripts配置说明
    xutils android studio引用问题
    15 个 Android 通用流行框架大全(转载)
  • 原文地址:https://www.cnblogs.com/HaroldC/p/11185732.html
Copyright © 2020-2023  润新知