《明解c语言》已看完,练习代码此奉上
2016年9月20日至2016年11月12日,从学校图书馆借来的《明解c语言》看完了。
大三第一个学期,前8周,有c语言程序设计的课。课本是学校里的老师编写出版的,为了压缩空间,减少页面,书中的代码都挤成了一团,一点儿美感都没有。课后习题的参考代码输入电脑后,运行错误,仔细看一遍,是最基本的逻辑问题,最最不应该出现的错误。再加上授课老师的教法未得我心。
因此,这8周来,都是课上睡觉,课下《明解c语言》。书中的每一行代码都被我敲进过电脑,前8章的练习也依次做过。第9、10、11、12、13章,为赶时间,跟上学校课程的进度,便只敲了代码来回看了几遍,未做练习。
下下周c语言考试,基础知识已经过了一遍。而备考,则靠做课本上的习题吧。
以下,是我所做的《明解c语言》前8章的练习答案。答案不全,只是将个人觉得有点动脑儿的代码给存了下来。
练习2-1:
#include <stdio.h>
int main()
{
int n1, n2;
puts("请输入两个整数:");
printf("整数A:"); scanf("%d", &n1);
printf("整数B:"); scanf("%d", &n2);
printf("A的值是B的值的%d%%\n", (n1*100)/n2);
}
练习2-5:
#include <stdio.h>
int main()
{
int n1, n2;
puts("请输入两个整数:");
printf("整数A:"); scanf("%d", &n1);
printf("整数B:"); scanf("%d", &n2);
printf("A是B的%f%%。\n", (double) (n1*100) / n2);
return 0;
}
练习3-1:
#include <stdio.h>
int main()
{
int a, b;
puts("请输入两个整数。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
if (a % b)
puts("B不是A的约数。");
else
puts("B是A的约数。");
return 0;
}
练习3-3:
#include <stdio.h>
int main()
{
int n1;
printf("请输入一个整数:");
scanf("%d", &n1);
if (n1 >= 0)
printf("绝对值是%d。\n", n1);
else
printf("绝对值是%d。\n", -n1);
return 0;
}
练习3-8:
#include <stdio.h>
int main()
{
int a, b, c, min;
puts("请输入3个整数。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
printf("整数C:"); scanf("%d", &c);
min = a;
min = b < min ? b : min;
min = c < min ? c : min;
printf("最小值是%d。\n", min);
return 0;
}
练习3-9:
#include <stdio.h>
int main(void)
{
int a, b, c;
puts("请输入三个整数。");
printf("整数A:"); scanf("%d", &a);
printf("整数B:"); scanf("%d", &b);
printf("整数C:"); scanf("%d", &c);
if (a == b == c)
puts("三个值都相等。");
else if (a == b || a == c || b == c)
puts("有两个值相等。");
else
puts("三个值各不相同。");
return 0;
}
练习3-11:
#include <stdio.h>
int main(void)
{
int no;
printf("请输入一个整数:");
scanf("%d", &no);
switch (no % 2) {
case 0 : puts("该整数是偶数。"); break;
default : puts("该整数是奇数。"); break;
}
return 0;
}
练习3-12:
#include <stdio.h>
int main(void)
{
int month;
printf("请输入月份:");
scanf("%d", &month);
switch (month) {
case 3 : puts("是春天。"); break;
case 4 : puts("是春天。"); break;
case 5 : puts("是春天。"); break;
case 6 : puts("是夏天。"); break;
case 7 : puts("是夏天。"); break;
case 8 : puts("是夏天。"); break;
case 9 : puts("是秋天。"); break;
case 10 : puts("是秋天。"); break;
case 11 : puts("是秋天。"); break;
case 12 : puts("是冬天。"); break;
case 1 : puts("是冬天。"); break;
case 2 : puts("是冬天。"); break;
default : puts("输入的月份不存在!!\a"); break;
}
return 0;
}
练习4-1:
#include <stdio.h>
int main()
{
int num1;
int num2;
do {
printf("请输入一个非负整数:");
scanf("%d", &num1);
if (num1 < 0)
puts("请不要输入负数。");
} while(num1 < 0);
num2 = num1;
printf("%d逆向显示的结果是", num2);
do {
printf("%d", num1 % 10);
num1 = num1 / 10;
} while(num1 > 0);
puts("。");
return 0;
}
练习4-2:
#include <stdio.h>
int main()
{
int a; /* 输入的非负整数 */
int b; /* 用来显示输入的整数 */
int c; /* 位数 */
do {
printf("请输入一个非负整数:");
scanf("%d", &a);
if (a < 0)
puts("请不要输入负数。");
} while (a < 0);
b = a;
c = 0;
printf("%d的位数是", b);
do {
a = a / 10;
c = c + 1;
} while (a > 0);
printf("%d。 \n", c);
return 0;
}
练习4-3:
#include <stdio.h>
int main()
{
int n1;
int n2;
int a;
int b;
int sum = 0;
puts("请输入两个整数。");
printf("整数1:"); scanf("%d", &n1);
printf("整数2:"); scanf("%d", &n2);
a = n1;
b = n2;
printf("大于等于%d", b);
printf("小于等于%d的所有整数的和是", a);
do {
sum = sum + n2;
n2 = n2 + 1;
} while (n2 <= n1);
printf("%d。 \n", sum);
return 0;
}
练习4-8:
#include <stdio.h>
int main(void)
{
int i, no;
printf("请输入一个正整数:");
scanf("%d", &no);
i = 1;
while (i <= no){
printf("%d ", i++);
}
return 0;
}
练习4-9:
#include <stdio.h>
int main(void)
{
int n1, n2;
printf("请输入一个整数:");
scanf("%d", &n1);
n2 = 2;
while (n2 < n1){
printf("%d ", n2);
n2 += 2;
}
putchar('\n');
return 0;
}
练习4-10:
#include <stdio.h>
int main(void)
{
int n1, n2;
printf("请输入一个整数:");
scanf("%d", &n1);
n2 = 2;
while (n2 < n1){
printf("%d ", n2);
n2 *= 2;
}
putchar('\n');
return 0;
}
练习4-11:
#include <stdio.h>
int main(void)
{
int no;
printf("请输入一个正整数:");
scanf("%d", &no);
while(no-- > 0){
putchar('*');
printf("\n");
}
return 0;
}
练习4-12:
# include <stdio.h>
int main()
{
int no, sum = 0;
for (no = 1; no <= 5; no++){
sum += no;
}
printf("1到5的合计值是%d. \n", sum);
return (0);
}
练习4-13:
# include <stdio.h>
int main()
{
int i; /*输入的整数小于10时的循环次数*/
int num; /*输入的整数*/
int l; /*输入的整数大于9时,整除10,所得到的「1234567890」的循环次数*/
int o; /*输入的整数大于9时,除余10,所得到的个位数的显示位数*/
int v;
int e;
printf("please input a integer: ");
scanf("%d", &num);
if (num <= 9)
{
for (i = 0; i < num; i++)
printf("%d", i + 1);
}
else {
l = num / 10;
o = num % 10;
for (v = 0; v < l; v++)
printf("1234567890");
for (e = 0; e < o; e++)
printf("%d", e + 1);
}
printf("\n");
return (0);
}
练习4-14:
#include <stdio.h>
int main()
{
int start;
int end;
int interval;
printf("开始数值(cm): "); scanf("%d", &start);
printf("结束数值(cm): "); scanf("%d", &end);
printf("间隔数值(cm): "); scanf("%d", &interval);
for (start = start;start <= end; start += interval ) {
printf("%dcm %.2fkg \n", start, (double)(start - 80) * 0.7);
}
/*世卫计算方法 男性:(身高(cm)-80)*70%*/
return (0);
}
练习4-15:
#include <stdio.h>
int main()
{
int i, j;
int a; /*横标题*/
int b; /*竖标题*/
printf(" |");
for (a = 1; a <= 9; a++) {
printf(" %d", a);
}
printf("\n");
printf("------------------------------\n");
for (i = 1; i <= 9; i++) {
printf("%d ", i);
printf("|");
for (j = 1; j <= 9; j++)
printf("%3d", i * j);
putchar('\n');
}
return (0);
}
练习4-17:
(1)
# include <stdio.h>
int main()
{
int i, j, ln;
printf("三角形有几层: ");
scanf("%d", &ln);
for (i = ln; i > 0; i--) {
for (j = 1; j <= i; j++)
putchar('*');
putchar('\n');
}
return (0);
}
(2)
# include <stdio.h>
int main()
{
int i, j, ln;
printf("三角形有几层:");
scanf("%d", &ln);
for (i = 0; i < ln; i++) {
for (j = 1; j <= i; j++)
putchar(' ');
for (j = 1; j <= ln - i; j++)
putchar('*');
putchar('\n');
}
return (0);
}
练习4-18:
# include <stdio.h>
int main()
{
int n;
printf("让我们来描绘一个金字塔。\n");
printf("金字塔有几层:"); scanf("%d", &n);
int i, j, k;/*, n = 5;*/
char c1 = ' ';
char c2 = '*';
for (i = 0; i < n; i++) { /*最外层的循环语句还是控制三角形有几层呀。。。*/
for (j = 0; j < n - i; j++)
printf("%c", c1);
for (k = 0; k <= 2 * i; k++) /*根据左边的空格数来安排「*」的位置,输入「*」后直接换行了!!!*/
printf("%c", c2);
printf("\n");
}
return (0);
}
练习5-4:
#include <stdio.h>
int main()
{
int i;
int va[5] = {15, 20, 30};
int vb[5];
for (i = 0; i < 5; i++) {
vb[0] = va[4];
vb[1] = va[3];
vb[2] = va[2];
vb[3] = va[1];
vb[4] = va[0];
}
puts(" va vb");
puts("------");
for (i = 0; i < 5; i++) {
printf("%3d%3d\n", va[i], vb[i]);
}
return 0;
}
练习5-5:
#include <stdio.h>
int main()
{
int i;
int vx[8];
for (i = 0; i < 8; i++) {
printf("vx[%d]:", i);
scanf("%d", &vx[i]);
}
for (i = 0; i < 8; i++) {
int temp = vx[i];
vx[i] = vx[7 - i];
vx[7 - i] = temp;
}
for (i = 0; i < 8; i++) {
printf("vx[%d] = %d\n", i, vx[7 - i]);
}
return 0;
}
练习5-7:
#include <stdio.h>
int main(void)
/*
当矩阵A的列数等于矩阵B的行数时,A与B可以相乘。
矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
*/
{
int x[2][3], y[3][2], z[2][2], i, j, k;
puts("请输入x[2][3]的值:");
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
scanf("%d", &x[i][j]);
}
}
puts("请输入y[3][2]的值:");
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
scanf("%d", &y[i][j]);
}
}
// 将x*y的值存入z中
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
z[i][j] = 0;
for (k = 0; k < 3; k++)
z[i][j] += x[i][k] * y[k][j];
}
}
// 将矩阵z的值输出,注意换行
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%d ", z[i][j]);
printf("\n");
}
return (0);
}
练习6-2:
#include <stdio.h>
int min3(int x, int y, int z)
{
int min = x;
if (y < min) min = y;
if (z < min) min = z;
return (min);
}
int main(void)
{
int a, b, c;
puts("please input three integers.");
printf("integer 1:"); scanf("%d", &a);
printf("integer 2:"); scanf("%d", &b);
printf("integer 3:"); scanf("%d", &c);
printf("The minimal integer is %d. \n", min3(a, b, c));
return (0);
}
练习6-3:
#include <stdio.h>
int cube(int x)
{
return (x * x * x);
}
int main(void)
{
int a;
printf("请输入一个整数:"); scanf("%d", &a);
printf("该整数的立方为:%d\n", cube(a));
return (0);
}
练习6-4:
#include <stdio.h>
int sqr(int x)
{
return (x * x);
}
int pow4(int x)
{
return (sqr(x) * sqr(x));
}
int main(void)
{
int a;
printf("请输入一个整数。"); scanf("%d", &a);
printf("该数的四次幂为:%d\n", pow4(a));
return (0);
}
练习6-5:
#include <stdio.h>
void alert(int no)
{
while (no-- > 0)
putchar('\a');
}
int main(void)
{
int i, a;
printf("请输入一个整数:"); scanf("%d", &a);
for (i = 1; i <= a; i++) {
alert(i);
}
return (0);
}
练习6-6:
#include <stdio.h>
void hello(void)
{
printf("你好。\n");
}
int main(void)
{
hello(); /*若无输入语句,可直接通过写下函数名来调用函数。*/
return (0);
}
练习6-7:
#include <stdio.h>
#define NUMBER 5
int min_of(const int vc[], int no)
{
int i;
int min = vc[0];
for (i = 1; i < no; i++)
if (vc[i] < min)
min = vc[i];
return (min);
}
int main(void)
{
int i;
int ary1[NUMBER];
printf("请输入%d个整数。 \n", NUMBER);
for (i = 0; i < NUMBER; i++){
printf("[%d]:", i + 1); scanf("%d", &ary1[i]);
}
printf("这些数中最小的一位是:%d\n", min_of(ary1, NUMBER));
return (0);
}
练习6-8:
#include <stdio.h>
void rev_intary(int vc[], int no)
{
int i, temp;
for (i = 0; i < no / 2; i++) {
temp = vc[i];
vc[i] = vc[no - i - 1];
vc[no - i - 1] = temp;
}
}
int main(void)
{
int i;
const int n = 6;
int vc[n] = {2, 3, 5, 7, 11, 13};
rev_intary(vc, n);
for (i = 0; i < n; i++)
printf("vc[%d]:%d\n", i + 1, vc[i]);
return (0);
}
练习6-9:
#include <stdio.h>
void intary_rcpy(int v1[], const int v2[], int no)
{
int i;
for (i = 0; i < no; i++) {
v1[i] = v2[no - 1 - i];
}
}
int main(void)
{
int i;
const int n = 6;
const int vb[] = {2, 3, 5, 7, 11, 13};
int va[n];
intary_rcpy(va, vb, n);
for (i = 0; i < n; i++)
printf("v1[%d]:%d\n", i, va[i]);
return (0);
}
练习6-10:
#include <stdio.h>
void mul(const int ma[2][3], const int mb[3][2], int mc[2][2])
{
int i, j, k;
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++) {
for (k = 0; k < 3; k++)
mc[i][j] += ma[i][k] * mb[k][j];
}
}
int main(void)
{
int i, j;
const int ma[2][3] = {{1, 2, 3}, {4, 5, 6}};
const int mb[3][2] = {{1, 4}, {2, 5}, {3, 6}};
int mc[2][2] = {0};
mul(ma, mb, mc);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%d ", mc[i][j]);
putchar('\n');
}
return (0);
}
练习6-11:
(1)
#include <stdio.h>
#define NUMBER 5
int max_of(int a[], int no) {
int i;
int max = a[0];
for (i = 1; i < no; i++)
if (a[i] > max)
max = a[i];
return (max);
}
int main(void)
{
int i;
int chi[NUMBER];
int mat[NUMBER];
int eng[NUMBER];
int max_c;
int max_m;
int max_e;
printf("请输入[%d]名学生的分数。\n", NUMBER);
for (i = 0; i < NUMBER; i++) {
printf("[%d]\n", i + 1);
printf("chinese: "); scanf("%d", &chi[i]);
printf(" math: "); scanf("%d", &mat[i]);
printf("english: "); scanf("%d", &eng[i]);
putchar('\n');
}
max_c = max_of(chi, NUMBER);
max_m = max_of(mat, NUMBER);
max_e = max_of(eng, NUMBER);
printf("The max score of chinese is: %d\n", max_c);
printf("The max score of math is: %d\n", max_m);
printf("The max score of english is: %d\n", max_e);
return (0);
}
(2)
#include <stdio.h>
#define NUMBER 5
#define COURSE 3
int i, j;
void calculate(const float score[][3]);
int main()
{
float result[NUMBER][COURSE];
puts("请输入以下5名同学各三科成绩。");
for (i = 0; i < NUMBER; i++) {
printf("第[%d]名同学: ", i + 1);
for (j = 0; j < COURSE; j++)
scanf("%f", &result[i][j]);
}
calculate(result);
return (0);
}
void calculate(const float score[][COURSE])
{
float average[NUMBER] = {0};
float sum[NUMBER] = {0};
for (i = 0; i < NUMBER; i++) {
for (j = 0; j < COURSE; j++){
sum[i] += score[i][j];
}
average[i] = sum[i] / COURSE;
}
for (i = 0; i < NUMBER; i++) {
printf("第%d名学生的总成绩为:%.2f,平均分为:%.2f。\n", i + 1, sum[i], average[i]);
}
}
练习6-12:
#include <stdio.h>
#define NUMBER 5
int ma[NUMBER]; /*static storage duration*/
int main(void)
{
int i;
//static int ma[NUMBER]; /*static storage duration*/
for (i = 0; i < NUMBER; i++)
printf("[%d]:%d \n", i + 1, ma[i]);
return (0);
}
练习8-1:
#include <stdio.h>
#define diff(x, y) ((x) - (y))
int main(void)
{
int a, b;
puts("请输入两个整数:");
printf("integer 1:"); scanf("%d", &a);
printf("integer 2:"); scanf("%d", &b);
printf("两个整数之差为:%d。\n", diff(a, b));
return (0);
}
练习8-3:
#include <stdio.h>
#define swap(int, x, y) (int = x)
int main(void)
{
int a, b;
int c = 0;
puts("请输入2个整数:");
printf("整数a:"); scanf("%d", &a);
printf("整数b:"); scanf("%d", &b);
swap(c, a, b);
a = b;
b = c;
printf("a = %d, b = %d \n", a, b);
return (0);
}
《明解c语言》已看完,练习代码此奉上的更多相关文章
- 明解C语言
本文为阅读书籍<明解C语言-中级篇>所积累的知识点及编译书本代码时遇到的问题.部分对应代码在\Code_2018\BK_明解C语言目录下.每个代码内都含有程序功能.思路.疑惑点等内容,如有 ...
- C语言学习书籍推荐《明解C语言》下载
柴田望洋 (作者), 管杰 (译者), 罗勇 (译者) <明解C语言>是日本的C语言经典教材,自出版以来不断重印.修订,被誉为“C语言圣经”.作者在日本IT界家喻户晓,出版过一系列极富影响 ...
- 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?
简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...
- 哨兵查找法(明解c语言) + 函数式宏
//哨兵法,就是将待查找的元素加入待查找的数组的后面,这样可以提高性能(在数据量很庞大的时候体现出来) #include <stdio.h> #define FAILURE -1 //使用 ...
- 明解C语言 中级篇 第四章答案
练习4-1 /* 珠玑妙算 */ #include <time.h> #include <ctype.h> #include <stdio.h> #include ...
- 明解C语言 中级篇 第二章答案
练习2-1 /* 倒计时后显示程序运行时间 */ #include <time.h> #include <stdio.h> /*--- 等待x毫秒 ---*/ int slee ...
- 明解C语言 中级篇 第一章答案
练习1-1 #include <stdio.h> #include<stdlib.h> int main() { srand(time()); ; printf("您 ...
- 明解C语言 入门篇 第五章答案
练习5-1 /* 依次把1.2.3.4.5 赋值给数组的每个元素并显示(使用for语句) */ #include <stdio.h> int main(void) { int i; ]; ...
- 明解C语言,练习13-3,从文件中读入个人信息,按身高排序后显示
#include <stdio.h> #define NUMBER 6 #define F_PATH "D:\\C_C++\\ec13-3\\hw.dat" typed ...
随机推荐
- 【.net深呼吸】WPF异步加载大批量图像
如何在WPF中加载大批量数据,并且不会阻塞UI线程,尤其是加载大量图片时,这活儿一直是很多朋友都相当关注的.世上没有最完美的解决之道,咱们但求相对较优的方案. 经过一些试验和对比,老周找到了一种算是不 ...
- "Chinese_PRC_CI_AS" 和 "Chinese_PRC_90_CI_AI" 之间的排序规则冲突问题
这个错误真是太恶心了.不过有解决办法,你问我哪来的?当然百度的咯! 示例: select a.workTypeDes from A a,B b where a.workTypeCode=b.work ...
- 设计模式--观察者模式初探和java Observable模式
初步认识观察者模式 观察者模式又称为发布/订阅(Publish/Subscribe)模式,因此我们可以用报纸期刊的订阅来形象的说明: 报社方负责出版报纸. 你订阅了该报社的报纸,那么只要报社发布了新报 ...
- 记一次nginx部署yii2项目时502 bad gateway错误的排查
周六闲来无事,就试着安装和部署下yii2,安装过程没什么问题,但部署到nginx上时遇到了502 bad gatewary问题,折腾了半天才搞定.这个问题是我以前在部署yii2时没有遇到过的,因此记在 ...
- 用Middleware给ASP.NET Core Web API添加自己的授权验证
Web API,是一个能让前后端分离.解放前后端生产力的好东西.不过大部分公司应该都没能做到完全的前后端分离.API的实现方式有很 多,可以用ASP.NET Core.也可以用ASP.NET Web ...
- js验证输入的是否是数字,小数保留几位小数
1.验证方法 validationNumber(e, num) e代表标签对象,num代表保留小数位数 function validationNumber(e, num) { -]+\.?[-]*$ ...
- Java终止线程
Thread提供了stop()方法终止线程,但是该方法是强行终止,容易产生一些错误,已经被废弃. 可以使用退出标志来终止线程,在run()函数里面设置while循环,把退出标志作为while的条件,当 ...
- mysql binlog_row_image的选择
其含义为 The default value is full. In MySQL 5.5 and earlier, full row images are always used for both b ...
- 菜鸟快飞之JavaScript对象、原型、继承(二)
上一节写了创建对象的三种方法,而其中通过函数创建对象的方式又有三种模式,分别是工厂模式.构造函数模式.原型模式.而这三种模式最常用的则是原型模式.还是上栗子: 工厂模式: function Fun1( ...
- PostCSS一种更优雅、更简单的书写CSS方式
Sass团队创建了Compass大大提升CSSer的工作效率,你无需考虑各种浏览器前缀兼,只需要按官方文档的书写方式去写,会得到加上浏览器前缀的代码,如下: .row { @include displ ...