为了防止忘记,将以前学习C语言时敲得代码放到了博客上,以防忘记。需要的同学也欢迎来温习一下C语言
一、限定符
#include<stdio.h>
#include<iostream>
#include<string>
int main01()
{
using namespace std;
//限定符:extern const volatile(防止编译器优化) register(建议将变量定义在寄存器中)
//volatile 数据类型 变量名(在编译过程中,防止编译器将代码优化)
//register 数据类型 变量名
volatile int sum;//防止编译器优化sum的值
int i;
for (i = 0; i < 10; i++)
{
sum = i;
}//如果不要求sum的值实时显示或者可用,就不用volatile
//在不使用volatile时,上面的程序就会整合为sum = 9;
system("pause");
return (0);
}
//‘\0’和0在内存中是0 0==‘\0'
//'0'在内存中以ASCII码存储
int main02()
{
using namespace std;
double a = 3.1415;
int b = 10;
printf("%10.4lf\n", a);// %m.nlf格式中 m代表打印时所显示的数字总宽度,n代表小数点后数字个数(输出: 3.1415)
printf("%d\n", b); //(输出:10)
printf("%5d\n", b);//%5d代表总宽度为5格(输出: 10)
printf("%-5d\n", b);//%-5d代表打印数字的总宽度为5格,并且左对齐(输出:10 )
printf("%d\05n", b);//%05d代表打印数字的总宽度为5格,空白部分用0补齐 注意!!左对齐和补0不能同时用!!!!!!
//(输出:00010)
char c = 'a';
char d, e;
//ctrl+K+F可以将代码整齐化
d = getchar();//在键盘中获取一个字符赋给d
//在用getchar()输入字符时,要注意!! getchar()也会在键盘中录入回车!!
//所以在需要连续录入键盘中输入的字符时需要再加一个getchar()用来吃掉回车,此时的getchar()不需要赋值给变量!!!
cout << d <<endl;
e = getchar();
d = getchar();
cout << d << endl;
system("pause");
return (0);
}
二、运算符
#include<stdio.h>
#include<iostream>
int main04()//求一个数的个位十位百位千位
{
using namespace std;
int sum = 1234;
int a = sum % 10;
int b = sum / 10 % 10;
int c = sum / 100 % 10;
int d = sum / 1000 % 10;
cout << "个位: " << a << endl;
cout << "十位: " << b << endl;
cout << "百位: " << c << endl;
cout << "千位: " << d << endl;
//逗号运算符(15级运算符)最终的结果是最后一个表达式的结果
int app = 1;
int aii = 2;
int v = (a++, b++, a + b, 10, 200, a + b);
system("pause");
return (0);
}
//类型转换
int main05()
{
using namespace std;
int z = 3;
double n = z;//(隐式转换)将整形变量a转换成double型
//类型的转换 所需的类型和给的类型不匹配,需要转换。
//强制转换(格式):(需要转换的类型) 原来的数据类型;
printf("%d\n", (int)3.14);
printf("%d\n", 3.14);//在没有强制转换时,输出的值并不是整形
printf("%lf\n",(double)z);
//注意!!赋值语句 = 两边的数据类型要尽量匹配,如果不匹配就进行强制转换
//注意!!在使用强制转换类型时尽量不要将类型向内存小的方向转换!!!
//强制转换宗旨是:数据不丢失
system("pause");
return (0);
}
三、选择结构&循环结构
// 选择结构:if, if else, if...elseif...else,三目运算符, switch...case...break;
#include<stdio.h>
#include<iostream>
#include<string.h>
int main06()
{
using namespace std;
int a = 2;
int b = 3;
int sum = 0;
int num = 0;
scanf("%d", &num);
sum = num % 4;
//if条件语句
if (3 == a)//常量尽量写左边,切记后面不要加分号,分号是空指令!!!
{
printf("a==b\n");
}//大括号级尽量加上,
//如果不加大括号,当if括号中为真时,系统则默认执行离if最近的那条语句。
//if括号中的语句只有真假之分,真:非零数 假:0
//只有两种结果的情况用if else结构 并且条件互斥
if (3 == a)
{
printf("a==b\n");
}
else
{
printf("a!=b\n");
}
//多种条件可以用if...else if ...else ... 语句
//如果结果有多种 但是不确定是哪一种 而且每个结构是互斥的
if (0 == sum)
{
printf("余数0\n");
}
else if (1 == sum) //记住 else和if之间有空格
{
printf("余数1\n");
}
else if (2 == sum)
{
printf("余数2\n");
}
system("pause");
return (0);
}
//三目运算符
int main07()
{
int a_1 = 10;
int b_1 = 20;
int c_1 = 0;
//求两个数的最大值
if (a_1 > b_1)
{
c_1 = a_1;
}
else
{
c_1 = b_1;
}
//也可以用三目运算符来写(与用if else 条件语句等价!!
//三目运算符格式:
//" 变量1 比较远算符(<, >, <=, >=, ==, != ) 变量2 ? 变量1 : 变量2; "
//如果判断条件成立则输出变量1,否则输出变量2
c_1 = a_1 > b_1 ? a_1 : b_1;
}
//嵌套的三目运算符
//a<b?a:c<d?a:d -->a<b?a:(c<d?a:d)
//如果a<b为真,则输出a 如果为假,则继续判断(c<d?a:d)
int main08()
{
using namespace std;
int num = 0;
int a = 0;
scanf("%d", &num);
a = num % 4;
char d;
switch (a)//()里面的判断条件只能是整数!!!
//在编译时,编译器会检测switch语句()中的变量值
//并且在语句中的每一个case语句中按顺序寻找与()中变量值匹配的那条语句
//所以一定要加上break,不然程序会将匹配成功的那条语句下面所有的case语句下的代码全部执行
{
case 0://a = 0时
printf("0\n");
break;//跳出switch语句
case 1:
printf("1\n");
break;//跳出switch语句
case 2:
printf("2\n");
break;//跳出switch语句
case 3:
//或者可以写成下面这样:
//default: 默认
//default的作用相当于else,只能在最后一个匹配条件处使用,
printf("3\n");
break;//跳出switch语句
}
//swit()也可以判断字符,因为字符在内存中时以ASCII码的形式储存的
d = getchar();
switch (d)
{
case 'A':
printf("ok\n");
break;
case 'B':
printf("hello\n");
break;
case 'C':
printf("ok\n");
break;
default:
break;
}
system("pause");
return (0);
}
//循环语句:while
int main09()
{
using namespace std;
//while循环求解1+2+3...+100
int i = 1;
int sum = 0;
while (i <= 100)//注意!!后面没有分号!!!! 如果加了分号,会陷入死循环
//()中是循环停止的条件
{
sum = sum + i;
i++;
}
printf("sum=%d", sum);
system("pause");
return (0);
}
//for循环语句
//格式;for(A ;B; C)
// {
// 条件满足后执行的代码
// }
// A 不一定存在, 当A B C都没有时,程序陷入死循环 B不存在时条件默认为真, 程序也会陷入死循环
//A -->表达式只会执行一次
//B -->执行条件
//C -->执行步阶(一条语句)
//执行顺序:A-->B(条件)-->{D}-->C-->B(条件)-->{D}-->C
int main10()
{
using namespace std;
int i = 1;
int sum = 0;
for (i = 1; i <= 100; i++)//后面不加分号!!!
{
sum = sum + i;
}
printf("sum=%d", sum);
system("pause");
return (0);
}
//嵌套循环
int main11()
{
using namespace std;
int i = 0;
int j = 0;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
printf("i=%d j=%d\n", i, j);
}
}
system("pause");
return (0);
}
// 跳转语句
//break语句:跳出switch或者离break最近的循环
//continue语句:结束本次循环
//goto语句:无条件跳转
int main12()
{
using namespace std;
int i = 0;
for (i = 0; i < 5; i++)
{
if (i == 2)
{
break;//运行到这里时会跳出整个循环
//continue;运行时会结束i=2时的循环,接着往下循环
}
printf("i=%d", i);
}
goto END;//无条件跳转到END的标识
printf("aaaaa\n");
END:
printf("bbbbbbb\n");
system("pause");
return (0);
}
四、一维数组
#include<stdio.h>
#include<iostream>
#include<string.h>
#define _CR_SECURE_NO_WARNINGS
//数组:把若干个相同数据类型的变量存放在一块连续的内存中, 数组属于构造类型:将基本类型构建成的类型
//数组的最小单位时元素 数组中每一个元素是变量
//数组按照数组元素的类型不同,可以分为:数值数组、字符数组、指针数组、结构数组、
//定义数组:
//数据类型 数组名[数组中元素个数]
//定义数组时,[]里的值不能为变量,只能为常量
//使用数组时,[]里可以为变量,也可以有运算符对变量进行运算
//数值数组不能整体操作 只能对数组中的元素操作
//数组中的每一个元素是变量,可以被改变赋值
int main13()
{
using namespace std;
int arr[10];
int i = 0;
for (i = 0; i < 10; i++)
{
printf("%d", arr[i]); // 输出数组中的各个元素的值
}
printf("\n");
//一维数组初始化的三种方法
int arr_1[10] = { 1,2,3,4,5,6,7,8,9,10 };//常规数组初始化的方法
int arrr_2[] = { 1,2,3,4,5, };//[]中没有定义数组长度,系统会自动按照元素的个数定义数组长度
int arr_3[10] = { 1,2,3,4,5,6, };//[]中定义的数组元素长于初始化{}中元素的长度,则其余位置用0补
//实际上数组中元素情况{1,2,3,4,5,6,0,0,0,0}
int arr_4[10] = { [5] = 15 };//只给arr_4[5]赋值为15,其余元素为0; 此种方法不常用
//数组的大小 sizeof(数组名)
printf("%d", sizeof(arr_1));
//求数组元素的个数
int n = sizeof(arr_1) / sizeof(arr_1[0]);
cout << n << endl;
//优化:打印数组各个元素的值
for (i = 0; i < (sizeof(arr_1) / sizeof(arr_1[0])); i++)//用这种方法来确定数组元素个数可以防止数组长度改变时要更改长度量
{
cout << arr_1[i];
}
cout << endl;
system("pause");
return (0);
}