C/语/言/自/学/笔记

Hello World!
#include <stdio.h>

int main()
{
	printf("Hello World!\n");
	return 0;
}
程序框架(学习函数之前都要用到)
#include <stdio.h>

int main()
{

    return 0;
}
变量
  • 变量定义的一般形式
    <类型名称> <变量名称>;
int a;
int a,b;
  • 变量名称(标识符)
    标识符只能由字母、数字、下划线组成
    数字不可以出现在首位
    C语言的关键字不可用
  • 变量赋值
 int a=b; //将b的值赋予a,与 b=a 不同。
  • 变量初始化
    <类型名称> <变量名称> = <初始值>;
int a=0;
int b=0;
int a=0,b=0;
常量
const int AMOUNT = 100; // const修饰符 C99!
scanf 输入
  • 出现在" "中的内容是需要输入的内容
int a=0;
int b=0;
scanf("%d %d",&a,&b); //输入 1 2
scanf("%d,%d",&a,&b); //输入 1,2
数据类型
整数
int a;
scanf("%d",&a);
printf("%d",a); // %d说明后面有一个整数要输出在这个位置上
浮点数
  • printf(%m.nf) 控制小数位数
    https://blog.csdn.net/xjp_xujiping/article/details/55818048
  • 当浮点数和整数放在一起运算时,C会将整数转换成浮点数,然后进行浮点数的运算。
  • 示例:
printf("%f",10/3*3.0); // 9.000000
printf("%f",10/3*3); // 0.000000
printf("%f",10/3.0*3); // 10.000000
  • 法一:
int a=10;
printf("%d",a/3); // 3 商取整
printf("%f",a/3); // 结果永远是0.000000
printf("%f",a/3.0); // 3.333333
  • 法二:
double a=10; //或 float a=10; 相当于a=10.0
scanf("%lf",&a); //输入时需注意 %lf
printf("%f",a/3); // 相当于 10.0/3
(%)p
  • 地址
运算符
算术运算
  • % 取余
  • = 优先级最低
    结合关系:自右向左。
  • 单目取负/单目不变
    结合关系:自右向左。
int a*+b; // 自右向左
int a*-b; // 自右向左
sizeof
  • 给出某个类型或变量在内存中所占据的字节数

sizeof(int)
sizeof(i)

&
  • 获得变量的地址,它的操作数必须是变量
  • 地址的大小是否与 int 相同取决于编译器
  • 数组

相邻的数组单元之间的地址永远相差4
&a == a == &a[0]

关系运算
  • ==
  • !=
  • 优先级:比算术运算低,比赋值运算高
  • == / != 的优先级比其他的低
  • 当两个值的关系符合关系运算符的预期时,关系运算的结果为1,否则为0
printf("%d\n",1==2); // 1
printf("%d\n",1>2); // 0
printf("%d\n",1<2); // 1
逻辑运算
  • ! 逻辑非

!a

  • && 逻辑与
    若左边是false则不进行右边运算
  • || 逻辑或
    若左边true则不进行右边运算
条件运算
  • ? 自右向左
  • , 优先级最低
    将,右边的值作为结果
int i;
i=1+1,2+2; // i=2
i=(1+1,2+2); // i=4

( i=0, j=10; i < j; i++, j-- )

复合赋值
  • a++ 是a+1以前的值
  • ++a 是a+1以后的值
示例1
int a=1;
int b=1;
printf("a++=%d,a=%d\n", a++, a); // a++值为1,a值为2 
printf("++b=%d,b=%d\n", ++b, b); // ++b值为2,b值为2 
示例2
int a=1;
int t1=a++; // t1=1, a=2
int t2=++a; // t2=3, a=3
判断
if-else
  • if (条件成立) {

    } else {

    }

switch-case
  • switch (<控制表达式>) {
    case <常量>:

    break;
    case <常量>:

    break;
    default:

    break;
    }

  • <控制表达式><常量>只能是整数结果

循环
while循环
  • while (条件成立) {

    }

do-while循环(注意 ; )
  • do
    {
    <循环体语句>
    } while (<循环条件>);

for循环
  • for (<初始动作>;<循环条件>;<循环体>) {

    }

其他
  • goto

goto out ;

out : //放在需要结束的循环外面

随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(0));
  int a=rand();
  printf("%d\n",a);
  return 0;
}
  • 示例:猜数游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
  srand(time(0));
  int number=rand()%100+1; //可通过 x%n 来限定随机数的范围
  int count=0;
  int a;
  printf("猜一个1到100之间的数。\n");
  do{
  	  count++;
	  printf("第%d次猜测:",count);
	  scanf("%d", &a);
	  if( a>number ){
	  	printf("你猜的数大了。\n");
	  }else if( a<number ){
	  	printf("你猜的数小了。\n");
	  }
  } while(a!=number);
  printf("恭喜你猜对了!");
  
  return 0;
}
数组
一维数组
  • 有效范围 [ 0 ,数组大小-1]
  • 集成初始化时的定位 C99!
int a[10]={
    [0]=2,[2]=3,6
}; //其他位置补零
二维数组
  • 例:int a[3][5] 为3行5列的矩阵
for	( int=0; i<3; i++ ) {
    for ( j=0; j<5; j++ ) {
        a[i][j]=i*j;
    }
} //二维数组的遍历
  • 二维数组的初始化
    列数必须给出,行数可以省略,若省略表示补零
int a[][5]={
    {0,1,2,3,4},
    {2,3,4,5,6}, //最后的 , 可以存在
}; //也可不带{}
数组大小

sizeof(a)/sizeof(a[0])

搜索
  • 结构体
#include <stdio.h>

int amount[]={1,5,10,25,50};
char *name[]={"penny","nickel","dime","quarter","half-dollar"};

struct{
	int amount;
	int *name;
} coins[]={
    {1,"penny"},
	{5,"nickel"},
	{10,"dime"},
	{25,"quarter"},
	{50,"half-dollar"}
};

int search(int key,int a[],int len)
{
	int ret=-1; //没找到k时输出-1
	for(int i=0;i<len;i++)
	{
		if(key==a[i])
		{
			ret=i;
			break;
		}
	}
	return ret;
}

int main()
{
	int k; //需要查询的值
	scanf("%d",&k);
	for(int i=0;i<sizeof(coins)/sizeof(coins[0]);i++)
	{
		if(k==coins[i].amount){
			printf("%s\n",coins[i].name);
			break;
		}
	}
  
  return 0;
}
  • 二分搜索(有序数组)
int search(int key,int a[],int len)
{
    int ret=-1; //没找到k时输出-1
    int left=0;
    int right=len-1;
    while(right>left)
    {
       int mid=(left+right)/2;
       if(a[mid]==k)
       {
         ret=mid;
         break;
       } else if(a[mid]>k
       {
         right=mid-1;
       } else{
         left=mid+1;
       }
    }
    return ret;
}

int main()
{
    int k; //需要查询的值
	scanf("%d",&k);
    ......
    return 0;
}
数组排序
  • 选择排序
  • 冒泡法
函数
  • 调用函数

<函数名>(参数值) //()不可省略

  • 声明

<函数类型> <函数名>(参数值) ;

  • void f(void);
    表示此函数不接受参数
  • void f();
    表示f函数的参数未知
数学问题
猜数
  • 二分法
    100以内的数最多猜7次可得正确答案
最大公约数
  • 辗转相除法

求a、b的最大公约数
1、若b==0,计算结束,最大公约数是a
2、否则,计算c=a%b,让a=b,b=c
3、回到步骤一

指针
指针与数组
int a[]={0};
int *p=a;

p==&a[0]
*p==a[0]
p[0]==a[0]

  • 函数参数表中的数组实际上是指针,即a[ ]可以用*a代替,以下四种函数原型是等价的:

int sum(int *ar, int n);
int sum(int *, int);
int sum(int ar[], int n);
int sum(int [], int);

  • 数组变量是const的指针,不能被赋值
其它
  • 将Dev C++改为C99标准,参考 https://blog.csdn.net/artechtor/article/details/1788699
  • 若使用 Dev C++ 4.9.9.2
system("pause"); // 在程序运行完成后,窗口还能留下
  • ANSI C
    只能在代码开头定义变量
    不支持“//”注释

持续学习ing…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值