2019年12月9日

  • 运算符(可是要返回值的!!!!)

1)算术运算符(=(赋值)、+(加法)、-(减法)、-和+(符号运算符)、✖(乘法)、/(除法)、%(取模))。进行算术运算。返回计算结果!!!!优先级与数学优先级一样。涉及到变量的类型转换。
赋值运算符拓展+=、-=、*=、/=、%=。
2)关系运算符(>、>=、<、<=、!=、==)进行大小比较,返回真1或假0。具有返回值!!!!!
3)逻辑运算符(&&(且)、||(或)、!(非))。根据成员间的关系,进行逻辑判断!返回真1假0值。
4)条件运算符(?:)。三目运算符。(a>b)?a:b,真则返回第一个数a,假则返回第二个数b。
5)位运算符
(1)位逻辑运算符(~(按位取反)、&(按位与)、|(按位或)、^(按位异或))用法:掩码、打开位、关闭位、转置位、查看一位的值。
(2)移位运算符(<<(左移运算符)、>>(右移运算符)。
6)其他运算符。
(1)sizeof运算符,返回unsigned char类型size_t
(2)逗号运算符(,)。一、保证被它分开的表达式按从左到右的次序进行计算;二、整个逗号表达式的值是右边成员的值。注意,依然是有返回值的,看你自己赋不赋了!例如x=(y=3,(z=++y+2)+5);,x=11。又例如,a=249,666;那么a等于666.
(3)自增运算符和自减运算符,前缀,使用前值已变化,再使用;后缀,先使用,才变化。

  • C语言的保留标识符34?32?
    1)auto、const、extern、enum、restrict、static、volatile。7
    2)char、double、float、int、long、register、short。7
    3)unsigned、signed。2
    4)typedef、struct、union。3
    5)break、case、continue、default、do、else、for、goto、if、return、switch、while。12
    6)inline、void。2
    7)sizeof。1
  • 不确定循环与计数循环,条件循环。
    1)必须初始化一个计数器;
    2)计数器与某个有限的值比较;
    3)每次执行循环,计数器的值都要递增。
    while、for等大同小异。
    不确定循环:交互式有关。
    计数循环:计数器变量。
    条件循环:直到满足某条件即可。
  • C语言控制语句:循环、分支与跳转
    嵌套循环;
    循环辅助手段:continue和break
    多重选择:switch和break
    goto语句
  • 字符输入输出和输入确认
    (1)单字符I/O:getchar()和putchar()。
    缓冲区
    1)为什么需要缓冲区?将若干字符作为一个块传输比逐个发送这些字符耗费的时间少。其次,可以使用键盘更正功能来修改错误。
    2)没有优劣之分,缓冲输入与非缓冲输入具有各自的用途。在游戏中,需要立即执行某个命令,不需要缓冲区。
    (2)关键概念
    C程序将输入视为一个外来字节流。getchar()函数将每个字节解释为一个字符编码。scanf()函数以同样的方式看待输入,但在其转换说明符的指导下,该函数可以将字符转换为数值。许多操作系统都提供重定向,这就使您能够用文件代替键盘作为输入,或用文件代替显示器输出。
    1)输入重定向
    2)输出重定向
  • 字符串和字符串函数
    (1)字符串输入
    1)创建存储空间
char name[80];
scanf("%s",name);

2)输入函数
gets()函数

#include<stdio.h>
#define MAX 81
int main(void)
{
	char name[MAX];//分配空间
	printf("Hi,what's your name?\n");
	gets(name);//把字符串放进name数组中
	printf("Nice name,%s.\n",name);
	return 0;
}	
#include<stdio.h>
#define MAX 81
int main(void)
{
	char name[MAX];
	char * ptr;
	
	printf("Hi,waht's your name?\n");
	ptr=gets(name);
	printf("%s?Ah!%s!\n",name,ptr);
	return 0;
}	

gets()函数的构造

char *gets(char * s)
{
	...
	return(s);
}	

fgets()函数

#include<stdio.h>
#define MAX 81
int main(void)
{
	char name[Max];
	char * ptr;

	printf("Hi,what's your name?\n");
	ptr=fgets(name,MAX,stdin);//从键盘上读数据时,可以使用stdin作为该参数)
	printf("%s?Ah!%s!\n",name,ptr);
	return 0;
}

gets()的一个不足之处是它不检查预留存储区是否能够容纳实际输入的数据。多出来的字符串简单地溢出到相邻地内存区。fgets()函数改进了这个问题,它能够让你指定最大读入字符数。由于fgets()是为文件I/O而设计,在处理键盘输入时就不如gets()那么方便。
scanf()函数
scanf()和gets()主要的差别在于它们如何决定字符串何时结束。
scanf()更基于获取单词而不是获取字符串,而gets()函数,正如你所看到,会读取所有的字符,直到遇到第一个换行符为止。

#include<stdio.h>
int main(void)
{
	char name1[11],mae2[11];
	int count;
	printf("Please enter 2 names.\n");
	count=scanf("%5s %10s",name1,name2);
	printf("I read the %d names %s and %s.\n",count,name1,name2);

	return 0;

(2)字符串输出
puts()

#include <stdo.h>
#define DEF "I am a #defined string"
int main(void)
{
	char str1[80]="Array was initialized to me.";
	const char *str2="A pointer was initialized to me.";
	puts("I'm an argument to puts().");
	puts(DEF);
	puts(str1);
	puts(str2);
	puts(&str1[5]);
	puts(str2+4);
	
	return 0;

在这里插入图片描述
注意每个字符串都是单行显示。与printf()不同,puts()显示字符串时自动在其后添加一个换行符。
fputs()
fputs()函数是pets()的面向文件版本。

char line[81];
while(gets(line))
	puts(line);
char line[81]
while(fgets(line,81,stdin)
	fpus(line,stdout);

printf()
如同puts()一样,printf()需要一个字符串地址作为参数。printf()使用起来没有puts()那么方便,但是它可以格式化多种数据类型,因而更通用。区别之一就是printf()并不在新行上输出每一个字符串。相反,你必须要另起一行。

printf("%s\n",string);
puts(string);
  • 自定义字符串输入/输出函数

不一定要使用标准C库的函数进行输入和输出,如果不具备或者不喜欢它们,你可以自行定义,在getchar()和putchar()的基础上建立自己的函数。

#include<stdio.h>
void put1(const char * string)
{
	while(*string!='\0')
		putchar(string[i++]);
}		
  • 字符串函数

strlen()
返回字符串长度
strcat()
接受两个字符串参数。它将第二个字符串的一份拷贝添加到第一个字符串的结尾,从而使第一个字符串成为一个新的组合字符串,第二个字符串并没有改变。

#include<stdio.h>
#include<string.h>
#define SIZE 80
int main()
{
	char flower[SIZE];
	char addon[]="s smell like old shoes,";

	puts("What is your favorite flower?");
	gets(flower);
	strcat(flower,addon);
	puts(flower);
	puts(addon);
	
	return 0;
}	

在这里插入图片描述
strncat()
strcat()函数并不检查第一个数组是否能够容纳第二个字符串。如果没有为第一个数组分配足够大的空间。多出来的字符溢出到相邻存储单元时就会出现问题。
strcmp()
把用户的响应和一个已有的字符串进行比较。两个字符串相同时,返回0。

#include<stdio.h>
#include<strig.h>
#define ANSWER "Grant"
#define MAX 40
int main()
{
	char try[MAX];

	puts("Who is buried in Grants's tomb?");
	gets(try);
	while(strcmp(try,ANSWER)!=0)
	{
		puts("No,that's wrong.Try again.");
		gets(try);
	}
	puts("Thas's right!");

	return 0;
}		

两个字符串比较返回值。

strcmp("A","A") is 0
strcmp("A","B") is -1
strcmp("B","A") is 1
strcmp("C","A") is 2
strcmp("Z","a") is -7
strcmp("apples","apple") is 115

ASCII码相减。
strncmp()
strcmp()函数比较字符串时,一直比较到找到不同的相应字符,搜索可能要进行到字符串结尾处。而strncmp()函数比较字符串时,可以比较到字符串不同处,也可以比较完由第三个参数指定的字符数。

if(strncmp(list[i],"astro",5)==0)

strcpy()
复制字符串,可以使用strcpy()函数
strncpy()
strcpy()和gets()函数同样都有一个问题,那就是都不检查目标字符串是否容纳的下源字符串。复制字符串使用strncpy()比较安全,它需要第三个参数来指明最大可复制的字符数。

strmcpy(qwords[i],temp,TARGSIZE-1);

sprintf()
sprintf()函数是在stdio.h而不在string.h里声名。它的作用和printf()一样,但是它写到字符串里而不是写到输出显示。因此,它提供了把几个元素组合成一个字符串的一种途径。sprintf()的第一个参数是目标字符串的地址,其余的参数和printf()一样:一个转换说明符字符串,接着是要写的项目列表。

#include<stdio.h>
#define MAX 20
int main(void)
{
	char first[MAX];
	char last[MAX];
	char formal[2*MAX+10];
	double prize;

	puts("Enter your first name:");
	gets(first);
	puts("Enter your last name:");
	gets(last);
	puts("Enter your prize money:");
	scanf("%lf",&prize);

	sprintf(formal,"%s,%-19s:$%6.2f\n",last,first,prize);
	puts(formal);
	
	return 0;

在这里插入图片描述
总结
(1)字符串输入
1)创建存储空间
2)gets()函数
3)fgets()函数
4)scanf()函数
(2)字符串输出
1)puts()函数
2)fputs()函数
3)printf()函数
(3)利用putchar()和getchar()函数自定义字符串输入/输出函数
(4)字符串函数
1)strlen()函数
2)strcat()函数
3)strncat()函数
4)strcmp()函数
5)strncmp()函数
6)strcpy()函数
7)strncpy()函数

C字符串是一串以空字符’\0’结束的char类型值。字符串可以放在字符数组中,也可以用字符串常量表示。在字符串中,字符串(除空字符)是被包含在双引号中的。编译器为它加上空字符。因此,存储在“joy”时有4个字符:j、o、y和\0。strlen()函数测得字符串长度不包括空字符。
函数利用指向字符串第一个字符的指针来标识它所作用的字符串。通常,相应的实际参数可以是数组名、指针变量或双引号中的字符串。这些情况下,传递的都是第一个字符的地址。一般来说,并不需要传递字符串的长度,因为可以根据标志结束的空字符来确定字符串结束。
gets()和puts()函数分别读取一行输入和进行一行输出。都是stdio.h里的函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值