C语言小结

/*
//第一章节:入门

(1)C发展:B语言(BCPL)
(2)计算机语言
----高级语言:面向过程[c] 面向对象
----低级语言:机器语言 汇编语言
高级语言(.c/.cpp源文件)---- 编译(obj)---连接(.exe)-------低级语言
(3)c语言规范
#include "Stdio.h"
main()
{
printf("hello world\n");

}
---stdio.h 标准的输入及输出头文件,c本身没有输入及输出功能
---main()主函数(入口函数) 所有程序从main()开始执行到main()结束
---整个程序只能有一个main()
---c语言处理程序的最基本单位--函数
---函数由两部分构成:函数头部与函数主体
main( ) //函数头部
{


}//函数主体

(4)c语言特点
---语言简洁:32个关键字
---结构化程序设计:顺序结构 选择结构 循环结构(三大结构)
---运算符及表达式丰富: 算术表达式 逻辑表达式 关系表达式 赋值表达式 条件表达式 逗号表达式

//第二章节:算法

程序=语言环境+数据结构(数据及数据关系)+结构化程序设计+算法
数据: 1 1 2 3 5 ...
数据关系:第一项与第二项是1 从第三项起是前两项的和
结构: 循环结构
分析:
(1)定义一个包含十个元素一维数组
(2)赋值
(3)输出


算法: 描述一个问题的步骤

算法表现形式:(1)自然语言描述(2)流程图(流程符号) (3)盒图(N-S图) (4)伪代码(5)计算机语言实现(代码)
--开始与结束
--输入及输出
---判断
---处理
---流程线

//第三章节:顺序结构

数据类型
--为什么划分数据类型:合理利内存空间
识别--->存储---> 处理
内存:内存空间小 速度快 M
外存:外存空间大 速度慢 G
--分类:
(1)基本数据类型:单数据(整型 实型 字符型)
(2)构造数据类型:批数据(数组)
(3)指针类型:
(4)空类型:void

 

常量:(待处理数据):在整个程序执行期间其值不可以改变
--整型常量(整数):十进制 20 八进制020 十六进制0x12
--实型常量(小数):传统小数85.59 指数形式1.234E7
--字符型常量:
(a) 单字符常量[单个] 'a' '\'[转义字符] (\n回车换行 \r 回车 \b退格\t间隔符)
(b) 字符串常量[1个或多个] "a"
单字符与字符串区别"
---单字符由' '引起来 字符串由" "引起来
---单字符内存中占用1个字节 字符串占用n+1个字节(\0结束符)
---符号常量
#define 符号常量名 值(#define pi 3.14)
优点"一改全改
注意事项 #define pi=3.14 [错不能赋值] #define pi 3.14;[错不能加结束符号]

标识符命名规则
---以字母,数字,下划线构成
---不能以数字开头
--不能关键字
---见名识义
---区分大小写

变量:(申请空间)在整个程序执行期间其值可以改变,先定义后引用
#include "stdio.h"
main()
{
int a=10;
b=b+a;
printf("%d",b); //错b没有先定义

}

-----整型变量:short[2],int [4],long[4] ,unsigned int /short/long
-----实型变量:float [4] double[8]
---- 字符型变量:char [1]
sizeof( )测试占用空间


----定义变量 类型 变量名=值
int a;
int a,b;
int a=10,b;
int a=10,b=10;


表达式:10+a由常量,变量及运算符号构成式,根据符号不同将表达式划分以下几种
算术表达式(算术运算符号:+ - * / % ++ --)
/ :3/2=1 3.0/2=1.5 3/2.0=1.5
%: 3.0/2[错]要求只能是整数
++(自增)
--(自减)
#include "stdio.h"
main()
{
int i=10;
i++; // ++i
printf("%d",i)


}

#include "stdio.h"
main()
{
int i=10;
printf("%d",++i);//i=10先加1后使用
printf("%d",i++) ; //先使用后加1


}

赋值表达式(赋值运算符号= +=...)
a=3 a+=3(a=a+3)(i+=i-=i*i)

关系表达式(关系运算符号 > >= < <= == !=)
判断真假
真 假
非0 0
结果
真 假
1 0
逻辑表达式(逻辑运算符号 && ! ||)
a b c d m n都是0
m=a==b || n=c==d (短路)
条件表达式(条件运算符号?)
a>b?a:b 14>10?3>5?2:3:4
逗号表达式(逗号运算符号,) (a,b)有括号取最后一项 a,b无括号取第一项
14>10?3>5?2:(3,7):4

 


语句:以;结束
-----控制语句
(1)条件控制 if switch
(2)循环控制 while do..while for
(3)跳转语句 break continue goto return
---- 空语句:;
----复合语句: { }
----函数调用语句:scanf( );
----表达式语句 12+4;


输入及输出函数
scanf( )输入 printf( )输出
getchar( )单字符输入 putchar( )单字符输出

格式控制符号
%d %o %x %u---整型
%f----实型
%c %s----字符型

printf( )使用
printf("请输入一个数")---提示
printf("%d%d',a,b)--输出单个/多个变量
printf("sum=%d",sum);--格式与非格式

 

scanf( )使用
scanf("%d%d',&a,&b);默认以回车或空格间隔 1 2
scanf("%d,%d",&a,&b); 1,2


getchar()使用
char letter;
letter=getchar( );

putchar()使用
char letter='a';
putchar(letter); // putchar('a');

 


顺序结构:按书写顺序依次执行语句不能跨越语句情况
///编程题目
(1)输入长与宽求面积及周长
(2)输入半径求圆的面积及周长
(3)输入一个字符输出ascii码值
(4)输入三边长求三角形面积
s=(a+b+b)/2
area=sqrt(s*(s-a)*(s-b)*(s-c) )


//第四章节:选择结构
if结构
----单if :先对条件进行判断如果条件为真执行if后面语句块
int i=10
if( i%3 )
{

}

----if与else:先对条件进行判断如果条件为真执行if后面语句块如果条件为假执行else后面语句块
为了避免二义性else与最近的if匹配
if( )
{


}
else
{

 

}

//实例:输出c=3
#include "stdio.h"
main()
{
int a=1 ,b=2 ,c=3;
if(a>b)
if(a>c)
c=c+3;
else
c=c+5;
printf("%d",c);

 

}

----if..else..if
if( )
{


}
else
if( )
{

}


-----if与else嵌套
if( )
{
if( )
{

}
else
{

}

 

}
else
{

}

//编程题目
(1)输入一个年份判断是否是闰年

}
(2)输入一个数判断是否是水仙花数
(3)输入一个字符如果是小写转为大写,如果大写转小写
(4)输入一个成绩划分等级
(5)实现计算器(if switch)
(5)输入三个数输出最大值
(6)输入三个数由小到大排序
(7)输入数字输出对应星期?

 

switch结构:多分支


switch( 值 )
{
case 值:语句块 ;break;
case 值:
....
...
default:


}
注意事项:(1)switch从入口开始执行
(2)switch只能对整型或字符型选择
(3)break中断只能运用于switch或循环结构(if不能单独使用break)
//
#include "stdio.h"
main()
{
int i=3;
switch(i)
{
case 10:i++;
case 3:i++;
case 0:i++;
default:i++;


}
printf("%d",i);

}

 

//第五章节:循环结构
四步骤: 从哪开始(初始值) 到哪结束(终值) 间隔多长时间( 步长) 重复执行(循环体)
while结构:先对条件进行判断如果条件为真执行循环体,如果条件为假不执行
1-2-3-4-2
初始值(1)
while( 终值 )(2)
{
循环体(3)
步长(4)

}

 


do..while结构:先执行循环体然后进行条件判断,如果条件为真执行,如果条件为假不执行。至少执行一次
1-2-3-4-2
初始值(1)
do
{
循环体(2)
步长(3)
}while( 终值 );(4)


for结构:先对条件进行判断如果条件为真执行循环体,如果条件为假不执行

1-2-3-4-2
for(初始值(1);终值(2);步长(4)
{
循环体(3)
}


//1+2...100
#include "stdio.h"
main()
{
int i=1,sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}

}

//
#include "stdio.h"
main()
{
int i=1,sum=0;
do
{
sum=sum+i;
i++;

}while( i<=100);

}

//
#include "stdio.h"
main()
{
int i,sum=0;
for(i=1;i<=100;i++)
{
sum=sum+i;

}

}

if与goto配合实现循环

//
#include "stdio.h"
main()
{
int i=1,sum=0;
lable:
{
sum=sum+i;
i++;
}

if(i<=100)
goto lable;

}

 

循环嵌套:
i=1 j=1
i=2 j=1 j=2
i=3 j=1 j=2 j=3
for(i=1 ;i<=3;i++)
{

for(j=1;j<=i;j++)
{
break;

}//(2)break跳转

}//(1)

break:结束本层循环
continue:结束本次循环继续下一次循环执行
//编程题目
(1)数值

输出1....100
输出1 3 5 ....n
输出2 4 6 ....n
输出1+....100(n)
输出1+3+5+....n(奇数和)
输出2+4+6...+n(偶数和)
1-3+5-7+...
1-1/3+1/5+....
2/1+3/2+3/5+... 前n项和
1 1 2 3 5 ...输出前n项/求和

(2)规律
输出所有的水仙花数
输入一个数判断这个数是否完数
输入一个数判断这个数是否是素数
输出1900-2000之间所的的闰年/ 闰年天数
2+22+222+...(a与n输入)


(3)图形
打印九九乘法

#### #### ##### # #
#### #### ### ### ###
#### #### # ##### #####

# A A
### BBB ABA
##### CCCCC ABCBA
###
#
拓展题目
(1)纸厚0.5mm珠峰8848.48米 折多少次超过珠峰
(2)一条公路长320米每天修25米多少天后少于100米
(3)菲波那契数列从多少项开始>1000
(4)12+22+32+....(n决定)
?(5)小球高度100米10次经过长度是多少?最后一次弹起的高度

#include "stdio.h"
main()
{
int i;
float sum=100,part=100;
for(i=1;i<=3;i++)
{
sum=sum+part;
part=part/2;

}
printf("%f%f",sum,part);

}


#include"stdio.h"
main()
{

}
//
i=1 k=2
i=2 k=1
i=3 k=0

i=1 j=1
i=2 j=3
i=3 j=5

判断
i=1 j=1 'A'
i=2 j=1 'A'
j=2 'B'
i=3 j=1 'A'
j=2 'B'
j=3 'C'

#include "stdio.h"
main()
{

int i,j,k;
for(i=1;i<=3;i++)
{
char letter='A';
for(k=1;k<=3-i;k++)
{
printf(" ");
}// 空格

for(j=1;j<=2*i-1;j++)
{
if(i>j)
{
printf("%c",letter);
letter++;
}
if(i<=j)
{
printf("%c",letter);
letter--;

}

}//内容
printf("\n");

}//行数


}


//第六章节:数组
数组:同类型若干变量按一定次序组合成的数据集合
分类
----按内容:数值型数组 字符型数组
----按维数:一维数组 二维数组

数值型数组(一维 二维)


定义: 类型说明符 数组名[常量表达式1]
---类型:整型 实型int ,short ,long float double
---数组名以标识符命名规则
----数组的下标从0开始(数组名代表数据的首地址)
int array[10] (array[0]---array[9])
占用空间=10 *4=40个字节

int n=10
int array[n][错]

int n;
scanf("%d",&n);
int array[n] [错]

#define n 10
int array[n] [对]

int n,n[10] [错]


赋值
---初始化(全部,部分0
int array[3]={1,2,3} 相当于 array[0]=1 array[1]=-2 array[2]=3
int array[]={1,2,3}

int array[2]={1} 相当于array[0]=1 其它元素0
int array[2]元素是不确定
---引用赋值
int array[3];
array[1]=1;
--- 输入赋值
int num[10]
scanf("%d",&num[0]);
...
...
scanf("%d",&num[9]);

for(i=0;i<10;i++)
scanf("%d",&num[i]);

---引用:利用下标
---内存存放:按行形式存放
///编程题目
基本算法
(1)输入十个数求和,求平均值
(2)输入十个数求偶数和及平均值
(3)输入十个数求能被7整除的数值和及平均值
(4)输入十个数输出最大值/最小值
(5)输入十个数输出最大值及所在位置/最小值及所在位置
(6)输入十个数将最大值与最小值交换

高级算法
(1)排序:冒泡 选择
?(2)输入一个数在数组中查找是否存在这个数/更改
拓展题目
?(1)输入一个数插入到这个数线中保持有序性
?(2)输入十个数前六个偶数按绝对值由小到大排序


二维数组
定义:类型说明符 数组名[常表1][常表2]
float a[3][2] 第一个元素 a[0][0]
占用空间=6*4=24个字节
int a[2,3][错]
赋值
---初始化
int a[3][2]={1,2,3,4,5,6}相当于 a[0][0]=1 ....a[2][1]=6
int a[][2]={1,2,2,4,5,6}
int a[][2]={ {1,2},{2,3},{3,4} }
int a[2][2]={1}相当于a[0][0]=1 其它元素0
---引用赋值:双下标引用
int a[2][2];
a[0][1]=1;
---输入赋值
int a[3][2];
for(i=0;i<3;i++)
{

for(j=0;j<2;j++)
{
scanf("%d",&a[i][j]);
}


}

引用:利用下标
在内存中存放:按行形式
/编程题目
基本算法
(1)输入三行二列求和,求平均值
(2)输入四行三行求所有偶数平均值
(3)输入四行三列输出最大值/最小值/所在位置
(4)输入四行三列交换最大值与最小值
(5)输入四行三列将所在列下标为偶数的求平均值
(6)输入三行三列求对角线和
(7)输入四行四列求四边和

高级算法
1.杨辉三角
?2.转置数组
1 2 3
4 5 6

1 4
2 5
3 6
//第七章节:函数
函数:能够实现一定功能的模块
分类
----从用户角度:系统函数 用户自定义
---从是否传参:有参函数 无参函数
---从是否有返回值:有返回值 无返回值

函数定义(无参 有参)
无参
类型 函数名( )
{


}

有参
类型 函数名(类型 参数名,类型 参数名,....)
{


}

调用:函数名( )/函数名(参数);
--- 函数先定义后引用
----调用在前定义在后面加函数声明语句

参数:
---实参:调用函数中出现
---形参:被调用函数中出现

返回值:return 无返回值void
---函数的类型是由函数值的类型决定,如果不写默认是整型 ,参数如果不指明类型默认是整型
//实例:输入两个数求和
#include "stdio.h"
add( )
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a+b);

}
main()
{
//调用
add( );
}

//
#include "stdio.h"
add(int a,int b )
{

printf("%d",a+b);

}
main()
{
int a,b;
scanf("%d%d",&a,&b);
//调用
add(a,b );
}
//
#include "stdio.h"

main()
{
//声明语句
int add(int a,int b);
int a,b;
scanf("%d%d",&a,&b);
//调用
add(a,b );
}

add(int a,int b )
{

printf("%d",a+b);

}
/编程题目( 顺序,选择,循环)--无参,有参,无返回值,有返回值
1. 输入半径求圆的面积
2.输入两个数求乘积
3.输入一个数判断是否是水
4.输入一个数判断是否是完数/素数
5. 输出所有的水仙
6.输出1900--2012之间的所有闰年/输入一个年份判断是否是闰年
7.输入三个数输出最大值/输入三个数排序
8.实现计算器
9.1+...100

 

选择排序法
i=0 比较4
i=1 比较3*/
54321
i=0 j=1
a[0] a[1]
#include "stdio.h"
main()
{
//定义
int a[5],i,j,m,temp;
//赋值
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);

}
//排序
for(i=0;i<5;i++)
{
m=i;
for(j=i+1;j<5;j++)
{
if(a[m]>a[j])
m=j;
}//次数

if(m!=i)
{
temp=a[m];
a[m]=a[j];
a[j]=temp;


}//交换

 

}//趟数


//输出结果
for(i=0;i<5;i++)
{
printf("%d",a[i]);

}
}

转载于:https://www.cnblogs.com/zichen1005/p/3266409.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值