计算n以内数字的阶乘
方法1:
int main()
{
int m = 0;
scanf("%d",&m);
int ret = 1;
while (m > 0)
{
ret *= m;
m--;
}
printf("%d",ret);
return 0;
}
方法2:
#include <stdio.h>
int main()
{
int m = 0;
scanf("%d",&m);
int n = 0;
int ret = 1;
for (n = 1; n <= m; n++)
{
ret *= n;
}
printf("%d", ret);
return 0;
}
有序数组中查找
# include <stdio.h>
int main ()
{
int k = 7; //被查找值
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr)/sizeof(arr[0]); //计算数组中元素个数
int left = 0; //左下标
int right = sz-1; //右下标
while(right >= left)
{
int mid = (left+right)/2; //循环中每次都需要重新计算mid
if (k < arr[mid])
{
right = mid-1;
}
else if (k > arr[mid])
{
left = mid+1;
}
else
{
printf("%d\n",mid);
break;
}
}
if(right < left)
{
printf("找不到");
}
return 0;
}
多个字符从两端到中间汇聚
::: tip 代码思路: 设计一个多个字符组成的数组(arr1[])和另一个同样多数量符号(如#)组成的数组(arr2[]),字符向中间汇聚的过程可以描述成符号组成的数组的两端,不断被字符组成的数组赋值的过程。 即arr2[left] = arr1[left],arr2[right] = arr1[right],left++,right--,直到left == right。 :::
#include <stdio.h>
#include <string.h> //消除“内置函数“strlen”的不兼容隐式声明”的警告
int main()
{
char arr1[] = "welcome!!";
char arr2[] = "#########";
int left = 0;
int right = strlen(arr1)-1;
while(left <= right)
{
printf("%s\n",arr2); //打印出全#
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left ++;
right --;
}
printf("%s\n",arr2); //打印全部字符
return 0;
}
#########
w#######!
we#####!!
wel###e!!
welc#me!!
welcome!!
--------------------------------
Process exited after 0.01459 seconds with return value 0
::: warning 字符串数组来说,当采用“sz=sizeof(arr)/sizeof(arr[0])”计算数组中元素个数确定下标时,数组中的字符末尾的“\0”也占用一个下标,即sz需要减去2才能得到right。 求字符串长度可以使用函数strlen(arr),计算长度时遇到“\0”就会停止,即sz减1就可以得到所需right。 ::: ::: tip 在循环体内添加“Sleep xxx(ms)”可以实现间隔xxx毫秒打印(需要添加相应头文件“#include <windows.h>”)。 在循环体内添加“system("cls")”可以实现打印一次后清空屏幕打印下一次(需要添加相应头文件“#include <stdlib.h>”)。 :::
设计三次登录失败返回程序
#include <stdio.h>
int main ()
{
int a = 0;
int passwd[20] = {0};
for(a=1;a<=3;a++)
{
printf("请输入密码");
scanf("%s",passwd);
if(passwd == "123456")
{
printf("登录成功");
break;
}
else
{
printf("密码错误\n");
}
}
if (a > 3)
{
printf("登录失败");
}
return 0;
}
请输入密码1254
请输入密码123456
请输入密码12584
登录失败
--------------------------------
Process exited after 6.626 seconds with return value 0
上述代码逻辑正确,输出结果报错的原因是:第11行代码中,错误使用“==”对两个数组进行比较,正确方法如下:
#include <stdio.h>
int main ()
{
int a = 0;
int passwd[20] = {0};
for(a=1;a<=3;a++)
{
printf("请输入密码");
scanf("%s",passwd);
if(strcmp(passwd,"123456") == 0)
{
printf("登录成功");
break;
}
else
{
printf("密码错误\n");
}
}
if (a > 3)
{
printf("登录失败");
}
return 0;
}
请输入密码1524
密码错误
请输入密码123456
登录成功
--------------------------------
Process exited after 4.867 seconds with return value 0
::: tip strcmp函数用于比较两个字符串并根据比较结果返回整数。 基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。 :::