黑马程序员——C语言总结之篇
来源:互联网 发布:替天行道 网络用语 编辑:程序博客网 时间:2024/05/21 09:57
数据类型、运算符
1.C语言中的数据类型:
2.运算符:
流程控制
1.顺序结构:
#include <stdio.h>int main(){ //顺序结构演示 int a;//①分配内存空间 printf("输入:");//②打印提示信息 scanf("%d",&a);//③输入一个整数,存到内存中 printf("输出:%d\n",a);//④将内存中的数据进行打印输出 return 0;//⑤退出程序 //以上5步,严格按照先后顺序执行}
输入:4输出:4
2.选择结构:
选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。控制语句有如下两种:
if语句:if、if....else....、if.....else if...else
switch...case语句:switch..case
详细请看代码注释。
实例示范:<pre name="code" class="objc"><pre name="code" class="objc">#include <stdio.h>int main(){ //顺序结构演示 int a;//①分配内存空间 printf("输入:");//②打印提示信息 scanf("%d",&a);//③输入一个整数,存到内存中 //通过a的值,来判断要进哪个分支执行 if (a>0) { printf("输出:a>0\n"); }else if(a==0){ printf("输出:a=0\n"); }else{ printf("输出:a<0\n"); } return 0;}
<pre name="code" class="objc">输入:1输出:a>0输入:0输出:a=0输入:-1输出:a<0
#include <stdio.h>int main(){ //顺序结构演示 int a;//①分配内存空间 printf("输入:");//②打印提示信息 scanf("%d",&a);//③输入一个整数,存到内存中 //通过a的值,来判断要进哪个分支执行 switch (a) { case 1://case后面只能跟常量或者常量表达式 printf("输出:a=1\n"); break; case 2://每句case结束要加个break printf("输出:a=2\n"); break; case 3://如果case里面有很多语句,请用大括号“{}”括起来。 printf("输出:a=3\n"); break; default: printf("输出:a!=1且a!=2且a!=3\n"); break; } return 0;}
输入:1输出:a=1输入:2输出:a=2输入:3输出:a=3输入:4输出:a!=1且a!=2且a!=3
3.循环结构:
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构 。该结构控制语句如下:
for语句:for(表达式1;条件表达式2;表达式3){.....},表达式2一定是条件表达式,3个表达式中间用分号隔开
do....while语句:do {.....}while(条件表达式);
while语句:while(条件表达式){......}
goto语句:先标记一个跳转的点A:.....,要跳转的位置写上goto A;
实例示范:#include <stdio.h>int main(){ //循环结构演示 int a;//分配内存空间 system("clear");//演示前先清屏 //--------------------------------- //演示do..while的使用,验证输入合法性,先输入一次,后判断 do { printf("请输入一个5~8的正整数:"); scanf("%d",&a); system("clear"); if(a<5||a>8) printf("输入错误,"); }while(a<5||a>8); printf("输入的数为:%d\n",a);//验证通过 //--------------------------------- //演示for循环的使用,求1~a的整数和。 int sum = 0; int i = 1; for (i=0; i < a; i++) { sum +=i; } printf("1+2+..+%d = %d\n",a,sum); //--------------------------------- //演示while循环的使用,求a!(a的阶乘) sum = 1; i = 1; while (i<=a) { sum *=i; i++; } printf("1*2*...*%d = %d\n",a,sum); //--------------------------------- //演示goto语句的使用 printf("演示goto语句\n"); goto A; //可以注释这句,看看效果 printf(" * \n"); printf(" * * \n"); printf(" * * \n"); printf(" * * \n"); printf(" * \n");A: printf("标记goto跳转点,是否跳过图案打印\n"); return 0;}
输入的数为:51+2+..+5 = 101*2*...*5 = 120演示goto语句 * * * * * * * * 标记goto跳转点,是否跳过图案打印不注释goto A得到的结果:
输入的数为:61+2+..+6 = 151*2*...*6 = 720演示goto语句标记goto跳转点,是否跳过图案打印输入的数不是5~8得到的结果:(可以继续输入值)
输入错误,请输入一个5~8的正整数:
数组与指针
1.数组:
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。
定义:2.指针:
在计算机科学中,指针是编程语言中的一个对象,用于存储变量单元的地址,将存储变量单元地址的对象形象化的称为“指针”。
int a;//a是一个变量,其在内存中有一个对应的存储单元,而内存中每个存储单元都有对应的地址,所以a所在内存单元中也有对应的地址。
&a//就是查看a所在内存单元的地址
int *p = &a;//将a所在内存单元的地址保存到p中,p就称为指针。因为p存储a在内存单元的地址,所以可以通过p去内存中查找a。
int a[10];// a存储了a[0]的地址,(a=&a[0];)所以a也是一个指针。
实例示范:
#include <stdio.h>int main(){ int a[10];//定义一个数组 //利用for循环给这10个数进行赋值 for (int i =0; i <10; i++) { a[i] = i+10; } //打印这10个数看看 for (int i =0; i <10; i++) { printf("a[%d] = %d\n",i,a[i]); } int *p;//定义一个指针 int b = 100;//定义一个变量 p = &b;//获取变量单元地址,并且保存到指针p中 printf("p = %p存储的值为:%d\n",p,*p);//同过p存储的地址,找到b变量单元,取出b变量单元的值 return 0;}
a[0] = 10a[1] = 11a[2] = 12a[3] = 13a[4] = 14a[5] = 15a[6] = 16a[7] = 17a[8] = 18a[9] = 19p = 0x7fff5fbff7b4存储的值为:100
函数
许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,这就是程序中的函数。
1.指针函数:
2.函数指针:
#include <stdio.h>//判断一个数是不是素素,将代码封装成一个函数,等下多次调用BOOL isSuSu(int n){ if(n<2) return false; else if(n==2||n==3) return true; else { int temp = sqrt(n); for (int i = 2; i <=temp; i++) { if(n%i==0) return false; } return true; }}int main(){ //我们查找1~30里面的所有素素,我们遍历每一个数,判断他是不是素素 for (int i = 1; i<=30; i++) { if(isSuSu(i))//每个数都要判断一次,直接调用函数判断就可以,这样写代码可读性高 printf("%3d",i); } return 0;}
2 3 5 7 11 13 17 19 23 29
#include <stdio.h>#include <stdlib.h>int *array(int a,int b)//定义了指针函数,本质是一个函数,返回值为指针{ int temp = b-a; int *number = (int *) malloc(sizeof(int)*(temp));//动态分配内存,创建一个大小为b-a的数组 for (int i = 0; i <temp; i++) { number[i] = b; b++; } return number; }int main(){ int *n = array(5, 10);//定义一个指针,接收array函数返回的指针 for (int i = 0 ; i <5; i++) {//打印接受到的值 printf("n[%d] = %d\n",i,n[i]); } return 0;}
n[0] = 10n[1] = 11n[2] = 12n[3] = 13n[4] = 14
#include <stdio.h>typedef int (*Number) (int,int);//声明一个函数指针,是一个指向函数的指针int Sum(int a,int b){ return a+b;}int Min(int a,int b){ return a<b?a:b;}int Max(int a,int b){ return a>b?a:b;}int main(){ Number p1 = Sum;//定义一个函数指针变量p1,p1指向函数Sum;既然是指针,那么保存的应该是地址 Number p2 = Min;//定义一个函数指针变量p2,p2指向函数Min;保存Min的地址 Number p3 = Max;//定义一个函数指针变量p3,p3指向函数Max;保存Max的地址 int a =10,b=15; printf("通过p1指针调用Sum函数,p1(%d,%d) = %d\n",a,b,p1(a,b)); printf("通过p2指针调用Min函数,p2(%d,%d) = %d\n",a,b,p2(a,b)); printf("通过p3指针调用Max函数,p3(%d,%d) = %d\n",a,b,p3(a,b)); return 0;}
通过p1指针调用Sum函数,p1(10,15) = 25通过p2指针调用Min函数,p2(10,15) = 10通过p3指针调用Max函数,p3(10,15) = 15
文件操作
①对于path,默认为相对路径。若需绝对路径,则注意转义字符'\',比如有文件test.txt存放在C盘根目录下,则文件路径参数值应为C:\\test.txt。
②对于mode,主要由r,w,a,+,b,t六个字符组合而成。
r:只读方式,文件必须存在
w:只写方式,若文件存在,则原有内容会被清除;若文件不存在,则会建立文件
a:追加方式打开只写文件,只允许进行写操作,若文件存在,则添加的内容放在文件末尾;若不存在,则建立文件
+:可读可写
b:以二进制方式打开文件
t:以文本方式打开文件(默认方式下以文本方式打开文件)
实例示范:#include <string.h>int main(){ FILE *file = fopen("test.txt","r+w");//本文件采用相对路径存储 char *name = "My name is Hua_san"; fwrite(name ,1, strlen(name), file);//将name写入文件,文件不存在,创建文件,文件存在,覆盖原内容 fputs("\nHua_san\nLi_si", file);//在文件末尾增加内容,原来内容保留 char str[100];//定义一个读取出来的缓冲 rewind(file);//将文件内部的位置指针重新指向一个流(数据流/文件)的开头 while (fgets(str, 100, file)!=NULL)//循环读取文件内容,如果读到文件末尾,读取内容为NULL时候,结束。 { printf("%s",str);//打印出来每次读取的内容 } printf("\n");//最后输出一个回车,不干扰源文件数据 fclose(file);//关闭文件指针 return 0;//退出程序}结果输出:
My name is Hua_sanHua_sanLi_si
- 黑马程序员——C语言总结之篇
- 黑马程序员——C语言总结
- 黑马程序员之IOS学习总结——01C语言中的常量与变量
- 黑马程序员之IOS学习总结——03C语言中循环结构
- 黑马程序员之IOS学习总结——04 C语言中数组与字符串
- 黑马程序员之IOS学习总结——05 C语言中的指针
- 黑马程序员之ios学习总结——07 C语言的枚举、预处理指令
- 黑马程序员——C语言知识点总结之变量与基本运算
- 黑马程序员——C语言知识点总结之指针和关键字static、extern
- 黑马程序员——C语言知识点总结之结构体和枚举
- 黑马程序员——C语言知识点总结之预处理指令和typedef关键字
- 黑马程序员——Objective-C语言知识点总结之面向对象
- 黑马程序员——Objective-C语言知识点总结之OC特有语法
- 一、黑马程序员————C语言总结
- 黑马程序员————C语言总结(2)
- 黑马程序员———C语言基础测试总结
- 黑马程序员——C语言学习总结1-10
- 黑马程序员——C语言学习总结11-21
- Qt Model/View模型
- Opencv图像处理坐标系认识
- 黑马程序员---Java之异常
- JAVA入门之Scanner扫描器
- Operation not allowed after ResultSet closed
- 黑马程序员——C语言总结之篇
- Spring MVC 针对我自学用到的一些注解和属性解释总结
- 120页第四题
- uva 11922 Permutation Transforme/splay tree
- Objective C基础(一)
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
- Android Fragment 基本介绍
- C++ 虚函数表解析
- Centos6.5下使用tcpdump抓包并用wireshark分析