C语言根据日期判断星期几使用基姆拉尔森计算公式

C语言根据日期判断星期几使用基姆拉尔森计算公式
C语言根据日期判断星期几使用基姆拉尔森计算公式

C语言根据日期判断星期几(使用基姆拉

尔森计算公式)

算法如下:

基姆拉尔森计算公式

W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7

在公式中d表示日期中的日数,m表示月份数,y表示年数。

注意:在公式中有个与其他公式不同的地方:

把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。

以公元元年为参考,公元元年1月1日为星期一;;程序如下:

#include "stdio.h"

void CaculateWeekDay(int y,int m, int d)

{

if(m==1||m==2) {

m+=12;

y--;

}

int

iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;

switch(iWeek)

{

case 0: printf("星期一\n"); break; case 1: printf("星期二\n"); break; case 2: printf("星期三\n"); break; case 3: printf("星期四\n"); break; case 4: printf("星期五\n"); break; case 5: printf("星期六\n"); break; case 6: printf("星期日\n"); break; }

}

void main()

{

int year=0,month=0,day=0;

printf("请输入日期:\n格式为:

1900,1,1\n");

char temp = '1';

while (temp != '0')

scanf("%d,%d,%d",&year,&month,& amp;day);

scanf("%c",&temp);

CaculateWeekDay(year,month,day);

printf("输入0退出,其他继续:");

scanf("%c",&temp);

}

}

运行效果:

请输入日期:

格式为:1900,1,1

2008,4,29

星期二

输入0退出,其他继续:d

2008,1,1

输入0退出,其他继续:l

2008,8,8

星期五

输入0退出,其他继续:0

请按任意键继续. . .

编者注:用来算现在真实日期的星期是没有问题的。原理是根据已知公元1年1月1日的星期数来推算。如果在你的题目中约定了某天是星期几,你要注意那天的星

期是否跟真实的星期相同,如果不同,需要考虑相差几天!

如果大家觉得不够过瘾,可以看看以下该公式的推

导过程,让大家对历法有个更深刻的认识

下面我们完全按自己的思路由简单到复杂一步步进行推导……

推导之前,先作两项规定:

①用 y, m, d, w 分别表示年月日星期(w=0-6 代表星期日-星期六

②我们从公元0年1月1日星期日开始

一、只考虑最开始的 7 天,即 d = 1---7 变换到 w =

很直观的得到:

w = d-1

二、扩展到整个1月份

模7的概念大家都知道了,也没什么好多说的。不过也

可以从我们平常用的日历中看出来,在周历里边每列都

是一个按7增长的等差数列,如1、8、15、22的星期都是相同的。所以得到整个1月的公式如下:

w = (d-1) % 7 --------- 公式⑴

三、按年扩展

由于按月扩展比较麻烦,所以将年扩展放在前面说

① 我们不考虑闰年,假设每一年都是 365 天。由于

365是7的52倍多1天,所以每一年的第一天和最后一

天星期是相同的。

也就是说下一年的第一天与上一年的第一天星期滞后一天。这是个重要的结论,每过一年,公式⑴会有一天的

误差,由于我们是从0年开始的,所以只须要简单的加

上年就可以修正扩展年引起的误差,得到公式如下:

w = (d-1 + y) % 7

② 将闰年考虑进去

每个闰年会多出一天,会使后面的年份产生一天的误差。如我们要计算2005年1月1日星期几,就要考虑前面的

已经过的2004年中有多少个闰年,将这个误差加上就可以正确的计算了。

根据闰年的定义(能被4整但不能被100整除或能被400整),得到计算闰年的个数的算式:y/4 - y/100 + y/400。由于我们要计算的是当前要计算的年之前的闰年数,所

以要将年减1,得到了如下的公式:

w = [d-1+y + (y-1)/4-(y-1)/100+(y-1)/400] % 7 -----公式⑵

现在,我们得到了按年扩展的公式⑵,用这个公式可以

计算任一年的1月份的星期

四、扩展到其它月

考虑这个问题颇费了一翻脑筋,后来还是按前面的方法

大胆假才找到突破口。

①现在我们假设每个月都是28天,且不考虑闰年

有了这个假设,计算星期就太简单了,因为28正好是7

的整数倍,每个月的星期都是一样的,公式⑵对任一个

月都适用:)

②但假设终究是假设,首先1月就不是28天,这将会造成2月份的计算误差。1月份比28天要多出3天,就是

说公式⑵的基础上,2月份的星期应该推后3天。

而对3月份来说,推后也是3天(2月正好28天,对3月的计算没有影响)。

依此类推,每个月的计算要将前面几个月的累计误差加上。

要注意的是误差只影响后面月的计算,因为12月已是最后一个月,所以不用考虑12月的误差天数,同理,1月份的误差天数是0,因为前面没有月份影响它。

由此,想到建立一个误差表来修正每个月的计算。

================================================= =

月误差累计模7

1 3 0 0

2 0

3 3

3 3 3 3

4 2 6 6

5 3 8 1

6 2 11 4

7 3 13 6

8 3 16 2

9 2 19 5

10 3 21 0

11 2 24 3

12 - 26 5

(闰年时2月会有一天的误差,但我们现在不考虑)

================================================= =

我们将最后的误差表用一个数组存放

在公式⑵的基础上可以得到扩展到其它月的公式

e[] = {0,3,3,6,1,4,6,2,5,0,3,5}

w = [d-1+y + e[m-1] + (y-1)/4-(y-1)/100+(y-1)/400] %

7 --公式⑶

③上面的误差表我们没有考虑闰年,如果是闰年,2月

会一天的误差,会对后面的3-12月的计算产生影响,对此,我们暂时在编程时来修正这种情况,增加的限定条

件是如果当年是闰年,且计算的月在2月以后,需要加

上一天的误差。大概代码是这样的:

w = (d-1 + y + e[m-1] + (y-1)/4 - (y-1)/100 +

(y-1)/400);

if(m>;2 && (y%4==0 && y%100!=0 || y%400==0) && y!=0) ++w;

w %= 7;

现在,已经可以正确的计算任一天的星期了。

注意:0年不是闰年,虽然现在大都不用这个条件,但

我们因从公元0年开始计算,所以这个条件是不能少的。

④ 改进

公式⑶中,计算闰年数的子项

(y-1)/4-(y-1)/100+(y-1)/400 没有包含当年,如果将

当年包含进去,则实现了如果当年是闰年,w 自动加1。由此带来的影响是如果当年是闰年,1,2月份的计算会

多一天误差,我们同样在编程时修正。则代码如下

w = (d-1 + y + e[m-1] + y/4 - y/100 + y/400); ---- 公式⑷

if(m;>;2)-y/100+y/400);

if(m;一年的第一天是3月1日了,我们要对 w 的计算公式重新推导

2>;误差表也发生了变化,需要得新计算

①推导 w 计算式

1>; 用前面的算法算出 0年3月1日是星期3

前7天, d = 1---7 ===>; w = 3----2

得到 w = (d+2) % 7

此式同样适用于整个三月份

2>; 扩展到每一年的三月份

[d + 2 + y + (y-1)/4 - (y-1)/100 + (y-1)/400] % 7

②误差表

================================================= =

月误差累计模7

3 3 0 0

4 2 3 3

5 3 5 5

6 2 8 1

7 3 10 3

8 3 13 6

9 2 16 2

10 3 18 4

11 2 21 0

12 3 23 2

13 3 26 5

14 - 29 1

================================================= =

③得到扩展到其它月的公式

e[] = {0,3,5,1,3,6,2,4,0,2,5,1}

w = [d+2 + e[m-3] +y+(y-1)/4-(y-1)/100+(y-1)/400] % 7

(3 ;>;2)-y/100+y/400) % 7;

return w;

}

}

public class Week {

public static void main(String[] args){

int y = 2005;

int m = 1;

int d = 1;

test t = new test();

String week[] = new String[]{

"星期日","星期一","星期二","星期三","星期四

","星期五","星期六"

};

for(y=2005; y<=2008; y+=3) {

for(m=1; m<=12; ++m) {

String str = y + "-" + m + "-" + d + "\t" + week[t.GetWeek(y,m,d)]; System.out.println(str);

}

}

}

}

查万年历,检查程序的输出,完全正确。

七、后话

我们这个公式的推导是以0年3月1日为基础的,对该日

以后的日期都是可以计算的。但是否可以扩展到公元前(1,2已属于公元前1年的13,14月了)呢?

虽然我对0年1月和2月、以及公元前1年(令y=-1)的12月作了验证是正确的,但我在推导这个公式时并未想

到将其扩展到公元前,所以上面的推导过程没有足够理

论依据可以证明其适用于公元前。(负数的取模在不同的编译器如C++中好象处理并不完全正确)。

另外一有点是对于0年是否存在的争议,一种折中的说

法是0年存在,但什么也没有发生,其持续时间为0。还有在罗马的格利戈里历法中有10天是不存的(1582年10月5日至14持续时间为0),英国的历法中有11天(1752年9月3日至13日)是不存在的。感兴趣的朋友可以看看这里:但是我们做的是数字计算,不管那一天是否存在,持续的时间是24小时还是23小时甚至是0小时,只要那个号码存在,就有一个星期与之对应。所以这个公式仍

然是适用的。

如果要计算的是时间段,就必须考虑这个问题了。

最新数学表达式计算(c语言实现)演示教学

一、设计思想 计算算术表达式可以用两种方法实现: 1.中缀转后缀算法 此算法分两步实现:先将算术表达式转换为后缀表达式,然后对后缀表达式进行计算。具体实现方法如下: (1)中缀转后缀 需要建一个操作符栈op和一个字符数组exp,op栈存放操作符,字符数组用来存放转换以后的后缀表达式。首先,得到用户输入的中缀表达式,将其存入str数组中。 对str数组逐个扫描,如果是数字或小数点,则直接存入exp数组中,当扫描完数值后,在后面加一个#作为分隔符。 如果是操作符,并且栈为空直接入栈,如果栈不为空,与栈顶操作符比较优先等级,若比栈顶优先级高,入栈;如果比栈顶优先级低或相等,出栈将其操作符存到exp数组中,直到栈顶元素优先等级低于扫描的操作符,则此操作符入栈;如果是左括号,直接入栈,如果是右括号,出栈存入exp数组,直到遇到左括号,左括号丢掉。然后继续扫描下一个字符,直到遇到str中的结束符号\0,扫描结束。结束后看op栈是否为空,若不为空,继续出栈存入exp数组中,直到栈为空。到此在exp数组最后加结束字符\0。 我们就得到了后缀表达式。 (2)后缀表达式计算 此时需要一个数值栈od来存放数值。对exp数组进行逐个扫描,当遇到数字或小数点时,截取数值子串将其转换成double类型的小数,存入od栈中。当遇到操作符,从栈中取出两个数,进行计算后再放入栈中。继续扫描,知道扫描结束,此时值栈中的数值就是计算的结果,取出返回计算结果。 2.两个栈实现算法 此算法需要两个栈,一个值栈od,一个操作符栈op。将用户输入的数学表达式存入str数组中,对其数组进行逐个扫描。 当遇到数字或小数点,截取数值子串,将其转换成double类型的数值存入od栈中; 当遇到左括号,直接入op栈;遇到右括号,op栈出栈,再从值栈od中取出两个数值,计算将其结果存入值栈中,一直进行此操作,直到操作符栈栈顶为左括号,将左括号丢掉。 如果遇到操作符,若op栈为空,直接入栈;若栈不为空,与栈顶元素比较优先等级,若比栈顶操作符优先等级高,直接入op栈,如果低于或等于栈顶优先等级,op栈出栈,再从值栈中取出两个数值,计算将其结果存入值栈中,一直进行此操作,直到栈顶优先等级低于扫描的操作符等级,将此操作符入op栈。继续扫描直到遇到str中的结束字符\0,扫描结束。此时看操作符栈是否为空,若不为空,出栈,再从值栈中取出两个数值进行计算,将其结果存入值栈,一直进行此操作,直到操作符栈为空。此时把值栈中的数值取出,即为所得的最终计算结果。 二、算法流程图 第一种算法:中缀转后缀算法

C语言中的22个数学函数

C语言的22个数学函数 在使用C语言数学函数时候,应该在该源文件中使用以下命令行: #include 或#include "math.h",这里的<>跟""分别表示:前者表示系统到存放C库函数头文件所在的目录寻找需要包含的文件,这是标准方式;后者表示系统先在拥护当前目录中寻找要包含的文件,若找不到,再按前者方式查找。为节省时间,在使用自己编写的文件时使用的是“”,自己编写的文件一般是在当前目录下。 22个数学函数中只有abs的数据类型是:”整型“,”int“。 log10、logE中的10与E是在log的左下角位置。其余求弧度函数需要看清楚是不是指数。排列方式如下:函数名:函数功能参数介绍,返回值,说明。函数原型。 1.abs: 求整型x的绝对值,返回计算结果。 int abs(int x); 2.acos:计算COS-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleacos(double x); 3.asin: 计算SIN-1(x)的值,返回计算结果,x应在-1到1范围内。 doubleasin(double x); 4.atan: 计算TAN-1(x)的值,返回计算结果。double atan(double x); 5.atan2: 计算TAN-1/(x/y)的值,返回计算结果。 double atan2(double x,double y); 6.cos: 计算COS(x)的值,返回计算结果,x的单位为弧度。 double cos(double x); 7.cosh: 计算x的双曲余弦COSH(x)的值,返回计算结果。 double cosh(double x); 8.exp: 求e x的值,返回计算结果。 double exp(double x); 9.fabs: 求x的绝对值,返回计算结果。 duoblefabs(fouble x); 10.floor: 求出不大于x的最大整数,返回该整数的双精度实数。 double floor(double x); 11.fmod: 求整除x/y的余数,返回该余数的双精度。 doublefmod(double x,double y);

c语言判断题试卷

试卷编号:25 所属语言:C语言 试卷总分:248分 共有题型:1种 一、判断共248题(共计248分) 第1题(1.0分)题号:1216难度:中第6章 在C语言中,为了结束由do-while语句构成的循环,while后一对圆括号中表达式的值应该是0.答案:Y 第2题(1.0分)题号:1328难度:中第10章 对指针变量的初始化int a,*pa=&a,*pc=0;是正确的. 答案:Y 第3题(1.0分)题号:1238难度:中第7章 int a[3][4]={{1},{5},{9}};它的作用是将数组各行第一列 的元素赋初值,其余元素值为0. 答案:Y 第4题(1.0分)题号:1130难度:中第2章 在C程序中,无论是整数还是实数,都能准确无误地表示. 答案:N 第5题(1.0分)题号:1205难度:中第6章 do-while循环是先执行循环体语句,后判断表达式的值. 答案:Y 第6题(1.0分)题号:1360难度:中第11章

rewind(fp);可使fp所指文件的位置返回到文件的开头. 答案:Y 第7题(1.0分)题号:1143难度:中第2章 程序中的变量代表内存中的一个存储单元,它的值不可以随时修改.答案:N 第8题(1.0分)题号:1235难度:中第7章 char c[]="abc";do while(c[i+1]!='\0');printf("%d",i-1);能输出字符串c的长度值.答案:N 第9题(1.0分)题号:1274难度:中第8章 字符处理函数strcpy(str1,str2)的功能是把字符串1接到字符串2的后面. 答案:N 第10题(1.0分)题号:1223难度:中第7章 C语言中只能逐个引用数组元素而不能一次引用整个数组. 答案:Y 第11题(1.0分)题号:1125难度:中第2章 0x173是"正确"的十六进制常数. 答案:Y 第12题(1.0分)题号:1350难度:中第11章 不仅可将C源程序存在磁盘上,还可将数据按数据类型分别以文件的 形式存在磁盘上. 答案:Y

c语言上机试题1(数学计算)

1整型、实型 1.1实型四舍五入 请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567, 则函数返回1234.57;实型数为1234.564, 则函数返回1234.56。注意: 部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include int NONO(void); float fun ( float h ) { } int main(void) { float a; printf ("Enter a: "); scanf ( "%f", &a ); printf ( "The original data is : " ); printf ( "%f \n\n", a ); printf ( "The result : %f\n", fun ( a ) ); NONO( ); return 1; } int NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用fun 函数,输出数据,关闭文件。*/ int i ; float a ; FILE *rf, *wf ; rf = fopen("./05/in.dat","r") ; wf = fopen("./05/out.dat","w") ; for(i = 0 ; i < 20 ; i++) { fscanf(rf, "%f", &a) ; fprintf(wf, "%f\n", fun(a)) ; } fclose(rf) ; fclose(wf) ; return 1; }

C语言考试中的判断

C语言考试中的判断 1.C语言采用解释方式将源程序转换为二进制的目标代码。()错 2用C语言可直接进行位运算和取地址等运算,因此C语言是一种低级语言。()错 3C程序是由函数构成的,每一个函数完成相对独立的功能。()对 4被main函数调用的函数只能是库函数。()错 5在C源程序中,之间的注释信息也被编译,但对程序运行运果不发生影响。()错 6在C语言中,字母的大小写不被区分。()错 7C语言中没有依存于硬件的I/O语句。()对 8按现代风格设计的C程序中,main中对函数声明的信息与定义此函数时第一行的信息完全相同。()对 9对C语言中用到的任何一个变量都要规定其类型。()对 10C语言中的任何类型数据都可进行四则运算。()错 11字符型数据和整数之间是不可以通用的。()错 12字符常数和字符串常数的存储是相同的,都是以字符的ASCII码值进行存放。()错 13在Turbo C中,整型数据在内存中占2个字节。()错 14在Turbo C中,实型数据在内存中占4个字节。()错 15在Turbo C中,字符型数据在内存中占1个字节。()对 16在Turbo C中,存储字符串常数时所占内存空间是不固定。()对 17赋值表达式c=b=a=3是错误的。()错 18C语言中的标识符以字母或下划线开头,可跟任何字符。()错 19PI可作为标识符使用。()对 20对整型常量可进行自加或自减运算,而对变量或表达式不可以。()错 21算术运算符和赋值运算符的结合方向均有左自右。()错 22表达式1/4+2.75的值是3。()错 23在进行赋值转换时,变量的类型被自动转换为赋值号右边的表达式值的类型。()错 24在进行逻辑运算时,非0整型值表示“真”。()对 25条件运算符“?:”的优先级高于赋值运算符。()对 26C程序中的一个变量可以被定义为两个或多个不同的类型。()错 27字符常量是用单撇号括来的一个字符,这个字符可以是任意的。()错 28转义字符是一种常量。()对 29赋值语句是一种表达式语句。()对 30复合语句是由多条语句组成的,因此它不是一条语句。()错 31continuc语句用在循环体中,可使整个循环不结束。()错 32空函数没有返回值,除此之外,有些函数可以带回一个或一个以上的返回值。()错 33return后面括号里的表达式的值即是此函数的值。()对

C语言判断

二、判断 1.若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变(对)2.char c[6]="abcde"; printf("%3s", c)表示输出的字段的宽度,如果被输出的数据的位数大于3,按实际位数输出. (对) 3.条件表达式x?'a':'b'中,若x=0时,表达式的值为'a'.(错) 4.在逻辑运算符中的运算级别由高向低依次为&&->||->!(错) 5.do-while循环由do开始,while结束,循环体可能一次也不做。(错) 6.continue语句用于终止循环体的本次执行. (对) 7.若有定义和语句:(对) int a[3][3]={{3,5},{8,9},{12,35}},i,sum=0; for(i=0;i<3;i++) sum+=a[i][2-i];则sum=21. 8.int a[3][4]={{1},{5},{9}}; 它的作用是将数组各行第一列的元素赋初值,其余元素值为0。(对)9.定义一维数组的形式为:类型说明数组名[表达式],其中表达式可以是正整型常量表达式、字符常量表达式. (对) 10.在C语言中,函数名代表函数的入口地址. (对) 11.函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));中,含有的实参个数是5. (错) 12.数组名可以作为函数的实参和形参. (对) 13.一个include 命令只能指定1个被包含的文件。(对) 14.若p 为指针变量,a 为数组名,则a-p是合法的表达式. (对) 15.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量。(对)16.C语言中,关闭一个文件就删除了这个文件. (错) 二、判断 1.若i =3,则printf("%d",-i++);输出的值为-4。(错) 2.格式字符%x用来以八进制形式输出整数. (错) 3.设u=1,v=2,w=3,则逻辑表达式u||v-w&&v+w的值为0. (错) 4.已知a=4,b=2,c=3,d=5,表达式a>b?a:c

c语言中求绝对值的数学函数

1、在C语言中,求绝对值的数学函数是( A )。 A、fabs() B、exp() C、pow() D、sqrt() 2、C语言可以使用printf函数实现输出,该函数在头文件( A )中定义。 A、stdio.h B、lib.h C、math.h D、printf.h 3、以下关于变量定义错误的是(A )。 A、char for; B、float USS; C、double int_; D、int _int; 4、在C语言中,求平方根的数学函数是( B )。 A、exp() B、sqrt() C、pow() D、fabs() 5、在C语言中,用printf函数输出float型数据时,可以使用格式控制符( B )。 A、%d B、%f C、%c D、%lf 6、以下说法正确的是( B )。 A、do-while语句构成的循环必须用break语句才能退出 B、do-while语句构成的循环,当循环条件为假时结束循环 C、do-while语句构成的循环,当循环条件为真时结束循环 D、不能使用do-while语句构成的循环 7、执行语句for(i=1;i<=10;i++) continue;后,i值为( C )。 A、9 B、无穷 C、11 D、10 8、C语言程序的基本控制结构是( B )。 A、循环结构

B、顺序、分支、循环 C、分支结构 D、顺序结构 9、float x ; 该语句将变量x定义为(B )类型。 A、双精度实型 B、单精度实型 C、字符型 D、整型 10、C 语言可以使用getchar()函数实现输入,该函数在系统头文件( D )中定义。 A、string.h B、用户自定义函数 C、math.h D、stdio.h 11、设x、y、z都是整型变量,x、y的初值都是5,执行z=(++x)+(y--)+1后,x、y、z三变量的值按顺序是( D )。 A、6,5,11 B、5,5,11 C、6,4,11 D、6,4,12 12、C语言中,三条边a、b、c能构成三角形的逻辑表达式是( D )。 A、a+b>c B、a>b>c C、a-bb D、a+b>c &&a+c>b &&b+c>a 13、下面有关for循环的正确描述是( D )。 A、for循环的循环体不能为空语句 B、for循环是先执行循环体语句,后判定表达式 C、在for循环中,不能用break语句跳出循环体 D、for循环体语句中,可以包含多条语句,但要用花括号括起来 14、使用系统提供的输出函数printf()时,实现换行功能的字符是(D )。 A、'/n' B、'\b' C、'\r' D、'\n' 15、从键盘输入一个整数给变量get,下列正确的语句是( B )。 A、printf("%d",&get); B、scanf("%d",&get); C、scanf("%d",get) ; D、printf("%d",get); 16、变量a、b分别声明为int型和double型,a的初值为5,如果b获得a的一半值,可使用哪条语句( C )。 A、b=a/2; B、b=sqrt(a); C、b=a/2.0;

c语言判断题试卷

试卷编号:25 所属语言:C语言 试卷方案:TC_160505231239 试卷总分:248分 共有题型:1种 一、判断共248题(共计248分) 第1题(1.0分)题号:1216 难度:中第6章 在C语言中,为了结束由do-while语句构成的循环, while后一对圆括号中表达式的值应该是0. 答案:Y 第2题(1.0分)题号:1328 难度:中第10章 对指针变量的初始化int a,*pa=&a,*pc=0;是正确的. 答案:Y 第3题(1.0分)题号:1238 难度:中第7章 int a[3][4]={{1},{5},{9}}; 它的作用是将数组各行第一列 的元素赋初值,其余元素值为0. 答案:Y 第4题(1.0分)题号:1130 难度:中第2章 在C程序中,无论是整数还是实数,都能准确无误地表示. 答案:N 第5题(1.0分)题号:1205 难度:中第6章 do-while循环是先执行循环体语句,后判断表达式的值. 答案:Y 第6题(1.0分)题号:1360 难度:中第11章 rewind(fp);可使fp所指文件的位置返回到文件的开头. 答案:Y 第7题(1.0分)题号:1143 难度:中第2章 程序中的变量代表内存中的一个存储单元,它的值不可以随时修改. 答案:N

第8题(1.0分)题号:1235 难度:中第7章 char c[]="abc";do while(c[i+1]!='\0');printf("%d",i-1);能输出字符串c的长度值. 答案:N 第9题(1.0分)题号:1274 难度:中第8章 字符处理函数strcpy(str1,str2)的功能是把字符串1接到字符串2的后面. 答案:N 第10题(1.0分)题号:1223 难度:中第7章 C语言中只能逐个引用数组元素而不能一次引用整个数组. 答案:Y 第11题(1.0分)题号:1125 难度:中第2章 0x173是"正确"的十六进制常数. 答案:Y 第12题(1.0分)题号:1350 难度:中第11章 不仅可将C源程序存在磁盘上,还可将数据按数据类型分别以文件的形式存在磁盘上. 答案:Y 第13题(1.0分)题号:1352 难度:中第11章 将整数以二进制形式存盘比以ASCII形式存盘省空间、运算快. 答案:Y 第14题(1.0分)题号:1343 难度:中第10章 char *match(char c){ }说明函数的返回值为字符型指针. 答案:Y 第15题(1.0分)题号:1121 难度:中第1章 一个C程序必须由一个或一个以上的函数组成. 答案:Y 第16题(1.0分)题号:1296 难度:中第8章 若有 # define S(a,b) a*b 则语句 area=S(3,2); area的值为6. 答案:Y

C语言判断题(部分)

第一章 C语言中,字符数据用格式说明"%c"来输出,字符串数据用格式说明"%s"来输出。T C语言中,关键字及编译预处理命令用小写字母书写。T二元运算符均可以和赋值运算符构成复合的赋值运算符。TC语言中,不能在变量名、函数名、关键字中插入空格和空行。TVasual c++ 6."0中可以使用“//”和“/* */”注释程序,注释部分不编译。T C语言中,格式说明"% 10."4f"中10表示数据输出的最小宽度,4表示小数位数。T C语言中,为了区别一般的变量,符号常量必须用大写字母表示。F执行语句++i ; i=3;后变量i的值为 4。"F 程序中的“=”是赋值号,与数学中等号的功能相同。F C语言中,在进行混合运算时,数据类型由高级向低级转换。F将C程序编译成目标文件,其扩展名为EXE。F 整数在存储时不会产生误差,实数在存储时也不会产生误差。F用float定义的实型变量在内存占8个字节,输入/输出格式符是%f。f C语言中,putchar函数的功能是把一字节代码输出到标准输出设备。T 字符数据与整型数据可互相赋值。T 增1(或自增)、减1(或自减)运算符都是双目运算符。F逗号表达式的值是第一个表达式的值。F C语言中,强制类型转换后,原变量的值和数据类型不变。T字符数据在内存以ASCII码存储,占2个字节,用7位二进制表示。F

C程序的书写格式比较自由,一行内可写一个语句,也可以写多个语句。T 第二章 if(表达式)语句1 else语句2结构中,如表达式为a>10,则else的条件隐含为a< 10。"F C语言规定,else总是与它上面、最近的、尚未配对的if配对。Tswitch…case结构中case后的表达式必须为常量表达式。T可以用swicth结构实现的程序都可以使用if语句来实现。Tswitch…case结构中条件表达式和常量表达式值可以为float类型。F 由float x=3e-6,y=3e-6;可得x==y的逻辑值为真。F语句int a=2;if(a=3)b=1;执行后b的值是 1。"T所有关系运算符的运算优先级相同。F switch后面园括号内的表达式的值和case后面的常量表达式的值都必须是整型或字符型,不允许是浮点型。T 两个变量交换数据时常使用一个工作变量。T switch语句的结束发生在break;语句的执行或者switch语句的“}”。T 逻辑运算符的运算优先级低于算术运算符的运算优先级。F执行a=0;if (0);a=3;后a的值为 3。"T 第三章 由i=-1;while(i<10)i+=2;i++;可知此while循环的循环体执行次数为6次。T 在循环外的语句不受循环的控制,在循环内的语句也不受循环的控制。F

C语言素数的几种判断方法

#include #include main() { int i,n; printf("请输入一个数:"); scanf("%d",&n); for(i=2;i=n) printf("素数!"); printf("\n"); } /*main() { int i,n,m; printf("请输入一个整数:"); scanf("%d",&m); n=(int)sqrt(m); for(i=2;i<=n;i++) if(m%i==0) break; if(i>n) printf("素数!\n"); else printf("不是素数!"); }*/ /*int p(int m) { int i,n=sqrt(m); for(i=2;i<=n;i++) if(m%i==0) break; if(i>n) return 1; else return 0; } main() {

int m; for(m=1;m<=10;m++) { if(p(m)) printf("%d ",m); } printf("\n"); }*/ //3-100间所素数。 /*main() { int i,n; for(n=3;n<=100;n++) { for(i=2;i<=n-1;i=i+1) if(n%i==0) break; if(i>=n) printf("%d\t",n); } }*/ /*main() { int i,m,j; for(i=2;i<=10;i++) { m=sqrt(i); for(j=2;j<=m;j++) { if(j%m==0) break; if (j>m) //加上这句,如果检查所有的j全部不能整除m,循环结束后,j一定大于m,这时的i才是素数 printf("%d",i); } } } /* void main() { int i,j,n=0,xx[10]; for(i=1;i<10;i++)

C语言判断

判断题 - 正确篇 1.字符常量的长度肯定为1.Y 2.在调用函数时,实参把值传送给对应位置上的形参,形参的值不能传给实参.Y 3.在程序中凡是以#号开始的语句行都是预处理命令行Y 4.在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量.Y 5.在程序中,APH和aph是两个不同的变量.Y 6.在Turbo C中,int型数据在内存中占2个字节.Y 7.在C语言中8.9e1.2是不正确的实型常量.Y 8.在C语言中,变量必需先定义后使用.Y 9.在C语言中,5种基本数据类型的存储空间长度的排列顺序为:char

C语言程序:求常用圆形体的体积

求常用圆形体的体积 程序描述: 设计一个常用圆形体体积的计算器,采用命令方式输入1、2、3.分别选择计算球体、圆柱体、圆锥体的体积,并输入函数所需的相应参数。 样例输入: 1 2 样例输出: 1-计算球体体积 2-计算圆柱体积 3-计算圆锥体积 其他-退出程序运行 请输入计算命令:1 请输入求的半径:2 球体积为:33.51 出题人: 我们一起的痕迹 程序代码 #include #include #include #define PI 3.141592654

void cal(int sel); int main(void) { int sel; while(1){ printf("1-计算球体体积\n"); printf("2-计算圆柱体积\n"); printf("3-计算圆锥体积\n"); printf("其他-退出程序运行\n"); printf("请输入计算命令:"); scanf("%d",&sel); if(sel<1||sel>3) break; else cal(sel); } return 0; } void cal(int sel) { double vol_ball(void); double vol_cylind(void); double vol_cone(void); switch(sel){ case 1: printf("球体积为:%.2f\n",vol_ball()); break; case 2: printf("圆柱体积为:%.2f\n",vol_cylind()); break; case 3: printf("圆锥体积为:%.2f\n",vol_cone()); break; } } double vol_ball() { double r; printf("请输入球的半径:"); scanf("%lf",&r); return (4.0/3.0*PI*r*r*r); } double vol_cylind() {

C语言中的数学函数库

2010年07月03日星期六 20:42 C语言提供了以下的数学函数,要使用这些函数时,在程序文件头必须加入: #include 编译时,必须加上参数「-lm」(表示连结至数学函式库),例如「gcc -lm test.c」。函数之自变量与传回之值型别见自变量或函数前之型别宣告。 函数已经在「math.h」或其它标头档宣告过了,因此在使用时不必再加型别宣告,例如「y=sin(x);」,不用写成「y=double sin(double x);」。 函数说明 double sin(double x) x 的正弦函数值 double cos(double x) x 的余弦函数值 double tan(double x) x 的正切函数值 double asin(double x) x 的反正弦函数值 sin-1x,x的值在 [-1,1] 之间,传回的值在 [-p/2,p/2] 之间 double acos(double x) x 的反余弦函数值cos-1x,x的值在 [-1,1] 之间,传回的值在 [-p/2,p/2] 之间 double atan(double x) x 的反正切函数值tan-1x,传回的值在 [-p/2,p/2] 之间 double atan2(double y, double x) y/x 的反正切函数值tan-1(y/x),传回的值在 [-p, p] 之间 double sinh(double x) x 的双曲正弦函数值 double cosh(double x) x 的双曲余弦函数值 double tanh(double x) x 的双曲正切函数值 double exp(double x) x 的指数函数 ex double log(double x) x 的自然对数 ln(x),x > 0 double log10(double x) x 底数为 10 的对数,log10x,x > 0 double pow(double x, double y) x 的 y 次方 xy double sqrt(double x) x 的根号值√x double ceil(double x) 不小于 x 的最小整数(但其型别为 double) double floor(double x)

c语言选择判断题

判断题: 1、在C语言中,枚举元素表中的元素有先后次序,可以进行比较。 2、当需要接受用户从键盘输入的含有空格的字符串时,应使用gets()函数。 3、在C语言中,枚举元素表中的元素有先后次序,可以进行比较。 4、使用联合体union的目的是,将一组具有相同数据类型的数据作为一个整体,以便于其中的成员共享同一存储空间。 5、系统中标准输入文件是指硬盘。 6、已知函数调用形式:fread(buffer,size,count,fp);其中buffer代表的是一个指针,指向要读入数据的存放地址。 7、fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是追加。 8、枚举元素的值可以是整数或字符串。 9、可以在定义枚举类型时对枚举元素进行初始化。 10、若要"为读/写建立一个新的文本文件",在fopen函数中应使用的文件方式为"w+"。 11、标准输入输出函数中,将一个字符写到磁盘文件上去,应调用fputc函数。 12、在c语言中,库函数fprintf是按指定的格式将数据写入文件,如果执行成功,函数返回的是结束符。 13、操作系统是以文件为单位对数据进行管理的。 14、"C"指字符常量C。 15、字符串"china"在内存中占据的存储空间是5个字节。 16、char *name[5]定义了一个一维指针数组,它有5个元素,每个元素都是指向字符数据的指针型数据。 17、调用strlen("abc\0ef\0g")的返回值为8。 18、if(a==b)语句可用于判断两个字符串a和b是否相等。 19、两个字符串所包含的字符个数相同时才能比较字符串大小。 20、字符个数多的字符串比字符个数少的字符串大。 21、字符数组的字符串可以整体输入输出。 22、C语言本身没有输入输出语句。 23、在C程序中,注释说明只能位于一条语句的后面。 24、在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为: char = int < long int <= float < double 25、假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值为7。 26、switch,typedef,continue均是C语言关键字。 27、C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 28、160,-0xefff,011均是合法的整型常量。 29、'\\0','\101','X1f'均是合法的转义字符。 30、若变量a和x均为double类型,则代数式x^2-e^5转化为正确的c语言表达式为:x*x-exp(5)。 31、在C 程序中,逗号运算符的优先级最低。 32、在C程序中,APH和aph是两个不同的变量。 33、当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。 34、在C程序中,每行只能写一条语句。 35、若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数。 36、在C程序中,%是只能用于整数运算的运算符。 37、若变量均为整型,且num=sum=7,则计算表达式sum=num++,sum++,++num后sum的值为8。 38、设变量 a 为整型,f 是实型,i 是双精度型,则表达式10+'a'+i * f 值的数据类型不能确定为何类型。 39、在C语言中char型数据在内存中的存储形式为ASCII码。 40、设有说明:char m;int x;float y;double z;则表达式m*x+z-y值的数据类型为float。 41、putchar函数可以向终端输出一个字符或字符型变量值。 42、%x是格式符的一种,它可以适用于任何一种类型的数据。 43、输入项可以是一个实型常量,如:scanf ("%f",3.5) 。 44、c程序中能直接让机器执行的文件是编辑后的.c源文件。 45、任何复杂的程序都是由顺序结构、选择结构、循环结构这三种结构构成的。 46、若有int x,则(x+1)++是一个合法的c语言表达式。 47、每个语句和数据定义的最后都必须有分号。 48、c程序的书写格式要求严格,区分大小写,并且一行内只能写一条语句。

c语言判断

判断题- 正确篇 1. 字符常量的长度肯定为1.Y 2. 在调用函数时,实参把值传送给对应位置上的形参,形参的值不能传给实参.Y 3. 在程序中凡是以#号开始的语句行都是预处理命令行Y 4. 在程序中定义了一个结构体类型后,可以多次用它来定义具有该类型的变量.Y 5. 在程序中,APH和aph是两个不同的变量.Y 6. 在Turbo C中,int型数据在内存中占2个字节.Y 7. 在C语言中8.9e1.2是不正确的实型常量.Y 8. 在C语言中,变量必需先定义后使用.Y 9. 在C语言中,5种基本数据类型的存储空间长度的排列顺序为:char

c语言用六种方法求定积分

C语言实验报告 求定积分 班级10信息与计算科学一班姓名戴良伟 学号 21

1. 描述问题 利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson 公式,⑥Gauss 积分公式求解定积分。 2. 分析问题 定积分 定积分的定义 定积分就是求函数()f x 在区间[],a b 中图线下包围的面积。即()0,,,y x a x b y f x ====所包围的面积。这个图形称为曲边梯形,特例是曲边梯形。如下图: (图1) 设一元函数()y f x =,在区间[],a b 内有定义。将区间[],a b 分成n 个小区间[][][][]00112,,,,,......,i a x x x x x x b 。设1i i i x x x -?=-,取区间i x ?中曲线上任意一点记做()i f ξ,作和式: ()1lim n n i f i xi ξ→+∞=??? ??? ∑ 若记λ为这些小区间中的最长者。当0λ→时,若此和式的极限存在,则称这个和式是函数()f x 在区间[],a b 上的定积分。 记作:()b a f x dx ? 其中称a 为积分下限, b 为积分上限,()f x 为被积函数,()f x dx 为被积式,∫ 为积分号。 之所以称其为定积分,是因为它积分后得出的值是确定的,是一个数,而不是一个函数。 定积分的几何意义[1] 它是介于x 轴、函数f(x)的图形及两条直线x=a ,x=b 之间的各个部分面积的代数和。在x 轴上方的面积取正号;在x 轴下方的面积取负号。如图 言实现定积分计算的算法 利用复合梯形公式实现定积分的计算

C语言 判断

判断: 1、( F ) 函数定义void max(int a,int b)表示该函数的返回值不确定。 2、( T )在C语言中,函数体中变量的隐含存储类别是自动变量auto。 3、( F )return语句作为函数的出口,在一个函数体内只能有一个。 4、( T )在C程序中,函数不能嵌套定义,但可以嵌套调用。 5、( F ) C语言的源程序中必须包含库函数。 6、( F )在C程序中,函数调用不能出现在表达式语句中。 7、( F )在C函数中,形参可以是变量、常量或表达式。 8、( F )在主函数main( )中定义的变量都可以在其它被调函数中直接使用。 9、( T )在C语言中,一个函数一般由两个部分组成,它们是函数首部和函 数体。 10、( F )C语言程序中的main( )函数必须放在程序的开始部分。 11、( F )若定义的函数没有参数,则函数名后的圆括号可以省略。 12、( T )函数的函数体可以是空语句。 13、( T )函数的实参和形参可以是相同的名字。 14、( T )函数调用中,形参与实参的类型和个数必须保持一致。 15、( F )C语言中函数返回值的类型由return语句中的表达式的类型决定。 16、( T )外部类型的变量只能定义一次,但可在不同地方声明多次。 17、( F )外部类型的变量作用范围大,编程中应多用外部变量。 18、( F )指针变量里存放的是地址值,因此指针变量只能是int型的。 19、( T )有一个一维数组a[10],那么a与&a[0]等价。 20、( F )有如下程序段:int i, j = 2, k, *p = &i;k = *p + j;这里出现 的两个“*”号,含义是一样的。 21、( F )在C语言中,每一个变量在内存里占用的单元数都是相同的。 22、( T )通过指针变量,就能间接地得到它所指向的变量的值。 23、( F )有说明:int *p;且p指向地址为1500的内存单元,那么经过操作 “p++;”后,p将指向1501的内存单元。 24、( T )一个变量的指针就是该变量的地址。 25、( F )在C语言中允许将一个整数赋给指针变量。 26、(F )数组名实际上是此数组的首地址,所以数组名相当于一个指针变量。 27、( F )char *p[10];定义了一个指向字符数组的指针变量。 28、( T )C语言中,认为键盘是标准输入文件stdin 29、( T )C语言中,认为显示器是标准输出文件stdout 30、( T )C语言中,文件存取是以字节为单位的。 31、( F )fopen(“c:\test.dat”,”r”)的作用是打开一个磁盘文件,此文 件可以被执行写操作 32、( F )fopen(“test.txt”,”r”)表示为写操作打开一个二进制文件 33、( T )使用文件前必须先打开文件 34、( T )文件使用结束后必须关闭文件 35、( T )fputc函数的作用是把一个字符写到磁盘文件中去。 36、( T )如果文件以二进制形式打开,用fread和fwrite函数就可以读写 任何类型的信息。 37、( T )当文件操作完成后必须使用fclose命令关闭文件。

相关文档
最新文档