Press "Enter" to skip to content

Category: C

明解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;
}

C语言的练习

编写一段程序,显示身高和标准体重的对照表。显示的身高范围和间隔由输入的整数值进行控制,标准体重精确到小数点后两位。

#include <stdio.h>
int main(void)
{
    int start=1,end=1,step=1;
    double std=1.00;
    /*
     * start表示初始取值;end表示最终取值;
     * step表示步进;std表示标准体重值.
     * 身高体重换算公式是:
     * 标准体重=(身高-100)×0.9
    */
    puts("请输入身高的范围以及间隔数值(单位是cm):");
    puts("开始数值:");
    scanf("%d",&start);
    puts("结束数值:");
    scanf("%d",&end);
    puts("间隔数值:");
    scanf("%d",&step);

    puts("\n****身高体重对应表****\n");

    for(;start<=end;start += step){
        std = (double)(start-100)*0.9;
        printf("  %dcm  %.2fkg \n",start,std);
    }
    return 0;
}

运行结果如下

请输入身高的范围以及间隔数值(单位是cm):
开始数值:
155
结束数值:
190
间隔数值:
5

****身高体重对应表****

  155cm  49.50kg 
  160cm  54.00kg 
  165cm  58.50kg 
  170cm  63.00kg 
  175cm  67.50kg 
  180cm  72.00kg 
  185cm  76.50kg 
  190cm  81.00kg 

编写一个程序,像循环显示1234567890,显示的位数和输入的整数值相同。

#include <stdio.h>
int main(void)
{
    int i=1,n=1;
    puts("请输入一个正整数:");
    scanf("%d",&n);
    for(;i<=n;i++){
        printf("%d",i%10);
    }
    return 0;
}

显示效果如下:

请输入一个正整数:
25
1234567890123456789012345

编写一个程序,输入一个整数值,显示该整数值个"*".每显示5个就换行。

#include <stdio.h>
int main(void)
{
    int i=1,n=1,t=1;
    puts("请输入一个正整数:");
    scanf("%d",&n);

    for(;i<=n;i++){
        printf("*");
        t = t + 1;
        if(t==6){
            printf("\n");
            t = 1;
        }
    }
    return 0;
}

显示效果:

请输入一个正整数:
12
*****
*****
**

C编程练习

输入三个不同的整数,找出最小的整数。


#include <stdio.h>
int main(int argc, char **argv)
{
    int a=0,b=0,c=0,min=0;

    while(1){
        puts("输入三个整数:");
        printf("第一个整数A:\n");scanf("%d",&a);
        printf("第二个整数B:\n");scanf("%d",&b);
        printf("第三个整数C:\n");scanf("%d",&c);
        if(a==b || b==c || a==c ){
            puts("请不要输入重复的数字!");
        }
        else break; 
    }

    if(a>b){
        min = b;
        if(min>c){
            puts("最小的数字是C!");
        }
        else{
            puts("最小的数字是B!");
        }
    }
    else{
        min=a;
        if(min>c){
            puts("最小的数字是C!");
        }
        else{
            puts("最小的数字是A!");
        }
    }
    return 0;
}

输入四个整数,找出其中最大值。


#include <stdio.h>
int main()
{
    int a=0,b=0,c=0,d=0,e=0,f=0,g=0;

    puts("请输入四个整数:");
    printf("第一个整数A:");scanf("%d",&a);
    printf("第二个整数B:");scanf("%d",&b);
    printf("第三个整数C:");scanf("%d",&c);
    printf("第四个整数C:");scanf("%d",&d);

    e = (a>b)?a:b;
    f = (c>d)?c:d;
    g = (e>f)?e:f;

    printf("最大的数是:%d",g);
    return 0;
}