C语言编程学习笔记(鹏版)2021/7/16
练习题:[*]计算n的阶乘(不考虑溢出)
int main()
{
int n,i,s;
scanf("%d",&n);
for(i=1;i<=n;i++)
s=s*i;
printf("%d",s);
return 0;
}计算1!+2!+3!+......+10!结果
int main()
{
int i,n=1,m=0;
for(i=1;i<11;i++)
{
n=n*i;
m=m+n;
}
printf("%d",m)
return 0;
}3.在一个有序数组中查找具体的某个数字n。编写int binsearch(intx,int v[],int n);功能:在v<=v<=v<=......<=v的数组中查找x
例题(有些繁琐----所以引出二分法)
int main()
{
int arr[]={1,2,3,4,5,6,7,8,,10};
int i=0,k=7;sz=sizeof(arr)/sizeof(arr);
for(i=0;i<sz;i++)
{
if(k=arr)
printf("找到了,下标为%d\n",i);
break;
}
if(i==sz)
printf("找不到\n");
return 0;
}折半查找算法/二分查找算法(最多log₂n次,n为元素次数)
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int k=7; //所要找到的目标数
int sz=sizeof(arr)/sizeof(arr); //计算数组中元素个数
int left=0; //左下标
int right=sz-1; //右下标
while(left<=right) //当二分后两者相等之后说明都扫描过了没有
{
int mid=(left+right)/2; //二分
if(arr>k) //判断目标数在左边还是右边
right=mid-1; //缩小范围
else if(arr<k)
left=mid+1;
else
printf("找到了,下标为%d",mid);
}
if(left>right)
printf("没找到")
return 0;
}4.编写代码,演示多个字符从两端移动,向中间汇聚。#include<stdio.h>
#include<string.h> //strlen的头文件
#include<windows.h> //Sleep的头文件
#include<stdlib.h> //system的头文件
int main()
{
char arr1[]="hollo!\(^v^)/~~~~"; //注意字符串用双引号,不用花括号,
char arr2[]="#################";
int left=0; //左下标
int right=strlen(arr1)-1; //右下标;strlen用来计算arr1字符串的元素个数,且会把\0自动不计入个数中,其头文件为string.h
while(left<=right)
{
arr2=arr1;
arr2=arr2;
printf("%s\n",arr2);
Sleep(1000); //指休息一秒;Sleep指休息,停留,其头文件为windows.h;括号内的1000指1000毫秒=1秒;
system("cls") //system指执行系统命令的一个函数,头文件为stdlib.h;cls指清空屏幕
left++;
right++;
}
printf("%s\n",arr2);
return 0;
}5.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)
#includ<stdio.h>
#includ<string.h>
int main()
{
int i=0;
char password={0};
for(i=0;i<3;i++)
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,"123456")==0) //strcmp用来比较两个字符串是否相等,因为==不能用在这里(在这个版本里);头文件为string.h
{
printf("登录成功\n");
break;
}
}
if(i==3)
printf("三次密码均错误,退出程序\n");
}
计算三个数从大到小排列时使用冒泡算法时,可以不用空杯子,用a=a+b;b=a-b;a=a-b;省内存
计算两个数的最大公约数时用辗转相除法在为余数0(为假)时结束
int main()
{
int n,m,r=0;
scanf("%d%d",&m,&n)
while(m%n)
{
r=m%n;
m=n;
n=r;
}
printf("%d\n",n);
return 0;
}闰年指能被4整除且不能被100整除的数或者可以被400整除的数;
判断素数可以
1.用试除法,因为素数指只能被1和它本身整除;所以用2到其本身-1的数字依次去除,看有没有能被整除的,没有就说明是素数;
2.因为只要这个数可以用a*b表示,就说明这个数不是素数,且可以说明a和b中至少有一个数字小于等于开平方i,这样只要2到i的开平方前没有可以使i整除的数时,就说明i是素数;再说偶数一定不是素数,所以可以直接去掉偶数(优化计算时间效率)
#include<stdio.h>
#include<math.h>
int main()
int count=0
{
for(i=101;i<=200;i+=2)
{
int j=0;
for(j=2;j<=sqrt(i);j++) //sqrt指开平方
{
if(i%j==0)
{
break;
}
}
if(j>sqrt(i))
{
count++;
printf("%d",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}可以参考《素数求解的n种境界》
说明日常思考很重要
文档来源:51CTO技术博客https://blog.51cto.com/u_15293084/3162853
页:
[1]