评论

收藏

[C++] C语言编程学习笔记(鹏版)2021/7/16

编程语言 编程语言 发布于:2021-07-22 13:24 | 阅读数:277 | 评论:0

练习题:
  • 计算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[0]<=v[1]<=v[2]<=......<=v[n-1]的数组中查找x
例题(有些繁琐----所以引出二分法)
int main()

{

int arr[]={1,2,3,4,5,6,7,8,,10};

int i=0,k=7;sz=sizeof(arr)/sizeof(arr[0]);

for(i=0;i<sz;i++)

{

if(k=arr[i])

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[i])/sizeof(arr[0]);      //计算数组中元素个数

int left=0;               //左下标

int right=sz-1;             //右下标

while(left<=right)            //当二分后两者相等之后说明都扫描过了没有

{

int mid=(left+right)/2;        //二分

if(arr[mid]>k)             //判断目标数在左边还是右边

  right=mid-1;            //缩小范围

else if(arr[mid]<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[left]=arr1[left];

arr2[right]=arr2[right];

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[20]={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种境界》
说明日常思考很重要



关注下面的标签,发现更多相似文章