//设置关机程序,如设计关机程序,如果不输入"我是猪",则电脑就关机
//思路:C语言中,关机程序是system("shut dowm - s - t 60");
//(shutdowm -s -t是固定格式,60是在60s内关机)
//然后给出提示让用户输入xx,用scanf接收并创建新的字符串arr用于与你想让用户输入的字符串比较;
//if判断输入字符串是否正确,判断字符串用strcpt(arr,"xxx")==0,
//正确就执行程序system("shut down -a"),错误继续提示用户输入,直到正确或时间消耗完毕关机
//注:比较字符串要用strcmp,引用头文件#string.h
// 使用system要引用头文件#stdlib.h
//#include<stdio.h> //#include<string.h> //#include<stdlib.h> //int main() //{ // char arr[20] = { 0 }; // system("shutdown -s -t 60"); // jixu: // printf("请输入我是猪,否则电脑将会关机\n"); // scanf("%s", arr); // if (strcmp(arr ,"我是猪")==0)//引用头文件#include<string.h> // { // system("shutdown -a");//引用头文件#include<strlib.h> // } // else // { // goto jixu; // } // return 0; //}
42.函数
//函数是代码的某一部分,里面有一个或一些代码,完成某项特殊命令,具有相对独立性
//一般都有输入函数和返回值
//库函数的意义:引用头文件,使之一些大量重复出现的命令直接引用,不需要反复编程
// 比较方便学习网站为 https://cplusplus.com/reference/
// https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5
// 注:第一个为默认为英文,速度稍微快一些,第二个默认为中文(将zh删掉即为英文),速度较慢
//函数主要有以下几类
// IO函数(输入输出函数):printf scanf getchar putchar
// 字符串操作函数:strcmp(字符串比较) strlen(字符串长度) strcpy(拷贝字符串)
// 字符操作函数:toupper(小写转大写函数)
// 内存操作函数:memcpy memcmp memsrt
// 时间日期函数:time
// 数学函数:sqrt(开平方)pow(求次方)
// 其他库函数:
//将arr2的值拷贝到arr1中去 strcpy
//#include<stdio.h> //#include<string.h> //int main() //{ // char arr1[20] = { 0 }; // char arr2[10] = "hello"; // strcpy(arr1, arr2);//拷贝字符串,将arr2的字符串放在arr1中,strcpy(arr1,arr2) // printf("arr1=%s\n", arr1);//打印字符串要用%s 打印结果为arr1=hello // return 0; //}
//memset----替换函数
//#include<stdio.h> //#include<string.h> //int main() //{ // char arr[] = { "hello shabi" }; // memset(arr, 'changa', 5); // printf("%s\n", arr);//打印结果为 changa shabi // return 0; //}
43.函数
//库函数的并不能解决所有的事,有些奇奇怪怪的相类似问题,如收录的学生信息(分类,类似表格)
// 也是大量重复数据,但是无法被使用,要自定义函数
//自定义函数必须要有函数名,返回类型,函数参数
//ret_type fun_name(para1, *) //{ // statement; //} //函数名为fun_name,返回类型为ret_type,函数参数为para1
//实例:写一个函数,用该函数实现比较两个数的最大值
//#include<stdio.h> //int main() //{ // int a = 0; // int b = 0; // printf("请输入两个整数\n"); // scanf("%d %d", a b); // int max = get_max(a,b);//括号内的ab表示传的实参 // printf("您输入两个数中最大的数为:%d\n", max); // return 0; //} //int get_max(int x, int y) 第一个int表示返回类型为int型,括号内的int表示参数类型,需要返回函数,如果不需要,返回类型为void xy表示传的形参(形参形式可以与实参不一致) //{ // int z = 0; // x > y ? z;//三目操作符,x>y?z // return z;//需要返回z //}
//实例2:写一个数,交换两个整数类型的值
//注:此处代码错误,错误原因如下
// main函数中的a,b的两个原来空间和Swap重新创建的空间不同
// 所以,无论如何操作Swap内部的a,b(即xy)
// 都不会影响原来空间的ab
//#include<stdio.h> //int main()//可以按f10调试 //{ // int a = 10; // int b = 20; // printf("交换前:a=%d b=%d\n", a, b);//交换前:a=10 b=20 // Swap(a, b);//此处可以按f11进入循环内调试 // printf("交换后:a=%d b=%d\n", a, b);//交换后:a=20 b=10 // return 0; //} //void Swap(int x, int y) //{ // int z = 0; // z = x; // y = z; // x = y; //}
//正确代码如下----不写函数版
//#include<stdio.h> //int main() //{ // int a = 10; // int*pa = &a;//将a的地址赋予pa,*表示pa是地址 // *pa = 20;//将20放在pa地址里,*表示解引用pa,此时才能操作将20放pa地址里 // printf("%d\n", a); // return 0; //}
//正确代码如下----函数版
//#include<stdio.h> //int main()//可以按f10调试 //{ // int a = 10; // int b = 20; // printf("交换前:a=%d b=%d\n", a, b);//交换前:a=10 b=20 // Swap(&a, &b);//将a,b的地址传到函数内才可对ab操作,用&a,&b // printf("交换后:a=%d b=%d\n", a, b);//交换后:a=20 b=10 // return 0; //} //void Swap(int *pa, int *pb)//*pa*pb表示pa,pb是指针 //{ // int z = 0; // z = *pb;//解引用pb,并把pb的值给z // *pa = z;//解引用pb,并把z的值给pa // *pb = *pa;//解引用pa,pb,并把pa的值给pb //}//void不需要返回类型
//关于函数形参和实参:上面已经使用过,如main函数里面的Swap(a,b)的ab为实参
//void Swap(int*pa,int*pb)的pa,pb为形参
//形参只是一种格式,可以用任意符号表示,但是必须有,实参不能变
//45.函数的调用
//传值调用&传址调用
//当是传值调用时,只是将值传递过去,改变形参,不会影响实参
//当是传址调用时,将地址传递过去,可以通过改变形参来影响实参
//例:用函数求100~200之间的素数
//#include<stdio.h> //int main() //{ // int i = 0; // int count = 0; // for (i = 100; i < 201; i++) // { // if (is_prise(i) == 1) // { // printf("%d ", i); // count++; // } // } // printf("\ncount=%d\n", count); // return 0; //} //int is_prise(int n)//该函数只是传递值并返回值,不需要改变原函数i的值 //{ // int m = 0; // for (m = 2; m < n; m++) // { // if (n % m == 0) // return 0; // } // return 1; //}
//写一个函数打印1000~2000之间的闰年
#include<stdio.h> int main() { int y = 0; for (y = 1000; y <= 2000; y++) { if (is_run_year(y) == 1) { printf("%d ", y); } } return 0; } int is_run_year(int m) { return ((m % 4 == 0 && m % 100 != 0) || (m % 400 == 0)); }