第三章习题

 1 #include<stdio.h>
 2                                                   //Score
 3 int main() 
 4 {
 5 
 6     int tot = 0;
 7     int all = 0;
 8     int c;
 9 
10     while((c=getchar())!='\n')
11     {
12         if(c=='O')
13         {
14             tot++;
15             all+=tot;
16         }
17         else
18         {
19             tot=0;
20             all+=tot;
21         }    
22     }
23     
24     printf("%d\n", all);
25 }

 

 

3-2 Molar_Mass

刚开始纠结于不用数组,结果各种程序漏洞,改成用数组后不仅逻辑更加清晰也更好写了

 1 #include<cstdio>
 2 #include<ctype.h>
 3 #include<cstring>
 4 
 5 #define maxn 100
 6 char arr[maxn];
 7 
 8 int main()
 9 {
10     double ato_ma=0.0;
11     double mo_ma=0.0;
12 
13     scanf("%s",arr);
14 
15     int n=strlen(arr);
16 
17     for(int i=0;i<n;i++)
18     {
19         switch (arr[i])
20         {
21             case 'C': ato_ma=12.01;
22             break;
23             case 'H': ato_ma=1.008;
24             break;
25             case 'O': ato_ma=16.00;
26             break;
27             case 'N': ato_ma=14.01; 
28         }
29 
30         if(isalpha(arr[i]) && i+1<n)
31         {    
32             if(isdigit(arr[i+1]))
33                 mo_ma+=ato_ma*(arr[i+1]-'0');
34             else
35                 mo_ma+=ato_ma;
36         }
37 
38         if(isalpha(arr[i]) && i+1==n)
39             mo_ma+=ato_ma;
40     }
41 
42     printf("%.3lfg/mol\n",mo_ma);
43 }

 

3-3 Digit Counting

用sprintf可以写出很简介的代码           这里有篇关于sprintf用法的文章,感觉很有用

 1 #include<cstdio>
 2 
 3 #define maxn 10
 4 char num[maxn];
 5 
 6 int main()
 7 {
 8 
 9     int max_n;
10     scanf("%d",&max_n);
11 
12     int count_1=0;
13     int count_2=0;            //最近写汇编写多了:)
14     int count_3=0;
15     int count_4=0;
16     int count_5=0;
17     int count_6=0;
18     int count_7=0;
19     int count_8=0;
20     int count_9=0;
21     int count_0=0;
22 
23     for(int i=1;i<=max_n;i++)
24     {
25         //把数字变成字符串存在数组中
26         int n=sprintf(num,"%d",i);
27         //printf("%d\n",n);
28 
29         //统计数组中出现的字符
30         for(int j=0;j<n;j++)
31         {
32             switch (num[j])
33             {
34                 case '0':
35                 count_0++;
36                 break;
37                 case '1':
38                 count_1++;
39                 break;
40                 case '2':
41                 count_2++;
42                 break;
43                 case '3':
44                 count_3++;
45                 break;
46                 case '4':
47                 count_4++;
48                 break;
49                 case '5':
50                 count_5++;
51                 break;
52                 case '6':
53                 count_6++;
54                 break;
55                 case '7':
56                 count_7++;
57                 break;
58                 case '8':
59                 count_8++;
60                 break;
61                 case '9':
62                 count_9++;
63             }
64         }
65     }
66 
67     printf("%d %d %d %d %d %d %d %d %d %d\n",count_0,count_1,count_2,count_3,
68         count_4,count_5,count_6,count_7,count_8,count_9);
69 }

 

posted @ 2017-07-13 17:07  lan126  阅读(128)  评论(0编辑  收藏  举报