C语言日记③ 分支和循环
c语言是一门结构化的程序设计语言
- 顺序结构
- 选择结构
- 循环结构
if选择
与java一致
题目:
判断一个数是否为奇数
输出100以内的奇数
int main() {
for (size_t i = 0; i < 100; i++)
{
if (i % 2 != 0) {
printf("%d\n", i);
}
}
return 0;
}
switch选择
与java一致
给个数,判断是星期几
int num = 0;
scanf("%d", &num);
switch (num)
{
case 1:
printf("%s\n", "星期一");
break;
case 2:
printf("%s\n", "星期二");
break;
case 3:
printf("%s\n", "星期三");
break;
case 4:
printf("%s\n", "星期四");
break;
case 5:
printf("%s\n", "星期五");
break;
case 6:
printf("%s\n", "星期六");
break;
case 7:
printf("%s\n", "星期七");
break;
default:
break;
}
控制台与char
getchar()从控制台获取一个字符的ASCII码
putchar(ASCII码 )从控制台打印一个char
循环打印,除了ctrl+z
ctrl+z
会获取一个EOF
int charn = getchar();
while ((charn=getchar())!=EOF) {
putchar(charn);
}
有时候getchar 会读取到\n
这时候需要清空缓冲区
再来一次
getchar()
getchar
只能读取一个字符 scanf
不会读取到空格
for循环
与java一致,不可foreach
有趣的for代码:
1.
for (;;) {
printf("呵呵\n");
}
死循环 一直输出呵呵
for循环的初始化,调整,判断都可以省略
但是判断省略循环条件就一直为真
int i = 0;
int j = 0;
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("呵呵\n");
}
}
这个代码会输出多少个哈哈呢?
答案是:10个
为什么呢?
因为第一次i的for循环的时候j已经变为10了,此时进行第二次i循环,j不会重新变成0,j部分直接跳过
循环题目
计算一个数的阶乘
阶乘计算公式为 !n=1*2*3*4...*n
int num = '0';
scanf("%d", &num);
int count = 1;
for (size_t i = 1; i < num+1; i++)
{
count *= i;
}
printf("%d\n", count);
计算1!+2!+3!...+10!
int result = 0;
for (size_t i = 0; i <= 10; i++)
{
int count = 1;
for (size_t j = 1; j < i+1; j++)
{
count *= j;
}
printf("%d--%d\n", i,count);
result += count;
}
int binsearch(int x,int *v, int n) {
//这里注意一下,传递过来的数组长度是不能计算的,贼坑
//int length = sizeof(v) / sizeof(v[0]);
int result = -1;
for (size_t i = 0; i < n; i++)
{
if (x == v[i])
result = v[i];
if (i==n-1)
{
break;
}
}
return result;
}
main:
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
int result = binsearch(13,arr,100);
printf("%d\n", result);
for (size_t i = 0; i < 10; i++)
{
if (i == 9)
break;
if (i != 9)
printf("\n");
for (size_t j = 0; j < i; j++)
{
printf(" ");
}
for (size_t j = 10; j > i; j--)
{
printf("**");
}
}
for (size_t i = 0; i < 10; i++)
{
for (size_t j = 10; j > i; j--)
{
printf(" ");
}
for (size_t j = 0; j < i; j++)
{
printf("**");
}
if (i != 9)
printf("\n");
}
int main() {
char pwd[20] = { 0 };
int num = 0;
while (num < 3) {
printf("请输入密码:");
scanf("%s", pwd);
if (strcmp("123456",pwd)!= 0) {
printf("%s\n", pwd);
num++;
}
else {
printf("输入正确!");
}
};
return 0;
}
数组循环查找之二分查找法
想在一个0-100的数组内找出99,如果按照传统的查找方法来查找,需要查询99此才能找到,而二分查找法可以7(?次就找到
具体查找实现
求0和数组长度的平均值
判断与所需的值是大了还是小了,如果小了,则进行寻找大于的50%,反之
最后找到等于所求值的数
tips:
如果寻找不到,会有最大值和最小值互换的情况判断这点可以确定是否找到,注意,最大值一定是大于最小值的
#define MID(X,Y) ((X+Y)/2)
int arr[] = { 1,2,3,4,5,6,7,8,9,10,13 };
int sz = sizeof arr / sizeof arr[0];
int left = 0;
int right = sz - 1;
int k = 3;
while (left<=right)
{
int mid = MID(left, right);
if (arr[mid] > k){
right = mid - 1;
}
else if (arr[mid] < k) {
left = mid + 1;
}
else {
printf("找到了,下标在:%d 当前下标输出值:%d\n", mid,arr[mid]);
break;
}
}
if (right<left)
{
printf("没找到\n");
}
[[C语言日记④ 分支和循环]]