int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
}
else
printf("haha\n");
//if (a == 1)
// if (b == 2)
// printf("hehe\n");
// else //else和最近的未匹配的if进行匹配,与缩进位置无关
// printf("haha\n");
return 0;
}
int main()
{
int age = 10;
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 28)
printf("青年\n");
else if (age >= 28 && age < 50)
printf("壮年\n");
else
printf("老年\n");
//if(18 <= age < 28) //error:18 <= age等价于 0,0 < 28永远为真!
//if (age < 18)
// printf("未成年\n");
//else
// printf("成年\n");
return 0;
}
//代码1
if(condition){
return x;
}
return y;
//代码2
if(condition)
{
return x;
}
else
{
return y;
}
//代码3
int num = 4;
if (num = 5) //= 赋值 == 判断相等
{
printf("hehe\n");
}
//代码4
int num = 4;
if (5 == num)
{
printf("hehe\n");
}
//1.判断一个数是否为奇数
int main()
{
int num;
scanf("%d", &num);
if (num % 2 != 0)
printf("%d是奇数!\n", num);
else
printf("%d不是奇数!\n", num);
return 0;
}
//2.输出1-100之间的奇数
int main()
{
for (int num = 1; num < 101; num++)
{
if (num % 2 != 0)
printf("%d ", num);
}
return 0;
}
//3.以下程序的打印结果是?
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (i = 5)
printf("%d ", i); //死循环的打印5
}
return 0;
}
//4.求a b c中最大的数
int main()
{
int a=0,b=0, c=0;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
int tmp = a;
a = b;
b = tmp;
}
if (b > c)
{
int tmp = b;
b = c;
c = tmp;
}
//如果是三个数排序,就要加上以下代码
//if (a > b)
//{
// int tmp = a;
// a = b;
// b = tmp;
//}
printf("%d\n", c);
return 0;
}
//int main()
//{
// int day = 0;
// scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
break;
}
// //switch (day) //这个括号里面只能是整型表达式
// //{
// //case 1: //case 后面只能是整型常量表达式
// // printf("星期一\n");
// // break;
// //case 2:
// // printf("星期二\n");
// // break;
// //case 3:
// // printf("星期三\n");
// // break;
// //case 4:
// // printf("星期四\n");
// // break;
// //case 5:
// // printf("星期五\n");
// // break;
// //case 6:
// // printf("星期六\n");
// // break;
// //case 7:
// // printf("星期日\n");
// // break;
// //}
//
// //switch (day)
// //{
// //case 1:
// // printf("星期一\n");
// //case 2:
// // printf("星期二\n");
// //case 3:
// // printf("星期三\n");
// //case 4:
// // printf("星期四\n");
// //case 5:
// // printf("星期五\n");
// //case 6:
// // printf("星期六\n");
// //case 7:
// // printf("星期日\n");
// //}
//if (1 == day)
// printf("星期一\n");
//if (2 == day)
// printf("星期二\n");
//if (1 == day)
// printf("星期三\n");
//if (1 == day)
// printf("星期四\n");
...
// return 0;
//}
//1.以下程序的打印结果是?
int main()
{
int n = 1;
int m = 2;
switch(n) //n=1
{
case 1:
m++; //m=3
case 2:
n++; //n=2
case 3:
switch (n)
{
case 1: //不执行
n++;
case 2:
m++; //m=4
n++; //n=3
break;
}
case 4:
m++; //m=5
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n); //m=5,n=3
return 0;
}
//2.以下程序的打印结果是?
int func(int a)
{
int b;
switch (a)
{
case 1:b = 30;
case 2:b = 20;
case 3:b = 16;
default:b = 0;
}
return b;
}
int main()
{
int ans=func(1);
printf("%d\n", ans); //0
return 0;
}
//3.以下程序的返回结果是?
int func(int a)
{
int b;
switch (a)
{
case 1:b = 30;
case 2:b = 20;
case 3:b = 16;
default:b = 0;
}
return b; //0
}
//4.以下程序的打印结果是?
int main()
{
int x = 3;
int y = 3;
switch (x % 2) {
case 1:
switch (y)
{
case 0:
printf("first");
case 1:
printf("second");
break;
default:
printf("hello");
}
case 2:
printf("third");
}
return 0; //hellothird
}
int main()
{
int i = 0;
while (i < 10)
{
i++;
if (i == 5)
continue;
printf("%d ", i); //1 2 3 4 6 7 8 9 10
}
//int i = 1;
//while (i < 11)
//{
// if (i == 5)
// continue;
// printf("%d ", i); //1 2 3 4 死循环
// i++;
//}
//while (i < 11)
//{
// if (i == 5)
// break;
// printf("%d ", i); //1 2 3 4
// i++;
//}
//while (i<11)
//{
// printf("%d ", i);
// i++;
//}
//while (1) //死循环
// printf("hehe\n");
return 0;
}
总结:continue在while循环中的作用是:
//代码1
int main()
{
int ch = 0;
//ctrl + z - ch获取到EOF
//EOF - end of file - 值为-1
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
//int ch=getchar();
//putchar(ch);
//printf("%c\n", ch);
return 0;
}
//代码2
int main()
{
int ret = 0;
int ch = 0;
char password[20] = { 0 };
printf("请输入密码:");
scanf("%s", password);//请输入密码,并存放在password数组中
//缓冲区还剩余一个'\n'
//读取一个'\n'
while ((ch = getchar()) != '\n')
{
;
}
printf("请确认(Y/N):>");
ret = getchar();//Y/N
if (ret == 'Y')
{
printf("确定成功\n");
}
else
{
printf("放弃确认\n");
}
//printf("%d\n", '\n'); //10
return 0;
}
//代码3
int main()
{
int ch = 0;
while ((ch=getchar())!=EOF)
{
if (ch < '0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}
输入缓冲区:
//1.以下程序的输出结果是?
int main()
{
int i = 0;
for (i = 0; i<10; i++)
{
if (i = 5)
printf("%d ", i); //死循环的打印5
}
return 0;
}
//2.求两个数的最大公约数和最小公倍数
Min(int x, int y)
{
return x < y ? x : y;
}
Max(int x, int y)
{
return x > y ? x : y;
}
int main()
{
int a = 0;
int b = 0;
int yue = 0;
int bei = 0;
int min = 0;
int max = 0;
int pos = 1;
scanf("%d%d", &a, &b);
min = Min(a, b);
max = Max(a, b);
//求最大公约数
while (pos <= min)
{
if (a % pos == 0 && b % pos == 0)
yue = pos;
pos++;
}
pos = max;
//求最小公倍数
while(max<=a*b)
{
if (pos % a == 0 && pos % b == 0) {
bei = pos;
break;
}
pos++;
}
printf("%d %d\n",yue,bei);
return 0;
}
//3.打印1000年到2000年之间的闰年
int main()
{
for (int year = 1000; year <= 2000; year++)
{
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
printf("%d ",year);
}
return 0;
}
//4.打印n以内的素数
int isPrime(int num)
{
for (int i = 2; i < num; i++)
{
if (num % i == 0)
return 0;
}
return 1;
}
int main()
{
int n = 0;
scanf("%d", &n);
for (int i = 2; i <= n; i++)
{
if (isPrime(i))
printf("%d\n", i);
}
return 0;
}
//5.输入三个数,并从大到小输出。
int main()
{
//解法1
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d %d", &a, &b, &c);
if (a > b)
{
int tmp = a;
a = b;
b = tmp;
}
if (b > c)
{
int tmp = b;
b = c;
c = tmp;
}
if (a > b)
{
int tmp = a;
a = b;
b = tmp;
}
printf("%d %d %d\n", a,b,c);
//int arr[3] = { 0 };
//for (int i = 0; i < 3; i++)
//{
// scanf("%d", &arr[i]);
//}
解法2:冒泡排序
//for (int i = 3; i >= 2; i--)
// for (int j = 1; j < i; j++)
// {
// if (arr[j - 1] > arr[j]) {
// int tmp = arr[j];
// arr[j] = arr[j - 1];
// arr[j - 1] = tmp;
// }
// }
//for (int i = 2; i >= 0; i--)
//{
// printf("%d ", arr[i]);
//}
return 0;
}
int main()
{
int i = 0;
// 初始化 判断 调整
for (int i = 1; i <= 10; i++)
{
if (i == 5)
//break; //1 2 3 4
continue; //1 2 3 4 6 7 8 9 10
printf("%d ", i);
}
return 0;
}
//变种1
int main()
{
//for循环的初始化,调整、判断都可以省略
//但是for循环的判断部分被省略,那判断条件就是:恒为真
for (;;) // 死循环
{
printf("hehe\n");
}
return 0;
}
int main()
{
int i = 0;
int j = 0;
for (; i < 10; i++)
{
//第二次外循环开始后,内循环中的j仍未10,故不打印 hehe
for (; j < 10; j++)
{
printf("hehe\n"); //打印10个hehe
}
}
//for (int i = 0; i < 10; i++)
//{
// for (int j = 0; j < 10; j++)
// {
// printf("hehe\n"); //打印100个hehe
// }
//}
return 0;
}
//变种2
int main()
{
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; x++, y++)
{
printf("hehe\n"); //打印两个 hehe
}
return 0;
}
for循环与while循环对比:
一些建议:
- 不可在for循环体内修改循环变量,防止for循环失去控制。
- 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
//2.
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
//1.
//int main()
//{
// int i = 0;
// for (int i = 0; i < 10; i++)
// {
// if (i = 5)
// printf("haha\n");
// printf("hehe\n");
// }
// return 0;
//}
//1.请问以下循环要循环多少次?
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++) //k=0为假,循环零次
k++;
return 0;
}
int main()
{
int i = 1;
do
{
if (i == 5)
break;
//continue; //1 2 3 4 死循环
printf("%d ", i);
i++;
}
while (i <= 10);
return 0;
}
//1.计算n的阶乘
int main()
{
int n = 0;
int ret = 1;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
ret *= i;
}
printf("%d\n", ret);
return 0;
}
//2.计算1!+2!+ ...n!
int main()
{
int n = 0;
int num = 1;
int ret = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
num *= i;
ret += num;
}
printf("%d\n", ret);
return 0;
}
//3.在有序数组中寻找指定元素
//二分查找
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]); //计算元素个数
int lt = 0;
int rt = sz;
while (lt <= rt)
{
int mid = (lt + rt) / 2;
if (arr[mid] == k)
{
printf("找到了,下标为: %d\n", mid);
break;
}
else if (arr[mid] < k)
{
lt = mid + 1;
}
else
{
rt = mid - 1;
}
}
if (lt > rt)
printf("找不到\n");
return 0;
}
//顺序查找
//int main()
//{
// int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
// int k = 7;
// //写一个代码,在arr数组(有序的)中找到7
// int sz = sizeof(arr) / sizeof(arr[0]);
// for (int i = 0; i < sz; i++)
// {
// if (k == arr[i])
// {
// printf("找到了,下标是:%d\n", i);
// break;
// }
// if (i == sz)
// printf("找不到\n");
// }
// return 0;
//}
//4.编写代码,演示多个字符从两端向中间汇聚显示
//考点:数组拷贝
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
//welcome to aoligei!!!
//#####################
//w###################!
//we#################!!
//wel###############!!!
//...
//welcome to aoligei!!!
//
//char arr[]="abc";
//[a b c \0]
// 0 1 2 3
//4-2
char arr1[] = "welcome to aoligei!!!";
char arr2[] = "#####################";
int left = 0;
//int right = sizeof(arr1) / sizeof(arr1[0]) - 1; //err
//int right = sizeof(arr1) / sizeof(arr1[0]) - 2;
int right = strlen(arr1)-1;
while (left<=right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
//休息一秒
Sleep(1000);
system("cls");//执行系统命令的一个函数 - cls - 清空屏幕
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
//5.模拟用户登录情景,并且只能登录三次。
//(只允许输入三次密码,如果密码正确则提示登录成功,
//如果三次均输入错误,则退出程序。)
//考点:比较字符串是否相等 - strcmp
#include<string.h>
int main()
{
char password[20] = { 0 };
for (int i = 0; i < 3; i++)
{
printf("请输入密码:");
scanf("%s", password);
//if (password == "123456") //== 不能用来比较两个字符串是否相等
//strcmp中比较的两个字符串若相等,则返回0
if (strcmp(password, "123456") == 0)
{
printf("登录成功\n");
break;
}
if (i == 2)
printf("登录失败!\n");
}
return 0;
}
//6.以下程序的输出结果是?
int main()
{
int a = 0, b = 0;
for (a = 1, b = 1; a <= 100; a++)
{
if (b >= 20) break;
if (b % 3 == 1)
{
b = b + 3;
continue;
}
b = b - 5;
}
printf("%d\n", a); //8
return 0;
}
//7. 1到 100 的所有整数中出现多少个数字9
int main()
{
int count = 0;
for (int i = 1; i <= 100; i++)
{
int num = i;
while (num != 0)
{
if (num % 10 == 9)
count++;
num /= 10;
}
}
printf("%d\n", count);
return 0;
}
//8.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
int main()
{
double sum = 0.0;
int flag = 1;
for (int i = 1; i <= 100; i++)
{
sum += flag * 1.0 / i;
flag = -flag;
}
//注意这里的输出格式是 %lf
printf("%lf\n", sum); //0.688172
return 0;
}
//9.求10 个整数中最大值
#define N 10
int main()
{
int arr[N] = { 0 }; //这里使用宏定义来为数组开辟空间
int max = 0;
for (int i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
if (arr[i] > max) {
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
//10.在屏幕上输出9*9乘法口诀表
int main()
{
for (int i = 1; i <= 9; i++)
{
for (int j = i; j <= 9; j++) //注意:这里的j从i开始!
{
printf("%d * %d = %d\t", i, j, i * j);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//11.猜数字游戏
//11.1电脑会生成一个随机数
//11.2猜数字
void menu()
{
printf("*********************************\n");
printf("**** 1.play 0.exit ****\n");
printf("*********************************\n");
}
//RAND_MAX 0-32767
void game()
{
//1.生成一个随机数
int ret = 0;
int guess = 0;//接收猜的数字
int count = 0;//记录猜数字的次数
//拿时间戳来设置随机数的生成起始点
//time_t time(time_t * timer)
//time_t
//ret = rand(); //生成 0-32767 之间的随机数
ret = rand() % 100 + 1;//生成 1-100 之间的随机数
//printf("%d\n",ret);
//2.猜数字
while (1)
{
printf("请猜数字:");
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了!\n");
count++;
if (count > 2)
printf("能不能不要下几把拆!\n");
}
else if (guess < ret)
{
printf("猜小了!\n");
count++;
if (count > 2)
printf("您怎么回事?不会猜?\n");
}
else
{
printf("额,终于猜对了。。。\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:");
scanf("%d", &input);
switch (input)
{
case 1:
game(); //猜数字游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
C语言中提供了可以随意滥用的goto语句和标记跳转的标号。
从理论上goto语句是没有必要的,但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程,例如一次跳出两层或多层循环。
这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
...
error:
if(disaster)
//处理错误情况
//关机小程序
#include<string.h>
int main()
{
char input[20] = { 0 };
//shutdown -s -t 60
//system() - 执行系统命令的
system("shutdown -s -t 60");
while (1)
{
printf("请注意,您的电脑将在1分钟内关机,如果输入:【我是猪】,就取消关机\n请输入:");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)//比较两个字符串 - strcmp() -相等则返回0
{
system("shutdown -a");
break;
}
}
return 0;
}
//int main()
//{
// char input[20] = { 0 };
// //shutdown -s -t 60
// //system() - 执行系统命令的
// system("shutdown -s -t 60");
//again:
// printf("请注意,您的电脑将在1分钟内关机,如果输入:【我是猪】,就取消关机\n请输入:");
// scanf("%s", input);
// if (strcmp(input, "我是猪") == 0)//比较两个字符串 - strcmp() -相等则返回0
// {
// system("shutdown -a");
// }
// else
// {
// goto again;
// }
// return 0;
//}
因篇幅问题不能全部显示,请点此查看更多更全内容