什么是C语言?他是20世界70年代初期在贝尔实验室开发出来的一种广为使用的编程语言。
1983年美国国家标准(ANSI)制定了本国C语言标准,1989标准化C语言,俗称C89,1999年ISO标准化了增加新特性,C99正式出现。
C语言的优点:
缺点
#include
int main() {
int amount;
int price;
printf("请输入2个数---");
scanf_s("%d %d", &amount, &price);
printf("%d + %d = %d", amount, price, amount + price);
return 0; //表示程序正常终止,向系统返回0
}
对于上面代码,要转化为机器可以执行的形式,通常包含以下3个步骤:
预处理,首先程序会被送交给预处理器(preprocessor)。预处理器执行以#开头的命令(通常称为指令)。预处理器有点类似于编辑器,它可以给程序添加内容,也可以对程序进修改。
编译,修改后的程序现在可以进入编译器(compiler) 了。编译器会把程序翻译成机器指令。
链接,在最后一个步骤中,链接器( linker)把由编译器产生的目标代码和所需的其他附加代码整合在一起,这样才最终产生了完全可执行的程序。这些附加代码包括程序中用用到的库函数(如:printf)。
即使最简单的C语言程序也包含3个关建的语言特性
#
开始的。这个字符可以把C程序中的指令和其他代码区分开来。指令默认只占一行,每条指令的结尾没有分号或其他特殊标记。#include
#include
int main() {
// 1.显示菜单
// 使用do while循环显示菜单,如果用户输入4,表示退出程序
// 用户输入4退出时,给出提示"你确定要退出吗? y/n",必须输入正确的y/n ,
// 否则循环输入指令,直到输入y 或者 n
char key = 'a'; //表示用户输入了那个菜单
int flag = 1;
char details[3000] = "************当前收支明细记录***********************\n\n收支:\t金额\t\t余额\t\t备注\n";
char note[100] = "";
char temp[300] = "";
double money = 0.0;
double balance = 1000.0;
const char YES = 'y';
char choice = 'a'; //随便放的初始值
int count = 0;
do {
printf("------欢迎使用家庭记账软件------\n\n");
printf("\t1.收支明细\n");
printf("\t2.登记收入\n");
printf("\t3.登记支出\n");
printf("\t4.退 出\n");
printf("请选择1-4:");
scanf("%c", &key);
getchar();//过滤回车
switch (key) {
case '1':
if (count) {
printf("%s", details);
} else {
printf("你还没有添加收支明细哦,去添加一笔吧\n");
}
break;
case '2':
printf("本次收入金额:");
scanf("%lf", &money);
getchar();
balance += money;//更新余额
printf("本次收入说明:");
scanf("%s", ¬e);
getchar();
sprintf(temp, "\n收入\t%.2f\t\t%.2f\t\t%s\n\n", money, balance, note);
//将信息拼接到details
strcat(details, temp);
count = 1;
break;
case '3':
printf("本次支出金额:");
scanf("%lf", &money);
getchar();
// 当用户消费的金额大于余额时,提醒用户余额不足
if (balance - money < 0) {
printf("余额不足~~\n");
break;
}
balance -= money;//更新余额
printf("本次支出说明:");
scanf("%s", ¬e);
getchar();
sprintf(temp, "\n支出\t%.2f\t\t%.2f\t\t%s\n\n", money, balance, note);
//将信息拼接到details
strcat(details, temp);
count = 1;
break;
case '4':
//此处不直接退出,而是让用户再次确认
printf("你确定要退出吗?y/n\n");
do {
scanf("%c", &choice);
getchar();
if (choice == YES) {
break;
} else {
printf("你的输入不正确,请输入y/n\n");
}
} while (1);
if (choice == YES) {
flag = 0;
}
}
} while (flag);
printf("你已经成功退出了家庭财务软件\n");
return 0;
}
#include
#include
// Created by poplar on 2020/5/4 模块化编程
// 1.显示菜单
// 使用do while循环显示菜单,如果用户输入4,表示退出程序
// 用户输入4退出时,给出提示"你确定要退出吗? y/n",必须输入正确的y/n ,
// 否则循环输入指令,直到输入y 或者 n
char key = 'a'; //表示用户输入了那个菜单
char temp[300] = "";
char note[300] = "";
double money = 0.0;
const char YES = 'y';
const char NO = 'n';
char choice = 'a'; //随便放的初始值
int loop = 1;
//结构体AccountApplication,使用typedef定义结构体
typedef struct AccountApplication {
char details[3000]; //存放账目信息
double balance; //余额
int flag;
} Account;
//支出
void pay(Account *account) {
printf("本次支出金额:");
scanf("%lf", &money);
getchar();
// 当用户消费的金额大于余额时,提醒用户余额不足
if (account->balance - money < 0) {
printf("余额不足~~\n");
return;
}
account->balance -= money;//更新余额
printf("本次支出说明:");
scanf("%s", ¬e);
getchar();
sprintf(temp, "\n支出\t%.2f\t\t%.2f\t\t%s\n\n", money, account->balance, note);
//将信息拼接到details
strcat(account->details, temp);
account->flag = 1;
}
//收入
void income(Account *account) {
printf("本次收入金额:");
scanf("%lf", &money);
getchar();
account->balance += money;//更新余额
printf("本次收入说明:");
scanf("%s", ¬e);
getchar();
sprintf(temp, "\n收入\t%.2f\t\t%.2f\t\t%s\n\n", money, account->balance, note);
//将信息拼接到details
strcat(account->details, temp);
account->flag = 1;
}
//退出
void appExit() {
//此处不直接退出,而是让用户再次确认
printf("你确定要退出吗?y/n\n");
do {
scanf("%c", &choice);
getchar();
if (choice == YES || choice == NO) {
break;
}
printf("你的输入不正确,请输入y/n\n");
} while (1);
if (choice == YES) {
loop = 0;
}
}
void show(Account *account) {
if (account->flag) {
//第一种方式
//printf("%s", (*account).details);
printf("%s", account->details);
} else {
printf("你还没有添加收支明细哦,去添加一笔吧\n");
}
}
void menu_show(Account *account) {
do {
printf("------欢迎使用家庭记账软件------\n\n");
printf("\t1.收支明细\n");
printf("\t2.登记收入\n");
printf("\t3.登记支出\n");
printf("\t4.退 出\n");
printf("请选择1-4:");
scanf("%c", &key);
getchar();//过滤回车
switch (key) {
case '1':
show(account);
break;
case '2':
income(account);
break;
case '3':
pay(account);
break;
case '4':
appExit();
break;
}
} while (loop);
printf("你已经成功退出了家庭财务软件\n");
}
int main() {
Account account;
//初始化结构体数据
account.balance = 1000.0;
account.flag = 0;
//使用拷贝的方式赋值
memset(account.details, 3000, 0);
strcpy(account.details, "----*----*---*----当前收支明细记录--*----*----*---\n收支\t收支金额\t账户金额 \t说 明");
//结构体和数组不一样,只能传值,传指针需要加&
menu_show(&account);
getchar();
return 0;
}
#include
#include
// Created by poplar on 2020/5/4.
// CRM系统
//客户信息的增删改查
char key; //表示用户输入了那个菜单
int loop = 1;
int customersLength = 1;
char choice;
//定义结构体Customer
typedef struct Customer {
int id; //编号
int age; //年龄
char name[10]; //名字
char gender; // 'f' 女 'm' 男
char phone[16]; //电话号码
char email[20]; //邮箱
} Customer;
//定义一个专门用来显示某个客户信息的函数,使用指针操作,提高效率
void showCustomerDetail(Customer *customer) {
printf("%d\t%s\t%c\t%d\t%s\t%s\n", customer->id, customer->name, customer->gender, customer->age, customer->phone,
customer->email);
}
//定义一个Customer结构体数组
struct Customer customers[100];
//显示客户列表
void showCustomerList() {
printf("---------------------------客户列表---------------------------");
printf("\n编号\t姓名\t性别\t年龄\t\t电话\t\t邮箱\n");
for (int i = 0; i < customersLength; i++) { //表示客户的编号
showCustomerDetail(&customers[i]);
}
}
//添加用户
void addCustomer() {
customers[customersLength].id = customersLength + 1;//编号按照自增规则
printf("\n---------------------添加客户---------------------");
printf("\n姓名:");
scanf("%s", customers[customersLength].name);
getchar();
printf("\n性别:");
scanf("%c", &(customers[customersLength].gender));
getchar();
printf("\n年龄:");
scanf("%d", &(customers[customersLength].age));
getchar();
printf("\n电话:");
scanf("%s", customers[customersLength].phone);
getchar();
printf("\n邮箱:");
scanf("%s", customers[customersLength].email);
getchar();
printf("\n---------------------添加完成---------------------");
customersLength++; // 自增,必须
}
//根据id查找在数组中对应的下标
int findIndex(int id) {
int index = -1;
for (int i = 0; i < customersLength; i++) {
if (id == customers[i].id) {
index = i;
}
}
return index;
}
//删除id客服
int deleteCustomer(int id) {
int index = findIndex(id);
if (index == -1) {
return 0;
} else {
for (int i = index + 1; i < customersLength; i++) {
customers[i - 1] = customers[i];
}
customersLength--;
return 1;
}
}
//显示删除客户界面
void deleteView() {
int id = 0;
char choice = ' ';
printf("\n---------------------删除客户---------------------");
printf("\n请选择待删除客户编号(-1退出):");
scanf("%d", &id);
getchar();
if (id == -1) {
printf("\n---------------------你放弃删除了---------------------");
return;
}
printf("\n确认是否删除(Y/N):");
scanf("%c", &choice);
getchar();
if (choice == 'Y') {
if (!deleteCustomer(id)) {
printf("\n---------------------删除失败,id不存在---------------------");
} else {
printf("\n---------------------删除成功!!---------------------");
}
}
}
//退出
void appExit() {
do {
//此处不直接退出,而是让用户再次确认
printf("你确定要退出吗?Y/N:");
scanf("%c", &choice);
getchar();
} while (choice != 'Y' && choice != 'N');
if (choice == 'Y') {
loop = 0;
}
}
//首页,主界面
void indexShow(Customer *customer) {
do {
printf("\n\n\n---------------客户信息管理软件-----------------");
printf("\n 1 添 加 客 户");
printf("\n 2 修 改 客 户");
printf("\n 3 删 除 客 户");
printf("\n 4 客 户 列 表");
printf("\n 5 退 出\n");
printf("\n请选择(1-5):");
scanf("%c", &key);
getchar(); //过滤回车
switch (key) {
case '1':
addCustomer();
break;
case '2':
printf("修 改 客 户");
break;
case '3':
deleteView();
showCustomerList();
break;
case '4':
showCustomerList();
break;
case '5':
appExit();
break;
default :
printf("\n 你输入有误, 请重新输入...");
break;
}
} while (loop);
printf("\n 你成功退出了猫咪管理系统");
getchar();
}
//主方法
int main() {
Customer customer;
//初始化customers
customers[0].id = 1;
customers[0].age = 12;
strcpy(customers[0].name, "猫花");
strcpy(customers[0].phone, "18900908989");
strcpy(customers[0].email, "[email protected]");
customers[0].gender = 'f';
indexShow(&customer);
getchar();
return 0;
}