2021-03-14

C语言

  • pychart
  • 用户交互 pythonweb
  • GUI编程
  • 网络编程

常量、变量、常变量、标识符

常量
  • 字符常量单引号

  • 字符串型常量是双引号

  • 符号常量大写,结尾不用分号,比如: #define PI 3.14(符号常量不占内存,只是一个临时符号,预编译结束后就会消失,大写表示)

转义字符

  1. \n
  2. \t 制表符
变量
  1. 由数字、字母、下划线组成
  2. 不能以数字开始
  3. 不能使用关键字

先定义后使用,跟python不一样 哦

系统根据变量类型分配内存空间的大小

常变量:const int a 不可以对a再赋值

八进制不能直接16进制

%d %o %x

0x85 表示的是16进制

原码

最左边的一位是符号位,0正 ,1负

比如-5 -> 1000 0101,而5 -> 0000 0101

反码

正数的反码是本身,负数的反码 除了符号为其余为数按位取反

-0 的原码是1000 0000 反码是 1111 1111

补码

正数的原反补是本身,负数的补码是反码+1

补码 经过取反加1 得到原码(千万别逆着算回去)

补码运算没毛病
补 码 = 反 码 + 1 补码=反码+1 =+1

补码的意义

  1. 统一了0的编码
  2. 将减法运算变为加法运算
  3. 两个用补码表示的数相加,如果高位进位,则舍弃进位
数据类型
  1. int整型 占4个字节
  2. short int 短整型占2个字节
  3. long int 长整型占4字节
  4. long long int 双长整型占8字节

sizeof(a) 输出a变量的所占字节空间

unsigned 无符号整数

signed 有符号整数 一般默认都是有符号整数

字符型数据 char 1个字节

float 4字节

double 8字节

long double 16字节

二维数组中的一维长度可以省略但是二维不可以

字符串是一串单个字符连起来的,以’\0’结尾

运算符

分为:算数、赋值、比较、逻辑、位运行算符

ps: 5/2=2 在乘除法中可以将某一数*1.0就可以得出正确结果

c语言中真是1,假是0

结构

  1. 顺序结构
  2. 选择结构
  3. 循环结构

条件运算符

表达式1? 表达式2:表达式3

如果表达式1值是真那么就是返回2

如果表达式1为假那么就是返回3

int max = a>=b ?a:b;
	printf("max is %d",max);
switch(name){
    case 'yang':
        printf("I am yang");
        break;
    case 'niu':
		printf("I am niu");
        break;
    default:
        printf("your enter is illeagle");
     	break;
}

润年

(year%40&&year%100!=0)||year%4000

for和while

	int item=1;
	int res=0;//如果不给res赋初值,那么res就是一个随机数
	while(item<=100){
		res += item;
		item++;
	}
	printf("the res is %d",res);
int i;
	int sum = 0;
	for(i=1;i<=100;i++){
		sum+=i;
	}
	printf("the sum of 100 is %d",sum);

素数只能被1和本身整除

int num=0;
	int i=1;
	printf("请输入数字\n");
	scanf("%d",&num);
	for(i=2;i<=num-1;i++){
		if(num%i==0){
			printf("this is 非素数");
			break;
		}else{
			printf("this is 素数");
			break;
		}
	}
//	如果程序非正常结束.应该i=num 
	if (i<num){
	   printf("%d不是素数",num); 
	} 

break跳出本循环,在嵌套循环中跳出最接近它的循环,并且终止

continue跳出本次,开始下一次循环

for(int i=0;i<10;i++){
		if(i%2==0){
			printf("%d是偶数\n",i);
			continue;
            //如果写continue就会打印所有的偶数,break只能写一个偶数就终止了 
		}
	}
goto a;
	printf("111\n");
	printf("222\n");
	a:
	printf("333\n"); 
	//这样直接开始打印333,就不管前面了

数组

在内存中开辟的地址都是连续的

只有在定义的同时才能初始化。如果定义完了再赋初值会报错,因为数组名是一个常量,不能对常量赋初值

还可以局部初始化

int a[10] = {1,2,3,4,5}
printf("sizeof(a) is %d\n",sizeof(a)); 
//--> 这会显示40,因为int占4个字节,一共开辟了十个元素-> 4*10
// 那么数组a的长度就是:sizeof(a) / 4
 
数组名的地址就等于数组首个元素的地址
找出数组中的最大的数c
//找出数组中的最大的数c
int a[10] ={1,2,3,5,6,112,45,4,1};
int max=a[0];//定义一个max去打擂台
for(int i=0;i<10;i++){
    //遍历擂台进行比较
    if(a[i] >= max){
       	max >= a[i];//如果比max大那么就更新
    }
}

实现数组的反转
int a[6] = {1,2,3,4,5,6};
int i=0;
int temp;
int length = sizeof(a) / sizeof(int)-1;//数组末尾元素
while(i<length){
    temp = a[i];
    a[i] = a[length];
    a[length] = temp;
    i++;
    length--;
}
for (int i=0;i<6;i++){
    printf("%d\n",a[i]);
}c

实现数组的排序
	int a[8] = {1,3,2,5,12,4,35,14};
	int i=0;
	int j=0;
	int temp;
	for(i=0;i<8;i++){
		for(j=0;j<8;j++){
			if(a[i]<a[j]){
				
				temp = a[i];
				a[i] = a[j];
				a[j]= temp;
			}
		}
	}
	for(int i=0;i<8;i++){
		printf("%d\n",a[i]);
	}

给定一个数,找到数组中不重复的两个数的和与此数相同的元素下标
int a[8] = {1,3,2,5,12,4,35,14};
	int target = 9;
	int i,j;
	int n = sizeof(a) / sizeof(int);
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){//俩数不能重复,所以j+1 
			if(a[i]+a[j] == target){
				printf("i is %d,j is %d\n",i,j);
			}
		}
	}

二维数组

可以 看作是一维数组的数组

int a [行] [列] 第二个列必须写长度,第一个不能写

逻辑结构是二维数组,等效于我们见到的表格,但实际仍是线性结构存储

访问不要越界

可以使用sizeof(数组名)计算数组大小 a[2] [3] sizeof(a) ==24

//二维数组赋初值
int a[3][4]={
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12}
	}
int b[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
//经常使用第一种方式
int c[3][4] = {
    {1},
    {3},
    {5}
}


二维数组行列互换
//行列互换 a[i][j] = b[i][j];	
int a[2][3] = {
		{1,2,3},
		{4,5,6}		};
	int b[3][2];
	int i,j;
	for(i=0;i<2;i++){
       for(j=0;j<3;j++){
	       b[j][i] = a[i][j];
	   }
	}	
	for(i=0;i<3;i++){
		for(j=0;j<2;j++){
			printf("%d ",b[i][j]);
		}
		printf("\n");
	}

求出二维数组的最大值
int i,j;
	int a[3][4]={
		{5,1,3,1},
		{9,1,2,3},
		{12,22,3,1}
	};
	int max = a[0][0];
	//打擂台赛比较大小
 	for(i=0;i<3;i++){
 		for(j=0;j<4;j++){
 			if(max<a[i][j]){
 				max = a[i][j];
                 row = i;//最大值的行
                column = j;//最大值的列
			 }
		 }
	 }
	 printf("The max is %d\n",max);

求二维数组行数列数
int a[3][4]={
		{5,1,3,1},
		{9,1,2,3},
		{12,22,3,1}
	};
int row =sizeof(a)/sizeof(a[0]);//二维数组行数
int column = sizeof(a[0])/sizeof(a[0][1])//二维数组列数

字符数组

char a[10]

c语言没有字符串类型字符串存放在字符数组

字符串一定是字符数组,字符数组不一定是字符串

​ 字符数组+\0 ---->字符串

\0后面加数字就会转义可麻烦的!!!

char a[] = {'a','p','p','l','e','\0'};//   \0结尾就是字符串
char a1[] = {'a','p','p','l','e'};//   这就是字符数组
char a3[] = "apple";printf("%s"),a3  // ->输出是apple 自动隐藏\0
sizeof(a3)/sizeof(char) == 6  多了一个字节那就是\0

逐个输出用%c

一坨输出用%s。遇到\0就会结束

scanf不做越界介绍

字符串

1.get函数,gets() 功能是从键盘中读取字符串到指定数组

​ char str[100]; gets(str)

gets函数允许输入有空格,但是scanf不允许输入有空格

  1. puts 用法

char str[100] = “china”;

puts(str)

puts在输出到屏幕时候加了\n 但是字符串本身并没有变化

函数

先定义后调用

#include<stdio.h>
int Compare(int num1,int num2){
	if(num1>num2){
		return num1;
	}else{
		return num2;
	}
}
void Do(char s[10]){
	printf("i am doing %s",s);
}
int main(){
	int n1 = 3;
	int n2 = 4;
	int max = Compare(n1,n2);
	printf("max is %d\n",max);
	char s[10] = "homework";
	Do(s);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值