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;
}