C语言——实例004 某年第几天

/*
	Name: 
	Copyright: 
	Author: 
	Date: 27/07/17 08:44
	Description: 
		【程序4】题目:输入某年某月某日,判断这一天是这一年的第几天?
		
		1.程序分析:以3月5日为例,应该先把前两个月的加起来,
					然后再加上5天即本年的第几天,特殊情况,	
*/

#include <stdio.h>
int main()
{
	int run[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
	int ping[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
	int year,month,day,days,tempday,i;
	while(printf("请输入年 月 日:")&&scanf("%d %d %d",&year,&month,&day)!=EOF)
	{	
		days = 0;
		tempday = 0; 
		if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
		{
			for( i  = 0;i < month - 1;i++)
			{
				tempday = tempday + run[i];
			}
			days = tempday + day - 1;
		} 
		else
		{
			for( i  = 0;i < month - 1;i++)
			{
				tempday = tempday + ping[i];
			}
			days = tempday + day - 1;
		}
		printf(" %d年%d月%d日 :%d年第%d天\n\n",year,month,day,year,days);
	}
    return 0;
}



### C语言基础算法概述 C语言作为一门广泛使用的编程语言,在计算机科学领域占据着重要地位。对于初学者而言,掌握一系列基础算法有助于打下坚实的编程基础[^3]。 #### 1. 变量交换算法 变量交换是编程中的基本操作之一。通过简单的输入输出函数实现两个整数的值互换可以加深对C语言的理解: ```c #include <stdio.h> int main(){ int a, b; printf("请输入两个整数(用逗号分隔): "); scanf("%d,%d", &a, &b); // 使用临时变量t来完成两数值之间的交换 int t = a; a = b; b = t; printf("交换后的结果为:a=%d,b=%d\n", a, b); return 0; } ``` 此段代码展示了如何利用第三个中间变量来进行两个变量间的数据交换[^4]。 #### 2. 条件分支结构 条件语句允许程序根据不同的情况执行不同路径上的指令。例如判断一个年份是否为闰年的例子能够很好地说明这一点: ```c #include <stdio.h> int isLeapYear(int year){ if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) return 1; else return 0; } int main() { int year; printf("请输入一个年份:"); scanf("%d",&year); if(isLeapYear(year)){ printf("%d 是闰年。\n", year); } else{ printf("%d 不是闰年。\n", year); } return 0; } ``` 这段代码实现了基于特定规则判定某一年是不是闰年的功能。 #### 3. 循环控制结构 循环使得重复性的任务变得简单易行。比如计算阶乘就是一个典型的应用场景: ```c #include <stdio.h> unsigned long factorial(unsigned n){ unsigned result=1; while(n>1){ result *= n--; } return result; } int main(){ unsigned num; printf("请输入要计算其阶乘的正整数: "); scanf("%u",&num); printf("%u 的阶乘等于 %lu.\n", num,factorial(num)); return 0; } ``` 上述实例演示了怎样运用`while`循环去求解指定数字的阶乘值。 #### 4. 数组处理技巧 数组提供了存储多个相同类型的元素的方式。下面的例子介绍了查找最大值的方法: ```c #include <stdio.h> #define SIZE 5 /* 定义常量 */ void findMaxValue(const double list[], size_t length,double *maxPtr,int *indexPtr){ *maxPtr=list[0]; *indexPtr=0; for(size_t i=1;i<length;++i){ if(list[i]>*maxPtr){ *maxPtr=list[i]; *indexPtr=(int)i; } } } int main(void){ const double scores[SIZE]={87.5,92.6,78.3,95.1,89.2}; double highestScore; int positionOfHighest=-1; findMaxValue(scores,SIZE,&highestScore,&positionOfHighest); if(positionOfHighest>=0) printf("最高分数 %.1f 出现在位置 %d 上.",highestScore,positionOfHighest+1); else puts("列表为空."); return 0; } ``` 这里定义了一个名为`findMaxValue()`的辅助函数用于遍历并找出给定浮点型数组里的最大项及其索引位置。 #### 5. 字符串操作实践 字符串在很多应用场合都非常重要。考虑这样一个需求——统计一句话中有多少单词: ```c #include <ctype.h> #include <stdbool.h> #include <stdio.h> #include <string.h> // 判断字符是否为空格或者制表符 bool IsSpace(char ch){ return isspace((unsigned char)ch)!=0; } size_t CountWords(const char str[]){ bool inWord=false; size_t wordCount=0; for(size_t i=0;str[i]!='\0';++i){ if(IsSpace(str[i])){ inWord=false; }else if(!inWord){ ++wordCount; inWord=true; } } return wordCount; } int main(){ char sentence[]="The quick brown fox jumps over the lazy dog."; printf("这句话含有%d个词.",(int)CountWords(sentence)); return 0; } ``` 该案例中自定义了几个工具函数帮助解析文本内容,并最终得出句子内的总词汇数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值