前言

本文为业余学习《明解C语言入门篇》的记录,包含代码清单和练习题。
开始学习时间:2022年8月21日
+++++++++++++++++++++++++++++++
第1章 初识C语言
第2章 运算和数据类型
第3章 分支结构程序
第4章 程序的循环控制
第5章 数组
第6章 函数
第7章 基本数据类型
第8章 动手编写各种程序吧
第9章 字符串的基本知识
第10章 指针
第11章 字符串和指针
第12章 结构体
第13章 文件处理
+++++++++++++++++++++++++++++++

第5章、数组

5-1 数组

代码清单 5-1

//输入5名学生的分数并显示出他们的总分和平均分#include <stdio.h>int main()
{int stu1,stu2,stu3,stu4,stu5;int sum=0;printf("请输入第一名学生分数:");    scanf("%d",&stu1);    sum+=stu1;printf("请输入第二名学生分数:"); scanf("%d",&stu2);    sum+=stu2;printf("请输入第三名学生分数:"); scanf("%d",&stu3);    sum+=stu3;printf("请输入第四名学生分数:"); scanf("%d",&stu4);    sum+=stu4;printf("请输入第五名学生分数:"); scanf("%d",&stu5);    sum+=stu5;printf("这5名学生的总分是%d,平均分是%.2f。\n",sum,(double)sum/5);return 0;
}

代码清单 5-2

//依次把1、2、3、4、5赋值给数组的每个元素并显示#include <stdio.h>int main()
{int n[5];n[0]=1;n[1]=2;n[2]=3;n[3]=4;n[4]=5;printf("n[0]=%d\n",n[0]);printf("n[1]=%d\n",n[1]);printf("n[2]=%d\n",n[2]);printf("n[3]=%d\n",n[3]);printf("n[4]=%d\n",n[4]);return 0;
}

代码清单 5-3

//依次把1、2、3、4、5赋值给数组的每个元素并显示(使用for语句)#include <stdio.h>int main()
{int n[5];int i;for (i=0;i<5;i++){n[i]=i+1;}for (i=1;i<=5;i++){printf("n[%d]=%d\n",i,n[i-1]);}return 0;
}

代码清单 5-4

//将数组的全部元素赋值为0.0并显示#include <stdio.h>int main()
{double real_num[7];int i=1;while (i<=7){real_num[i-1]=0.0;i++;}i=1;do{printf("real_num[%d]=%.1f\n",i,real_num[i-1]);i++;} while (i<=7);return 0;
}

练习 5-1

//从头顺次为数组中的元素赋值0、1、2、3、4并显示#include <stdio.h>int main()
{int n[5];int i;for(i=0;i<5;i++){n[i]=i;}for(i=0;i<5;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

练习 5-2

//从头顺次为数组中的元素赋值5、4、3、2、1并显示#include <stdio.h>int main()
{int n[5];int i;for(i=5;i>=1;i--){n[5-i]=i;}for(i=0;i<5;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

代码清单 5-5

//从头开始依次用1、2、3、4、5对数组各元素进行初始化并显示#include <stdio.h>int main()
{int n[5]={1,2,3,4,5};int i;for(i=0;i<5;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

代码清单 5-6

//把数组中的全部元素复制到另一个数组中#include <stdio.h>int main()
{int a[5]={17,23,36};int b[5];int i;for(i=0;i<5;i++){b[i]=a[i];}puts("a    b");puts("-------");for(i=1;i<=5;i++){printf("%2d   %2d\n",a[i-1],b[i-1]);}return 0;
}

练习 5-3

//从头开始依次使用5、4、3、2、1进行初始化并显示#include <stdio.h>int main()
{int n[5]={5,4,3,2,1};int i;for(i=0;i<5;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

练习 5-4

//将数组a中的元素按照倒序复制到数组b中#include <stdio.h>int main()
{int a[5]={17,23,36},b[5];int i;for(i=0;i<5;i++){b[4-i]=a[i];}puts("a   b");puts("------");for(i=0;i<5;i++){printf("%-2d  %-2d\n",a[i],b[i]);}return 0;
}

代码清单 5-7

//输入数组元素的值并显示#include <stdio.h>int main()
{int n[5];int i;for(i=0;i<5;i++){printf("n[%d]:",i);scanf("%d",&n[i]);}for(i=0;i<5;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

代码清单 5-8

//对数组的全部元素进行倒序排列#include <stdio.h>int main()
{int n[7];int i;for(i=0;i<7;i++){printf("n[%d]:",i);scanf("%d",&n[i]);}for(i=0;i<3;i++){int temp=n[i];n[i]=n[6-i];n[6-i]=temp;}puts("倒序排列了。");for(i=0;i<7;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

代码清单 5-9

//输入5名学生的分数并显示出他们的总分和平均分#include <stdio.h>int main()
{int score[5];int sum=0;int i;puts("请输入5名学生的分数。");for(i=0;i<5;i++){printf("第%d名学生:",i+1);scanf("%d",&score[i]);sum+=score[i];}printf("他们的总分是%d,平均分是%.2f。\n",sum,(double)sum/5);return 0;
}

代码清单 5-10

//输入学生的分数并显示他们的总分和平均分(用宏定义人数)#include <stdio.h>#define NUMBER 5int main()
{int score[NUMBER];int sum=0;int i;printf("请输入%d名学生的分数。\n",NUMBER);for(i=0;i<NUMBER;i++){printf("score[%d]:",i);scanf("%d",&score[i]);sum+=score[i];}printf("他们的总分是%d,平均分是%.2f。\n",sum,(double)sum/NUMBER);return 0;
}

代码清单 5-11

//输入学生的分数并显示出其中的最高分和最低分#include <stdio.h>#define NUMBER 5int main()
{int i;int max,min;int score[NUMBER];printf("请输入%d名学生的分数。\n",NUMBER);for(i=0;i<NUMBER;i++){printf("第%d名学生分数:",i+1);scanf("%d",&score[i]);}max=min=score[0];for(i=1;i<NUMBER;i++){if(max<score[i]){max=score[i];}if(min>score[i]){min=score[i];}}printf("最高分%d,最低分%d。\n",max,min);return 0;
}

练习 5-5

//修改代码清单5-8,改为用对象式宏来定义元素个数。#include <stdio.h>
#define NUMBER 6int main()
{int i;int n[NUMBER];printf("请输入%d个整数。\n",NUMBER);for(i=0;i<NUMBER;i++){printf("n[%d]:",i);scanf("%d",&n[i]);}for(i=0;i<NUMBER/2;i++){int temp=n[i];n[i]=n[NUMBER-i-1];n[NUMBER-i-1]=temp;}puts("倒序了!");for(i=0;i<NUMBER;i++){printf("n[%d]=%d\n",i,n[i]);}return 0;
}

练习 5-6

/*
假设变量a是double型,变量b是int型,请说明经过下述赋值后a和b的值分别是多少
a=b=1.5
*/
#include <stdio.h>int main()
{double a;int b;a=b=1.5;printf("a=%f\n",a);printf("b=%d\n",b);return 0;
}

a=1.000000
b=1

代码清单 5-12

//输入学生的分数并显示出分布情况#include <stdio.h>#define NUMBER 80int main()
{int i,j;int num;int score[NUMBER];int scattergram[11]={0};//分布图,须初始化printf("请输入学生人数:");do{scanf("%d",&num);if(num<1 || num>NUMBER){printf("请输入1~%d之间的整数:",NUMBER);}}while(num<1 || num>NUMBER);printf("请输入%d人的分数。\n",num);for(i=0;i<num;i++){printf("%d号:",i+1);do{scanf("%d",&score[i]);if(score[i]<0 || score[i]>100){printf("请输入0~100之间的整数:");}}while(score[i]<0 || score[i]>100);scattergram[score[i]/10]++;//分布图数组其中的数据自增}puts("---分布图---");printf("  100:");for(i=0;i<scattergram[10];i++){putchar('*');}putchar('\n');for(i=9;i>=0;i--){printf("%2d-%2d:",i*10,i*10+9);for(j=0;j<scattergram[i];j++){putchar('*');}putchar('\n');}return 0;
}

练习 5-7

//读取数组中的数据个数和元素值并显示。显示时,各值之间用逗号和空格分割,并用大括号将所有的值括起来。使用对象式宏声明元素个数#include <stdio.h>#define NUMBER 100int main()
{int i;int num;int n[NUMBER];printf("要输入几个数据:");do{scanf("%d",&num);if(num<1 || num>NUMBER){printf("请输入1~%d之间的整数:",NUMBER);}}while(num<1 || num>NUMBER);for(i=0;i<num;i++){printf("%d号:",i+1);scanf("%d",&n[i]);}putchar('{');printf("%d",n[0]);for(i=1;i<num;i++){printf(", %d",n[i]);}printf("}\n");return 0;
}

练习 5-8

//逆向显示代码清单5-12的分布图#include <stdio.h>#define NUMBER 80int main()
{int i,j;int num;int score[NUMBER];int scattergram[11]={0};printf("请输入学生人数:");do{scanf("%d",&num);if(num<1 || num>NUMBER){printf("请输入1~%d之间的整数:",NUMBER);}}while(num<1 || num>NUMBER);printf("请输入%d人的分数。\n",num);for(i=0;i<num;i++){printf("%d号:",i+1);do{scanf("%d",&score[i]);if(score[i]<0 || score[i]>100){printf("请输入0~100之间的整数:");}}while(score[i]<0 || score[i]>100);scattergram[score[i]/10]++;}puts("---分布图---");for(i=0;i<=9;i++){printf("%2d-%2d:",i*9,i*9+9);for(j=0;j<scattergram[i];j++){putchar('*');}putchar('\n');}printf("  100:");for(i=0;i<scattergram[10];i++);{putchar('*');}putchar('\n');return 0;
}

练习 5-9

//纵向显示练习5-8中得到的分布图#include <stdio.h>#define NUMBER 80int main()
{int i,j;int num;int score[NUMBER];int scattergram[11]={0};int max;int max_x;printf("请输入学生人数:");do{scanf("%d",&num);if(num<1 || num>NUMBER){printf("请输入1~%d之间的整数:",NUMBER);}}while(num<1 || num>NUMBER);printf("请输入%d人的分数。\n",num);for(i=0;i<num;i++){printf("%d号:",i+1);do{scanf("%d",&score[i]);if(score[i]<0 || score[i]>100){printf("请输入0~100之间的整数:");}}while(score[i]<0 || score[i]>100);scattergram[score[i]/10]++;}max=scattergram[0];for(i=1;i<11;i++){if(scattergram[i]>max){max=scattergram[i];}}max_x=max;for(i=0;i<max_x;i++){for(j=0;j<11;j++){if(max>scattergram[j]){printf("    ");}else{printf("*   ");}}putchar('\n');max -= 1;}printf("--------------------------------------------\n");for(i=1;i<=11;i++){printf(" %d ",(i-1)*10);}putchar('\n');return 0;
}

5-2 多维数组

代码清单 5-13

//求4名学生在两次考试中3门课程的部分并显示#include <stdio.h>int main()
{int i,j;int exam1[4][3]={{91,63,78},{67,72,46},{89,34,53},{32,54,34}};int exam2[4][3]={{97,67,82},{73,43,46},{97,56,21},{85,46,35}};int sum[4][3];for(i=0;i<4;i++){for(j=0;j<3;j++){sum[i][j]=exam1[i][j]+exam2[i][j];}}puts("第一次考试分数");for(i=0;i<4;i++){for(j=0;j<3;j++){printf("%4d",exam1[i][j]);}putchar('\n');}puts("第二次考试分数");for(i=0;i<4;i++){for(j=0;j<3;j++){printf("%4d",exam2[i][j]);}putchar('\n');}puts("总分");for(i=0;i<4;i++){for(j=0;j<3;j++){printf("%4d",sum[i][j]);}putchar('\n');}return 0;
}

练习 5-10

//求4行3列矩阵和3行4列矩阵的乘积。各构成元素的值从键盘输入#include <stdio.h>int main()
{int i,j,k;int matrix1[4][3],matrix2[3][4];int product[4][4]={0};puts("输入矩阵1(4行3列)数据。");for(i=0;i<4;i++){for(j=0;j<3;j++){printf("matrix1[%d][%d]:",i,j);scanf("%d",&matrix1[i][j]);}}puts("输入矩阵2(3行4列)数据。");for(i=0;i<3;i++){for(j=0;j<4;j++){printf("matrix2[%d][%d]:",i,j);scanf("%d",&matrix2[i][j]);}}//用公式计算矩阵乘积for(i=0;i<4;i++){for(j=0;j<4;j++){for(k=0;k<3;k++){product[i][j] += matrix1[i][k]*matrix2[k][j];}}}puts("显示矩阵1:");for(i=0;i<4;i++){for(j=0;j<3;j++){printf("%6d",matrix1[i][j]);}putchar('\n');}puts("显示矩阵2:");for(i=0;i<3;i++){for(j=0;j<4;j++){printf("%6d",matrix2[i][j]);}putchar('\n');}puts("显示乘积矩阵:");for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%6d",product[i][j]);}putchar('\n');}return 0;
}

练习 5-11

//练习5-11,输入6名学生2门课程(语文、数学)的分数,显示各门课程的总分和平均分,以及各个学生的总分和平均分#include <stdio.h>int main()
{int i,j;int course[6][2];int sum[2]={0};  //6名学生2门分数累计int sum1; //每名学生的2门课程分数总分puts("请输入6名学生的语文和数学课程分数:");for(i=0;i<6;i++){for(j=0;j<2;j++){do{printf("%d.%d:",i+1,j+1);scanf("%d",&course[i][j]);  }while(course[i][j]<0 || course[i][j]>100); //如果分数小于0分或大于100分,重新输入sum[j] += course[i][j];    //将每门课程分数累计,并存入数组}}/*显示6名学生的分数,统计各门课程总分,计算平均分*/puts("\n学生\t语文\t数学\t");for(i=0;i<6;i++){printf("  %d:",i+1);for(j=0;j<2;j++){printf("\t%d",course[i][j]);}putchar('\n');}puts("---------------------");printf("小计:");printf("\t%d\t%d\n",sum[0],sum[1]);printf("平均:");printf("\t%.1f\t%.1f\n",(double)sum[0]/6,(double)sum[1]/6);/*计算并显示各个学生的2门课程总分和平均分*/puts("\n学生\t总分\t平均分");for(i=0;i<6;i++){sum1=course[i][0]+course[i][1];printf("  %d:\t%d\t%.1f\n",i+1,sum1,(double)sum1/2);}return 0;
}

练习 5-12

//练习5-12,改写代码清单5-13,将两次考试的分数存储在三维数组中#include <stdio.h>int main()
{int i,j,k;int course[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}}};/*打印两次考试的分数*/for(i=0;i<2;i++){printf("第%d次考试的分数\n",i+1);for(j=0;j<4;j++){printf("%d:",j+1);for(k=0;k<3;k++){printf("%4d",course[i][j][k]);}putchar('\n');}putchar('\n');}/*打印每名学生两次考试的分数之和*/puts("总分");for(i=0;i<1;i++){for(j=0;j<4;j++){printf("%d:",j+1);for(k=0;k<3;k++){printf("%4d",course[i][j][k]+course[i+1][j][k]);}putchar('\n');}}return 0;
}

总结

summary

//第5章总结
//主要考验一、二维数组的元素之和,和数组元素的显示#include <stdio.h>
#define size 5int main()
{int i,j;int sum=0;int a[size];int b[size]={1,2,3};int c[2][3]={{11,22,33},{44,55,66}};for(i=0;i<size;i++){a[i]=b[i];}for(i=0;i<size;i++){printf("a[%d]=%d\n",i,a[i]);}for(i=0;i<size;i++){printf("b[%d]=%d\n",i,b[i]);}for(i=0;i<size;i++){sum += a[i];}printf("数组a的所有元素之和=%d\n",sum);for(i=0;i<2;i++){for(j=0;j<3;j++){printf("c[%d][%d]=%d\n",i,j,c[i][j]);}}return 0;
}

明解C语言入门篇_第5章_数组相关推荐

  1. 明解C语言入门篇练习题第十三章

    练习13-1 #include <stdio.h> int main(void) {FILE *fp;char file_name[128];printf("file name: ...

  2. 《明解C语言 入门篇》第5章 数组 练习题解答

    练习5-1 数组的赋值 练习5-2 数组的赋值 练习5-3 数组的初始化 练习5-4 数组的倒序复制 练习5-5 数组元素倒序排列 练习5-6 赋值表达式的判断 练习5-7 对象式宏的应用 练习5-8 ...

  3. 明解C语言入门篇_第12章_结构体

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  4. 明解C语言入门篇_第9章_字符串的基本知识

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  5. 明解C语言入门篇_第8章_动手编写各种程序吧

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  6. 明解C语言入门篇_第10章_指针

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  7. 明解C语言入门篇_第4章_程序的循环控制

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  8. 明解C语言入门篇_第13章_文件处理

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  9. 明解C语言入门篇_第7章_基本数据类型

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

  10. 明解C语言入门篇_第6章_函数

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

最新文章

  1. 慕课乐学python单元测试答案_乐学Python_章节测验,期末考试,慕课答案查询公众号...
  2. Django之静态文件
  3. 指针传递内表方式做smartforms
  4. 六招教你快速提升网站交互体验,降低跳出率
  5. 伪随机数与采样(sampling)
  6. docker重启容器
  7. 利用ajax查询数据库显示在前台,ajax动态查询数据库数据并显示在前台的方法
  8. ELK-使用nxlog+filebeat采集不同类型的日志输出到logstash
  9. 点到直线的距离公式推导
  10. 计算机控制/SLAM/ROS2云班课等详细说明2019-2020-2学期
  11. 一种重复命名自动更名机制
  12. 商城 商品模块 数据库 表设计
  13. 【生产者分析一】Kafka生产者流程【初探】
  14. Android StatusBar 更改
  15. 解决闭包问题时 setTimeout执行顺序提前的问题
  16. AJ-Report 数据源、数据集用法总结
  17. Unity 5.4公開測試,免費用戶也能下載使用!
  18. 甲乙两列客车的长分别为150m和200m,它们相向行驶在平行的轨道上,已知甲车上某乘客测得乙车在他窗口外经过的时间为10秒,那么,乙车上的乘客看见甲车在他窗口外经过的时间是()
  19. npm install下载依赖项时报错 fatal: unable to access ‘https://github.com/nhn/raphael.git/‘: Failed to connect
  20. 获取三方系统的token并访问第三方系统

热门文章

  1. c语言完数报告,C语言 · 完数
  2. 山东大学软件学院操作系统课程设计(2021秋季,nachos)实验1
  3. 蓝桥杯真题:正则问题
  4. 【PdgCntEditor】利用PDF目录书签编辑软件PdgCntEditor为PDF型图书快速添加书签的方法
  5. CUDA 半浮点数运算
  6. upstream sent too big header while reading response header from upstream
  7. php封装多段mp4,解决ffmpeg将多段视频裁剪拼接后卡顿现象
  8. 【网单服务端】水浒历险 网游单机 一键安装服务端+历代合集+视频教程
  9. Highcharts 异常码
  10. Raid5损坏两块盘