苏小红C语言第四版课后习题练习8.3--8.7

 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循环让三个数组每次输出一个元素并换行。)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值