目的:掌握用C语言编程的基本技能
内容:1.全局变量与局部变量
2.switch语句
3.for循环
4.while循环
5.break与continue
6. getchar()的运用
7. 数组
8. while训练之十进制转化为二进制
9. 数组训练之产生不同随机数
10. "最强大脑“小游戏实战
11. ATM实战
全局变量与局部变量
根据变量的作用域不同,可分为全局变量和局部变量
1.全局变量:在所有函数外部定义的变量(即在main函数前面定义的变量),作用域为从声明开始到程序结束
局部变量:在函数内部定义的变量(即在代码块之间定义的变量),作用域仅限于函数内部,离开该函数后无效
2.在同一源文件中,允许全局变量与局部变量重名。重名时,在局部变量作用域内,起作用的是局部变量,同名的全局变量被屏蔽
3.允许在不同的函数中使用相同的变量名,因为它们代表不同的变量
4.局部变量不能赋值为同名全局变量的值#include <stdio.h> int a = 0;//全局变量 int main(){ int a = 1;//局部变量 printf("a = %d",a);//输出 a = 1 return 0; }
switch语句
1.用于一个变量有多个确定的值,而不同的值对应的执行语句不同的情况,格式如下:
switch(表达式){ case 常量表达式1: 语句1: case 常量表达式2: 语句2; ...... case 常量表达式 n: 语句n; default: 语句 n + 1 ; }
2.注意:
- 表达式必须是一个常量(如 int,char类型等)或者枚举类型,且表达式与常量表达式必须是相同的数据类型
- 当表达式的值为某个常量表达式时,执行该表达式后的语句
- 当语句中出现break时,语句中断并跳出switch;如果没有出现break,控制流将继续执行后面的case,直到遇到break才结束
- 一个switch语句可以有一个出现在switch语句末端的default case
#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.for循环的格式为:for(循环控制变量;运行的条件;控制变量的变化){语句块}
例如: for(int i=0;i<10;i++){printf("%d",i);}
- for循环中间条件是必须的,其他部分可以省略,但分号不可以省略
如:for(;1<2;)3.循环控制变量的定义和初始化只执行一次
4.循环控制变量什么时候变化?当这一次循环结束之后
5.for( ; ; )与while(1)等价,都时不停执行语句的死循环int main(){ for(int i = 1;i <= 10;i++){ printf("i = %d\n",i); } //输出1-10之间的整数 for(int i =1;i <= 10;i++){ printf("i = %d\n",i); if(i == 10){ i = 0; } }//不断输出1-10之间的整数 for(; ;) { }//死循环
while循环
- while循环的格式为:while(表达式){语句块}
- 先计算表达式的值,当值为真时,执行语句块
- 执行完语句块后再次计算表达式的值,如果为真,继续执行语句块
- 重复执行这个过程,直到表达式的值为假再退出循环,执行while语句后的代码
#include <stdio.h> //使用while循环计算1-10的和 int main(){ int a = 1; int sum = 0; while(a <= 10){ sum += a; a++; } printf("%d",sum); return 0; }
break与continue
- break:
在switch语句中,当遇到break时,跳出switch;在while和for循环中,当遇到break时,会跳出循环而执行后面的代码- continue(只用于while和for循环语句):
跳过循环体中剩余语句而强制进入下一次循环
getchar()的运用
- getchar()用于从缓冲区取走一个字符
- 输入1,按下回车键后,缓冲区里为1\n,之后1被放到a的地址中,此时缓冲区剩下\n
输入2,按下回车键后,缓冲区里为\n2\n,而getchar()从缓冲区取走一个\n,缓冲区剩下2\n,之后2被放到b的地址中,此时缓冲区剩下\n
输入3,按下回车键后,缓冲区里为\n3\n,而getchar()从缓冲区取走一个\n,缓冲区剩下3\n,之后3被放到c的地址中,此时缓冲区剩下\n#include <stdio.h> int main(){ char a; printf("请输入a:"); scanf("%c", &a); char b; printf("请输入b:"); getchar(); scanf("%c", &b); char c; printf("请输入c:"); getchar(); scanf("%c", &c); printf("a=%c b=%c c=%c\n",a,b,c); return 0; } /*程序运行: 请输入a:1 请输入b:2 请输入c:3 a=1 b=2 c=3*/
数组
- 数组:用于储存多个相同类型数据的集合
- 数组的声明格式: 数组储存类型+数组名字+[数组大小]
例如:int array[3]- 数组名就是数组的首地址
- 系统为数组分配内存空间的时候,必须明确知道数组元素的个数
- 在C语言中,可以逐个初始化数组,也可以使用一个初始化语句
- 数组的初始化:
- 定义时要明确指定数组的大小,如:
int array1[4];
- 如果省略了数组的大小,数组的大小则为初始化时元素的个数,如:
int array[] = {1,2,3,4};
- 大括号里,值的数目不能大于数组声明时在方括号里指定的数组大小,如:
int array2[2] = {1,2};
- 数组元素的赋值:
array[0] = 2;//将数组第1个位置赋值为2 array[1] = 23;//将数组第2个位置赋值为23
while训练之十进制转化为二进制
#include <stdio.h> int main(){ int num; printf("请输入一个数字:"); scanf("%d",&num); //二进制 int wei = 1; long long sum = 0; while(1){ //取余 int yu = num % 2; num = num / 2; //目前的总和:当前位数的值 + 之前的值 sum = sum + yu * wei; wei = wei * 10; if(num < 2){ sum = sum + num * wei; break; } } printf("%d\n",sum); return 0; }
数组训练之产生不同随机数
#include <stdio.h> #include <stdlib.h> #include <time.h> //4.产生4个(不同)随机数 保存到数组 输出 int main(){ int array[4] = {}; srand(time(NULL)); /*生成数组 产生随机数的同时比较是否重复 如果重复就重新产生一个随机数 如果不重复就保存 每次i的值正好可以用来判断已经有几个数了*/ for(int i = 0;i < 4;i++){ int temp = rand() % 100; if(i == 0){ //第一个 直接保存 array[i] = temp; }else{ //判断前面是否已经存在这个数 int j = 0; for(;j < i;j++){ //比较j对应的值和temp是否相同 if(array[j] == temp){ //重复了 break; } } //判断是怎么出来的 if(j == i){ //将i前面的值比较一遍都没有发现重复的 //保存temp的值 array[i] = temp; }else{ //重复了 重新回到当前这一次 i --; } } } //输出 for(int i = 0;i < 4;i++){ printf("%d ",array[i]); } return 0; }
"最强大脑“小游戏实战
#include <stdio.h> #include <stdlib.h>//设置随机数需导入该头文件 #include <time.h>//设置随机数需导入该头文件 #include <windows.h>//设置延时需导入该头文件 int main(){ int count = 3;//记录每次生成多少个随机数 printf("欢迎来到最强大脑!游戏开始!\n"); while(1){ unsigned int seed = time(NULL);//1000 //设置随机数的种子 srand(seed); for(int i = 0;i < count;i ++){ //生成一个随机数 int temp = rand() % 9 + 1; printf("%d\n",temp); } //延时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 input; printf("请输入你看到的数字:"); //重新设种子 和之前生成的种子一样 srand(seed); //接收用户输入 一个一个接收 for(int i = 0;i < count;i++){ scanf("%d",&input); //获取对应生成的随机数 int old = rand() % 9 + 1; //判断输入的数和随机数是否相同 printf("old:%d\n",old); if(input != old){ printf("错误 退出!\n"); exit(EXIT_SUCCESS); } } count ++; } return 0; }
ATM实战
#include <stdio.h> #include <stdlib.h> int main(){ int password = 123;//原始密码 int input;//输入密码 int wrongtime = 3;//错误次数 int total = 1000;//余额 printf("*****************************\n"); printf(" 欢迎使用建设银行 \n"); printf("*****************************\n"); printf("请输入密码:"); for(int i = 1;i <= wrongtime;i ++){ scanf("%d",&input); //输入密码 //密码正确 if(input == password){ 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; 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"); password = n1; break; } else{ printf("两次输入不一致!"); } } break; default://退出 exit(EXIT_SUCCESS); break; } //提示是否继续 for(;1 < 2;){ printf("是否继续(y/n)"); getchar(); scanf("%c",&goon); if(goon == 'y'){ break; } if(goon == 'n'){ exit(EXIT_SUCCESS); } printf("输入无效 "); } } return 0; }