Android_开发_Day2_C语言基础
Android_开发_Day2_C语言基础
一、简单C语言程序hello word的输出解读
<1>每个C程序都会有个头文件stdio.h的导入,其中包含了常用函数scanf,printf。导入时用分号与尖叫号的区别是,用分号编译器会先在该工程中去寻找,后到系统库去寻找,而尖角符号刚好相反。
<2>程序接入点main函数的解读,main函数作为一个程序的主函数它有数据类型,自然有返回值,而返回值就是该函数成功执行的标志,main函数的返回值0代表成功运行,1则表示失败。程序正常退出,程序资源自己分配,非正常退出,程序会没收运行过程中获取的资源。
<3>集成开发环境IDE。一个程序的诞生过程:
写代码:文本编辑器 文本文档 Sublime
编译:编译器(将高级语言如C,Java,C++,转化成低级语言机器代码) javac gcc 编译原理:1.预编译/预处理 将头文件进行展开->完整的程序 2.汇编 将高级语言转化为汇编语言 3.编译 二进制数据 4.链接 1.0 2.0 3.0 ->可执行程序.exe 5.运行。
显示结果:console。
二、从C数据类型到循环
<1>main函数的参数即运行时传入main函数的参数,用终端运行时可以向其传入参数,但一般集成开发环境不会让你传入参数。
<2>关键字:编译器定义的 char 不能用关键字命名
<3>注释,分单行注释和多行注释 单行://…… 多行/*……*/。对函数注释的内容一般包括:函数功能,参数个数和类型,及其返回值
<4>printf的输出时的技巧:int %d float(double) %f long %ld char %c char * %s 格式控制符%02d可以输出02,05等日期,前面加0可以占位,如果是%5.6f就表示总共5位,小数点后面有6位,如果超了就不管了只管小数点后面的,并且还可以自动四舍五入,当然如果只想保留小数位那直接%.6f就行了。64位系统里面占4个字节,在32位系统里面占2个字节(1字节=八位)。int型能表示的最大数看系统和编译器,如果是64位的系统一个整形4字节,一个字节八位总共32位,即2^(32)。如果用%d的格式输出字符常量的话会输出其ascll码,反之亦然,因此可以用来轻松输出字母a~z,代码如下:
#include "stdafx.h"
#include "iostream"
int _tmain(int argc, _TCHAR* argv[])
{
for (int i = 97; i <123; i++)
{
printf("%c\n", i);
}
system("pause");
return 0;
}
<5>从终端输入用scanf函数,使用时注意要取址&。终端输入到数值接收有一个过程:
1.终端输入 20 a b
2.操作系统的io流来接收 缓存 20 a b
3.将io流放到对应的内存空间 20->0x100
因此连续用scanf函数时要注意缓存的问题同时最后敲的回车键即换行符\n也会被计入缓存 。清除缓存可以用getchar()函数,也可以用fflush(stdin);命令行。
<6>if条件语句,若括号里面的内容非“0”即真。格式有if--else,if--else if--else,switch。
<7>循环语句while,for。for循环中的有3个参数分别是定义,条件,运算,如for(int i=0;i<10,i++){……},执行顺序是从左往右依次进行,若执行条件时满足,则转入执行大括号内的内容,执行完后继续往右执行,全部完成后又开始从条件执行,直到条件不满足为止。应用,如输出1-10中的奇数,代码如下:for(int i=1;i<=10,i+=2){
printf("%d",i);
}
break和continue的区别,break直接不干了,continue本次循环不干了。
三、选择语句、循环语句的实战运用
写一个ATM取款机的程序,界面要求:
UI:
******************************
欢迎
******************************
1.取款
2.存款
3.设置密码
4.退出
请选择:
程序要求:
1.进入前先输入密码,密码错误次数达到4次后退出程序
2.选择取款后进入取款操作,取款金额大于原有金额将会报错,取款后自动显示余额
3.选择存款后进入存款操作,存完后自动显示余额
4.选择设置密码后进入设置密码的操作,要求输入原密码与新密码,并确认新密码
5.选择退出后要退出程序
实现代码如下,仅供参考:
#include "stdafx.h"
#include "iostream"
#include "windows.h"
int _tmain(int argc, _TCHAR* argv[])
{
int choice = 0,password=1234,password1;
int toal = 10000, toal1,toal2;
printf("* ** *** ****\n");
printf(" 欢迎\n");
printf("* ** *** ****\n");
while(1){
for (int i = 0; i < 4; i++){
printf("请输入密码:");
scanf("%d", &password1);
if (password1 == password)
{
break;
}
else
{
printf("密码错误!请重新输入!\n");
}
}
if (password1 == password)
{
break;
}
printf("抱歉!你已经累计输错了4次密码,此卡已冻结,请联系客服!\n");
for (int i = 5; i > 0; i--)
{
printf("\r%d秒后程序将自动退出!", i);
Sleep(1000);
}
exit(EXIT_SUCCESS);
}
//密码验证程序
while (1)
{
printf(" 1.取款\n");
printf(" 2.存款\n");
printf(" 3.设置密码\n");
printf(" 4.退出\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice)
{
case 1:
while (1)
{
printf("请输入取款金额:");
scanf("%d", &toal1);
if (toal1>toal)
{
char juge;
printf("抱歉!你的余额不足!是否继续?(y/n)\n");
fflush(stdin);
juge = getchar();
if (juge == 'n')
{
exit(EXIT_SUCCESS);//退出程序
}
else
{
break;
}
}
else
{
toal -= toal1;
printf("取款成功!余额为:%d\n",toal);
break;
}
}
break;
case 2:
printf("请输入存款金额:");
scanf("%d", &toal2);
toal += toal2;
printf("存款成功!余额为:%d\n", toal);
break;
case 3:
int i;
for ( i = 0; i < 4;i++)
{
printf("请输入原密码:");
scanf("%d", &password1);
if (password1 == password)
{
while (1)
{
int password2;
printf("请输入新密码:");
scanf("%d", &password1);
printf("请确认新密码:");
scanf("%d", &password2);
if (password1 != password2)
{
printf("你两次输入的密码不一致,请重新输入!\n");
}
else
{
break;
}
}
password = password1;
printf("密码修改成功!\n");
break;
}
printf("密码错误!请在试一次!\n");
}
if (i==4)
{
for (int j = 5; j >0; j--)
{
printf("\r你已经输错四次密码了,%d秒后程序将自动退出!", j);
Sleep(1000);
}
exit(EXIT_SUCCESS);
}
break;
case 4:
for (int i = 5; i > 0; i--)
{
printf("\r%d秒后程序将自动退出!", i);
Sleep(1000);
}
exit(EXIT_SUCCESS);
break;
default:
printf("无法识别的指令,请重新输入\n");
break;
}
}
system("pause");
return 0;
}