C语言学习第二章
今天开始学习常量,变量,基本数据类型,printf()函数和scanf()函数,算术运算符。
首先常量:是在程序中保持不变的量
变量:编写程序时,常常需要将数据存储在内存中,方便后面使用这个数据或者修改这个数据的值。通常使用变量来存储数据。使用变量可以引用存储在内存中的数据,并随时根据需 要显示数据或执行数据操纵。
声明和使用变量
- 声明变量:
Datatype variablename;
数据类型加上变量名;
定义时初始化变量;
Datatype variablename = value;
数据类型加上变量名=数值
- 定义后初始化变量:
variablename = value;
示例
计算长方形的面积
//声明变量:数据类型 变量名;
int width;//长方形的宽
width=10;//为变量赋值
//声明并赋值
int length=50;//长方形的长
int s=width*length;// 面积
printf("长方形的长是%d,宽是%d,面积是:%d\n",length,width,s);
//%d:整形占位符
去掉注释以后练习时写的。
#include <stdio.h>
void main(){
int chang = 500;
int kuan = 200;
int gao = 100;
int ly = 22;
int he = chang * kuan*gao*ly;
printf("长方形的长是%d长方形的宽是%d长方形的总和是%d",chang,kuan,he);
}
变量命名(标识符)
1. 什么是标识符
标识符就是在程序中自定义的一些符号和名称。要跟关键字区分开来:关键字是C语言默认提供的符号,标识符是程序员自定义的
2. 标识符的作用
1) 标识符,从字面上理解就是用来标识某些东西的符号,标识的目的就是为了将这些东西区分开来
2) 其实,标识符的作用就跟人类的名字差不多,为了区分每个人,就在每个人出生的时候起了个名字
3) C语言是由函数构成的,一个C程序中可能会有多个函数,为了区分这些函数,就给每一个函数都起了个名称。函数的名称就是标识符的一种。除了函数,以后还会学到“变量”这个概念,变量的名称也是标识符
命名
命名规则(一定要遵守)
1. 只能由26个英文字母的大小写、10个阿拉伯数字0~9、下划线_组成。
2. 严格区分大小写,比如test和Test是2个不同的标识符。
3. 不能以数字开头。
4. 不可以使用关键字作为标识符。
命名规范(也要遵守)
1. 尽量起个有意义的名称,比如一个完整的英文单词,别人一看这个名称就能才能这个标识符的作用。如果不懂英文,你可以下载一个翻译工具,如有道,养成好的习惯,(目前正在努力改正中..)不然会显得比较low...不要起像abcde、sfsdfsdf等这类看起来没有意义的名称,即low又不好记,自己也容易出错。
2. 如果标识符中含有多个单词,可以使用驼峰标识(除开第一个单词,后面每个单词的首字母都是大写):firstName、myFirstName,或者使用下划线_来连接:first_name、my_first_name
不可以使用关键字作为标识符,如果命名以后显示为蓝色或者其他鲜艳的颜色的就不要用来命名了,基本都是有别的用处的。
下面是常见的标识符命名错误
合法标识符 |
非法标识符 |
注释 |
fromNo12 |
from#12 |
标识符中不能使用#符号 |
my_Boolean |
my-Boolean |
标识符中不能使用“-”符号,应使用下划线“_”代替 |
Obj2 |
2ndObj |
标识符不能使用数字开头 |
myInt |
int |
“int”是内建关键字 |
jack_rose |
jack&rose |
符号“&”不能出现在标识符中 |
GUI |
G.U.I |
标识符内部需要出现“.”分隔符 |
基本数据类型
数值类型: 整型:(short,int,long), 非整型 (float,double)
//数值类型就是各种整数,short能容纳的数比较小,int比short大一点,long别另两个都大,大的多,平时int就够用。
//非整形就是各种小数,float能容纳的少点,称为单精度浮点数。double能容纳的多的多,称为双精度浮点数。
非数值型: char
//char是字符类型的,就是字母。
占位符:
每种类型的占位符都不同,占位符就是先占住一个固定的位置,等着你再往里面添加内容的符号,short的占位符是%s, int的占位符是%d, long的占位符是%ld
float的占位符是%f, double的占位符是%lf, char的占位符是%c。
转换字符串 |
说 明 |
%d |
将参数按整数形式转换输出,对应参数应是int 类型 |
%ld |
将参数按长整数形式转换输出,对应参数应是long 类型 |
%c |
输出一个字符,对应参数应该是一个字符 |
%s |
输出一个字符串,对应参数应该是一个字符串 |
%lf |
将参数按带小数点数形式输出,对应参数应是double 类型,默认情况下精确到 |
示例
//计算圆的面积 float pi=3.14;//圆周率 int r=3;//半径 float s=pi*r*r; printf("圆的半径%d,圆周率%f,面积是:%f\n",r,pi,s); //%f:单精度浮点float占位符 |
练习
#include <stdio.h>
void main(){
float pi = 3.14;
int r = 22;
float he = pi*r*r;
printf("圆的半径%d圆周率%f圆的面积%f\n",r,pi,he);
}
printf()函数和scanf()函数:
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
scanf()函数是C语言中的一个输入函数,一般用于获取printf()函数的数值。
示例:
int bottom,height;
printf("请输入三角形的底边长:");
scanf("%d",&bottom);//将用户输入的值赋值给bottom变量 : &:取地址
printf("请输入三角形的高:");
scanf("%d",&height);//将用户输入的值赋值给height变量
double s=bottom*height/2;
printf("三角行的面积为:%7.2lf",s);//%lf:double的占位符 l7.2f:七位有效数字,精确到小数点后2位
练习:
int gao,di;
printf("请输入三角形的高;");
scanf("%d",&gao);
printf("请输入三角形的底;");
scanf("%d",&di);
double as=gao*di/2;
printf("三角形的面积是%lf",as);//千万不能忘记所有的符号!
算术运算符:
二元运算: +,-,*,/,%(取模或求余)//两个数的预算如1+1=2
一元运算符:
++num,--num,num++,num-- //一个数的运算,如++6=7。++num和num++的区别是前者先自加再走下一条指令,后者先走下一条指令再自加。
--和++相同。
示例:
int num1 = 10;
int num2= ++num1+num1--;
printf("num2=%d",num2);//打印结果22
printf("num1=%d",num1);//打印结果10
表达式 |
如何计算 |
结果 (num1=5) |
num2 = ++num1; |
num1 = num1 + 1; num2 = num1; |
num2 = 6; num1 = 6; |
num2 = num1++; |
num2 = num1; num1 = num1 + 1; |
num2 = 5; num1 = 6; |
num2 = --num1; |
num1 = num1 - 1; num2 = num1; |
num2 = 4; num1 = 4; |
num2 = num1--; |
num2 = num1; num1 = num1 - 1; |
num2 = 5; num1 = 4; |
小练习:通过中间变量实现变量交换
int num1,num2;
int temp;//中间变量
printf("请输入的num1的值");
scanf("%d",&num1);
printf("请输入的num2的值");
scanf("%d",&num2);
printf("交换前num1=%d,num2=%d\n",num1,num2);
temp=num1;
num1=num2;
num2=temp;//通过中间变量实现交换
printf("交换后num1=%d,num2=%d\n",num1,num2);
自己的练习:
int num1,num2,num3;
printf("输入一个数");
scanf("%d",&num1);
printf("再来一个数");
scanf("%d",&num2);
printf("变身前num1=%d,num2=%d\n",num1,num2);
num3=num1;
num1=num2;
num2=num3;
printf("变身后num1=%d,num2=%d\n",num1,num2);
类型转换
• 自动类型转换
• 原则:把表示范围小的类型的值转换到表示范围大的类型的值就可以自动转换。把大的转换成小的就得用下面的强制转换。
• short à int
à
long à
float à double
• 强制类型转换
• 语法:(类型名) 变量或数值
• 例如:
int a = 5, b = 3;
float qu = float(a) / b;
getchar()和putchar():getchar()和printf()效果相同,但不如printf()效果强大,putchar()和scanf()效果相同,同样的不如scanf()效果强大。
示例: fflush(stdin)等同刷新,在这个例子中没有 fflush(stdin)的话就完全不行,用户输入的数据储存在缓存区,如果不用fflush清空缓存区的话就没办法在获取新的数据。
char a,b; printf("请输入第一个字符:"); a=getchar();//获取输入字符 fflush(stdin); printf("请输入第二个字符:"); b=getchar();//获取输入字符 fflush(stdin); putchar(a);//输出字符 putchar(b); putchar("\n"); |
自己的小练习:
char a,b;
printf("输入一个字母:");
a = getchar();
fflush(stdin);
printf("再输入一个字母:");
b = getchar();
fflush(stdin);
putchar(a);
putchar(b);
putchar("\n");
*/
char a,b;
printf("输入一个字母:");
scanf("%c",&a);
fflush(stdin);
printf("输入另一个字母:");
scanf("%c",&b);
fflush(stdin);
printf("a=%c,b=%c\n",a,b);
课后作业:根据用户输入的底和高计算梯形的面积(精确到小数点后两位)。
#include <stdio.h>
void main(){
//首先获取上下底及高的数值,然后进行运算。
double sdi,xdi,gao,he;
printf("输入上底长度;");
scanf("%lf",&sdi);
printf("输入下底长度;");
scanf("%lf",&xdi);
printf("输入高度;");
scanf("%lf",&gao);
he = (sdi+xdi)*gao/2;
printf("梯形的面积是;%7.2lf",he);
}
转换字符串 |
说 明 |
%d |
将参数按整数形式转换输出,对应参数应是int 类型 |
%ld |
将参数按长整数形式转换输出,对应参数应是long 类型 |
%c |
输出一个字符,对应参数应该是一个字符 |
%s |
输出一个字符串,对应参数应该是一个字符串 |
%f |
将参数按带小数点数形式输出,对应参数应是double 类型,默认情况下精确到 |
C语言学习第二章的更多相关文章
- oracle学习 第二章 限制性查询和数据的排序 ——03
这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7 怎样使用转义(escape)操作符 ...
- Java基础知识二次学习-- 第二章 基础语法与递归补充
第二章 基础语法与递归补充 时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...
- 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)
#include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 第二章
Asp.Net MVC4 + Oracle + EasyUI 第二章 --使用Ajax提升网站性能 本文链接:http://www.cnblogs.com/likeli/p/4236723.html ...
- Ruby学习-第二章
第二章 类继承,属性,类变量 1.如何声明一个子类 class Treasure < Thing 这样Thing类中的属性name,description都被Treasure继承 2.以下三种方 ...
- C#高级编程 (第六版) 学习 第二章:C#基础
第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...
- C语言进阶学习第二章
本章重点记录指针的各种概念: 1.地址与内容 2.非法的赋值 3.NULL指针:NULL指针作为一个特殊的指针变量,表示不指向任何东西,在对指针进行解引用操作之前,首先必须 确保它并非NULL指针. ...
- Struts2框架学习第二章——Struts2下的HelloWorld
本章要点 — Struts 2的下载和安装 — 纯手工创建一个Web应用 — 纯手工创建一个Struts 2应用 — 实现Struts 2的Action — 配置Struts 2的Action — ...
- C语言学习第九章
学习C语言的最后一节课了,原因嘛上一章的末尾说过了,其实写这篇博客的时候以后开始学习Java一个多月了,一直因为各种各样的原因没有坚持做到每天一篇学习记录,可能主要因为懒吧....也有点笨,Java的 ...
随机推荐
- Spring-Mybatis配置多数据源
可以参考: http://www.cnblogs.com/ityouknow/p/6102399.html 需要一个DatabaseConfiguration类,实现 TransactionManag ...
- idea 使用常见问题处理
问题一: 项目中使用了 lombok,但是代码中一直报错,提示 bean 注入失败,set 和 get 方法都飘红 解决:idea 中安装 lombok 插件,安装方法自行百度吧~ 如果是用的 ecl ...
- 【树莓派】Linux 测网速及树莓派源
这篇文章比较杂,其中包含三点:linux环境中测试网络速度,树莓派下载软件的源,部分我写好的脚本: 一.Linux 测网速 Linux 测网速: sar -n DEV 1 100 1代表一秒统计并显示 ...
- windows phone 8.1开发:socket通信聊天
本例用WPF程序做服务器端,windows phone程序做客户端.我们使用基于UDP协议的Socket通信.更多关于socket信息请查看:http://msdn.microsoft.com/zh- ...
- 使用CEF(CEFGLUE)作为您的客户端UI(一)
背景: 本人是一名C#开发者,而作为C#开发者,做客户端应用中最头痛的一件事就是没有一个好的UI解决方案.WinFrom嘛,效率虽然还不错,但是做一些特殊的效果,完全应付不来,比如透明控件.比FPS太 ...
- nfs mount:reason given by server: Permission denied
遇到nfs mount的问题,以前从未遇到过,问题出的很奇怪,现象是 mount: 10.1.10.22:/cicro failed, reason given by server: Permissi ...
- 通过 dhcp-agent 访问 Metadata - 每天5分钟玩转 OpenStack(168)
OpenStack 默认通过 l3-agent 创建和管理 neutron-ns-metadata-proxy,进而与 nova-metadata-api 通信.但不是所有环境都有 l3-agent, ...
- iOS关于友盟分享弹不出面板问题
在程序代理类中声明 [NSThread sleepForTimeInterval:10];//设置启动页面时间 [self.window makeKeyAndVisible]; [[UMSocialM ...
- jq轮播图插件
/* * 使用说明 * * 1:需要提供一个标签 * 2:lis:图片的个数 * 3:轮播图的大小 width ,height * 4:图片的地址imgs[0].carou ...
- 老李分享:webservice是什么?2
web service 组件 基本的 web service 平台是 XML + HTTP.所有标准的 web service 使用以下组件: SOAP(简单对象访问协议) UDDI(通用描述.发现与 ...