重新学习c语言实验《c primer plus》(字符串和格式化输入/输出)

学习方法:见专栏的第一篇

温馨提示:-----只看剥离的精华------,主要内容只是为了大致的了解这章的内容,方便以后查找。希望可以抛砖引玉

主要的内容

● 函数——strlen();

● 关键字——const;

● 字符串;

● 如何创建、存储字符串;

● 如何使用strlen()函数获取字符串的长度;

● 用C预处理器指令#define和ANSIC的const修饰符创建符号常量。

本章重点介绍输入和输出。与程序交互和使用字符串可以编写个性化的程序,本章将详细介绍C语言的两个输入/输出函数:scanf()和printf()。学会使用这两个函数,不仅能与用户交互,还可根据个人喜好和任务要求格式化输出。最后,简要介绍一个重要的工具——C预处理器指令,并学习如何定义、使用符号常量。

剥离的精华

1.#define 

#define指令可以让你需要的值都可以完整地保存在程序中,不受其他变量的影响。并且方便修改

#include
#include 
#define density 62.4 
int main(void)
{
	
	float weight,volume;
	int size,letters;
	char name[40];
	printf(" hi! what is your name \n");
	scanf("%s",name);
	printf("%s,what is your weights\n",name);
	scanf("%f",&weight);
	size=sizeof(name);
	letters=strlen(name);
	volume=weight/density;
	printf("well, %s,your volume is %2.2f cubic feet \n",name,volume);
	printf("also,your first name has %d letters.\n",letters);
	printf("and we have %d bytes to store it \n",size);
	return 0;
	
	
	
	
}

#define指令还可定义字符和字符串常量。前者使用单引号,后者使用双引号。//个人感觉没用,我自己再写一个输出函数不香吗?

#include 
#define praise "you are an extraorfinary being"

int main(void)
{
	char name[40];
	printf("what is your name?\n");
	scanf("%s",name);
	printf("hello %s,%s\n",name,praise);
	printf("hello %s,you are an extraorfinary being",name);
	//不能说毫无关联,只能说一模一样 
	
	return 0;
 } 

2.printf和scanf的一些小技巧

   2.1scanf()函数在%s的情况下,scanf()只会读取字符串中的一个单词,而不是一整句。C语言还有其他的输入函数(如,fgets()),用于读取一般字符串

#include 
#define praise "you are an extraorfinary being"

int main(void)
{
	char name[40];
	printf("what is your name?\n");//当你没有连续的输入你的名字之后,看一看结果。eg
	//jikl和j  ikl 
	scanf("%s",name);
	printf("hello %s,%s\n",name,praise);
	printf("hello %s,you are an extraorfinary being",name);
	//不能说毫无关联,只能说一模一样 
	
	return 0;
 } 

2.2printf()和scanf()函数的*运算符

printf()函数如果你不想预先指定字段宽度,希望通过程序来指定,那么可以用*修饰符代替字段宽度。但还是要用一个参数告诉函数,字段宽度应该是多少。也就是说,如果转换说明是%*d,那么参数列表中应包含*和d对应的值。这个技巧也可用于浮点值指定精度和字段宽度

#include 
int main(void)
{
	int width ,precision;
	int number =256;
	double weight =242.5;
	
	printf("输入第一数字的宽度\n");
	scanf("%d",&width);
	printf("the number is %*d",width,number);
	printf("请输入浮点数的宽度及其精度\n");
	scanf("%d,%d",&width,&precision);
	printf("weight=%*.*f\n",width,precision,weight);
	printf("done!\n");
	
	
	
	
	return 0;
 } 

scanf()函数与printf()函数则不一样,scanf()函数的*省去对应的对象,直接最后一个输入,即可。

#include //scanf()函数的*的作用 
int main(void)
{
	int n;
	printf("请输入三个整数\n");
	scanf("%*d %*d %d",&n);
	printf("最后一个整数是%d\n",n);
	 

	
	
	
	
	return 0;
}

2.3printf()函数的数据的美观,就是当想数据更加美观的话,可以考虑尽量大的字符宽度。但是一点就是这几个数据的宽度足够大的同时并且相等。

重新学习c语言实验《c primer plus》(字符串和格式化输入/输出)_第1张图片

#include 
#include 
int main(void)
{
	int num1;
	int num2;
	char name1[20];
	char name2[20];
	printf("请输入姓\n");
	scanf("%s",name1);
	printf("请输入名\n");
	scanf("%s",name2);
	num1=strlen(name1);
	num2=strlen(name2);
	printf("%9s %9s\n",name1,name2);
	printf("%9d %9d\n",num1,num2);
	printf("%-9s %-9s\n",name1,name2);//瞧我这思维转换 
	printf("%-9d %-9d\n",num1,num2);
	
	return 0;
}

3.字符串都被存储在char类型的数组中,看一张图足矣

4.strlen()函数和sizeof()函数

strlen()函数针对字符串的长度,sizeof()函数计算其类型的大小。

#include 
#include 
#define praise "you are an extraorfinary being."
int main(void)
{
	char name[40];
	printf("what is your name?\n");
	scanf("%s",name);
	printf("hello %s,%s\n",name,praise);
	printf("your name of %zd letter occupies %zd memory cells.\n",strlen(name),sizeof(name));
	printf("the phrase of praise has %zd letters\n",strlen(praise));
	printf("and occupies %zd memeory cells\n",sizeof praise);//最后两行函数的比较体现出来了字符串的最后一位是多少 
	
	
	
	return 0;
 } 

5.多行书写代码的时候的两种简单的方法

就改善上面的程序来体现。

#include 
#include 
#define praise "you are an extraorfinary being."
int main(void)
{
	char name[40];
	printf("what is your name?\n");
	scanf("%s",name);
	printf("hello %s,%s\n",name,praise);
	printf("your name of %zd letter occupies\
	 %zd memory cells.\n",strlen(name),sizeof(name));//这是断行    书写规则就是/加enter 
	printf("the phrase of praise"
	" has %zd letters\n",strlen(praise));//这是另一种断行方式。    书写规则就是""+""字符串的相加 
	printf("and occupies %zd memeory cells\n",sizeof praise);//最后两行函数的比较体现出来了字符串的最后一位是多少 
	
	
	
	return 0;
 } 

代码练习

编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。

#include 
int main(void)
{
	char name[20];
	char fir[20];
	printf("请输入姓\n");
	scanf("%s",name);
	printf("请输入名\n");
	scanf("%s",fir);
	printf("下面是得到的结果\n");
	printf("%s,%s\n",name,fir);
	
	
	
	return 0;
}

6.编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数。字母数要与相应名和姓的结尾对齐,如下所示接下来,再打印相同的信息,但是字母个数与相应名和姓的开头对齐,如下所

#include 
#include 
int main(void)
{
	int num1;
	int num2;
	char name1[20];
	char name2[20];
	printf("请输入姓\n");
	scanf("%s",name1);
	printf("请输入名\n");
	scanf("%s",name2);
	num1=strlen(name1);
	num2=strlen(name2);
	printf("%9s %9s\n",name1,name2);
	printf("%9d %9d\n",num1,num2);
	printf("%-9s %-9s\n",name1,name2);//瞧我这思维转换 
	printf("%-9d %-9d\n",num1,num2);
	
	return 0;
}

你可能感兴趣的:(c语言重新学习,c语言)