C语言基础知识
c01-cFirstLearning
01-printHello.c
#include <stdio.h>
int main()
{
printf("Hello World\n");//\n 换行,转义字符
printf("Hello World\n");//\n 换行,转义字符
return 0;
}
//c语言的源代码、源程序
//编译成可执行文件才可以运行
//gcc 01-printHello.c 进行编译得到可执行文件
//./a.out 运行可执行文件 ./a.exe windows下
02-printChinese.c
#include <stdio.h>
int main()
{
printf("中文\n");
return 0;
}
03-printChinese-gb18030.c
#include <stdio.h>
int main()
{
printf("??\n");
return 0;
}
04-printChinese-gb2312.c
#include <stdio.h>
int main()
{
printf("??\n");
return 0;
}
05-gb232.c
#include <stdio.h>
int main()
{
printf("ÄãºÃ Öйú ÖÐÎÄ\n");
return 0;
}
#include <stdio.h>
int main(){
printf("┏━━━━━━━━━━欢迎使用学生管理系统━━━━━━━━━━┓\n");
printf("┃ 1、学生登录 ┃\n");
printf("┃ 2、管理员登录 ┃\n");
printf("┃ 0、退出 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
}
/*
制表符
─ ━│┃╌╍╎╏┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗ ┘ ┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷ ┸ ┹ ┺ ┻ ┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╪╫╬ ═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╔╗╝╚╬═╓╩┠┨┯┷┏┓┗┛┳⊥﹃﹄┌╮╭╯╰╳
*/
07-xiegangMaohao/_.c
#include <stdio.h>
int main()
{
printf("Hello World\n");
printf("I say:\"hello!\"\n"); //\" 表示",转义字符
printf("\\n\n"); // \\表示\,转义字符
}
c02-cBaseLearning
00.c
#include <stdio.h>
int main(){
printf("Hello\n");
printf("World \n");
printf("abcd\n");
printf("\nHello\n 1\
World\n");// \n 换行符
}
01printAllType.c
#include <stdio.h>//std标准,io输入输出。标准输入输出头文件
int main(){
printf("hello world\n你好中国\n");//\n转义字符
printf("\n*************\n");//字符串
printf("200\n");//字符串:由数字、字母和各种标点与下划线等组成的序列,可以是0个或多个字符组成,ascii码表中的字符或者汉字等组成。
printf("1+1\n");//字符串
//使用printf打印特定类型的数据
printf("1+1=%d\n",1+1);//%d占位符,格式字符串,%d打印十进制整数,分正负,有符号int类型整数
printf("10+100=%d\n",10+100);//%d占位符,格式字符串
printf("%d\n",1000*100);//%d占位符,格式字符串
printf("%d---%d\n",1000*100,1+2);
printf("%d,%d\n",1000*100);//第二个占位数对应的数据不确定,此行代码有警告
printf("%d,%u\n",0xFFFFFFFF,0xFFFFFFFF);//%d有符号数,%u无符号数
printf("%d,%d\n",0x80000000,0x7FFFFFFF);//int 32位,有符号数的范围是-2147483648~2147483647
printf("%u,%u\n",0,0xFFFFFFFF);//unsigned int 32位,无符号基本型数的范围是0~4294967295
printf("%ld,%ld\n",0x8000000000000000,0x7FFFFFFFFFFFFFFF);//long 64位,有符号数的范围是-9223372036854775808~9223372036854775807
//%ld有符号长整型数
//每种类型所占的字节数
printf("sizeof(short):%lu\n",sizeof(short));//%lu无符号长整数,sizeof 计算给定的类型占用多少字节
printf("sizeof(int):%lu\n",sizeof(int));//%lu无符号数
printf("sizeof(long):%lu\n",sizeof(long));//%lu无符号数
printf("sizeof(long long):%lu\n",sizeof(long long));//%lu无符号数
printf("sizeof(float):%lu\n",sizeof(float));//%lu无符号数
printf("sizeof(double):%lu\n",sizeof(double));//%lu无符号数
printf("8.4/2.0=%f\n",8.4/2.0);//%f输出单精度小数用的占位符,默认小数点后6位
printf("8.4/2.0=%.1f\n",8.4/2.0);//.1表示小数点后保留1位
printf("8.4/2.0=%g\n",8.4/2.0);//%g输出浮点数时自动选择小数点后的位数
printf("8.4/2.0=%e\n",8.4/2.0);//%e输出科学计数法
printf("8.4/2.0=%lf\n",8.4/2.0);//%lf输出双精度小数
float f = 897.332458722222222;//单精度浮点数变量f
double d = 897.332458722222222;//双精度浮点数变量d
printf("%.14f\n",f);
printf("%.14lf\n",d);
printf("%c\n",'A');//%c输出char类型字符
printf("%c\n",66);//编号是66的ascii字符
printf("%c\n",'A'+32);//转小写
printf("%d\n",'A');//ascii编号
printf("%c\n",'0');//字符0
printf("%d\n",'0');//字符0的ascii编号48
printf("%d\n",0);//数值0
printf("|%c|\n",0);//ascii码是0的字符,空字符
printf("|%c|\n",32);//ascii码是32的字符是空格
printf("|%c|\n",' ');//打印空格
printf("\"\\n\n");//\n转义字符
printf("20\n");
printf("%d\n",20);//十进制。%d表示十进制整数 占位符/格式字符串
printf("%X\n",10);//十六进制0-9、A-F
printf("%x\n",10);//十六进制a-f
printf("%o\n",20);//八进制
printf("%d\n",0x41);//把十六进制数0x41转换成十进制整数打印出来
printf("%c\n",0x41);//把十六进制数0x41转换成字符打印出来
printf("%c\n",0103);//把八进制数101转换成字符打印出来
return 0;
//c语言的源代码、gcc编译得到到可执行文件,运行可执行文件
}
02print_int.c
#include<stdio.h>
int main(){
int num1 = 10; // int类型变量num1,字面常量10,num1赋值为10
short num2 = 20; // short类型变量 num2,字面常量20
long num3 = 30; // long类型变量 num3,字面常量30
long long num4 = 40; // long long类型变量num4
//变量名的命名规则:只能使用字母、数字、下划线,不能以数字开头,区分大小写,不能使用关键字
//用户标识符:变量名、函数名、数组名、结构体成员等统称为用户标识符
// 打印结果
printf("num1: %d\n", num1);
printf("num2: %hd\n", num2);//short类型用%hd
printf("num3: %ld\n", num3);
printf("num4: %lld\n", num4);
num1 = 20;
printf("num1: %d\n", num1);
printf("num1+num2=%d\n", num1+num2);
return 0;
}
03int_printf_scanf.c
#include <stdio.h>
int main()
{
int num1 = 0;
short num2 = 0;
// 程序运行后,给变量输入一个值
printf("请输入一个整数:");
scanf("%d", &num1);//&num1表示将变量num1的地址传给scanf函数(后面会详细讲&符号),//scanf中不要使用\n
printf("请输入一个短整数:");
scanf("%hd", &num2);//scanf中不要使用\n
// 打印结果
printf("num1: %d,\nnum2: %hd\n", num1, num2);
printf("和是:%d\n", num1 + num2);
return 0;
}
04print_float.c
#include <stdio.h>
int main()
{
float num1 = 3.14; // float类型变量num1
double num2 = 1.2345; // double类型变量num2
// 打印结果
printf("num1: %f\n", num1);
printf("num2: %lf\n", num2);
num1 = 20.14;//改变了变量的值
num2 = 100.2357; //改变了变量的值
// 打印结果
printf("num1: %.2f\n", num1);// 保留小数点后两位
printf("num2: |%10.2lf|\n", num2);// 保留小数点后两位,宽度为10, 右对齐
printf("num2: |%-10.2lf|\n", num2);// 保留小数点后两位,宽度为10,左对齐
return 0;
}
05float_scanf.c
#include <stdio.h>
int main()
{
float num1 = 3.5; // float类型变量num1
double num2 = 1.2345; // double类型变量num2
// 程序运行后,给变量输入一个值
printf("请输入两个小数:");
scanf("%f%lf", &num1, &num2);//scanf中不要使用\n
// 打印结果
printf("num1: %f\n", num1);
printf("num2: %lf\n", num2);
return 0;
}
06sizeof.c
#include <stdio.h>
int main(){
int a = 10;
printf("%lu\n", sizeof(a));//4,sizeof(a)含义:a空间占用的字节数,%lu表示输出无符号长整型
printf("%lu\n", sizeof(int));//sizeof(int)含义:int类型空间占用的字节数
return 0;
}
07define.c
#include <stdio.h>
#include <math.h>
//字面常量
// 符号常量PI,后面不要有分号
#define PI 3.1415926
int main() {
printf("PI = %f\n", PI);
printf("PI = %.2f\n", PI);// 保留小数点后两位
//PI = 3.14;// 错误,不能对符号常量赋值
printf("半径是100的圆的面积: %.2f\n", PI*100*100);
printf("半径是100的圆的面积: %.2f\n", M_PI*100*100);//M_PI是原生的圆周率,系统定义好的。包含对应了头文件<math.h>就可以使用了
return 0;
}
08print_char.c
#include <stdio.h>
int main() {
printf("%c\n",'a');//输出a,%c是字符类型
printf("%d\n",'a');//输出97,%d是整型,输出ascii码
//'0'是字符,48是整型
printf("%c\n",'0');//输出0字符0
printf("%d\n",'0');//输出48
printf("%d\n",0);//输出0数值0
printf("%d\n",'A');//输出65
printf("d:\\mingw64\n");
printf("I say:\"Hello,World!\"\n");
return 0;
}
09char_scanf.c
#include <stdio.h>
int main()
{
char ch1 = 'A'; // char类型变量
char ch2 = 65; // 使用ASCII码值来初始化字符变量
// 程序运行后,给变量输入一个值
printf("请输入两个字符:");
scanf("%c%c", &ch1, &ch2); // 输入两个字符时不要有空格,//多输入的数据会放到键盘缓冲区里,后面再有scanf函数调用输入字符时,会先从键盘缓冲区中读取数据
// 打印结果
printf("ch1: %c\nch2: %c\n", ch1, ch2);
printf("请输入第三个字符:");
scanf("%c", &ch1);//在%c前面加一个空格,可以忽略前面的空白字符(包括换行符)
printf("ch1:%c~~~~~\n", ch1);
//清空缓冲区所有数据
while (getchar() != '\n');//后面会详细讲
printf("请输入第四个字符:");
scanf("%c", &ch1);
printf("ch1:%c======\n", ch1);
return 0;
}
10/n/t/r.c
#include<stdio.h>
int main(){
// 换行符 \n
printf("我没有换行");
printf("我开始换行啦\n");//回车换行
//\r 表示光标移到当前行的开头
printf("hello,World!\r");//光标移到行首不换行
printf("1234\n");
printf("12\b34\n");//\b 退格键
//制表位 对齐作用(tab键作用)
printf("Name\t\tAge\tCity\n");
printf("Johnggggggg\t25\tNew York\n");
printf("Emily\t\t28\tLondon\n");
printf("Tom\t\t30\tParis\n");
/*
多行注释
多行注释
多行注释
*/
return 0;
}
c03-cOperatorDetailExplanation(1)
01+-_.c
#include <stdio.h>
int main() {
int a = 5;
int b = 3;
//1、加法运算符(+)
int c = a + b;
printf("c=%d\n", c);
//2、减法运算符(-)
c = a - b;
printf("c=%d\n", c);
//3、乘法运算符(*)
c = a * b;
printf("c=%d\n", c);
return 0;
}
02int+float.c
#include <stdio.h>
int main(){
int a = 10;
float b = 2.5;
//printf("%d\n",a + b);//有警告,类型不一致,打印结果不正确。
printf("%f\n",a + b);
printf("%g\n",a + b);
printf("%e\n",a + b);
printf("%e\n",0.007);
printf("%E\n",0.007);
printf("%f\n",2e5);
printf("%e\n",1234e3);
a = 20;
b = 30;//隐式类型转换,自动类型提升,从int转为float
//printf("%d\n",a + b);//有警告,类型不一致,打印结果不正确。
printf("%f\n",a + b);
printf("%g\n",a + b);
printf("%e\n",a + b);
return 0;
}
// char--->short ----> int ----> long ----> float ---> double
03div.c
#include <stdio.h>
int main(){
//4、除法运算符(/):当两个操作数都是整数时,结果也是整数,结果如果有小数则丢弃。不进行四舍五入。
//属于整除运算。
//至少有一个操作数是浮点数时,结果才是浮点数,不是整除运算,浮点除法。
int a = 7 / 4;//整除运算
printf("a:%d\n",a);//1
float b = 5 / 4;//整除运算
printf("b:%f\n",b);//1.000000
float c = 5.0 / 4;//浮点数除法
printf("c:%f\n",c);//1.250000
int e = 5 / 4.0;//(隐式自动转换)小数部分会被舍弃
printf("e:%d\n",e);//1
int d = 6 / 4.0;////浮点数除法.(隐式自动转换)小数部分会被舍弃,也不进行四舍五入。
printf("d:%d\n",d);//1
float g = 5 / (float)4;//(强制转换)(显式自动转换)
printf("g:%f\n",g);//1.250000
float f = (float)(5 / 4);//(强制转换)(显式自动转换)
printf("f:%f\n",f);//1.000000
int k = 5,t = 4;//按数学方式计算k/t的实际结果,需要使用强制类型转换
float h = (float)k / t;//(强制转换);
printf("h:%f\n",h);
h = k / (float)t;//(强制转换);
printf("h:%f\n",h);
h = 1.0 * k / t;// 不能写成 k / t * 1.0;
printf("h:%f\n",h);
int x = 'a';//(隐式自动转换)
printf("x:%d\n",x);
printf("x+1:%c\n",x + 1);
printf("'a'+2:%c\n",'a' + 2);
return 0;
}
04%.c
#include <stdio.h>
// 5、取模运算符(%)(取余运算):两个整数相除,取余数,取模运算符
//小数不能做取模运算
int main()
{
int a = 5 % 3;
printf("a:%d\n", a);//2
int b = 3 % 5;
printf("b:%d\n", b);//3
//float c = 5.0 % 3.0;//error:%只能是整数参与运算
// printf("c:%f\n", c);
/*
多行注释
*/
return 0;
}
05use%.c
/*
1、获取一个三位整数中的每一位数字(拆分数字、分解数字)
例如:235 :个位5,十位3 百位2
235 / 1 % 10 得个位5
235 / 10 % 10 得十位3
235 / 100 % 10 得百位 2
2、计算判断奇偶数
XX % 2
3、判断一个数能被另一个数整除
X % Y
*/
#include <stdio.h>
int main()
{
int num = 875;
printf("num = %d\n", num);
// 方法1:获取一个整数中的每一位数字,使用%10
int a2 = num % 10;// 个位
int b2 = num / 10 % 10 ;//十位
int c2 = num / 100 ;//百位
printf("%d\n%d\n%d\n\n", a2, b2, c2);
// 方法2:获取一个整数中的每一位数字,不使用%
int a = num / 100;//百位
int b = (num - a * 100) / 10;//十位
int c = num - a * 100 - b * 10;//个位
printf("%d\n%d\n%d\n\n", a, b, c);
// 方法3:获取一个整数中的每一位数字,使用%10和%100
int a1 = num % 10;//个位
int b1 = num % 100 / 10;// 十位
int c1 = num / 100;//百位
printf("%d\n%d\n%d\n\n", a1, b1, c1);
return 0;
}
//水仙花数:一个三位数的各位数字的立方和等于该数本身。
//例如:153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
//自幂数:一个n位数,它的每个位上的数字的n次幂之和等于它本身。
06++=.c
//06-自增并赋值
//++、-- 是自增、自减操作符,操作符只能用来对变量进行操作的。单目运算符
#include <stdio.h>
int main()
{
int num1 = 5;
// ++在变量的右边,后边
int a = num1++;//<======> int a = num1;num1 = num1 + 1;
printf("a:%d\n",a);//5
printf("num1:%d\n",num1);//6
int num2 = 5;
// ++在变量的左边,前面
int b = ++num2;//<======> num2 = num2 + 1;int b = num2;
printf("b:%d\n",b);//6
printf("num2:%d\n",num2);//6
}
07++print.c
//07-自增并打印
#include <stdio.h>
int main(){
int num1 = 5;
printf("~~~~~num1:%d\n", num1++);//先打印,后自增//5
printf("------num1:%d\n", num1);//6
int num2 = 5;
printf("num2:%d\n", ++num2);//先自增,后打印//6
printf("num2:%d\n", num2);//6
}
08+++.c
//08-自增并做算术运算
#include <stdio.h>
int main()
{
int num1 = 5;
printf("(num1++) + 3:%d\n", num1++ +3);//8
printf("num1:%d\n", num1);//6
int num2 = 5;
printf("++num2 + 3:%d\n", ++num2 + 3);//9
printf("num2:%d\n", num2);//6
//当++在变量前时,先自增运算,再使用这个变量做其它操作
//当++在变量后时,先使用这个变量做其它操作,再自增运算
int a = 10, b = 20;
int c = a++ + ++b;//c=(10)+(21)=31
printf("a:%d\nb:%d\nc:%d\n", a, b, c);//a:11, b:21, c:31
}
09gcc++warning.c
//09-不同编译器结果可能不同
#include <stdio.h>
int main(void)
{
int a = 5;
int b = (++a) + (a++) + (++a) + a;
// (6) + (6) +(8) +(8)
// a:6(6) (6) a:7 a:8 (8) (8)
//不同的编译器可能有不同的解析方式,结果可能不同。
printf("a=%d\n", a);
printf("b=%d\n", b);
a = 5;
int t1 = ++a;
int t2 = a++;
int t3 = ++a;
int t4 = a;
int t = t1 + t2 + t3 + t4;
printf("t=%d,a=%d\n", t,a);
int n = 1;
printf("%d %d\n",n++, ++n + ++n + ++n); //输出1 12或者其它结果,不同编译器可能不同
printf("%d\n",n);
return 0;
}
10=.c
#include <stdio.h>
int main()
{
int a = 10;//赋值运算
int b = (a = 20) + 30;//a=20赋值运算的结果是变量a的值
printf("a = %d, b = %d\n", a, b);//20,50
short c = 32767;//-32768~32767
c += 1;//c = c+1 //溢出:表示整数溢出,结果为-32768
printf("%hd\n", c);//-32768
printf("%d\n", (int)c);//-32768
printf("~~~~~%hu\n", c);//32768 //unsigned short c:%hu表示无符号的short类型0~65535
unsigned short cc = 32767;
cc++;
printf("%hu\n", cc);//32768
int d = 32767;
d += 1;
printf("%d\n", d);//32768
int e = 2000000000;
e += 2000000000;
printf("%d\n", e);//-294967296//溢出 //有符号数打印
printf("%u\n", e);//4000000000//无符号数打印unsigned int :%u表示无符号的int类型0~4294967295
int x = 10;
printf("%d\n", x);
int y = x = 100;//可以连写
printf("%d,%d\n", x,y);
//int t = u = v = w = 200;//error:u,v,w都是变量名,变量没有定义,不能连写
return 0;
}
11_=.c
#include <stdio.h>
int main()
{
int x = 10;
int y = 20;
int a = x > y;//关系运算的运算结果只有0或1:假、不对、错、不成立用0,真、对、成立用1
printf("x>y:%d\n", a);//0
int b = x < y;
printf("x<y:%d\n", b);//1
int c = x == y;
printf("x==y:%d\n", c);//0
int d = x >= y;
printf("x>=y:%d\n", d);//0
int e = x != y;
printf("x!=y:%d\n", e);//1
int f = x <= y;
printf("x<=y:%d\n", f);//1
printf("10>8>6:%d\n", 10 > 8 > 6);
//0,不能按数学方式计算,都是大于号,从左向右计算
printf("10==10<6:%d\n", 10 == 10 < 6);
//0,先算10<6,再算==
return 0;
}
12getMax.c
//10-键盘输入两个整数,打印输出较大的数及其平方
#include <stdio.h>
#include <math.h>
int main() {
int a = 0,b = 0;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
printf("两个数中的最大数是:%d\n", a > b ? a : b );//如果a>b成立,结果是冒号左边的a,否则结果是冒号右边的b
printf("两个数中的最大数的平方是:%d\n", a < b ? b*b : a*a );
printf("两个数中的最大数的平方是:%d\n", a > b ? a*a : b*b);
printf("两个数中的最大数的10次方是:%f\n", (a > b) ? pow(a,10) : pow(b,10));
printf("两个数中的最大数的10次方是:%g\n", a > b ? pow(a,10) : pow(b,10));
printf("两个数中的最大数的3次方是:%f\n", (a > b) ? pow(a,3) : pow(b,3));
printf("两个数中的最大数的3次方是:%g\n", a > b ? pow(a,3) : pow(b,3));
printf("%f\n", sqrt(100));
printf("%g\n", sqrt(100));//开方,默认是开2次方
printf("%f\n", sqrt(2));
printf("%g\n", sqrt(2));
return 0;
}
13getMax2.c
//10-键盘输入两个整数,求出较大的整数,如果输入小数或者非数字,要进行判断
#include <stdio.h>
#include <math.h>
int main() {
int a = 0,b = 0;
char c = 0;
printf("请输入两个整数(使用空格分隔):");
int n = scanf("%d%d%c",&a,&b,&c);//scanf()函数返回值是从键盘实际读取到数据的变量的个数
printf("a = %d,b=%d,c=%d,c=%c\n", a,b,c,c);
printf("n = %d\n", n);
n == 3?(c != '\n' ? printf("输入数据错误!\n"):printf("两个数中的最大数是:%d\n", a > b ? a : b )):printf("-----输入数据错误!!\n");
n != 3?printf("-----输入数据错误!!\n"):
(c == '\n' ? printf("两个数中的最大数是:%d\n", a > b ? a : b ):printf("输入数据错误!\n"));
n == 3?(c != '\n' && c != ' ' && c!='\t' ?printf("~~~~输入数据错误!\n"):printf("~~~两个数中的最大数是:%d\n", a > b ? a : b )):printf("~~~~----输入数据错误!!\n");
n == 3?(c == '\n' || c == ' ' || c=='\t' ?printf("~~~两个数中的最大数是:%d\n", a > b ? a : b ):printf("~~~~输入数据错误!\n")):printf("~~~~----输入数据错误!!\n");
return 0;
}
14oddEven.c
#include <stdio.h>
int main() {
printf("偶数\n");
printf("%s","偶数\n"); //%s是字符串的意思
int a = 0;//不初始化时,a的是值是不确定的。一般不推荐使用。要初始化。
printf("请输入一个整数:");
//方法1
scanf("%d",&a);
printf("~~~~~%d是%s\n",a, (a % 2 == 0?"偶数":"奇数"));
//%s是字符串的意思,%d是整数的意思。
//方法2
//scanf("%d",&a);
a % 2 == 0 ? printf("%d是偶数\n",a):printf("%d是奇数\n",a);
a % 2 != 0 ? printf("%d是奇数\n",a):printf("%d是偶数\n",a);
//方法3
//scanf("%d",&a);
a % 2 ? printf("%d是奇数\n",a):printf("%d是偶数\n",a);
//在c语言中,非0数据都为真,视为成立,0为假,视为不成立
//方法4:非法数据进行了判断
scanf("%d",&a) == 1 ? printf("%d是%s\n",a, (a % 2 == 0?"偶数":"奇数")):printf("输入数据错误!!\n");
scanf("%d",&a) == 1 ? printf("%d是%s\n",a, (a % 2 != 0?"奇数":"偶数")):printf("输入数据错误!!\n");
scanf("%d",&a) == 1 ? printf("%d是%s\n",a,(a % 2?"奇数":"偶数")):printf("输入数据错误!!\n");
return 0;
}
c04-cOperatorDetailExplanation(2)
00-hw.c
#include <stdio.h>
int main(){
// float a;
// printf("请输入一个浮点数:\n");
// scanf("%f",&a);
//方法一
// int b = a*1000;
// int flag = b>0?1:-1;//标志变量,正数1,负数-1
// b = b*flag;
// b%10>=5?b+=10:b;
// b/=10;
// a = b/100.0;
// a = a*flag;
//方法二
// a = (int)(a*100 + (a>0?0.5:-0.5))/100.0;
// printf("%.2f\n",a);
// printf("%g\n",a);
//方法三
float n = 0;
printf("输入一个浮点数:");
scanf("%f", &n);//1.23678
int t1 = n * 1000;//t1 = 1236
int t = t1 - t1 / 10 * 10;// t = t1 % 10;//t = 6
printf("t:%d\n", t);
t = n > 0 ? t : -t;
t1 = t >= 5 ? t1 / 10 + (n > 0 ? 1 : -1) : t1 / 10;
float r = t1 / 100.0;
printf("%f->%f\n", n, r);
return 0;
}
01&&.c
//01-判断成年男性
#include <stdio.h>
//逻辑运算符:&& 逻辑与
// 成年男性
int main()
{
// 年龄>=18
int age = 20;
// 性别 男:M 女:F
char gender = 'M';
int flag = (age >= 18) && (gender == 'M');//逻辑与&&:两个条件都成立,结果为真
printf("%s\n", flag == 1 ? "是成年男性" : "不是成年男性");
printf("%s\n", flag ? "是成年男性" : "不是成年男性");
//非0数据为真,表示成立;0数据为假,表示不成立
printf("%s\n", (age >= 18) && (gender == 'M') ? "是成年男性" : "不是成年男性");
(age >= 18) && (gender == 'M') ? printf("是成年男性\n") : printf("不是成年男性\n");
return 0;
}
02__.c
#include<stdio.h>
//֧支付方式
int main(){
char pay = 't';//'w'微信 'z'支付宝
int flag = (pay == 'w') || (pay == 'z');//逻辑或:||,或者,表示有一个成立结果就成立
printf("%s\n",flag==1?"线上支付成功":"线上支付失败");
printf("%s\n",flag?"线上支付成功":"线上支付失败");
printf("用%s支付\n",(pay == 'w')?"微信":(pay == 'z'?"支付宝":"现金方式"));//与下面写法相同
printf("用%s支付\n",pay == 'w'?"微信":pay == 'z'?"支付宝":"现金方式");
printf("用%s支付\n",pay == 'z'?"支付宝":pay == 'w'?"微信":"现金方式");
return 0;
}
03!.c
#include<stdio.h>
//逻辑非 ! 取反运算,把真变成假,把假变成真,单目运算符
int main(){
int result = 2 > 1;
printf("%d\n",result);//1
//反对
int flag = !result;//逻辑非
printf("flag:%d\n",flag);//0
int f = !200;//200是一个非0数据,表示真,成立
printf("!200:%d\n",f);//0
f = !0;//0表示假,不成立
printf("!0:%d\n",f);//1
f = !'\0';//'\0'表示假 ascii值为0的字符为空字符NULL
printf("!'\\0':%d\n",f);//1
f = !'0';//'0'表示真,ascii码是48,非0数据表示真,成立
printf("!'0':%d\n",f);//0
printf("!2>3:%d\n",!2>3);
//0
//先计算逻辑非,再计算比较.按优先级高级进行计算
printf("!(2>3):%d\n",!(2>3));
//1
//先计算比较,再计算逻辑非
printf("(!2)>3:%d\n",(!2)>3);
//0
//先计算逻辑非,再计算比较
return 0;
}
04leapYear.c
#include <stdio.h>
//判断闰年,以下两个条件,有一个成立,就是闰年
//1.能被4整除,但不能被100整除
//2.能被400整除
int main(){
int year = 2000;//1904;//2000,1900,1901
int flag = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
printf("%d年%s闰年\n",year,flag==1?"是":"不是");
printf("%d年%s闰年\n",year,(year%4 == 0 && year%100 != 0)||(year%400==0)?"是":"不是");
return 0;
}
05shortCircuiting..c
//05-短路运算规则
//对于逻辑与&&和逻辑或||来说,当第一个操作数能够确定整个表达式的值时,就不会计算第二个操作数。
#include <stdio.h>
int main(){
int a = 1;
int b = 2;
int c = 3;
c = a > 3 || (b = 4);// 0||4 ---->1
printf("a = %d\n", a);//1
printf("b = %d\n", b);//4
printf("c = %d\n", c);//1
c = 0;
c = (a > -3) || (b = 40);//对于逻辑或来说,第一个操作数1>-3成立,整个表达式的结果就是成立的,所以第二个操作数不会被计算,这就是短路运算规则
printf("a = %d\n", a);//1
printf("b = %d\n", b);//4, 说明第二个操作数没有被计算
printf("c = %d\n", c);//1
c = a > 3 && (b = 400);//对于逻辑与来说,第一个操作数1>3不成立,结果已经确定了,所以第二个操作数不会被计算,这就是短路运算规则
printf("a = %d\n", a);//1
printf("b = %d\n", b);//4, 说明第二个操作数没有被计算
printf("c = %d\n", c);//0
c = (b = 400) && (a = 3);//没有短路运算
printf("a = %d\n", a);//3,说明第二个操作数被计算了
printf("b = %d\n", b);//400
printf("c = %d\n", c);//1
a = 1;
c = (b = 0) && (a = 3);//短路运算
printf("a = %d\n", a);//1,短路运算
printf("b = %d\n", b);//0
printf("c = %d\n", c);//0
return 0;
}
06_____.c
//06-左移右移运算符
#include<stdio.h>
//左移、右移运算符
int main(){
//左移
int a1 = 4;
int b1 = a1 << 3;
printf("b1:%d\n",b1);//32
int a5 = 1073741824;
int b5 = a5 << 2;
printf("b5:%d\n",b5);//0
int a4 = 24;
int b4 = a4 >> 3;
printf("b4:%d\n",b4);//3
//右移:有符号数右移,符号位不变,高位补符号位
int a2 = -1073741824;//int范围:-21亿多~21亿多
int b2 = a2 >> 3;
printf("b2:%d\n",b2);
int a6 = -1;
int b6 = a6 >> 20;
printf("b6:%d\n",b6);
//-1的二进制为11111111111111111111111111111111
//无论右移多少位,都为11111111111111111111111111111111
unsigned int a3 = 3373741824;//无符号数右移,高位补0, unsigned int 范围0~42亿多
unsigned b3 = a3 >> 3;
printf("b3:%u\n",b3);
b3 = a3 >> 31;
printf("b3:%u\n",b3);
int aaa = 0xFFFFFFFE;
int bbb = aaa >> 2;
printf("bbb:%d\n",bbb);
printf("bbb:%X\n",bbb);
return 0;
}
07bitOperation.c
//07-按位与或非异或运算
#include<stdio.h>
// 位操作符
int main(){
//1、按位与 &
int a1 = 3;
int b1 = 5;
int c1 = a1 & b1;//a1 && b1 计算原理不同
printf("c1:%d\n",c1);
//2、按位或
int a2 = 3;
int b2 = 5;
int c2 = a2 | b2;//a1 || b1 计算原理不同
printf("c2:%d\n",c2);
//3、异或操作
int a4 = 3;
int b4 = 5;
int c4 = a4 ^ b4;
printf("c4:%d\n",c4);
//4、按位取反
int a3 = 3;//有符号整数,分正负
int b3 = ~a3;////有符号整数,分正负
printf("b3:%d\n",b3);//-4
printf("b3:%u\n",b3);//4294967292
unsigned int b33 = ~a3;//无符号整数,不分正负
printf("b33:%u\n",b33);//4294967292
printf("b33:%d\n",b33);//-4
return 0;
}
08swap.c
//08-交换两个变量的值
#include <stdio.h>
// 交换
int main()
{
int a = 100;
int b = 200;
printf("交换前:a = %d b = %d\n", a, b);
// 方法一
int t = a;
a = b;
b = t;
printf("交换后:a = %d b = %d\n", a, b);
// 方法二
a = 100;
b = 200;
a = a + b;//300
b = a - b;//100
a = a - b;//200
printf("交换后:a = %d b = %d\n", a, b);
a = -100;
b = 200;
a = a + b;//100
b = a - b;//-100
a = a - b;//200
printf("交换后:a = %d b = %d\n", a, b);
// 方法三
a = 100;
b = 200;
a = a ^ b; // 用其它二进制直接验证:110 ^ 010 = 100
b = a ^ b; // 用其它二进制直接验证:100 ^ 010 = 110
a = a ^ b; // 用其它二进制直接验证:100 ^ 110 = 010
printf("交换后:a = %d b = %d\n", a, b);
return 0;
}
09(int).c
//09-强制类型转换
#include<stdio.h>
//强制转换
int main(){
int a = 10;
float b = 3.84;
int c = 0 ;
c = b;//隐式转换:自动把float类型转换成了int型
printf("隐式转换:c:%d\n",c);
printf("b:%f\n",b);
//float 强制转换位int
c = (int)b;//显式转换:手动把float类型转换成了int型
printf("显式转换:c:%d\n",c);
printf("b:%f\n",b);
//相加后强制转换
c = (int)(a+b);
printf("c:%d\n",c);
int x = 30;
printf("%d\n",x/4);
printf("%f\n",(float)x/4);//此时要得出正确结果,就需要使用强制类型转换
float y = 30.2;
printf("%d\n",(int)y % 4);
return 0;
}
10,.c
//10-逗号运算符
#include<stdio.h>
//逗号表达式
int main(){
//表达式:在c中,表达式是用来计算值的。
//什么是表达式:由c的运算符和运算对象组成。
int a = 1, b = 2, c = 3;
//逗号表达式
int d = (a++, b++, ++c, a + b + c); //d=XXX 赋值表达式 ,括号中的是逗号表达式
printf("a=%d\n",a);//a=2
printf("b=%d\n",b);//b=3
printf("c=%d\n",c);//c=4
printf("d=%d\n",d);//d=9
a = 1,b = 2,c = 3;//语句:语句是用来控制程序运行的
printf("~~~%d\n",(a = 1, b = 2, c = 3));
d = a++, b++, ++c, a + b + c;//等号优先级高,先计算等号
printf("a=%d\n",a);//a=2
printf("b=%d\n",b);//b=3
printf("c=%d\n",c);//c=4
printf("d=%d\n",d);//d=1
//1+1;
a = 1, b = 2, c = 3;//语句:语句是用来控制程序运行的
printf("%d\n",(d = a++, b++, ++c, a + b + c));//等号优先级高,先计算等号
printf("a=%d\n",a);//a=2
printf("b=%d\n",b);//b=3
printf("c=%d\n",c);//c=4
printf("d=%d\n",d);//d=1
return 0;
}
11question.c
//11-提问的问题.c:我想问那个短路运算规则,与运算&&第一个表达式为假,但后面有或运算的时候怎么办
//(A && B || C)
//A如果为假,B不会执行,C要执行。
#include<stdio.h>
int main(){
int a = 2,b = 0,c = 0;
(a = 0) && (b = 5) || (c = 10);//&&有短路运算,A为false,B不会执行,C要执行
printf("a= %d ,b = %d,c = %d\n",a,b,c);//a=0,b=0,c=10
a = 2,b = 0,c = 0;
(a = 20) || (b = 5) && (c = 10);//||有短路运算,A为true,B不执行,C也不执行
printf("a= %d ,b = %d,c = %d\n",a,b,c);//a=20,b=0,c=0
a = 2,b = 0,c = 0;
(a = 20) || ((b = 5) && (c = 10));//||有短路运算,A为true,B不执行,C也不执行。同上
printf("a= %d ,b = %d,c = %d\n",a,b,c);//a=20,b=0,c=0
a = 2,b = 0,c = 0;
((a = 20) || (b = 5)) && (c = 10);//||有短路运算,A为true,B不执行,C执行
printf("a= %d ,b = %d,c = %d\n",a,b,c);//a=20,b=0,c=10
}
c05-if-else-switch-for-while-do-while
01if.c
//01-if第一种格式
#include<stdio.h>
// if的第一种格式:单分支结构
int main(){
//定义一个年龄
int age = 27;
//判断
if(age >= 18) {
printf("我可以上网吧玩游戏啦\n");
printf("哈哈哈\n");
}
printf("时间过的真快啊\n");
return 0;
}
02isLeapYear.c
//01-if第一种格式
#include<stdio.h>
//判断闰年
int main(){
int year = 0;
printf("请输入年份:");
scanf("%d",&year);
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){
printf("%d是闰年!\n",year);
}
if(!((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))){
printf("%d不是闰年!\n",year);
}
return 0;
}
03isOddEven.c
//03-判断奇偶性
#include<stdio.h>
//判断奇偶性
int main(){
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
//判断奇偶性
if(num % 2 == 0){
printf("%d是偶数\n",num);
}
if(num % 2 != 0){
printf("%d是奇数\n",num);
}
if(num % 2 == 1 || num % 2 == -1){
printf("%d是奇数\n",num);
}
if(num % 2){//非0就是真,此时真就是1或者-1
printf("%d是奇数\n",num);
}
if(!(num % 2 == 0)){
printf("%d是奇数\n",num);
}
if(!(num % 2)){
printf("%d是偶数\n",num);
}
return 0;
}
04if_else.c
//04-if的第二种格式
#include <stdio.h>
// if的第二种格式
int main()
{
int age;
printf("请输入您的年龄:");
scanf("%d", &age);
// 判断年龄
if (age >= 18)
{
printf("恭喜您,您成年啦\n");
printf("请这边购票\n");
}
else
{
printf("小朋友,你还没成年\n");
printf("可以免费游玩\n");
}
printf("祝您玩的愉快\n");
return 0;
}
05isOddEven.c
//05-判断奇偶性双分支
#include<stdio.h>
//判断奇偶性
int main(){
int num = 0;
printf("请输入一个数字:\n");
scanf("%d",&num);
//方法一
if(num % 2 == 0){
printf("%d是偶数\n",num);
}else{
printf("%d是奇数\n",num);
}
//方法二
if(num % 2 == 1 || num % 2 == -1){
printf("%d是奇数\n",num);
}else{
printf("%d是偶数\n",num);
}
//尝试写出其它判断方法,并比较哪种方法更简单
return 0;
}
06if_else_if.c
//06-if的第三种格式
#include <stdio.h>
// if的第三种格式
int main()
{
int score = 0;
printf("请输入一个成绩(0~100):\n");
scanf("%d", &score);
printf("~~~~~~\n");
// 方法一
if (score > 100 || score < 0)
{
printf("数据不合法!!!\n");
}
else if (score >= 90)
{
printf("奖励自行车一辆\n");
}
else if (score >= 80)
{
printf("变形金刚一个\n");
}
else if (score >= 70)
{
printf("游乐场游玩一天\n");
}
else if (score >= 60)
{
printf("黄冈试卷一套\n");
}
else
{
printf("皮带炒肉丝\n");
}
printf("***********\n");
// 方法二:分支结构嵌套
if (score > 100 || score < 0)
{
printf("数据不合法!!!\n");
}
else if (score >= 80)
{
if (score >= 90)
{
printf("奖励自行车一辆\n");
}
else
{
printf("变形金刚一个\n");
}
}
else
{
if (score >= 60)
{
if (score >= 70)
{
printf("游乐场游玩一天\n");
}
else
{
printf("黄冈试卷一套\n");
}
}
else
{
printf("皮带炒肉丝\n");
}
}
// 练习:方法三:补充完整以下代码
/*
if (score > 100 || score < 0)
{
printf("数据不合法!!!\n");
}
else if (score >= 60){
_____补充完整代码______________
}
else{
______补充完整代码_____________
}
......
......
*/
return 0;
}
07switch.c
//07-switch格式
#include <stdio.h>
// switch
int main()
{
int num = 0;
printf("输入数字1-7:\n");
scanf("%d", &num);
// switch
switch (num)
{
case 1:
printf("星期一\n");
break;
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期日\n");
break;
default:
printf("输入数字错误\n");
}
return 0;
}
08caseFallthrough.c
//08-case的穿透性
#include <stdio.h>
// 输入月份1-12,输出季节
// case穿透性
int main()
{
int month = 0;
printf("输入月份1-12:\n");
scanf("%d", &month);
switch (month)
{
//冗余代码,可以去掉,使用switch穿透性,去掉冗余代码
case 3:
case 4:
case 5:
printf("Spring\n");
break;
case 7:
case 6:
case 8:
printf("Summer\n");
break;
case 9:
case 10:
case 11:
printf("Autumn\n");
break;
case 12:
case 1:
case 2:
printf("Winter\n");
break;
default:
printf("您输入的月份有误,请重新输入\n");
}
// 输入一个成绩,0-100,输出等级A(>=90)、B(>=80)、C(>=70)、D(>=60)、E(<60)
int score = 0;
printf("输入一个成绩,0-100:\n");
scanf("%d", &score);
if (score < 0 || score > 100)
{
printf("您输入的成绩有误,请重新输入\n");
return 0; // 结束当前函数,不执行下面的代码
}
switch (score / 10)
{ // 使用score/10,取整,会使得case情况变少,简化代码
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("E\n");
}
return 0;
}
09forPrint1_10.c
//09-for输出1-10
#include <stdio.h>
int main(){
int i = 1;
for(;i <= 10;i++){///循环三要素:初始条件、循环条件、迭代条件。变量i的初始值是1,循环条件是i<=10,迭代条件是i++。
//循环变量的变化:初值、终值、步长。
printf("%02d:hello world\n",i);
}
printf("for-end:%d\n",i);
for(int i = 10;i >= 1;i--){
printf("%d\n",i);
}
//打印1-10
for(int i = 100;i <= 109;i++){
printf("%d\n",i-99);
}
//打印1-10
for(int i = -100;i <= -91;i++){
printf("~~~%d\n",i+101);
}
//打印1-10
for(int i = 0;i <= 9;i++){
printf("%d\n",i+1);
}
return 0;
}
0printPerfectNumber.c
//0-输出10000以内的完数
#include <stdio.h>
int main()
{
int n, i, sum = 0;
for (int n = 2; n <= 10000; n++)
{
sum = 0;
for (i = 1; i < n; i++)
{
if (n % i == 0)
{
sum = sum + i;
}
}
if (sum == n)
{
printf("%d是完数,%d=", n,n);
for(i=1;i<n;i++){
if(n%i==0){
printf("%d+",i);
}
}
printf("\b \n");
}
}
return 0;
}
10forPrint1_100sum.c
//10-for输出1-100累加和
#include <stdio.h>
int main(){
long long s = 0;//累加和变量
// s = s+1;
// s = s+2;
// s = s+3;
// //.......
// s = s+100;
// printf("for end:s=%d\n",s);
// s = s+1+2+3+4+......+100;
for(int i = 1;i <= 100;i++){//初值、终值、步长
printf("i=%d,s=%lld\n",i,s);
s = s + i;//累加和:0+1+2+3+4+......+100
printf("i=%d,s=%lld\n\n",i,s);
}
printf("for end:s=%lld\n",s);
return 0;
}
11forPrint1_100EvenSum.c
//11-for输出1-100偶数和
#include <stdio.h>
int main()
{
// 1-100偶数和与奇数和
//方法一
int s = 0,t = 0;
for(int i = 1;i <= 100;i++){
if(i % 2 == 0){
s = s + i;//偶数和
}
else{
t += i;//奇数和
}
}
printf("偶数和:s=%d\n",s);
printf("奇数和:t=%d\n",t);
//方法二
s = 0,t = 0;
for (int i = 2; i <= 100; i += 2)
{
s = s + i; // 偶数和
t = t + (i - 1);//奇数和
}
printf("~~~~~偶数和s=%d\n", s);
printf("~~~~~奇数和t=%d\n", t);
//方法三
s = 0,t = 0;
for (int i = 1; i <= 100; i += 2)
{
s = s + (i+1); // 偶数和
t = t + i;//奇数和
}
printf("偶数和s=%d\n", s);
printf("奇数和t=%d\n", t);
//方法四
s = 0,t = 0;
for (int i = 1; i <= 50; i++)
{
s = s + i*2; // 偶数和
t = t + i*2-1;//奇数和
}
printf("偶数和s=%d\n", s);
printf("奇数和t=%d\n", t);
return 0;
}
12printDataCount.c
//12-统计满足条件的数字的个数
/*
需求:键盘录入两个整数,表示一个范围。
统计这个范围中
既能被3整除,又能被5整除的整数有多少个?
*/
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int count = 0; // 计数器
printf("请输入表示范围的两个整数:");
scanf("%d%d", &a, &b);//30 80//90 10
//方法一
// if (a < b)
// {
// for (int i = a; i <= b; i++)
// {
// if (i % 3 == 0 && i % 5 == 0)
// {
// printf("%d ", i);
// count++; // 计数器加1
// }
// }
// }
// else //a > b
// {
// for (int i = a; i >= b; i--)//for(int i = b;i <= a;i++)
// {
// if (i % 3 == 0 && i % 5 == 0)
// {
// printf("%d ", i);
// count++; // 计数器加1
// }
// }
// }
// 方法二
if (a > b)
{ // 此代码用来保证a小于b.如果a>b就交换a和b的值,保证a小于b.
int t = a;
a = b;
b = t;
} // 用来保证a小于b
for (int i = a; i <= b; i++)
{
if (i % 15 == 0)
{
printf("%d ", i);
count++; // 计数器加1
}
}
printf("\n在%d到%d范围内,既能被3整除,又能被5整除的整数有%d个。\n", a, b, count);
return 0;
}
13printFoldCount.c
//13-打印折纸的次数
/*
需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),
假如我有一张足够大的纸,它的厚度是0.1毫米。
请问,我对折折叠多少次,可以折成珠穆朗玛峰的高度?
*/
#include <stdio.h>
int main(){
float n = 0.1;
int count = 0;//计数器
while (n < 8844430)
{
n = n * 2;
printf("n=%.2f\n",n);
count++;
}
printf("count=%d\n",count);
//用for实现以上功能
float f = 0.1;
int count2 = 0;
for(;f < 8844430;)
{
f *= 2;//f=f*2
printf("for:f=%.2f\n",f);
count2++;
}
printf("count2=%d\n",count2);
return 0;
}
14do_whileOddSum.c
//14-使用do...while循环求1~100奇数和
#include <stdio.h>
int main()
{
int i = 1;
int t = 0;
// 方法一
do
{
if (i % 2 != 0)
{
t += i; // 奇数和
}
i++;//++i;
} while (i <= 100);
printf("1~100奇数和是:%d\n", t);
// 方法二
i = 1;
t = 0;
do
{
t += i; // 奇数和
i += 2; // i = i + 2;
} while (i <= 100);
printf("1~100奇数和是:%d\n", t);
// 方法三
i = 1;
t = 0;
do
{
t += i; // 奇数和
} while ((i += 2) <= 100);
printf("1~100奇数和是:%d\n", t);
// 方法四
i = 1;
t = 0;
do
{
if (i % 2 != 0)
{
t += i; // 奇数和
}
//++i;//i++;
} while ( ++i <= 100);//与 i++ <= 100不同,会多加一个101
printf("1~100奇数和是:%d\n", t);
return 0;
}
15InfiniteLoop.c
//15-死循环
#include <stdio.h>
int main() {
// while (1) {
// printf("while\n");
// }
// float i = 1;
// for (;;i *= 1.0001) {//无限循环,for没有写条件,属于成立,即无限循环的一种写法。死循环
// printf("%f\n",i);
// }
// do{
// printf("do--while\n");
// }while(1);
return 0;
}
16-continue.c
//16-continue
#include <stdio.h>
int main()
{
for (int i = 1; i <= 5; i++)
{
if (i == 3)
{
continue;//提前结束本次循环,剩余的循环体语句不再执行,继续开始下一次循环,for执行i++,while和do~while执行循环条件判断
}
printf("吃第%d个包子\n", i);
}
return 0;
}
17-break.c
//17-break
#include <stdio.h>
int main()
{
for (int i = 1;i <= 5; i++)
{
printf("吃第%d个包子\n", i);
if (i >= 3)
{
break;//跳出循环,提前结束循环
}
}
return 0;
}
18guessNumberGame.c
//18-猜数字小游戏
/*
《游戏说明》
1、系统生成一个1~100之间的随机数,命名:rn
2、用户输入一个数字,命名:num
3、比较两者的大小,输出三种结果。
您猜大啦
您猜小啦
您猜对啦
4、如果猜错了,可以一直猜,直到猜中为止
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
// srand(time(NULL));
// // // 随机数种子,不使用time(NULL)的话每次运行程序,
// // //则随机数种子都一样,产生随机数序列也都一样
// int rn = rand();//rand()函数产生一个随机数,返回值是一个随机数
// printf("rn = %d\n", rn);
// rn = rand();
// printf("rn = %d\n", rn);
// rn = rand();
// printf("rn = %d\n", rn);
// rn = rand();
// printf("rn = %d\n", rn);
srand(time(NULL));
int rn = rand() % 100 + 1; // rand() % 100 + 1 产生1-100之间的随机数
// 计算公式:如果要产生[A,B]之间的随机整数,
// 则:rand() % (B - A + 1) + A
// 例如产生及格的成绩分数:60-100分之间的随机整数,
// 则:rand() % (100 - 60 + 1) + 60
// ----> rand() % 41 + 60
int num = 0;
printf("请输入一个你猜的数字(1~100):");
scanf("%d", &num);
while (1)
{
if (num > rn)
{
printf("您猜大了\n");
}
else if (num < rn)
{
printf("您猜小了\n");
}
else
{
printf("恭喜您,猜对了!rn = %d\n", rn);
break;
}
printf("请再输入一个你猜的数字:");
scanf("%d", &num);
}
return 0;
}
//使用rand()函数产生随机数,完成人与电脑进行石头、剪刀、布的游戏
//19-循环打印项目菜单
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num = 0;
while (1)
{
system("clear"); // linux下使用"clear",windows下用"cls" 清屏命令
printf("┏━━━━━━━━━━欢迎使用学生管理系统━━━━━━━━━━┓\n");
printf("┃ 1、学生登录 ┃\n");
printf("┃ 2、管理员登录 ┃\n");
printf("┃ 0、退出 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("请选择编号[0-2]:");
scanf("%d", &num);
if (num == 0)
{
printf("退出系统\n");
exit(0);//退出程序 。return 0 也行,退出函数。exit(0);也行,退出程序。break;也行,跳出循环。
}
else if (num == 1){
printf("学生登录\n");
getchar();//char ch; scanf("%c",ch)//清空键盘缓存区中的一个字符包括回车键
printf("按回车键继续........");
getchar();
}
else if (num == 2){
printf("管理员登录\n");
while(getchar()!='\n');//清空键盘缓存区中的所有字符包括回车键
printf("按回车键继续........");
getchar();
}
else{
printf("输入错误\n");
while(getchar()!='\n');//清空键盘缓存区中的所有字符包括回车键
printf("按回车键继续........");
getchar();
}
}
return 0;
}
/*
单线细线制表符
┌ ┐ └ ┘ ┴ ┬ ├ ┤ ┼ ─ │
单线粗线制表符
┏ ┓ ┗ ┛ ┻ ┳ ┣ ┫ ╋ ━ ┃
粗细线结合制表符
┍ ┎ ┏ ┑ ┒ ┓ ┕ ┖ ┗ ┙ ┚ ┛ ┵ ┸ ┶ ┹ ┺ ┷ ┻ ┭ ┰ ┮ ┱ ┲ ┯ ┳ ┦ ┧ ┥ ┪ ┩ ┨ ┫ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ╀ ╁ ┽ ┾ ╂ ┿ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋
双线制表符
╔ ╗ ╚ ╝ ╩ ╦ ╠ ╣ ╬ ═ ║
单双线结合制表符
╓ ╖ ╙ ╜ ╨ ╥ ╟ ╫ ╢ ╒ ╕ ╘ ╛ ╧ ╤ ╞ ╪ ╡
*/
20armstrongNumber.c
//20-自幂数
#include <stdio.h>
#include <math.h>
// 自幂数:一个n位正整数,它的各位数字的n次方和等于它本身。
// 求出1到输入的正整数之间的所有自幂数
int main()
{
int sxhs = 0, z = 0, sum = 0;
printf("请输入一个正整数:");
scanf("%d", &sxhs);//99999
printf("自幂数如下:\n");
for (int i = 1; i <= sxhs; i++)//
{ // 从1到输入的正整数,依次判断是否为自幂数
// 1、计算i是几位数
z = i;//897
int n = 0; // n表示位数
while (z != 0)
{ // 计算位数
n++; // 位数加1
z /= 10; // 去掉最后一位
}
// 2、计算各位数字的n次方和
z = i;
sum = 0; // sum表示各位数字的n次方和
while (z != 0)
{ // 计算各位数字的n次方和
sum += pow((z % 10), n); // 计算各位数字的n次方和
z /= 10;
}
// 3、判断是否为自幂数
if (i == sum)
{ // 如果等于本身,则输出
printf("%d\n", i);
}
}
return 0;
}
c06-function
00-hw.c
#include <stdio.h>
#include <math.h>
int main()
{
int a = 0;//统计个数,记数器
int b = 1;
while (b <= 999999999)
{
int temp = b;
int c = 0;//总和
int n = 0;//位数
//计算b的位数
while (temp != 0)
{
n++;
temp /= 10;
}
//计算b的各位数的n次方之和
temp = b;
while (temp != 0)
{
c += pow(temp % 10, n);
temp /= 10;
}
//判断是否为自幂数
if (c == b)
{
printf("%d\n", b);
a++;
}
b++;
}
//打印总个数
printf("\n从1~%d之间共有%d个自幂数.\n", b,a);
return 0;
}
01functionDefineCall.c
//01-函数定义和调用
#include <stdio.h>
#include <math.h>
#include <ctype.h>
//函数定义
//定义一个打印n行星号的函数
void printNLinesStar(int n)//打印n行星号,n为参数,形式参数
{ // 定义了有参无返回值的函数
for (int i = 1; i <= n; i++)
{
printf("printNLinesStar:**************\n");
}
}
//定义一个求两个整数和的函数
int getSum(int a,int b)//形参
{ // 定义了有两个参数并有返回值的函数
int sum = a + b;
return sum;//返回值。意味着sum值作为返回值返回给调用者。放到调用函数的栈中,放到调用的地方。
}
//当函数定义在main后面,或者定义在其它文件中时,需要先声明,再调用
void printStar();
//int是main()的返回值类型,与return 0;相对应。
int main()//主函数是程序入口函数
{
//调用函数
printStar();
printf("111111\n");
printStar();
printf("222222\n");
printNLinesStar(3);//3是实参,实际参数,调用函数传参给形式参数n
printf("33333333\n");
printNLinesStar(10);//10是实参,实际参数
printf("\n");
//调用函数
int sum1 = getSum(1, 2);//实参1,2
int num1 = 10;
int num2 = 20;
int sum2 = getSum(num1, num2);
int sum3 = getSum(100, 200) + 400;
printf("%d,%d,%d\n", sum1, sum2, sum3);
printf("%d\n", getSum(1000, 2000));
printf("%d\n", getSum(1.7, 3.4));//有警告
return 0;
}
//定义一个打印三行星号的函数
void printStar()//没有形式参数,无形参,无参,
//void无类型,没有类型
{ // 定义了无参无返回值的函数,无返回值是指函数不会计算出来一个结果。
printf("***********\n");
printf("********\n");
printf("**************\n");
//return ;//可省略
}
02getDaysFunction.c
//02-封装年月获取天数的函数
#include <stdio.h>
//根据给定的年和月返回天数,如果输入的月份有误则返回-1,否则返回天数.编写此函数
int getDays(int year,int month){
switch (month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
//break;
case 4:case 6:case 9:case 11:
return 30;
case 2:
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
return 29;
}
else{
return 28;
}
default:
return -1;
}
}
int main(){
int year = 2000;
int month = 20;
int days = getDays(year,month);
if( days == -1){
printf("输入月份有误~~~\n");
}
else{
printf("%d年%d月有%d天!\n",year,month,days);
}
printf("请输入年和月:");
scanf("%d%d",&year,&month);
days = getDays(year,month);
if( days == -1){
printf("输入月份有误~~~\n");
}
else{
printf("%d年%d月有%d天!\n",year,month,days);
}
return 0;
}
03-ATM.c
#include <stdio.h>
#include <string.h> //字符串处理函数对应的头文件
#include <stdlib.h>//能使用exit(0)退出程序功能
// 全局变量money,在函数外定义,表示余额。
// 在定义时,赋初值。在此之后定义的所有函数中,可以直接使用。
int money = 1000;
// 查询功能
void search_Money()
{
printf("您现在的余额是:%d\n", money);
}
// 存款功能
void save_Money(int save_money)
{
// 存钱
money += save_money;
// 调用查询功能
search_Money();
}
// 取钱
int get_Money(int get_money)
{
if (get_money > money)
{
printf("您的余额不足\n");
return 0; // 返回0,表示失败
}
else
{
money -= get_money;
search_Money();
return 1; // 返回1,表示成功
}
}
void ATMSystem()
{
// 为了保证系统一直运行,采用while死循环
int flag = 1; // 局部变量
int choose = 0;
while (flag)
{
printf("----------------主菜单----------\n");
printf("您好,欢迎来到职坐标银行ATM系统,请选择您的操作:\n");
printf("1、查询余额\n");
printf("2、存款\n");
printf("3、取款\n");
printf("4、退出系统\n");
printf("请输入您的选项【1-4】:");
// 键盘录入
scanf("%d", &choose);
// switch
switch (choose)
{
case 1:
// 查询功能
printf("查询功能\n");
search_Money();
break;
case 2:
// 存款功能
printf("存款功能\n");
int save_money = 0;
printf("请输入您要存的金额:\n");
scanf("%d", &save_money);
save_Money(save_money);
break;
case 3:
// 取款功能
printf("取款功能\n");
int get_money = 0;
printf("请输入您的取款金额:\n");
scanf("%d", &get_money);
int num = get_Money(get_money);
if (num == 1)
{
printf("取款成功\n");
}
else
{
printf("取款失败\n");
}
break;
case 4:
// 退出功能
// printf("退出功能\n");
flag = 0;
printf("欢迎您的再次使用\n");
//exit(0);
break;
default:
printf("您输入的指令有误,请重新输入\n");
break;
}
}
}
int main()
{
// int count = 3;
// int flag = 1;
// while (flag)
// {
// printf("欢迎来到职坐标ATM,请输入您的用户名和密码\n");
// char username[20];
// char password[20];
// // 输入用户名
// printf("请输入用户名:");
// scanf("%s", username);
// // 输入密码
// printf("请输入密码:");
// scanf("%s", password);
// // 验证用户名和密码
// if (strcmp(username, "zhangsan") == 0 && strcmp(password, "123456") == 0)
// {
// printf("登录成功!\n");
ATMSystem();
// }
// else
// {
// printf("用户名或密码错误!\n");
// count--;
// printf("您还有%d次机会", count);
// if (count == 0)
// {
// flag = 0;
// printf("卡被冻结,请联系大仁老师\n");
// }
// }
// }
return 0;
}
04recursiveFunctionFactorial.c
//04-递归函数计算阶乘
#include <stdio.h>
//使用递归函数计算n阶乘
int fac(int n){
if(n == 0 || n == 1){
return 1;
}
return n * fac(n-1);
}
//使用递归函数计算1~n的和
int sum(int n){
if(n == 1){
return 1;
}
return n + sum(n-1);
}
int main(){
printf("%d\n",fac(0));
printf("%d\n",fac(5));
printf("%d\n",sum(5));
printf("%d\n",sum(100));
}
//使用循环和递归都可以解决,但递归的效率更高
//感兴趣的话:汉诺塔问题 经典的递归问题
05printMultiplicationTable.c
//05-打印九九乘法表
#include <stdio.h>
void printf99(){
int i, j;
for(i=1; i<=9; i++){//外层循环控制行数,从1到9,总共9行
for(j=1; j<=i; j++){//内层循环控制每行打印的式子个数,从1到i
printf("%dx%d=%-4d", j, i, i*j);
}
printf("\n");
}
}
int main(){
printf99();
}
//API简写:应用程序编程接口(Application Programming Interface)
//API是计算机程序设计领域中的一个概念,它定义了程序设计人员与计算机硬件、软件、操作系统等交互时,程序员与计算机硬件、软件、操作系统之间的通信协议,即定义了程序员与计算机硬件、软件、操作系统之间的接口。
06globalLocal.c
//06-全局变量与局部变量共存
#include <stdio.h>
int a = 10;
int main()
{
printf("~~~a = %d\n", a);
int a = 20;
printf("---a = %d\n", a);
{
int a = 30;
printf("******a = %d\n", a);
}
printf(".......a = %d\n", a);
{
extern int a;//告诉编译器,a是外部变量,全局变量
printf("******a = %d\n", a);
a = 100;
printf("******a = %d\n", a);
}
printf(".......a = %d\n", a);
{
extern int a;//告诉编译器,a是外部变量,全局变
printf("XXXX******a = %d\n", a);
}
return 0;
}