C语言学习总结11.7

1、字符串的输入输出

gets()可以输入带空格的字符串,但如果输入的字符大于数组长度,该函数无法检测出此问题,故编程时建议使用fgets()。

fgets(ch,sizeof(ch),stdin); fgets比gets更安全,它会在字符串末尾补齐‘\0‘ ,如果字符串长度超过sizeof(ch)的值,那么它会将sizeof(ch)的最后一位替换成\0

gets()与fgets均为scanf()函数的替代函数,即键盘输入时使用。

puts()功能与printf相同,打印字符串,遇到‘\0’停止,使用该函数显示字符串时,系统会自动在其后添加一个换行符。即 printf("%s\n",name)=puts(name)

fputs与puts有两个小区别:

①、puts() 只能向标准输出流输出,而 fputs() 可以向任何流输出。

②、使用 puts() 时,系统会自动在其后添加换行符;而使用 fputs() 时,系统不会自动添加换行符。

gets()可以输入带空格的字符串,但如果输入的字符大于数组长度,该函数无法检测出此问题,故编程时建议使用fgets()。
fgets(ch,sizeof(ch),stdin); fgets比gets更安全,它会在字符串末尾补齐‘\0‘ ,如果字符串长度超过sizeof(ch)的值,那么它会将sizeof(ch)的最后一位替换成\0
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>


int main11_01()
{
	char ch[100];
	
	gets(ch);//通过键盘获取一个字符串,并且可以接收空格
	//scanf("%[^\n]", ch);//通过正则表达式,接收非\n的所有内容,可以接收空格
	printf("%c\n", ch);
	return 0;

}

int main11_02()
{
	char ch[10];
	//"hello\n\0"
	//fgets可以接收空格
	//fgets获取字符串少于元素个数自动补\n  大于等于时没有\n 
	fgets(ch, sizeof(ch), stdin);
	printf("%s", ch);
	return 0;

}

int main11_03()
{
	char ch[] = "hello world";
	puts(ch);//自带换行,输出字符串
	puts("hello\0 world");//遇到\0停止
	//puts("");//换行  功能与printf("\n")功能相同
	return 0;

}

int main11_04()
{
	char ch[] = "hello world";
	fputs(ch, stdout);//输出自动换行
	return 0; 
}

2、strlen语句

strlen()函数用来计算字符串的长度(第一个在\0之前的内容)

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main12_01()
{
	//计算字符串有效个数(第一个\0之前的内容)
	char ch[] = "hello world";
	printf("数组大小:%d\t", sizeof(ch));
	printf("字符串长度:%d", strlen(ch));
	return 0;
}

int main12_02()
{
	char ch[] = "hello world";

	int len = 0;
	while (ch[len] != '\0')
	{
		len++;
	}-
	printf("字符串长度:%d", len);
	return 0; 
}

3、随机数

随机数种子:srand((size_t)time(NULL))

rand();//输出随机数

双色球案例

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//   %n 得到的数值为0~n-1

int main0101()
{
	//time_t timer = time(NULL);
	//srand((size_t)timer);
	srand((size_t)time(NULL));//size_t = unsigned int 
	//srand 添加随机数种子

	for (int i = 0; i < 100; i++)
	{
		printf("%d\n", rand()%51+50); //输出随机数
		//rand()%100 输出0~99的随机数 rand()%51+50输出50~99的随机数
	}
	return 0;
}

int main0102()
{
	//双色球  6个红球1~32  1个蓝球1~16
	srand((size_t)time(NULL));
	int arr[6] = { 0 };
	int value = 0;
	int flag = 0;
	int j;
	for (int i = 0; i < 6; i++)
	{
		value = rand() % 32 + 1;
		for (j = 0; j <flag; j++)//去重
		{
			if (value == arr[j])
			{
				i--;
				break;
			}

		}
		if (j == flag)
		{
			arr[flag] = value;
			flag++;

		}
	}
	for (int i = 0; i < 6; i++)
	{
		printf("%d ", arr[i]); 
	}
	printf("+ %d\n",rand()% 16 + 1);
	return 0;
}


4、函数的定义与使用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>
//返回值类型 函数名(参数列表)
//{
//	代码体
// return 0; 
//}


int add(int a, int b)
{
	/*int sum = a + b;
	return sum;*/
	return a + b;//或者用这种方式 同上
}
void print()
{
	printf("hello world");
}
int main0201()
{
	int a = 10;
	int b = 20;
	int c;
	c = add(a, b);//函数调用
	printf("%d\n", c);
	print();
	return 0;
}
void swap(int a, int b)
{
	printf("交换前数据:\n");
	printf("a=%d\n", a);
	printf("b=%d\n", b);
	int temp = a;
	a = b;
	b = temp;
	printf("交换后数据:\n");
	printf("a=%d\n", a);
	printf("b=%d\n", b);
}
int main0202(void)
{
	int a = 10;
	int b = 20;
	swap(a, b);
	return 0;
}

5、字符串比较

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>

int my_strcmp(char ch1[], char ch2[])
{
	int i = 0;
	while (ch1[i] == ch2[i])//字符串是否相同,相同则向下执行
	{
		if (ch1[i] == '\0')//是否到字符串结尾
		{ 
			return 0;
		}
		i++;
	}
	return ch1[i] > ch2[i] ? 1 : -1;
}

int main0301() 
{
	//比较两个字符串 如果相同返回0 如果不同返回1或-1
	char ch1[] = "hello";
	char ch2[] = "hallo";
	int value = my_strcmp(ch1, ch2);
	if (value == 0)
	{
		printf("两个字符串相同");
	}
	else
	{
		printf("两个字符串不同");

	}
}

6、函数样式,无参函数与有参函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>

//无参函数
int  fun01()
{
	return rand() % 10;//随机0~9的值  
}
int main0401()
{
	srand((size_t)time(NULL));
	fun01();
	return EXIT_SUCCESS;

}  
void BubbleSort(int arr[],int len)//冒泡排序函数版  有参函数
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp; 
			}
		}
	}
	return;
}
int main0402(void)
{
	int arr[] = { 9,1,7,4,2,10,3,8,6,5 };
	BubbleSort(arr, sizeof(arr) / sizeof(arr[0]));
	for (int i = 0; i < 10; i++)
	{
		printf("%d\n", arr[i]);
			
	}
	//void空类型
	int a = 10;
	float b = 20.f;
	//void c = 30;err
	//void类型不可以直接定义数据  void类型可以作为函数的返回值类型 表示没有返回值
	return 0;

}

void fun02()
{
	printf("hello world\n");
	return 0;
}
void main(void)//无参无反函数
{
	printf("今天11月7日\n");
	return 0;
}

7、函数的声明、定义与调用

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>


//函数声明
//extern int add01(int a, int b);
//int add01(int a, int b);//可以省略extern 意义同上
int add01(int, int);//意义同上
//extern int add(int a, int b);//调用其他文件中写过的函数

//函数定义
//函数调用

int main()
{
	add01(10, 20);

}

int add01(int a, int b);//函数定义 只能定义一次
{
	return a + b;

}

8、exit函数

exit(0)函数出现在主程序中与return 0效果等同,出现在子函数中终止子函数的执行,继续执行其他函数。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
#include<math.h>


void fun03()
{
	printf("hello world1\n");
	printf("hello world1\n");
	printf("hello world1\n");
	exit(0);//终止程序执行
	return;//跳出子函数继续执行主函数
	printf("hello world1\n");
	printf("hello world1\n");
	printf("hello world1\n");

}
int main06()
{
	fun03();
	printf("hello world1\n");
	printf("hello world1\n");
	exit(0);//终止程序执行
	return -1;//终止程序执行,效果同上
	printf("hello world1\n");
	printf("hello world1\n");
	printf("hello world1\n");

	return 0;
}
原文链接:,转发请注明来源!