C语言程序设计(基础篇)

本文并非教程,仅用于个人复习

文章目录

  • C语言程序设计(基础篇)
    • 1. 基本信息
    • 2.算法
      • 简单算法举例
    • 3. 数据类型,运算符与表达式
      • 3.1 C语言中的数据类型
      • 3.2 常量与变量
        • **常量**
    • 4. 顺序程序设计
      • 4.1 赋值语据
      • 4.2格式输入输出
        • 4.2.1 printf 输出
        • 4.2.2 scanf 函数 输入
    • 5.分支结构
      • 1.if..else..
      • 2. switch
    • 6.循环结构
      • 1.while语句
      • 2 do-while语句
      • 3 for语句
    • 7 数组
      • 1.一维数组c
      • 2.二维数组
      • 3.字符数组
    • 8.函数
      • 函数定义的一般形式
      • 函数的递归调用
      • 数组作为函数参数
      • 用static声明局部变量
      • register变量
      • 用extern声明外部变量
    • 9. 预处理命令
      • 宏定义
      • 无参宏定义
      • 带参宏定义

1. 基本信息

1.1 C语言完全面向过程,只包含三种结构 顺序结构选择结构循环结构

1.2 C语言区分大小写

1.3 基本例子:

#include<math.h> //#include 文件包含命令(预处理),.h头文件  该文件包含sin()函数
#include<stdio.h>//包含scanf()和printf()函数。可省去main() //主函数
{double x,s; //定义两个double型变量,记得写;printf("input number:\n"); //输出字符串scanf(%1f,%x); //从控制台获得值赋给xs =sin(x); //调用math.h提供的sin()函数printf("sine of %1f is %1f\n",x,s); //输出结果
}

2.算法

简单算法举例

​ 例1 求1x2x3x4x5

​ 例2 有50个学生,要求将他们的中成绩在80分以上者打印出来

​ 例3 判定2000 - 2500年中的每一年是否是闰年,将结果输出

 闰年条件:1)能被4整除,但不能被100整除

​ 2)能被100整除,且能被400整除

​ 例4 求1-1/2+1/3-1/4+…+1/99+1/100

​ 例5 对一个大于或等于3的整数,判断它是否是一个素数。

3. 数据类型,运算符与表达式

3.1 C语言中的数据类型

数据类型:基本数据类型构造数据类型指针类型空类型四大类

  1. 基本数据类型:其值不可以再被分解为其他类型。

  2. 构造数据类型:根据已经定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造数据类型可以分解成若干个“成员”或“元素”的值。每个成员都可以是一个基本数据类型或构造数据类型。

    举例

    数组类型

    结构体类型

    共用体类型

  3. 指针类型:其值用来表示某个变量在内存储器的地址。

  4. 空类型:调用函数后不需要向调用者返回函数值,这类函数可以定义为“空类型”。其类型说明符为void

3.2 常量与变量

常量

定义:在程序执行过程中,其值不发生改变的量称为常量

使用方法: #define 标识符 常量

#define PRICE 30 //不需要分号,一般全部大写,#define也是预处理命令
main()
{int num,total;num = 10;total = num*PRICE;printf("total = %d",total);
}

变量

整型:short, int(-32768~+32768) ,long, unsigned

浮点型:float,double,long double

字符变量:char (单引号’‘) 由于字符值十一ASCII码的形式存放在变量的内存单元之中,C语言允许对整型变量赋予字符值,也允许对字符变量赋予整形变量。

字符串常量:C语言中没有字符串变量,但可以用一个字符数组来存放一个字符串常量。

4. 顺序程序设计

4.1 赋值语据

在变量说明中,不允许给多个变量赋初值

int a=b=c=5 ; //错误
int a=5,b=5,c=5; //正确

但是赋值语句允许连续赋值

int a,b,c;
a= b =c =5 //允许

4.2格式输入输出

4.2.1 printf 输出

一般形式:[][][标志] [输出最小宽度] [.精度] [长度] 类型

标志:- 左对齐,右边填空格,+输出符号,空格 输出值为正时冠以空格,为负时冠以负号,#对o类,在输出时加前缀o,对x类输出时加前缀0x。

输出最小宽度:用十进制正是来表示输出的最少位数。若实际位数多以定义的宽度,则按是几位数输出,若实际位数少于定义的宽度则补已空格或0

精度:精度格式符以’ .‘开头,后跟十进制证书。本项的意义是如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

长度:长度格式符为h,l两种,h表示按照短整型输出,l表示按照长整型输出。

4.2.2 scanf 函数 输入

一般形式: scanf(“格式控制字符按”,地址表列)

main()
{int a,b,c;printf("input a,b,c\n");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);
}

格式字符串:%[*] [输入数据宽度] [长度]类型

*****符号:用以表示该输入项读入后不赋予相应的变量,即跳过该输入值

如:

scanf("%d %*d %d",&a,&b);//当输入为1 2 3 时,把1赋给a,2被跳过,3赋予b

宽度:用十进制整数指定的输入的宽度(即字符数)

如:

scanf("%5d",&a);//当输入12345678时只把12345赋给变量a,其余部分被截去。

长度:长度格式符号为l和h,l表示输入的长整型数据和双精度浮点数据。h表示输入短整数据。

scanf函数注意事项:

  1. scanf没有精度控制,如scanf(”%5.2f“,&a)非法。
  2. scanf要给出变量地址,如scanf(“%d”,a)非法

5.分支结构

1.if…else…

main()
{int a=1;int b=2;if (a>b){printf("cool");}else{printf("not cool");}
}

2. switch

main()
{int a;scanf("%d",&a);switch (a){case 1:printf("1");break;case 2:printf("2");break;default:printf("error");break;}
}

6.循环结构

1.while语句

用while语句求1-100所有数字的和

main()
{int a;int sum;a = 1;sum = 0;while(a<=100){sum = sum+a;a++;}printf("sum=%d",sum);
}

2 do-while语句

用do-while语句求1-100所有数字的和

main()
{int a,sum;a= 1;sum =0;do{sum = sum+a;a++;}while(a<=100)printf("%d\n",sum);
}

3 for语句

for(int i=0;i<100;i++)
{}

7 数组

1.一维数组c

定义方式:类型说明符 数组名[常量表达式] (定义时方括号中的常量表达式不能用变量

初始化

int a[3] ={1,2,3};
int b[] ={1,2,3,4}//如果给出全部元素,可以不给出数组元素的个数

2.二维数组

定义方式:类型说明符 数组名[常量表达式1] [常量表达式] ;

二维数组在概念上是二维的,但在实际的硬件存储器中却是连续编址的。

初始化

int a[2][3] = {{1,2,3},{4,5,6}};//分段初始化
int a[2][3] = {1,2,3,4,5,6};//连续赋值int a[3][3]={{1},{2},{3}};//未赋值部分自动取0
int a[][3]={1,2,3,4,5,6,7,8,9}; //如果对全部元素赋初值,则一维的长度可以不给出

3.字符数组

定义方式: char c[5] [10] ;

在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以’\0’作为串的结束符,因此当把一个字符串存入一个数组时,也罢结束符‘\0’存入数组。

char c[] = "C program";//用字符串赋值比逐个符值要多占一个字节用于存放'\0'

字符数组的输入输出

main() //输出
{char c[]="BASIC\nBASE";printf("%s",c);//%s表示输出的是一个字符串,输出列表给出数组名则可,不能写成c[]
}
main()//输入
{char st[15];printf("input string\n");scanf("%s",st); //输入长度必须小于15,以留出一个字节存放'\0'printf("%s\n",st);//字符串中不能含有空格,否则会将空格视为结束标志
}

在C语言中数组的数组名就代表了该数组的首地址,因此scanf("%s",st) 中st不需要加&取地址符号

8.函数

函数定义的一般形式

void hello() //无参函数定义
{printf("hello,world \n");
}int max(int a,int b) //有参函数定义
{if(a>b) return a ;eles return b;
}//被调函数出现在主调函数之前也可不在主调函数中声明main() //主函数调用
{int max(int a,int b); //函数声明,如果为返回值为整型函数可以不用生命int x,y,z;printf("input two numbers:\n");scanf("%d%d,&x,&y");z = max(x,y);printf("maxnum = %d,z")
}

可以在主函数外对函数进行声明,这样就不要在调用时再在主调函数中额外声声明

函数的递归调用

一个函数在它的函数体内调用它自身称为递归调用。

数组作为函数参数

数组可以作为函数的参数使用,进行数据缠讼。

数组用作函数参数有两种形式,一种是把数组元素(下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。

当数组名作为参数时所进行的传送只是地址的传送,因此形参数组获取该首地址后,也就有了实在的数组。实际上形参数组和实参数组为同一数组,共同拥有一段内存空间。

//数组a中存放了一个学生5门课程的成绩,求平均成绩
float aver(float a[5])//可以不显式给出数组a的长度,而用a[]
{float s=a[0];for(int i=0;i<5;i++){s = s+a[i];}s =s/5;return s;
}main()
{float averGrade,a[5];printf("please enter the grades");for(int i =0;i<5;i++){scanf("%f",&a[i]);}averGrade = aver(a);printf("average grade is :%5.2f",averGrade);
}

多维数组也可以作为函数的参数。在函数定义时对形参数组可以指定每一维的长度,也可省去第一维的长度。

用static声明局部变量

有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该制定局部变量为“静态局部变量”,用关键字static进行声明。

静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在整个程序运行期间都不释放。而自动变量(auto)属于动态存储类别,占动态存储空间,函数调用结束后即释放。

register变量

为了提高效率,c语言允许将局部变量的值放在CPU寄存器中,这种变量叫“寄存器变量”,用关键词register作声明。

说明:

  1. 只有局部变量和形式参数可以作为寄存器标量
  2. 一个计算机系统的寄存器数目有限,不能定义任意多个寄存器变量
  3. 局部静态变量不能定义为寄存器变量

用extern声明外部变量

外部变量(即全局变量)实在函数的外部定义的,它的作用域从变量定义处开始i,到程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前函数想引用该外部变量,就应该用关键字extern对该变量作“外部变量声明”

int max(int x,int y)
{int z;z = x>y?x:y;
}main()
{extern A,B;//使用处用extern关键字进行声明printf("%d\n",max(A,B));
}
int A =13,b=-8;  //定义处

9. 预处理命令

宏定义

在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这成为“宏代换”或“宏展开”

在c语言中,“宏”分为有参数和无参数两种。下面分别讨论这两种“宏”的定义和调用。

无参宏定义

定义:

#define 标识符 字符串

字符串可是常数,表达式,格式串等。

#define M (y*y+3*y)//编译时,将先由预处理程序进行宏代换,即用(y*y+3*y)替换M
  • 宏定义不是说明或语句,在行末不必加分号,如加上分行则连分号也一起置换
  • 宏定义必须写在函数外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef符号
  • 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换

带参宏定义

定义:

#define 宏名(形参表)字符串

#define M(y) y*y+3*y  //宏定义K = M(5);  ///宏使用

带参宏定义宏名和括号不能分开

C语言程序设计(基础篇)相关推荐

  1. Java语言程序设计 基础篇 原书第10版 ,梁勇著,百度云链接及密码

    一本好书,对java小白来说是一本非常不错的书.第一次分享,请大家多多指教, Java语言程序设计 基础篇 原书第10版 ,梁勇著 链接:https://pan.baidu.com/s/1-MN_AS ...

  2. JAVA程序设计第十版梁勇著答案_0031 Java学习笔记-梁勇著《Java语言程序设计-基础篇 第十版》英语单词...

    第01章 计算机.程序和Java概述 CPU(Central Processing Unit)*中央处理器 Control Unit*控制单元 arithmetic/logic unit /ə'rɪθ ...

  3. [转载] java语言程序设计-基础篇

    参考链接: Java中的决策制定(if,if-else,switch,break,continue,jump) 第1章,计算机.程序和Java概述 包括[每个java初学者都应该搞懂的问题] http ...

  4. Java语言程序设计(基础篇) 第十一章 继承和多态

    第十一章 继承和多态 11.1 引言 面向对象的编程允许你从已经存在的类中定义新的类,这称为继承. 11.2 父类和子类 1.继承使得你可以定义一个通用的类(既父类),之后扩充该类为一个更加特定的类( ...

  5. java语言程序设计-基础篇

    第1章,计算机.程序和Java概述 包括[每个java初学者都应该搞懂的问题] http://blog.csdn.net/haobo920/article/details/5784990 1,java ...

  6. java程序设计基础篇_Java语言程序设计(基础篇) 第一章

    第一章 计算机.程序和Java概述 1.1 引言 什么是程序设计呢? 程序设计就是创建(或者开发)软件,软件也称为程序. 1.2 什么是计算机 计算机是存储和处理数据的电子设备,计算机包括硬件(har ...

  7. 《java语言程序设计-基础篇》笔记一

    第一章.计算机.程序和java概述 中央处理器 CPU由两部分组成:控制单元和算术/逻辑单元 控制单元用于控制和协调除CPU之外其他组件的动作 算术/逻辑单元用于完成数值运算和逻辑运算 每台计算机都有 ...

  8. Java语言程序设计(基础篇) 第十章 面向对象思考

    第十章 面向对象思考 10.2 类的抽象和封装 1.类的抽象是指将类的实现和类的使用分离开,实现的细节被封装并且对用户隐藏,这被称为类的封装. 2.从类外可以访问的方法和数据域的集合以及预期这些成员如 ...

  9. Java语言程序设计(基础篇) 第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

  10. java语言程序设计基础篇14.6答案_《Java语言程序设计-基础篇》答案-第15章

    第15章 异常和断言 复习题 15.1 答:略 15.2 答:声明异常是为了在方法中产生异常时,以便通知方法的调用者. 在方法声明的头部使用关键字throws 声明,一个方法可以声明多个异常.如: p ...

最新文章

  1. 简单的python服务器程序
  2. 何恺明时隔2年再发一作论文:为视觉大模型开路,“CVPR 2022最佳论文候选预定”...
  3. OI模板大全(普及~省选NOI)
  4. 华为 Java 编程军规
  5. NetworkManager 冲突
  6. Java 线程同步总结
  7. 文件操作(二) 其他总结
  8. dj电商-数据表的设计-用户表设计
  9. 智能一代云平台(三十四):后端架构一些总结
  10. 15天掌握Al声纹识别,同盾开启智能风控建模赛训
  11. 2021-09-1017. 电话号码的字母组合
  12. java计算机毕业设计蔚蓝在线学习平台源码+系统+数据库+lw文档+mybatis+运行部署
  13. k8s当中calico节点日志报错 confd/health.go 180: Number of node(s) with BGP peering established = 0
  14. ChaosBlade:混沌工程简介(一)
  15. 杀毒软件McAfee导致客户端访问mscrm超慢
  16. sybase SQL 函数
  17. 计算机鼠标不动了,电脑上鼠标不动了怎么解决 鼠标不动了怎么办解决方案
  18. Jetson nano 卡刷教程
  19. MAX3485芯片软件使用总结
  20. HTML商品详情页(简单页面)

热门文章

  1. Project Web Access ActiveX控件 安装
  2. 数字电路13-任意进制计数器设计
  3. 《Windows程序设计》读书笔十一 对话框
  4. 杭电4510—小Q系列故事—为什么时光不能倒流
  5. 进位计数制及其相互转换
  6. Xftp连接失败,解决办法
  7. 肖 清华计算机系 北大生命科学,7个清华北大,11+复旦交大,后续还有一大波浙大……他们都是同班同学!...
  8. 人工智能之无人驾驶技术到底是怎么回事
  9. using the Connector/J connection property 'autoReconnect=true' to avoid this problem
  10. 闲话链表的诞生以及它与数组亲缘关系的故事