首页 > 其他分享 >C语言

C语言

时间:2023-01-10 17:25:44浏览次数:34  
标签:10 int C语言 char ++ 地址 指针

C语言

一个C语言程序有且只有一个main函数,是程序运行的起点

每个C语言程序写完后,都是先编译(.c),再链接(.obj),最后运行(.exe)


标识符:

  1. 由数字、字母、下划线组成
  2. 开头不能是数字
  3. 严格区分大小写

C语言只有八(0)、十、十六(0x)进制,没有二进制

整型一般4B,字符型1B,双精度一般8B


算术表达式: + - * / %

  1. “/“:两边都是整型则结果为整型,若有一边是小数则结果也为小数
  2. “%”:取余运算,只能对整数进行操作
  3. “/”:取整运算

赋值表达式:

  1. 定义时,不可以连续赋值

    例:int x=y=10;× int x,y;x=y=10;√

  2. 赋值的左边只能是一个变量

  3. 复合表达式

    例:int a=2;a*=2+3;(相当于a=a* (2+3))

  4. 自加表达式

    例:int a=5;++a;(a== 6)/a++;(a==5)

    例:int i=7;j=i++; j=7/i=8

    ​ int i=7;j=++i; j=8/i=8

  5. 逗号表达式

    z=(2,3,4);z为4

    z=2,3,4;整个逗号表达式值为4,但z为2


三种取整丢小数情况:

  1. int a=1.6
  2. b=(int)a;
  3. 1/2;3/2;

字符:

'a':字符1B

"ab":字符串2B (包含一个结束符号\0)

''1"× ‘12’×

字符是可以进行算术运算的 ,例:'0'-0=48


输入输出函数:要在最前面加上#include<stdio.h>

  1. printf()
    %d十进制 %o八进制 %#o带前导的八进制 %x十六进制 %#x带前导的八进制

    %%:输出一个百分号

    %md:输出m位十进制整数,小于则左端补空,大于则按实际输出

例:

#include <stdio.h>

int main()
{
   printf("%5d",1234567890);	/*1234567890*/
   
   return 0;
}
#include <stdio.h>

int main()
{
   printf("%5d",12);	/*   12*/
   
   return 0;
}

%m.nf:m为最小宽度,n为小数点后位数,小数位数被截断时按四舍五入输出(小数点占一位)

例:

#include <stdio.h>
int main()

{

   printf("%6.2f",34.56789);	/* 34.57*/

   return 0;

}


  1. scanf(),

    scanf("%d,%d",&x,&y,);第二个部分一定是地址

    char a=getchar(); 从键盘输入一个字符给变量a(多个字符用getschar)

    putchar('y'); 把字符y输出到屏幕中


       scanf与gets区别:scanf("%s",a);不可以接收空格 ;gets(a);可以接收空格


关系表达式:

#include<stdio.h>
int main(){
	int x=1;
	int y=0;
	int z=2;
	int a;
	a=x<y<z;
	printf("%d",a);	/*1-----------x<y<z为真*/
	return 0;
}

逻辑表达式:(表达式的数值只能为1或0)

&&、||、!

优先级:!>&&>||


循环:

  1. 输入123,输出321逆序:

    int i=123;while(i!=0){printf("%d",1%10);i=i/10;}


函数:

  1. 当子函数在主函数之后时需要声明,当子函数在主函数之前时则不用

  2. 函数的参数可以是常量、变量、表达式、甚至是函数调用

  3. 只能是形参向实参的传递

  4. 实参与形参之间传数值,形参变化不会改变实参;实参与形参之间传地址,形参变化有可能会改变实参;

    传值:

    exch(int x,int y){
      int t;
      t=x;			//子函数没有返回值,ab值不会改变
      x=y;
      y=t;
    }
    void main(){
      int a,b;
      scanf("%d,%d",&a,&b);
      exch(a,b);
      printf("a=%4d,b=%4d\n",a,b);
    }
    

    传址:

    void fun(int *a,int *b){
      int t;
      t=*a;*a=*b;*b=t;
    }
    main(){
      int x=1,y=3;
      fun(&x,&y);
      printf("%d,%d",x,y);	//3,1
    }
    

指针:

指针的定义:

  1. int x=3;int *p=&x (定义的同时初始化)

  2. int x; int *p; x=3;p=&x; (定义之后初始化)

    p当做地址来使用,可以用在scanf函数中,scanf("%d",p);

    *p++ 地址变化

    (*p)++ 数值变化

​ int *p,a[]={1,3,5,7};p=a; 把数组第一个元素的地址赋值给p

​ 此时*p++本身数值为1,指向3的地址,(*p)++指针不移动,数值变为2


C语言中没有字符串变量,所以用数组和指针存放字符串


一级指针:*p,存放变量的地址

二级指针:**p,存放一级指针的地址

​ 例:int x=7;int *p=&x,**q=p;

​ 问:*p为多少?*q为多少? * * q为多少? **q=&x写法正确吗?

​ 7 p 7 不正确,二级指针存放一级指针的地址不能存放变量的地址


移动指针

​ char *s="yuanyu";while(*s){printf("%c",*s);} 变量的同时又赋值要加*

char ch[]="iamhandsome";
char *p=ch;

问:*(p+2)和*p+2的结果是多少?
             m     i+2=k


函数返回值是地址

int *fun(int *a,int *b){

  if(a>b) return a;

  else return b;

}

main(){

  int x=7,y=8,*max;

  max=fun(&x,&y);

  printf("%d",*max);	//8

}


函数指针的用法:

int add(int x,int y){}
main(){
  int (*f)();
  f=add;
}

调用:

  1. add(2,3)
  2. f(2,3)
  3. (*f)(2,3)

三名主义:

  1. 数组名:表示第一个元素的地址,不可以自加,是地址常量名

  2. 函数名:表示该函数的入口地址

  3. 字符串常量名:表示第一个字符的地址



数组:

存放类型一致,多个数组元素的地址是连续的

最大特点:一次存入,多次使用


一维数组a[10]:

  1. a表示数组名,是第一个元素的地址,即a[0]的地址,等价于&a
  2. a是地址常量,只要出现a++,或者a=a+2赋值都是错误的
  3. a是一维数组名,是一个列指针

二维数组a[3][3]:

  1. a表示数组名,是第一个元素的地址,即a[0][0]的地址
  2. a是地址常量,只要出现a++,或者a=a+2赋值都是错误的
  3. a是一维数组名,是一个行指针
  4. a[0]、a[1]、a[2]也是地址常量,不可以进行赋值,都是列指针,a[0]+1是跳一列

一维数组初始化:

int a[5]={1,2,3,4,5}; √

int a[5]={1,2,3, }; √

int a[]={1,2,3,4,5}; √

int a[5]={1,2,3,4,5,6}; ×数组越界


一维数组的定义:数组个数一定是常量

int a[5] √

int a[1+1] √

int a[1/2+4] √

int x=5,int a[x]; ×x是变量

define P 5 int a[P] √define后的P是符号常量(宏定义)

例:

#include <stdio.h>




int main()
{
   int score[8]={75,68,89,72,62,83,85,92};
	int sum=0;
	int average=0;
	int max=0;
	int min=100;
	int *p;
	for(p=&(score[0]);p<=&(score[7]);p++){
		sum+=*p;
		if(*p>max){
			max=*p;}
		if(*p<min){
			min=*p;}
		
	}
	printf("sum=%d\n",sum);		//sum=626
	printf("average=%f\n",sum/8.0);		//average=78.250000
	printf("max=%d,min=%d",max,min);	//max=92,min=62

   
   return 0;
}

二维数组初始化:

int a[2][3]={1,2,3,4,5,6}; √

int a[2][3]={1,2,3,4,5,}; √

int a[2][3]={{1,2,3} {4,5,6}}; √

int a[2][3]={{1,2,} {3,4,5}}; √

int a[2][3]={1,2,3,4,5,6,7}; ×数组越界

int a[2][]={1,2,3,4,5,6}; ×不可以缺省列个数

int a[][3]={1,2,3,4,5,6}; √


a[2]=*(a+2)

a[2][3]=*(a+2)[3]=*(*(a+2)+3)


常用函数:

  1. strlen()字符串测长度函数

    strlen与sizeof区别:

    • strlen是一个库函数,sizeof是一个操作符
    • sizeof参数可以是数据的类型也可以是变量,strlen只能以“\0”结尾的字符串做参数
    • sizeof计算的是数据类型占内存的大小,strlen计算的是字符串的实际长度
  2. strcat()字符串连接函数

  3. strcmp()字符串比较函数

  4. strcpy()字符串拷贝函数

  5. malloc()动态分配内存函数(free释放)返回类型是void*


define:

  1. 预处理
  2. 宏定义

int a,b,c,d,e;a=1;b=2;c=6;d=4;e=f(a+b)*f(c+d);

#define f(x) (x*x) e=(a+b*a+b)*(c+d*c+d)=5*34=170

#define f(x) x*x e=a+b*a+b*c+d*c+d=1+2+12+24+4=43

#define f(x) ((x)*(x) e=((a+b)*(a+b)*(c+d)*(c+d))=3*3*10*10=900

文件:

<>中是C语言的库,而“ ”中的是自己定义的


字符串的赋值:

char ch[10]={"abcdfegh"}; √

char ch[10]="abcdfegh"; √

char ch[10]={'a','b','c','d','f','e','g','h'}; √

char *p="abcdefgh"; √

char *p; p="abcdefgh"; √

char ch[10]; ch="abcdefgh"; ×数组名不可以赋值

char *p={"abcdefgh"}; ×不能出现大括号,指针没有大括号的说法


把s指针的字符串赋值到t指针中:

  1. while((*t=*s)!=null){s++;t++;}
  2. while(*t=*s){s++;t++;}
  3. while(*t++=*s++);

typedef:取别名

  1. typedef int qq那么int x可以写成qq x
  2. typedef int *qq那么int *x可以写成qq x

标签:10,int,C语言,char,++,地址,指针
From: https://www.cnblogs.com/yuanyu610/p/17040829.html

相关文章

  • c语言模拟用户输入三次密码并判断是否正确
    #include<stdio.h>intmain(){charpassword[20]={0};//先初始化这个数组避免出现其它数据intflag=0;//设立flag变量是若三次密码都输入错误了能向用户输出三次......
  • 【c&c++】C语言 带参数的#define中#和##的基本用法
    1、单#的作用是把参数变成字符串;2、##的作用是连接组合参数名字;废话不多说,看个简洁的例子就明白了#include<iostream.h>usingnamespacestd;#defineTEST0(arg)cou......
  • C语言动态分配内存
    初创建于:2022-02-0900:30C语言的动态分配内存是十分重要的主要有四个函数:void*malloc(intnum)void*calloc(intnum,intsize)void*realloc(void*address,i......
  • C语言指针大纲
    ......
  • C语言:猜数字游戏
    #include<stdio.h>#include<windows.h>#include<stdlib.h>#include<time.h>voidgame(){{intret=0;intguess=0;ret=rand()%100+1;while(1)......
  • C语言信息工程学院成绩管理系统
    C语言信息工程学院成绩管理系统信息工程学院成绩管理系统的设计与实现一、实训目的通过本次实训,提高学生C语言程序设计和程序调试能力,初步培养学生对软件开发的需求调研......
  • C语言学生管理系统[2023-01-09]
    C语言学生管理系统[2023-01-09]学生管理系统利用数据结构的单链表的框架实现学生管理系统以下功能要求:1)学生个人信息:姓名、学号、专业、性别、年龄、联系方式、成绩。......
  • C语言居民小区水电费管理系统[2023-01-09]
    C语言居民小区水电费管理系统[2023-01-09]居民小区水电费管理系统【问题详述】居民小区水电费管理系统可以对居民小区的用水、用电情况及应交费用进行查询与管理。物业......
  • 初识C语言
    什么是C语言C语言是一门计算机语言,计算机语言是人和计算机交流的语言计算机语言包括C/C++,Java,python计算机语言的发展二进制语言计算机通电,而电压只有正负,所以用二进制语言......
  • C语言员工销售统计及奖金发放系统[2023-01-09]
    C语言员工销售统计及奖金发放系统[2023-01-09]课题3:员工销售统计及奖金发放系统程序设计功能及要求:(1)总人数不定,开始先输入员工的人数及工号进行初始化,数据使用文......