第8讲 函数 单元作业

发布时间 2023-11-23 10:34:41作者: YANTARES
 

1. 编一判断m是否为素数的函数,并在主函数中利用它输出十对最小的孪生素数。所谓孪生素数是指两个相差为2的素数,如3和5,11和13。程序运行结果见下图。

函数形式为:

bool isprime(int m)

yzy.ver:

cm's best ver:

 1 #include "iostream"
 2 
 3 using namespace std;
 4 
 5 
 6 
 7 bool isprime(int m);
 8 
 9 int main()
10 
11 {
12 
13     int two = 2, count = 0;
14 
15     for(int j = 2; count<10; ++j){
16 
17         if(isprime(j) && isprime(j+two)){
18 
19             count++;
20 
21             printf("(%d,%d)\n",j,j+two);
22 
23         }
24 
25     }
26 
27     return 0;
28 
29 }
30 
31 bool isprime(int m){
32 
33     for(int i=2; i<m; ++i){
34 
35         if(m%i==0)
36 
37             return false;
38 
39     }
40 
41     return true;
42 
43 }
View Code

 

2. 

编一函数,功能为判断一字符串是否为回文,如果是回文则返回1,否则返回0。回文是指顺读和倒读都一样的字符串,如“deed”和“level”是回文。在主函数中对输入的字符串加以调用。

函数形式为:int huiwen(char s[])

yzy.ver:

cm's best ver:

 1 #include <iostream>
 2 
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 
 8 
 9 int huiwen(char s[]);
10 
11 int main()
12 
13 {
14 
15     const int N = 100;
16 
17     char s[N] = "";
18 
19     cin>>s;
20 
21     if(huiwen(s))
22 
23         cout<<"是回文"<<endl;
24 
25     else
26 
27         cout<<"不是回文"<<endl;
28 
29     return 0;
30 
31 }
32 
33 int huiwen(char s[])
34 
35 {
36 
37     char *p = s, *q = s+strlen(s)-1;
38 
39     while(p<q)
40 
41     {
42 
43         if(*p!=*q)
44 
45             return 0;
46 
47         p++, q--;
48 
49     }
50 
51     return 1;
52 
53 }
View Code

 

3. 

函数的功能是将学生成绩从高分到低分排序,并统计优秀与不及格的人数。用下面两种方法实现:

(1)函数形式为:int fun1(int s[],int n,int *x)

要求优秀人数通过return返回,不及格人数通过指针参数返回结果。

(2)函数形式为:void fun2(int s[],int n,int &x,int &y)

要求优秀与不及格的人数通过引用参数返回结果。

分别编二个函数,学生人数从键盘输入。

yzy.ver:

cm's best ver:

  1 #include "iostream"
  2 
  3 #include <string.h>
  4 
  5 using namespace std;
  6 
  7 
  8 
  9 int fun1(int s[],int n,int *x);
 10 
 11 void fun2(int s[],int n,int &x,int &y);
 12 
 13 int main()
 14 
 15 {
 16 
 17     const int N = 100;
 18 
 19     int s[N] = {0};
 20 
 21     int n;
 22 
 23     cin>>n;
 24 
 25     for(int i=0; i<n; ++i)
 26 
 27         cin>>s[i];
 28 
 29 
 30 
 31     int x=0,y=0;
 32 
 33     cout<<"优秀的人数:"<<fun1(s,n,&x)<<endl;
 34 
 35     cout<<"不及格的人数:"<<x<<endl;
 36 
 37 
 38 
 39     x=0,y=0;
 40 
 41     fun2(s,n,x,y);
 42 
 43     cout<<"优秀的人数:"<<y<<endl<<"不及格的人数:"<<x<<endl;
 44 
 45 
 46 
 47     return 0;
 48 
 49 }
 50 
 51 int fun1(int s[],int n,int *x){
 52 
 53     int excellent=0;
 54 
 55     * x = 0;//
 56 
 57     for(int i=0; i<n-1; ++i){/*第0个元素有序,从第1个元素向右无序*/
 58 
 59         int max = s[i];
 60 
 61         int index = i;
 62 
 63         for(int j = i+1; j<n; ++j){/*从i+1逐个比较*/
 64 
 65             if(max<s[j]){ /*是否比后面的小*/
 66 
 67                 max = s[j];
 68 
 69                 index = j;
 70 
 71             }
 72 
 73         }
 74 
 75         if(index != i){/*找到了最大值才交换*/
 76 
 77             s[index] = s[i];
 78 
 79             s[i] = max;
 80 
 81         }
 82 
 83     }
 84 
 85     for(int k=0; k<n; ++k){
 86 
 87         if(s[k]>=90) excellent++;
 88 
 89         if(s[k]<60) (*x)++;
 90 
 91     }
 92 
 93     return excellent;
 94 
 95 }
 96 
 97 void fun2(int s[],int n,int &x,int &y){
 98 
 99         x=y=0;  //
100 
101     for(int i=0; i<n-1; ++i){/*第0个元素有序,从第1个元素向右无序*/
102 
103         int max = s[i];
104 
105         int index = i;
106 
107         for(int j = i+1; j<n; ++j){/*从i+1逐个比较*/
108 
109             if(max<s[j]){ /*是否比后面的小*/
110 
111                 max = s[j];
112 
113                 index = j;
114 
115             }
116 
117         }
118 
119         if(index != i){/*找到了最大值才交换*/
120 
121             s[index] = s[i];
122 
123             s[i] = max;
124 
125         }
126 
127     }
128 
129     for(int k=0; k<n; ++k){
130 
131         if(s[k]>=90) y++;
132 
133         if(s[k]<60) x++;
134 
135     }
136 
137 }
View Code

 

4. 

编一函数,功能为统计字符串中各个字母(不区分大、小写)出现的频率,同时找出频率出现最高的字母及次数,假设出现次数最多的字母只有一个。函数形式为:

void freq(char s[],int p[],char &chmax,int &max)

程序运行结果如下:

yzy.ver:

cm's best ver:

 1 #include "iostream"
 2 
 3 #include <string.h>
 4 
 5 using namespace std;
 6 
 7 
 8 
 9 void freq(char s[],int p[],char &chmax,int &max);
10 
11 int main()
12 
13 {
14 
15     char chmax;
16 
17     int max = 0;
18 
19     const int N = 256;
20 
21     int p[N] = {0};
22 
23     char s[N] = "";
24 
25     gets(s);
26 
27     freq(s,p,chmax,max);
28 
29     for(int i=0; i<N; ++i){
30 
31         if(p[i])
32 
33             printf("%c-----%d\n",i,p[i]);
34 
35     }
36 
37     printf("出现频率最高的字母:%c-----%d\n",chmax,max);
38 
39     return 0;
40 
41 }
42 
43 void freq(char s[],int p[],char &chmax,int &max){
44 
45     char *q = s;
46 
47     while(*q)
48 
49     {
50 
51         if(*q>='a'&&*q<='z'||*q>='A'&&*q<='Z')
52 
53         {
54 
55             if(*q<'a')
56 
57                 p[*q+32]++;
58 
59             else
60 
61                 p[*q]++;
62 
63             if(p[*q]>max){
64 
65                 max = p[*q];
66 
67                 chmax = *q;
68 
69             }
70 
71         }
72 
73         q++;
74 
75     }
76 
77 }
View Code