getchar()
输入一个字符,读取成功返回这个字符的ASCII值,读取失败或者遇到文件末尾会返回 EOF(就是-1)
#include<stdio.h> int main() { int ch = 0; ch = getchar(); printf("%d\n", ch); return 0; }
putchar()
#include<stdio.h> int main() { int ch = 0; ch = getchar(); printf("%d\n", ch); putchar(ch); return 0; }
getchar()还可以吸收字符
#include<stdio.h> int main() { int ch = 0; while ((ch = getchar()) != EOF) { printf("%d\n", ch); putchar(ch); } return 0; }
案例:
#include<stdio.h> int main() { char arr[40]; printf("输入密码\n"); while (scanf("%s", arr) != EOF) { while (getchar() != '\n') { ; } printf("是否确定(Y/N)\n"); char ch = 'w'; scanf("%c", &ch); if (ch == 'Y' || ch == 'y') { printf("确认\n"); } else { printf("取消\n"); } } return 0; }
运行效果就出来了.
for循环
语法:
for ( 表达式 1 ; 表达式 2 ; 表达式 3 )
循环语句 ;
表达式 1
表达式 1 为 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 为 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 为 调整部分 ,用于循环条件的调整。
我们就用使用 for 循环 在屏幕上打印 1-10 的数字。
#include <stdio.h> int main() { int i = 0; //for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/) for(i=1; i<=10; i++) { printf("%d ", i); } return 0; }
循环顺序:
break 和continue一样可以在for使用
建议:
1. 不可在 for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议 for 语句的循环控制变量的取值采用 “ 前闭后开区间 ” 写法。
3.c99可以在初始化部分进行定义变量,但是不建议这样做
一些 for 循环的变种
#include <stdio.h> int main() { //代码1 for(;;) { printf("hehe\n"); } //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致//问题。 //代码2 int i = 0; int j = 0; //这里打印多少个hehe? for(i=0; i<10; i++) { for(j=0; j<10; j++) { printf("hehe\n"); } } //代码3 int i = 0; int j = 0; //如果省略掉初始化部分,这里打印多少个hehe? for(; i<10; i++) { for(; j<10; j++) { printf("hehe\n"); } } //代码4-使用多余一个变量控制循环 int x, y; for (x = 0, y = 0; x<2 && y<5; ++x, y++) { printf("hehe\n"); } return 0; }
do...while()循环
do..while()语句的语法:
do
循环语句;
while(表达式)
简单的理解为先运行一次然后再判断
而前面的是先判断然后再循环
#include<stdio.h> int main() { int i = 1; do { printf("%d ", i); i++; if (i == 5) { //break; continue; } } while (i <= 10); return 0; }
do ... while()的break和continue和在while是一样的效果
continue只会跳出循环,不会跳过判断部分
下面利用循环语句进行写一些题
计算n的阶乘。
#include<stdio.h> int main() { // 计算n的阶乘 int a = 1; int b = 0; int sum = 1; scanf("%d", &b); while (a <= b) { sum *= a; a++; } printf("%d", sum); return 0; }
计算 1!+2!+3!+……+10!
#include<stdio.h> int main() { // 计算 1!+2!+3!+……+10! int a = 1; int sum_1 = 0; int b = 1; // 第一种 /*for (a = 1; a <= 10; a++) { int sum = 1; for (b = 1; b <= a; b++) { sum *= b; } sum_1 += sum; }*/ // 第二种 for (a = 1; a <= 10; a++) { b = a * b; sum_1 = b + sum_1; } printf("%d", sum_1); return 0; }
. 在一个有序数组中查找具体的某个数字n。
这里主要运用了二分查找,使用二分查找要是有序数组,
可以看出前后两个数相加然后除以2就会得到中间下标,然后我们再比较两个数之间的大小然后取范围,这个二分查找可以解决,不懂的小可爱可以到我的主页找到这篇博客,
代码如下:
#include<stdio.h> int main() { // 在一个有序数组中查找具体的某个数字n int a = 0; //给该数组传几个 printf("你想输入几个数字给数组:"); scanf("%d", &a); int arr[100]; int i = 0; for (i = 0; i < a; i++) { printf("请输入:"); scanf("%d", &arr[i]); printf("\n"); } int left = 0; int rigth = a - 1; int conten = (left + rigth) / 2; int k = 0; printf("输入你要查找的数字:"); scanf("%d", &k); while (left <= rigth) { if (arr[conten] == k) { printf("找到了,下标为:%d", conten); break; } else if (arr[conten] < k) { left = conten + 1; } else if (arr[conten] > k) { rigth = conten - 1; } conten = (left + rigth) / 2; } if (left > rigth) { printf("找不到"); } return 0; }
演示多个字符从两端移动,向中间汇聚。
#include<stdio.h> #include<windows.h> int main() { char arr[] = "welcome to bit!!!!!!!"; char arr1[] = "*********************"; int rigth = (sizeof arr / sizeof(char)) - 2; int left = 0; while(left <= rigth) { arr1[left] = arr[left]; arr1[rigth] = arr[rigth]; Sleep(1000); system("cls"); left++; rigth--; printf("%s\n", arr1); } return 0; }
编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则
提示登录成,如果三次均输入错误,则退出程序。
#include<stdio.h> #include<string.h> int main() { int i = 0; char password[20] = { 0 }; for (i = 0; i < 3; i++) { printf("输入密码:"); scanf("%s", &password); if (strcmp(password, "123456789") == 0) { printf("登录成功"); break; } printf("密码错误"); } if (i == 3) { printf("退出登录"); } return 0; }
猜数字游戏实现
// 随机生成一个1-100的数 // 让我们来猜 #include<stdio.h> #include <stdlib.h> void menu() { printf("*****************************\n"); printf("****** 0.exit ***********\n"); printf("****** 1.play ***********\n"); printf("*****************************\n"); } int main() { srand((unsigned int)time(NULL)); int a = 0; do { menu(); printf("请选择是否玩游戏:>"); scanf("%d", &a); switch (a) { case 1 : printf("请开始你的表演\n"); // 生成随机数字 // 猜数字 int ra = rand(); printf("%d\n", ra); while (1) { int guees = 0; printf("输入你猜的数字"); scanf("%d", &guees); if (guees > ra % 100) { printf("猜大了"); } else if (guees < ra % 100 ) { printf("猜小了"); } else { printf("猜对了,但是没有奖励\n"); break; } } break; case 0 : printf("游戏结束"); default : printf("重新选择"); } } while (a); return 0; } // rand函数生产伪随机数 //rand生成的随机数的范围是0--32767 //rand函数在生产随机数之前,要使用srand函数设置随机数的生成器 //可以理解为rand函数的算法是根据srand的种子来计算随机数的 //time--函数返回一个时间戳 //time()函数需要传入一个值,没有啥想传的就传入一个NULL(空) //srand需要传入的类型是unsigned int,所以可以强制转换 //注意一下,srand调用一次就行了, 否则生成的数太相邻了
// rand函数生产伪随机数
//rand生成的随机数的范围是0--32767
//rand函数在生产随机数之前,要使用srand函数设置随机数的生成器
//可以理解为rand函数的算法是根据srand的种子来计算随机数的
//time--函数返回一个时间戳
//time()函数需要传入一个值,没有啥想传的就传入一个NULL(空)
//srand需要传入的类型是unsigned int,所以可以强制转换
//注意一下,srand调用一次就行了, 否则生成的数太相邻了
goto语句
最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。注意一下,不能乱使用,
写法:
goto aaa;
语句1
aaa:
语句2;
会直接跳过一些语句,但是只能在本函数内部使用,
简单的关机
#include<stdio.h> #include<Windows.h> #include<string.h> int main() { a: system("shutdown -s -t 600000"); printf("你的电脑将要关机,请输入''我是猪取消''关机"); char arr[30]; scanf("%s", &arr); if (strcmp(arr, "我是猪")) { system("shutdown -a"); printf("取消关机"); } else { goto a; } return 0; }
总结:
这里简单的介绍了一些C语言的简单的语句,有不懂的可以私聊我