C Primer Plus NO.2

麻了,昨晚有个引号打错地方,鉴定为纯小丑

书接上回

3.11编程练习(p60)

题3:编写一个程序,发出一声警报,然后打印下面文本

解:

#include<stdio.h>
int main()
{
	char a = '\a';
	printf("%c\n",a);
	printf("以下文本");
	return 0;
}

答案:

#include<stdio.h>
int main()
{
	char ch = '\a';
	printf("%c\n",ch);
	printf("书上的两行文本\n我懒打");
	return 0;
}

使用警报(字符型)时需要打印出来

题4:编写一个程序,读取一个浮点数,先打印成小数形式,在打印成指数形式。然后,如果系统支持,在打印成16进制计数法。

#include<stdio.h>
int main()
{
	float ht;
	scanf("%f", &ht);
	printf("%f\n%e\n%#x",ht, ht, ht);
	return 0;
}

答案:

#include<stdio.h>
int main()
{
	float input;
	scanf("%f", &input);
    printf("巴拉巴拉:%f\n",input);
	printf("巴拉巴拉:%e\n", input);
	printf("巴拉巴拉:%a\n", input);
	return 0;
}

题目本意是要掌握各个类型输出转换字符,很显然,我没有掌握,这里的指数输出转换字符用的%a,不懂,记得看书

题目5:一年大约有3.156x10的七次方,编写一个程序,提醒输入年龄,用秒数输出

解:

#include<stdio.h>
int main()
{
    float s;
    int age;
    age = s * 3.156e7;
    printf("ht今年多大啦!");
    scanf("%d", &age);
    printf("%f秒", s);
    return 0;
}

错了,运行不了,抄答案重做一遍

重做:

#include<stdio.h>
#define S_PER_YEAR 3.156e7
int main()
{
    float s, age;
    printf("皓天今年多大啦:\n");
    scanf("%f", &age);
    s = age * S_PER_YEAR;
    printf("%f", s);
    return 0;
}

能运行,再打一遍试试猜想(刚刚知道自己做的错在哪里了,声明后的函数在获取输入后再进行定义,鉴定为纯小丑,以下为第一次编程的改错)

#include<stdio.h>
int main()
{
    float s;
    float age;
    printf("ht今年多大啦!\n");
    scanf("%f", &age);
    s = age * 3.156e7;
    printf("%f", s);
    return 0;
}

不试猜想了,继续下一道

题目6:1个水分子质量约为3.0e-23克,一夸脱水大约为950克。编写一个程序,提醒用户输入水的夸脱数,并显示水分子的质量。

解:第一次解

#include<stdio.h>
int main()
{
	float fenzishu, kuatuo, mid;
	printf("输入夸脱数:\n");
	mid = 950 / 3.0e-23;
	scanf("%f\n", &kuatuo);
	fenzishu = kuatuo * mid;
	printf("换算成分子是%f个", fenzishu);
	return 0;
}

获取了两次键盘的输入,why? 

抄答案写一遍:第二次解

#include<stdio.h>
#define ZL_PER_FZ 3.0e-23  //拼音简写质量,分子
#define ZL_PER_KT 950     //简写质量ZL,夸脱kt 
int main()
{
	float ZL, FZ, KT,FZS;   //分子数简写FZS
	printf("输入夸脱值:\n");
	scanf("%f\n", &KT);
	FZS = KT * ZL_PER_KT / ZL_PER_FZ;
	printf("%f", FZS);
	return 0;
}

 又获取两次,照着书上写一遍

#include<stdio.h>
#define MASS_PER_MOLE 3.0e-23
#define MASS_PER_QUART 950
int main()
{
	float quart, quantily;
	printf("ENTER how many quart : ");
	scanf("%f", &quart);
	quantily = quart * MASS_PER_QUART / MASS_PER_MOLE;
	printf("There are %e molecule.\n", quantily);
	return 0;
}

本次可运行,根据答案改错:

#include<stdio.h>
#define ZL_PER_FZ 3.0e-23  //拼音简写质量,分子
#define ZL_PER_KT 950     //简写质量ZL,夸脱kt 
int main()
{
	float KT, FZS;        //分子数简写FZS
	printf("输入夸脱值:\n");
	scanf("%f", &KT);       //本行不加\n,会生成一行无效的输入获取  
	FZS = KT * ZL_PER_KT / ZL_PER_FZ;
	printf("%e", FZS);
	return 0;
}

在scanf后加换行转换字符会导致生成一行无效的输入获取,注意

题目7:1英寸相当于2.54厘米。编写一个程序,使用户输入身高(英寸),然后以厘米为单位显示身高

#include<stdio.h>
#define CM_PER_YC 2.54   //拼音简写厘米cm,英寸yc
int main()
{
	float high, GAO;
	printf("以英寸为单位输入你的身高:");
	scanf("%f", &high);
	GAO = high * CM_PER_YC;
	printf("你的身高是%f厘米", GAO);
	return 0;
}

答案

#include<stdio.h>
#define INCH_TO_CM 2.54
int main()
{
	float inch, cm;
	printf("Enter the inch of your higher:");
	scanf("%f", &inch);
	cm = inch * INCH_TO_CM;
	printf("Hi,your are %.2finch,or %0.1f cm higher\n", inch, cm);
	return 0;
}

答案中英寸与厘米转换用了_TO_

题目8:在美国的体积测量系统中,1品脱等于2杯,1杯等于盎司,1盎司等于2大汤勺,1大汤勺等于3茶勺,提示用户输入杯数,并以品脱,盎司,汤勺,茶勺为单位显示等价容量,思考对于该程序,为什么使用浮点型比整数类型更适合?

解:(没用预设函数版)

#include<stdio.h>
#define PT_TO_BEI 2
#define BEI_TO_AS 8
#define AS_TO_TS 2
#define TS_TO_CS 3
int main()
{
	float pt, bei, as, ts, cs;
	printf("你拥有的水的杯数是:");
	scanf("%f", &bei);
	pt = bei*2;
	as = bei / 8;
	ts = as / 2;
	cs = ts / 3;
	printf("you have %f 品脱, %f 杯 ,%f 盎司,%f 汤勺,%f 茶勺的水\n", pt, bei, as, ts, cs);
	return 0;
}

(用预设函数版):

#include<stdio.h>
#define PT_TO_BEI 2
#define BEI_TO_AS 8
#define AS_TO_TS 2
#define TS_TO_CS 3
int main()
{
	float pt, bei, as, ts, cs;
	printf("你拥有的水的杯数是:");
	scanf("%f", &bei);
	pt = bei * PT_TO_BEI;
	as = bei / BEI_TO_AS;
	ts = as / AS_TO_TS;
	cs = ts / TS_TO_CS;
	printf("you have %f 品脱, %f 杯 ,%f 盎司,%f 汤勺,%f 茶勺的水\n", pt, bei, as, ts, cs);
	return 0;
}

输出结果均为:

 这两章的预设函数只需要自己能懂就好,没有一定格式

摆了,第二章欠的作业晚上再来ToT (14:07)

19:28,回来坐牢,补昨晚没做完的第二章作业!

2.12编程练习(p33)

书接昨晚上,没做完的四道题

题目5:编写一个程序,生成以下输出:

Brazil,Russia,India,China

India,China,

Brazil,Russia

不会做!没头绪!直接抄答案写一遍!

抄:

#include<stdio.h>
int br();
int ic();
int main()
{
	br();
	printf(",");
	ic();
	printf("\n");
	ic();
	printf(", \n");
	br();
	printf("");
	return 0; 
}
int br()
{
	printf("Brazil,Russia");
	return 0;
}
int ic()
{
	printf("India, China");
	return 0;
}

答案用了预编译函数(我不知道是不是预编译函数),然后在主函数内进行函数的调用,把函数的定义放在最后,经实践表明,函数的定义与调用没有特定的前后关系,个人习惯是先定义再调用

再次当小丑,题目后面还有一段我没看全:

 先定义后调用:

#include<stdio.h>
int br();
int ic();
int br()
{
	printf("Brazil,Russia");
	return 0;
}
int ic()
{
	printf("India, China");
	return 0;
}
int main()
{
	br();
	printf(",");
	ic();
	printf("\n");
	ic();
	printf(", \n");
	br();
	printf("");
	return 0; 
}

题目6:编写一个程序,创建一个整形变量toes,并将toes设置为10。程序还要计算toes的两倍以及平方。该程序打印3个值,并描述以示区分。

#include<stdio.h>
int main()
{
	int toes = 10;
	int b= 2 * toes;
	int c = toes * toes;
	printf("toes=%d\n两倍的toes=%d\ntoes的平方=%d",toes,b,c);
	return 0;
}

和答案大差不差,但是答案提供了另一种思路(不定义函数,直接在打印运算的结果):

#include<stdio.h>
int main()
{
	int toes = 10;
	printf("toes=%d\n", toes);
	printf("两倍的toes=%d\n", 2 * toes);
	printf("toes的平方=%d", toes * toes);
	return 0;
}

题目7:写程序生成以下输出:

smile!smile!smile!

smile!smile!

smile!

该程序要定义一个函数,该函数被调用一次就打印一次smile!

解:

#include<stdio.h>
int ht();
int main()
{
	ht();
	printf("");
	ht();
	printf("");
	ht();
	printf("\n");
	ht();
	printf("");
	ht();
	printf("\n");
	ht();
	return 0;
}
int ht()
{
	printf("smile!");
	return 0;
}

答案:

#include<stdio.h>
int ht();
int main()
{
	ht();
	ht();
	ht();
	printf("\n");
	ht();
	ht();
	printf("\n");
	ht();
	return 0;
}
int ht()
{
	printf("smile!");
	return 0;
}​​​​​​​

题目8:在C语言中,函数可以调用另外一个函数。编写一个程序,调用一个名为one_three()的函数,该函数在一行打印单词one,再掉用第二个函数two(),然后在另一行打印three,two()函数在一行显示单词two,main()函数在调用one_three()函数前要打印短语starting now:,并在调用完毕后显示短语“done”因此,该程序的输出应如下所示:

starting now:

one

tow

three

done!

解:

#include<stdio.h>
int one_three();
int two();
int main()
{
	printf("starting now\n");
	one_three();
	printf("\ntwo\n");
	two();
	printf("\ndone!\n");
	return 0;
}
int one_three()
{
	printf("one");
	return 0;
}
int two()
{
	printf("three");
	return 0;
}

答案: 

#include<stdio.h>
int one_three();
int two();
int main()
{
	printf("starting now\n");
	one_three();
	printf("done!");
	return 0;
}
int one_three()
{
	printf("one\n");
	two();
	return 0;
}
int two()
{
	printf("three\n");
	return 0;
}

注意题目,是在调用的函数里调用另一个函数。

2022/11/11 21:20,结束坐牢,明天复习要考试的科目,不知道回不回来坐牢

开摆!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值