循环语句
swicth语句
- switch语句即是一个变量有多种值的情况下,不同的值对应的情况不同,根据不同的值执行不同的语句。而且表达时必须是一个常量(int,char类型等)或枚举类型。表达式与常量表达式必须都是相同的数据类型。当表达式的值等于某个常量表达式之后, 执行该表示之后的语句。当语句中出现break时,语句中断,并跳出switch语句。如果case语句不包含break,控制流将会继续后续的case,直至遇到break为止,一个switch语句可以有一个可选的 default case,出现在switch的结尾。
#include <stdio.h>
int main(){
int a = 0;
printf("请输入一个数字 1 - 3 : ") ;
scanf("%d",&a);
switch(a){
case 1:
printf("你输入的是1\n");
break;
case 2:
printf("你输入的是2\n");
break;
default:
printf("你输入的是3\n");
break;
}
return 0 ;
}
for循环
- 循环控制的变量的定义和初始化之执行一次,表达式1,表达是2,表达式3之间使用分号( ;) 隔开,但是for(表达式;表达是2;表达式3)的后面不能加分号( ;)。for循环的循环条件是决定循环的次数,注意:for(; ;)与while(1)等价,都是死循环,是不会停止的执行语句。
#include <stdio.h>
/**
for(循环控制变量;运行的条件;控制变量的变化)
for循环中间条件是必须要,其他部分可以省略
分号不能省略
for(; 1 < 2; )
for(int i = 0; i < 10; i++)
*/
int c = 10;
int main(){
//输出1-10 之间的整数
for(int i = 1; i <=10; i++){
printf("i = %d\n", i);
}
/*
循环控制变量的定义和初始化只执行一次
变量的作用域:
局部变量 :{
int a
{
int a;
printf(a);
}
}
全局变量
静态变量
循环控制变量什么时候变化/执行?
i++ i-- j++ j--
i+=2
当这一次循环结束之后 再变化/执行
*/
//int i = 1;
for(int i = 1; i <= 10; i++){
printf("i = %d\n", i);
if(i == 10){
i = 0;
}
//i++;
}
//不断输出1-10之间的整数
return 0;
}
while循环
- while语句是先计算“表达式”的值,当值为真时,执行”语句块“。执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”,重复这个过程,直到表达式的值为假时,才会停止并退出语句这个循环,再执行while语句后面的语句。
while语句训练-------进制之间的转换
#include <stdio.h>
int main(){
/*
for(int i = 0; i < 10; i++)
while(1)
int i = 0;
while(i < 3){
i++;
}
do{
}while(i < 3);
*/
/*
2进制 1010 10100
8进制 12 24
10进制 10 20
16进制 0A 14
请输入数字:56
2进制为:111000
8进制为:70
16进制为:38
*/
int num;
printf("请输入数字:");
scanf("%d",&num);
int jinzhi = 16;
//二进制
int wei = 1;
long long sum = 0;
while(1){
//取余 10100
// 00101
// 1*0 + 10*0 + 100*1 + 1000*0 + 10000*1
// 10100
int yu = num % jinzhi;
num = num / jinzhi; //10 5
//目前的总和:当前位数的值 + 之前的值
sum = sum + yu * wei;//0
wei = wei * 10 ;//1*10 100 1000
if(num < jinzhi){
sum = sum + num * wei;
break;
}
}
printf("%d\n", sum);
return 0;
}
Break与Continue关键字
- Break
在switch语句中,遇到break时,将不再执行switch中的任何语句
在while,for循环中,遇到break时,将终止当前循环而执行整个循环后面的代码 - Continue
跳过循环体中剩余的语句并强制进入下一次循环(只用于while,for循环语句中)
数组
- 数组用于储存多个想同类型数据的集合
注意:
- 能够储存数据,就必须要有内存
- 如何定义一个数值的同时为它分配内存
- 数组定义是必须明确直到数组的大小
- 数组名就是数组的首地址
声明数组
在C语言中,声明一个数组,需要指定元素的类型和元素的数量
初始化数组
C语言中,可以逐个初始化数组,也可以使用一个初始化语句。大括号 { } 之间的值的数目不能大于我们在数组声明时在 [ ] 中指定的元素
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//4.Demo - 产生4个(不同)随机数 保存到数组 输出
int main(){
int array[4] = {};
srand(time(NULL));
//生成数组
//产生随机数的同时去比较是否重复
//如果重复就重新再产生一个随机数
//如果不重复就保存
//每次i的值正好可以用来判断已经有几个了
//1
//i = 1
// 2
int i;
for ( i = 0; i < 4; i++){
int temp = rand() % 4;
if (i == 0){//第一个 直接保存
array[i] = temp;
}else{
//判断前面是否已经存在了
int j = 0;
for(; j <i; j++){
//比较j对应的值和temp是否相同
if(array[j] == temp){
//重复了
printf("重复了:%d\n",temp);
break;
}
}
//判断是怎么出来的
if (j == i){
//将i前面的比较一遍都没发现重复的
//保存temp值
array[i] = temp;
}else{
//重复了
//重新回到当前这一次
i--;
}
}
}
//输出
int n;
for ( n = 0; n< 4; n++){
printf("%d ", array[n]);
}
return 0;
}
rand()和srand()函数
- rand()函数
函数头文件:stdio.h
函数定义:int rand()
函数功能:产生一个随机数
返回值:返回0至RAND_MAX之间的随机整值
- srand()函数
函数头文件:stdio.h
函数定义:void srand(unsigned int seed)
函数功能:设置随机种子
通常用time(NULL)(获得当前系统的时间信息)来充当种子,来保持每次运行时种子是不一样的
训练小游戏----最强大脑
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int main(){
int count = 3; //记录每次生成多少个随机数
while(1){
unsigned int seed = time(NULL); //1000
//设置随机数的种子
srand(seed);
int i;
for( i = 0; i < count; i++){
//生成一个随机数
int temp2 = rand() % 9 + 1;
printf("%d ",temp2);
}
printf("\n");
// 延时2s
Sleep(2000);
//for(int i = 0; i < 10000000000/15*2; i++);
//刷新屏幕
system("cls");
/* mac
for(int i = 0; i < 20; i++){
printf("\n");
}
*/
int temp;
printf("请输入:");
//重新设种子和之前生成时的种子一样
srand(seed);
//接收用户输入 一个一个接收
// 1 2 3
// 1 2 4
int n;
for( n = 0; n < count; n++){
scanf("%d", &temp);
//获取对应的生成的随机数
int old = rand() % 9 + 1;
//比较输入的和随机数是否相同
printf("old:%d\n", old);
if (temp != old){
printf("错误 退出!\n");
exit(EXIT_SUCCESS);
}
}
count ++;
printf("正确!\n");
}
return 0;
}
通关达标训练-----ATM机
#include <stdio.h>
#include <stdlib.h>
/*
getchar();从终端接收一个字符
注意:当上一次有输入的情况下 必须要将上一次缓冲区
里面的内容清空
scanf("%d");
123\n;
\n
方式一:
getchar(); //拿走\n
getchar();
方式二:
fflush(stdin);//刷新输入流
return; 结束当前这个函数/方法
exit()导入头文件<stdlib.h> 直接退出程序
main(){
1
2
3
}
add(){
retrun;
}
for(){
switch(){
return 1;
exit();
break;
}
}
*/
int main(){
int old = 123;//原始密码
int input;//输入密码
int wrongTime = 3; //错误次数
int total = 1000; //金额
printf("**********************\n");
printf(" 欢迎使用建设银行系统\n");
printf("**********************\n");
//int i = 1;
printf("请输入密码:");
int i;
for( i = 1;i <= wrongTime; i++){
scanf("%d", &input);
//判断密码
if(input == old){
//密码正确
break;
}
if(i == wrongTime){
printf("错误次数过多!\n");
return 1;
}
//密码不正确
printf("密码不正确,请重新输入密码:");
}
int choice;//接收用户选择
char goon;//是否继续
for(; 1 < 2;){
//主界面
printf("*****************************\n");
printf("1.存款\n");
printf("2.取款\n");
printf("3.查询\n");
printf("4.更改密码\n");
printf("5.退出\n");
printf("*****************************\n");
//提示用户选择
printf("请选择操作:");
scanf("%d", &choice);
//判断操作
switch(choice){
case 1: //存款
int temp;
printf("请输入存款金额:");
scanf("%d", &temp);
total += temp;
//total = total + temp;
printf("存款成功!可用余额为:%d\n",total);
break;
case 2: //取款
int temp2;
for(;1<2;){
printf("输入取款金额:");
scanf("%d", &temp2);
if(temp2 > total){
printf("余额不足 ");
}else{
total -= temp2;
printf("取款成功 余额为%d\n",total);
break;
}
}
break;
case 3: //查询余额
printf("当前余额为:%d\n",total);
break;
case 4: //更改密码
int n1;
int n2;
for(;1<2;){
printf("请输入新密码:");
scanf("%d", &n1);
printf("请确认密码:");
scanf("%d", &n2);
if (n1 == n2){
printf("密码设置成功!\n");
old = n1;
break;
} else{
printf("两次输入不一致!");
}
}
break;
default://退出
return 1;
//exit(EXIT_FAILURE);
break;
}
//提示是否继续
for(;1<2;){
printf("是否继续(y/n):");
getchar();
scanf("%c", &goon);
if(goon == 'y'){
break;
}
if (goon == 'n'){
return 1;
}
printf("输入无效 ");
}
}
return 0;
}