Press "Enter" to skip to content

Month: December 2017

明解C语言练习题

练习5-11

编写一段程序,输入6名学生2门课程(语文、数学)的分数,显示各门课程的总分和平均分,以及各个学生的总分和平均分。

#include <stdio.h>
int main(void)
{
    int grade[2][6]={0};
    int i=0,j=0,n=1;
    char *k;
    int sum[2]={0};
    int stdusum[6]={0};

    puts("请输入六名学生的数学与语文课程成绩:");
    while(n<6){
        for(i=0;i<2;i++){
            switch(i){
                case 0 : k = "数学";  break;
                case 1 : k = "语文";  break;
            }           
            printf("\n%s课程成绩为:\n",k);
            for(j=0;j<6;j++){
                printf("第%2d号同学的成绩为:",j+1);
                scanf("%d",&grade[i][j]);
                n++;
            }           
        }
    };  
    puts("---------总成绩--------------");
    for(i=0;i<2;i++){
        for(j=0;j<6;j++){
            sum[i] += grade[i][j];
        }
        if(i==0){
            printf("数学课程的总分为:%2d    平均分为: %2d\n",sum[i],sum[i]/6);
        }else{
            printf("语文课程的总分为:%2d    平均分为: %2d\n",sum[i],sum[i]/6);
        }
    }
    puts("--------个人成绩---------------");
    for(j=0;j<6;j++){
        for(i=0;i<2;i++){
            stdusum[j] += grade[i][j];
        }
        printf("第%d号同学总成绩为:%d   平均分为:%.2f\n",j+1,stdusum[j],(double)stdusum[j]/2);
    }

    return 0;
}

效果:

请输入六名学生的数学与语文课程成绩:

数学课程成绩为:
第 1号同学的成绩为:1
第 2号同学的成绩为:1
第 3号同学的成绩为:1
第 4号同学的成绩为:1
第 5号同学的成绩为:1
第 6号同学的成绩为:1

语文课程成绩为:
第 1号同学的成绩为:2
第 2号同学的成绩为:2
第 3号同学的成绩为:2
第 4号同学的成绩为:2
第 5号同学的成绩为:2
第 6号同学的成绩为:2
---------总成绩--------------
数学课程的总分为: 6 平均分为:  1
语文课程的总分为:12 平均分为:  2
--------个人成绩---------------
第1号同学总成绩为:3 平均分为:1.50
第2号同学总成绩为:3 平均分为:1.50
第3号同学总成绩为:3 平均分为:1.50
第4号同学总成绩为:3 平均分为:1.50
第5号同学总成绩为:3 平均分为:1.50
第6号同学总成绩为:3 平均分为:1.50

5-12

求4名学生在两次考试中的3门课程的总分并显示,将考试的分数存储在三维数组中。

#include <stdio.h>
int main(void)
{
    int i,j,k;
    int tensu[2][4][3] = {{{91,63,78},{67,72,46},{89,34,53},{32,54,34}},{{97,67,82},{73,43,46},{97,56,21},{85,46,35}}};
    int sum[0][4][3];   
    for(i=0;i<2;i++){
        printf("第%d次考试成绩为: \n\n",i+1);
        for(j=0;j<4;j++){
            for(k=0;k<3;k++){
                printf("%4d",tensu[i][j][k]);
            }
            putchar('\n');  
        }
        puts("\n-----------------\n");
    }

    puts("总分:\n");
    /*求两次考试的分数之和*/
        for(j=0;j<4;j++){
            for(k=0;k<3;k++){
                sum[0][j][k] = tensu[0][j][k] + tensu[1][j][k];
                printf("%4d",sum[0][j][k]);
            }
            puts("\n");     
    }   

    return 0;
}

5-10

编写一段程序,求4行3列矩阵和3行4列矩阵的乘积

#include<stdio.h>
int main(void){
    int A[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    int B[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
    int i=0,j=0,k=0,x=0;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            for(k=0;k<4;k++){
                x+=A[i][k]*B[k][j];
            }
            printf("%6d",x);
        }
        printf("\n");
    }
    return 0;
}

C语言练习

为九九乘法表增加横纵标题

#include <stdio.h>
int main(void)
{
    int a;
    printf("    |");
    for(a=1;a<=9;a++){
        printf("%3d ",a);
    }
    putchar('\n');
    puts("----------------------------------------");

    int i,j;
    for(i=1;i<=9;i++){
        printf("%3d ",i);
        printf("|");
        for(j=1;j<=9;j++){
            int seki = i*j;
            printf("%3d ",seki);
        }
        putchar('\n');
    }

    return 0;
}

效果如下:

   |  1   2   3   4   5   6   7   8   9 
----------------------------------------
  1 |  1   2   3   4   5   6   7   8   9 
  2 |  2   4   6   8  10  12  14  16  18 
  3 |  3   6   9  12  15  18  21  24  27 
  4 |  4   8  12  16  20  24  28  32  36 
  5 |  5  10  15  20  25  30  35  40  45 
  6 |  6  12  18  24  30  36  42  48  54 
  7 |  7  14  21  28  35  42  49  56  63 
  8 |  8  16  24  32  40  48  56  64  72 
  9 |  9  18  27  36  45  54  63  72  81 

输入一个正整数,然后显示出该数目楼层金字塔。

#include <stdio.h>
int main(void)
{
    int i,j,n;
    printf("需要建设多少层的金字塔?"); scanf("%d",&n);

    for(i=1;i<=n;i++){
        int k;
        k=(i-1)*2+1;
        for(j=1;j<=(n-i);j++){
            printf(" ");
        }
        for(j=1;j<=k;j++){
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

效果

需要建设多少层的金字塔?8
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************

输入一个正整数,然后输出一个倒置的该数目层数金字塔。并且,第n行显示n%10的结果。

#include <stdio.h>
int main(void)
{
    int i,j,n,k,l;
    l=0;
    printf("金字塔有几层?");  scanf("%d",&n);
    for(i=n;i>=0;i--){
        for(j=0;j<=(n-i);j++){
            putchar(' ');
        }
        k=(i-1)*2+1;

        l++;
        for(j=0;j<k;j++){
            printf("%d",l%10);
        }
        putchar('\n');
    }
    return 0;
}

效果

金字塔有几层?10
 1111111111111111111
  22222222222222222
   333333333333333
    4444444444444
     55555555555
      666666666
       7777777
        88888
         999
          0

运行程序,计算机会随机生成一个iPhoneX 的价格 . iPhoneX 价格范围 8000 - 9000
用户输入一个10的整数倍的价格, 计算机会根据玩家输入的价格的提示价格低了或高了
如果用户输入价格正确会打印消息恭喜用户.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
    int price = 0;
    //guess 变量用于保存玩家输入的价格
    int guess;
    srand(time(0));
    price =8000+(rand()%100)*10; //生成一个8000-8990的价格
                                 //价格是10的整数倍
    printf("price = %d\n",price); //打印价格可以调试测试用
    //下面是要补充的业务代码,请同学们完成
    do{
    puts("猜猜看价格几何?");
    scanf("%d",&guess);  
    if(guess != price){
        if(guess>price){
            puts("猜高了!");
        }else{
            puts("猜低了!");
        }   
    }else{
        puts("Bingo!恭喜赢得大奖!");
        break;
    }
    }while(1);    
    return 0;
}

效果

 price = 8860
猜猜看价格几何?
8400
猜低了!
猜猜看价格几何?
9000
猜高了!
猜猜看价格几何?
9595
猜高了!
猜猜看价格几何?
2344
猜低了!
猜猜看价格几何?
8860
Bingo!恭喜赢得大奖!

编写程序实现从键盘上输入4个iPhoneX的价格(整型). 经过计算机(程序)处理后,打印输出 最低价格.

#include<stdio.h>
int main(){
    //准备好存放数据的变量
    int price1 = 0,price2 = 0,price3 = 0,price4 = 0;
    int min = 0;  //用来存放最低价格的变量
    //读入四个价格
    printf("输入一个价格:");     scanf("%d",&price1);
    printf("输入一个价格:");     scanf("%d",&price2);
    printf("输入一个价格:");      scanf("%d",&price3);
    printf("输入一个价格:");     scanf("%d",&price4);
    //请同学没在此处补充代码,
    //编码实现从4个价格中找出最低价格
    if(price1<=price2){
        min = price1;
    }
    else{
        min = price2;
    }   
    if(min>price3){
        min = price3;
    }   
    if(min>price4){
        min = price4;
    }
    //输出最低价格
    printf("最低价格是 %d\n",min);

    return 0;
}