8.3
1 #include <stdio.h>
2 int Intscore(int arr[], int x){ //功能:输入分数并统计实际输入人数
3 int i, p = 0;
4
5 printf("please input the scores:\n");
6 for(i = 0; i < x; i++){
7 scanf("%d", &arr[i]);
8 if(arr[i]==-1){ //设置当输入-1时可结束输入;
9 break;
10 }
11 p++; //统计实际输入人数,注意放在下面防止输入-1时也会自增;
12 }
13
14 return p; //返回实际人数;
15 }
16
17 int Fail(int arr[], int y){ //功能:统计不及格人数;
18 int num = 0, j;
19
20 for(j = 0; j < y; j++){ //循环判断;
21 if(arr[j]<60){
22 num++;
23 }
24 }
25 return num;
26 }
27
28
29 int main()
30 {
31 int a[40];
32 int num1, num2;
33
34 num1 = Intscore(a, 40); //代入函数时数组只需要写数组名即可;
35 num2 = Fail(a, num1);
36
37 printf("A total of %d students fail the exam\n", num2);
38
39 return 0;
40 }
8.4(和上一题一样,只不过把判断条件改一下即可);
8.5
1 #include <stdio.h>
2 int Intscore(int arr1[], int arr2[], int x){
3 int i, p = 0;
4
5 printf("please input the student number and score:\n");
6
7 for(i = 0; i < x; i++){
8 scanf("%d:%d", &arr1[i],&arr2[i]); //分别输入学号和成绩,输入时以:号隔开;
9 if(arr1[i] < 0||arr2[i] < 0){
10 break; //输入负值结束;
11 }
12 p++;
13 }
14
15 return p; //返回实际输入人数;
16 }
17
18 int Findmax(int arr3[], int y){
19 int max=arr3[0], j, z = 0; //先设置一个变量等于第一个数;
20
21 for(j = 1; j < y; j++){
22 if(arr3[j] > max){ //循环判断有更大的值就进行赋值,同时记录元素下标;
23 max=arr3[j];
24 z = j;
25 }
26 }
27 return z; //返回元素下标;
28
29 }
30
31
32 int main()
33 {
34 int a[40], b[40];
35 int num1, num2;
36
37 num1 = Intscore(a, b, 40);
38 num2 = Findmax(b, num1);
39
40 printf("the student's number is: %d ,score is: %d\n", a[num2], b[num2]);
41
42 return 0;
43 }
44
8.6
1 #include <stdio.h>
2 void Findmax(int arr[], int x){
3
4 int max1, max2, i, j, z = 0, c = 0, temp;//z和c一定要附值0,否则如果最小值或者最大
//值为第一个值时因为没有赋值就会出现错误;
5 max1 = arr[0];
6 max2 = arr[0];
7
8 for(i = 1; i < x; i++){
9 if(max1 < arr[i]){
10 max1 = arr[i];
11 z = i; //取最大值元素下标;
12 }
13 }
14 for(j = 1;j < x; j++){
15 if(max2 > arr[j]){
16 max2 = arr[j];
17 c = j; //取最小值元素下标;
18 }
19 }
20 printf("交换前最大值为:arr[%d] = %d,最小值为:arr[%d] = %d\n",z,arr[z],c,arr[c]);
21 temp = arr[z];
22 arr[z] = arr[c];
23 arr[c] = temp;
24 printf("交换后最大值为:arr[%d] = %d,最小值为:arr[%d] = %d\n",c,arr[c],z,arr[z]);
25
26 }
27
28 int main()
29 {
30 int a[10];
31
32 printf("please int number :\n");
33
34 for(int i = 0; i < 10; i++){
35 scanf("%d", &a[i]);
36 }
37
38 Findmax(a, 10);
39
40 return 0;
41 }
42
1 #include <stdio.h>
2 #include <string.h>
3 void sd(char c[], int x,int a[]){ //根据给出的分数来设置输出符号的个数;
4 int i, l;
5 for(l = 0; l < a[x]; l++){
6 printf("%s", c);
7 }
8
9 }
10 int main()
11 {
12 int a[4], b[4];
13 int i, j, k, h;
14 char ch[2];
15 char c[40] = {"Grade Count Histogram"};//首先第一行输入抬头;
16 gets(ch); //手动输入想要表示的符号;
17
18 for(i = 0; i < 4; i++){
19 a[i] = i+1; //第一列的序号直接循环赋值;
20 }
21 printf("please input the score:\n");
22 for(j = 0; j < 4; j++){ //第二列的分数手动赋值;
23 scanf("%d", &b[j]);
24 }
25 puts(c);
26 printf("\n");
27 for(k = 0; k < 4; k++){
28 printf("%d %d ",a[k], b[k]); //设置好间距进行打印;
29 sd(ch, k, b);
30 printf("\n");
31 }
32
33
34 return 0;
35 }
36
(这一题的思路就是把几个部分分开来实现,抬头利用char型字符串直接打印,第一列的序号和第二列的分数用整型数组的形式展现,第三列的特殊符号利用char型数组来表示,重点在于打印的时候要控制好间距和换行的时机,利用for循环让三个数组每次输出一个元素并换行。)