栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言编程细节

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言编程细节

 1. 我们一般在计算a+b的时候,一般直接使用+号进行运算,那么有没有另外一种方法,能够直接不使用+号就能进行加法运算呢?

int add(int a,int b)
{
   while(b!=0)
   {
       int _a=a^b;
       int _b=(a&b)<<1;
       _a=a;
       _b=b;
   }
  return a;
}

2.这里我们还要研究一下怎样判断输入的字符串是数字还是字母。

int is_alphanumeric(char c) {
{
     if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9'))
        return true;
     else 
        return false;
}

 3.switch基本语句基本介绍

swtich(表达式)  {    //   ()中的数据类型仅仅支持整数
                 case 常量1 :
                   要执行的语句;
                   break;
                 case 常量2 :
                   要执行的语句;
                   break;
                 case 常量3 :
                   要执行的语句;
                    break;
                 default:
                   要执行的语句;
                   break;
}

4.判断闰年方法:
(1)该数可以被4整除,但不能被100整除;(例如2008,2012)
(2)可以被400整除;

 //方法一:调用子函数
 
#include

int main(void)

{
	int leap,year;

	printf("Please enter the year:");

	scanf("%d",&year);  
	       
   leap=judge_year(year);   


    if(leap==1)                             //leap==1,而不是leap=1;如果leap=1,则前面
		                                   //      的leap全部赋值为1,输出的全为闰年
		printf("%d leap is",year);
	else
		printf("%d leap not is",year);

	printf(" a leap year.n");

	return 0; 
}


	int judge_year(int day)
{
	int i;

   if((day%4==0 && day%100!=0) || (day%400==0))

	    i=1;
	else 
	    i=0;

return (i);
}



//  if的嵌套结构

#include

int main(void)

{
	int leap,year;

	printf("Please enter the year:");

	scanf("%d",&year);       //以下是不同方法的if嵌套,上下的代码可以直接衔接;


//  方法一if嵌套

	if(year%4==0)
	{
		if(year%100==0)
		{
			if(year%400==0)
				leap=1;
			else
				leap=0;
		}
		else
		leap=1;
	}
	else
	leap=0;     
	
	

    //方法二:或引用操作
    
	  if((year%4==0 && year%100!=0 )|| (year%400==0))
		leap=1;
	else
		leap=0;


//  方法三:

if(year%4!=0)
		leap=0;
	
	else if(year%100!=0)
		leap=1;

	else if(year%400!=0)
		leap=0;

	else
		leap=1;                    


//方法三 错误修改和说明,方法二错误的修改,2100判断错误!

	if(year%4==0)             //错误:如果满足条件就不执行%100了。
	                            //     例如2100,可以%4,所以直接就输出闰年了
		leap=1;
	
	else if(year%100==0)
		leap=0;

	else if(year%400==0)
		leap=1;

	else
		leap=0;       



  

    if(leap==1)                              //对判断结果的输出
	                       
		printf("%d leap is",year);
	else
		printf("%d leap not is",year);

	printf(" a leap year.n");

	return 0; 
	}


5.将字母的小写转化为大写

知识点:字母的小写比大写大了32

#include
int main()
{
	int one='a';
	printf("%c",one-32);//在这里可以输出小写字母的大写字母A
	return 0;
}

6.打印X字母

#include
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i 

7.巴士博弈相关详解:

巴什博弈一般题目为:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。

理解:显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下 (m+1)的倍数,就能最后获胜。

#include
int main(){
	int n,m;//n是石头的个数,m是每次最多取石头的个数
	
	while(~scanf("%d%d",&n,&m)){
		if(n%(m+1) == 0)
			printf("后者胜n");
		else
			printf("前者胜n");
	}
	return 0;
}

8.对于巴什博弈,还有个玩法,如果我们规定,如果最后取光者输,那么又会如何呢?
可以这样想:获胜者一定取了第n-1个石头,那么就可以这样想:谁先取了第n-1个石头谁就是胜利者,代码仅有一点改动: 

#include
int main(){
	int n,m;//n是石头的个数,m是每次最多取石头的个数
	
	while(~scanf("%d%d",&n,&m)){
		if((n-1)%(m+1) == 0)
			printf("后者胜n");
		else
			printf("前者胜n");
	}
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号