C语言练习题1-5及参考答案 下载本文

【答】k=2,执行case 2分支,k++返回2,此时k=3,输出2,后跟一空格。由于没有break语句,继续执行case 3分支,k++返回3,此时k=4,输出3,由于有break语句,退出switch语句。所以输出为:2 3。

(6)以下程序的运行结果是 。 #include main() { }

【答】a>0,s变为2。a>b为真,t=t+s=3。所以输出为:s=2,t=3。 (7)以下程序的运行结果是 。 #include main() { }

【答】k=2,执行case 2分支,k++返回2,此时k=3,屏幕输出2,后跟一空格。由于没有break语句,继续执行case 3分支,k++返回3,此时k=4,屏幕输出3,由于没有break语句,继续执行case 4分支,k++返回4,此时k=5,屏幕输出4,由于有break语句,退出switch语句。所以输出为:2 3 4。 (8)以下程序的运行结果是 。 #include main() {

int x=0,y=2,z=3; switch(x) { int k=2; switch(k) { }

printf(\

case 1:printf(\case 2:printf(\case 3:printf(\case 4:printf(\default:printf(\

VC++6.0 int s=1,t=1,a=5,b=2; if (a>0)

s++; t+=s; t=5; t=2*s; if (a>b) else if (a==b) else

printf(\

17

}

}

case 0: switch(y==2)

{ } { }

case 1:printf(\case 2:printf(\default:printf(\case 1:printf(\case 2:printf(\

case 1: switch(z)

【答】x=0,执行外层switch语句的case 0部分,y==2为真,则执行里层switch语句的case 1部分,输出“*”,遇到break语句,退出里层的switch语句,由于里层的switch语句之后没有break语句,所以转而执行外层switch语句的case 1部分,这时z=3,故执行里层switch语句的default部分,输出“#”,整个程序执行完毕。所以输出为:*#。

3. 编程题

(1)编写一个程序判断用户输入的字符是数字字符、字母字符还是其他字符。

【解】在'0'到'9'之间的为数字字符,在'a'到'z'或'A'到'Z'之间的为字母字符;否则为其他字符。程序如下:

/*文件名:exci4_1.cpp*/ #include main() { }

(2)假设今天是星期日,编写一个程序,求123456天后是星期几。

【解】星期是7天一个轮回,由于今天是星期日,所以123456除以7的余数即为星期几。程序如下: /*文件名:exci4_2.cpp*/ #include main() {

int n=123456;

18 VC++6.0 char c;

printf(\输入一个字符:\scanf(\if (c>='0' && c<='9')

printf(\是数字字符\\n\\n\printf(\是字母字符\\n\\n\printf(\是其他字符\\n\\n\

else if ((c>='a' && c<='z') || (c>='A' && c<='Z')) else

VC++6.0 }

n=n%7;

printf(\星期\switch(n) { }

printf(\

case 0: printf(\天\

break; break; break; break; break; break; break;

case 1: printf(\一\case 2: printf(\二\case 3: printf(\三\case 4: printf(\四\case 5: printf(\五\case 6: printf(\六\

(3)编写一个程序,输入年号和月份,判断该年是否为闰年,并根据给出的月份判断是什么季节和该月有多少天?闰年的条件是年号能被4整除但不能被100整除,或者能被400整除。

【解】直接根据闰年的定义求解,如果是闰年,2月份为29天;否则为28天,其他月份相同。规定3~5月为春季,6~8月为夏季,9~11月为秋季,1、2和12月为冬季。本题程序如下: /*文件名:exci4_3.cpp*/ #include main() {

int y,m,leap,season,days; printf(\年份,月份:\scanf(\

if ((y%4==0 && y0!=0) || (y@0==0))

leap=1; leap=0; season=1; season=2; season=3; season=4; else

if (m>=3 && m<=5) else if (m>=6 && m<=8) else if (m>=9 && m<=11) else

VC++6.0 19

}

switch (m) { }

printf(\年%s闰年\\n\是\不是\switch(season) { }

printf(\当月天数:%d\\n\

case 1:printf(\春季\\n\case 2:printf(\夏季\\n\case 3:printf(\秋季\\n\case 4:printf(\冬季\\n\case 1: case 3: case 5: case 7: case 8: case 10:

case 12:days=31;break; case 4: case 6: case 9:

case 11:days=30;break; case 2: if (leap==1)

days=29; days=28; else

printf(\该季度是\

(4)报数游戏。A、B、C、D、E、F、G、H共8人站成一排,按图4.1所示的方法从1开始报数。问谁先报到123456?

A B C D E F G H 1→ 2→ 3→ 4→ 5→ 6→ 7→ 8 14←13←12←11←10← 9

15→16→17→18→19→20→21→22 28←27←26←25←24←23

29→30→?

图4.1 游戏报数过程

【解】从图4.1中看到1到14是一个来回,再重复这一过程,所以只需对123456除以14的余数加以判断即可。程序如下: /*文件名:exci4_4.cpp*/ #include main() {

VC++6.0 20