第一篇:《C语言程序设计》期未项目考核封皮及目录
广西机电职业技术学院
C语言程序设
项目名称: 猜拳游戏 学 生: 深蓝 授课教师: 方校长 系 别: 互联网管理
专 业:
2011年6月5日
计
猜拳游戏 摘要
【游戏规则】:
1.游戏分为五局,每局您可以猜拳依次分胜负平三种结果。
2.游戏中您可以输入1,2,3,4分别代表石头,剪刀,布。
3.石头比剪刀大,剪刀比布大,布必石头大。
【游戏选项】:〖石头〗 〖剪刀〗 〖布〗
【第1局】 请出拳1 这一局,您出的是〖石头〗,电脑出的是〖剪刀〗,O(∩_∩)O哈哈~您赢了!
【第2局】请出拳2 这一局,您出的是〖剪刀〗,电脑出的是〖石头〗,{{{(>_<)}}}您输了!
【第3局】 请出拳3 这一局,您出的是〖布〗,电脑出的是〖剪刀〗,{{{(>_<)}}}您输了!
【第4局】 请出拳1 这一局您出的是〖石头〗,电脑出的是〖剪刀〗O(∩_∩)O哈哈~您赢了!
【第5局】 请出拳3 这一局您出的是〖布〗,电脑出的是〖剪刀〗{{{(>_<)}}}您输了!
【猜拳结果】您输了!
您的成绩是:2胜3负0平!电脑的成绩:3胜2负0平!
不服气吗?请输入y或则Y再来,输入其它则离开!
请输入:y 【第1局】请出拳2 这一局您出的是〖剪刀〗,电脑出的是〖石头〗{{{(>_<)}}}您输了!
【第2局】请出拳2 这一局您出的是〖剪刀〗,电脑出的是〖剪刀〗,平局!
【第3局】请出拳3 这一局您出的是〖布〗,电脑出的是〖剪刀〗,{{{(>_<)}}}您输了!
【第4局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖布〗,{{{(>_<)}}}您输了!
【第5局】请出拳3 这一局您出的是〖布〗,电脑出的是〖剪刀〗,{{{(>_<)}}}您输了!
【猜拳结果】您输了!
您的成绩:0胜4负1平电脑的成绩:4胜0负1平
请输入y
【第1局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖石头〗,平局!
【第2局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖剪刀〗,O(∩_∩)O哈哈~您赢了!【第3局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖剪刀〗,O(∩_∩)O哈哈~您赢了!【第4局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖布〗,{{{(>_<)}}}您输了!【第5局】请出拳1 这一局您出的〖石头〗,电脑出的是〖布〗,{{{(>_<)}}}您输了!【猜拳结果】平手!
您的成绩:2胜2负1平电脑的成绩:2胜2负1平打成平手,再来一次吗? 请输入y 【第1局】请出拳1 这一局,您出的是〖石头〗,电脑出的是〖剪刀〗。O(∩_∩)O哈哈~您赢了!【第2局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖布〗,{{{(>_<)}}}您输了!【第3局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖剪刀〗,O(∩_∩)O哈哈~您赢了!【第4局】请出拳1 这一局您出的是〖石头〗,电脑的是〖石头〗,平局!【第5局】请出拳1 这一局您出的是〖石头〗,电脑出的是〖剪刀〗,O(∩_∩)O哈哈~您赢了!【猜拳结果】您赢了!
您的成绩:3胜1负1平电脑的成绩:1胜3负1平您的运气不错!需要再来一次吗(y/n)?
目 录
摘要
1原程序代码„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 2程序代码出处 „„„„„„„„„„„„„„„„„„„„„„„„„„„„5 3程序功能及构成等„„„„„„„„„„„„„„„„„„„„„„„„„„„5 4原程序代码中最好模块及相应分析„„„„„„„„„„„„„„„„„„„„„6 5原程序可变动处及变动描述与相应变动代码„„„„„„„„„„„„„„6 6变动处相应知识点描述„„„„„„„„„„„„„„„„„„„„„„„„„„7 7变动处思路的描述„„„„„„„„„„„„„„„„„„„„„„„„„7 8变动后整个项目程序代码及相关结论„„„„„„„„„„„„„„„„„„„8
1原程序代码
/* 猜拳游戏 */
#include
void main(){ int user;//接受用户输入(存放)
int computer;//存放随机产生(存放)int i;//控制循环(存放)
int sum[2][3]={0};//累加分数(存放)char ch;//判断是否继续(存放)int *p=&sum[0][0];//指针初始化 // 使用系统时钟初始化种子值 srand(time(NULL));
// 使用system函数调用windows操作系统的dos命令 system(“color 9e”);
//欢迎界面
printf(“nnnnnnntttt”);printf(“欢 ”);Sleep(300);//休眠函数 printf(“迎 ”);Sleep(300);printf(“进 ”);Sleep(300);printf(“入 ”);Sleep(300);printf(“猜 ”);Sleep(300);printf(“拳 ”);Sleep(300);printf(“游 ”);Sleep(300);printf(“戏 ”);
//加载界面
printf(“nnnnntt”);printf(“请稍等,已加载:”);printf(“1%%”);for(i=2;i<=100;i++){ printf(“bbbb%3d%%”,i);Sleep(200);} system(“ cls ”);//清屏
//游戏界面输出
printf(“t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”);printf(“t☆※※※※※※※※猜※拳※游※戏※※※※※☆n”);printf(“t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆nn”);printf(“tttttt 软件1班n”);printf(“------------------------------n”);printf(“『游戏规则』:n”);printf(“t1.游戏分为5局,每局您可以猜拳5次,分胜、负、平三种结果。n”);printf(“t2.游戏中您可以输入1、2、3分别代表石头、剪刀、布。n”);printf(“t3.石头比剪刀大,剪刀比布大,布比石头大。n”);printf(“t4.五局结束后您可以选择再来5次或直接退出游戏。nn”);printf(“『游戏选项』:n”);printf(“t1.〖石头〗nt2.〖剪刀〗nt3.〖 布 〗nn”);loop2: { //清空变量
for(i=0;i<6;i++,p++)*p=0;
//控制游戏进行5次 for(i=1;i<=5;i++){ loop1: //当用户输入错误时还回位置 { //输出提示局数
printf(“【第%d局】:n”, i);// 电脑出拳(产生1-3的随机数)computer = rand()% 3 + 1;//用户输入
printf(“t请出拳:”);scanf(“%d”,&user);
//判断输赢,外层为判断用户,内层判断电脑 switch(user){ case 1:switch(computer)//当用户输入1时的判断 { case 1:printf(“t这%d局,您出的是〖石头〗,电脑出的是〖石头〗,平局!n”,i);sum[0][2]++;sum[1][2]++;break;case 2:printf(“t这%d局,您出的是〖石头〗,电脑出的是〖剪刀〗,o<∩_∩>o~~您赢了!n”,i);sum[0][0]++;sum[1][1]++;break;case 3:printf(“t这%d局,您出的是〖石头〗,电脑出的是〖 布 〗,>_<您输了!n”,i);sum[0][1]++;sum[1][0]++;break;}break;
case 2:switch(computer)//当用户输入2时的判断 { case 1:printf(“t这%d局,您出的是〖剪刀〗,电脑出的是〖石头〗,>_<您输了!n”,i);sum[0][1]++;sum[1][0]++;break;case 2:printf(“t这%d局,您出的是〖剪刀〗,电脑出的是〖剪刀〗,平局!n”,i);sum[0][2]++;sum[1][2]++;break;case 3:printf(“t这%d局,您出的是〖剪刀〗,电脑出的是〖 布 〗,o<∩_∩>o~~您赢了!n”,i);sum[0][0]++;sum[1][1]++;break;}break;
case 3:switch(computer)//当用户输入3时的判断 { case 1:printf(“t这%d局,您出的是〖 布 〗,电脑出的是〖石头〗,o<∩_∩>o~~您赢了!n”,i);sum[0][0]++;sum[1][1]++;
break;case 2:printf(“t这%d局,您出的是〖 布 〗,电脑出的是〖剪刀〗,>_<您输了!n”,i);sum[0][1]++;sum[1][0]++;break;case 3:printf(“t这%d局,您出的是〖 布 〗,电脑出的是〖 布 〗,平局!n”,i);sum[0][2]++;sum[1][2]++;break;}break;//当用户输入错误时的判断
default:printf(“t〖提示〗:出错了,只能选择1<石头>、2<剪刀>、3<布>!n”);goto loop1;//当用户输入错误时的跳向上面loop1标号处,用户重新输入选择 }//loop1标号结束
}//最外层switch语句结束 }//循环结束
//判断全部局数
if(sum[0][0] > sum[1][0])//用户胜利的输出情况 { printf(“【猜拳结果】您赢了!n”);printf(“---------------n”);printf(“您的成绩是:%d胜 %d负 %d平n”,sum[0][0],sum[0][1],sum[0][2]);printf(“电脑的成绩:%d胜 %d负 %d平n”,sum[1][0],sum[1][1],sum[1][2]);printf(“您这次运气不错,需要再来一次吗(Y or N)?n”);}
else if(sum[0][0] < sum[1][0])//用户失败的输出情况 { printf(“【猜拳结果】您输了!n”);printf(“---------------n”);printf(“您的成绩是:%d胜 %d负 %d平n”,sum[0][0],sum[0][1],sum[0][2]);printf(“电脑的成绩:%d胜 %d负 %d平n”,sum[1][0],sum[1][1],sum[1][2]);printf(“您这次运气很差,需要再来一次吗(Y or N)?n”);}
else if(sum[0][0] == sum[1][0])//用户失败的输出情况 { printf(“【猜拳结果】平局!n”);printf(“---------------n”);printf(“您的成绩是:%d胜 %d负 %d平n”,sum[0][0],sum[0][1],sum[0][2]);printf(“电脑的成绩:%d胜 %d负 %d平n”,sum[1][0],sum[1][1],sum[1][2]);
printf(“需要再来一次吗(Y or N)?n”);}
//提示用户输入
printf(“请输入:”);fflush(stdin);//清空缓存 scanf(“%c”,&ch);system(“ cls ”);//清屏
//判断用户是否继续
if(ch=='Y' || ch== 'y')goto loop2;// 当用户选择继续时,跳向上面loop2标号处,继续游戏 else printf(“输入任意键退出!n”);}//loop2结束 }//main()结束
2程序代码出处
.http://user.qzone.qq.com/154506372?ADUIN=734430457&ADSESSION=1307593968&ADTAG=CLIENT.QQ.2785_FriendInfo_PersonalInfo.0&ptlang=20
523程序功能及构成等
实现一个猜拳游戏。游戏分为5局,每局用户可以猜拳一次,分胜、负、平三种结果。游戏中用户可以出剪刀、石头、布三种拳。五局结束后,统计用户胜、负、平的次数,并显示最终游戏结果(输了、赢了、还是平了?)和每局游戏结果。用户可以选择再来一次或退出游戏。猜拳
用户输入1-3数字,输入数字后判断是否在1-3之间,如果不在则提示用户重新输入,这里需要使用循环实现
电脑生成1-3的随机数实现猜拳,使用随函数生成 比较
根据游戏规则比较用户和电脑出的拳,将比较结果记录下来 循环
使用循环实现一轮5局
使用循环实现循环游戏,输出非‘y’结束游戏
• • • • • • • • • • • • •
4原程序代码中最好模块及相应分析
用户出拳循环判断是否在1-3之间
//出拳,若用户出拳不正确就重新出拳
while(user<1 || user>3){
printf(“【第%d局】nt请出拳:”,i+1);fflush(stdin);
scanf(“%d”,&user);
//判断出拳是否正确,若不正确给出提示
if(user <1 || user >3){
printf(“t〖提示〗:出错了,只能选择(石头)、(剪刀)、(布)!n”);} }
5原程序可变动处及变动描述与相应变动代码 • 比较用户与电脑出拳结果
• switch(user)//判断用户出拳,计算用户出拳是赢了还是输了
• {
• case 1:
printf(“t这一局,您出的是〖石头〗,”);•
if(computer == 2){
win ++;//用户胜局+1
printf(“电脑出的是〖剪刀〗,O(∩_∩)O~~ 您赢了!n”);•
else{
failed ++;//用户败局+1 •
printf(“电脑出的是〖布〗,%>_<% 您输了!n”);•
}
break;• case 2: •
......•
break;• }
6变动处相应知识点描述
}
• 循环游戏 • do • {
• • • • • • • • • • • if(win-failed<=0){
printf(“不服气吗?请输入y或者Y再来,输入其它则离开!n”);} else {
printf(“您这次运气不错!需要再来一次吗(y/n)?n”);}
printf(“请输入:”);
fflush(stdin);//清空缓存
}while(scanf(“%c”,&in),in=='y' || in == 'Y');
7变动处思路的描述 •
总共时间(200分钟)
– 阶段1(30分钟)
设计游戏界面、理清游戏思路,打印游戏标题、规则
– 阶段2(65分钟)
实现电脑及用户出拳及比较
– 阶段3(25分钟)
实现统计并显示游戏结果
– 阶段4(25分钟)
实现游戏循环运行
– 阶段5(25分钟)
反复运行、调试程序,解决bug
8变动后整个项目程序代码及相关结论
实现思路及关键代码:
创建cpp文件
搭建程序框架
定义变量
输出欢迎界面及游戏规则
int i,computer,user,win,failed;char in;printf(“t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n”);printf(“t☆※※※※※※※※猜※拳※游※戏※※※※※※※※☆n”);printf(“t ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆nn”);需求说明:
实现用户出拳并显示 实现电脑出拳并显示
电脑出拳用产生1~3的随机数实现(使用随机函数srand(time(null)))产生1:显示“电脑出拳: 剪刀” 产生2:显示”电脑出拳: 石头” 产生3:显示“电脑出拳: 布”
电脑出拳后将电脑出拳与用户出拳比较,如果用户赢则将win变量加1,如果用户输则将failed变量加1,否则平局,然后显示这一局是用户输了或赢了
5局之后比较如果win变量大于failed变量则用户赢,如果failed大于win则用户输,否则平手,并显示统计结果
*
第二篇:C语言程序设计
1.Problem A: Hello world!Description Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。
Input 无
Output 请输出: Hello Da_min, Hello Er_min, Hello Xiao_ming!
Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming!
HINT 请注意换行符
Append Code #include
printf(“Hello Da_min,n”);
printf(“Hello Er_min,n”);
printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圆的面积和周长 Description 从键盘输入圆的半径,求圆的面积和周长,圆周率取3.14。
Input 输入一个浮点型数据,有效数字不会超过十进制的6位。
Output 输出为两行。
第一行为圆的面积,第二行为圆的周长,格式见sample。
Sample Input 3
Sample Output Area: 28.260000 Perimeter: 18.840000
HINT 了解浮点类型的输入、输出和算术运算符
Append Code 法一
#include
#include
double r;
scanf(“%d”,&r);
printf(“Area: %lfn”,pi*r*r);
printf(“Perimeter: %lfn”,2*pi*r);
}
3.Problem C:平均值 Description 求3个数的平均值。
Input 输入只有一行,为3个较小的整数。
Output 输出为这3个整数的平均值,保留3位小数。
Sample Input 1 2 3 Sample Output 2.000
HINT 注意除法运算对整型数据和浮点型数据是不一样的。
Append Code #include
4.Problem D: 求字符的值 Description 从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。
Input 输入为3个字符。
Output 输出为3行。
每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。
Sample Input 0 A
Sample Output 048 060 030 032 040 020 065 101 041
HINT 了解字符值的存储和整型的关系。
Append Code #include
5.Problem A: 最简单的程序 Description 输出一行“Hello world!”。
Input 无
Output Hello world!
Sample Input Sample Output Hello world!
HINT Append Code #include
printf(“Hello world!”);}
6.Problem B: 算术基本运算 Description 计算两整数x和y(0 Input 输入只有一行,格式见sample。 Output 输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自减运算 Description C语言中有自增运算++、自减运算--,并且可以前置和后置。 编写一个程序:对输入的一个整数a,输出a++、a--、++a、--a的值。 Input 一个整数a,a是很小的整数。 Output 输出为5行,第一行为a的值,后面依次为--a、a--、a++、++a的值。 5行输出纵向a要对齐,“:”对齐,“:”前后各一个空格,后面的数值不用对齐。每行行尾都有回车。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 绝对值 Description 求整型数据和浮点型数据的绝对值。 Input 输入两个数,第一个是整数,第二个是浮点数。 Output 输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。 Sample Input-1 1 Sample Output 1 1 HINT 求绝对值可以用标准库函数来完成,也可以自己判断。注意浮点数的输出格式。求绝对值的函数在哪个头文件?貌似很多人会搞错,包括很多编书的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇数还是偶数? Description 输入一个整数,判读它是奇数还是偶数。 Input 输入只有一行,为一个100以内的正整数。 Output 输出为一行。 若输入为偶数则输出“even”,奇数输出“odd”。Sample Input 30 Sample Output even HINT 用整数运算可以解决,练习“?:”表达式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 简单的打折计算 Description 商店规定:消费满n元,可以打八八折。设某件商品标价m元,输入购买的件数x,计算出需要支付的金额(单位:元),精确到分。 Input 输入只有一行,三个整数m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮点型的输出控制,注意整型和浮点型混合运算过程中的数据类型转换。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判断闰年 Description 输入一个正整数的年份,判断是否为闰年。 Input 输入只有一行,为一个10000以内的正整数。 Output 输出为一行。 若输入为闰年偶数则输出“Yes”,否则输出“No”。 Sample Input 2010 Sample Output No HINT 了解逻辑运算符和关系运算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花数 Description 如果一个三位十进制数等于其各位数字的立方和,则称这个数为水仙花数。如:13+53+33=153。 Input 一个整数x,100<=x<=999。 Output x是水仙花数,则输出“YES”,否则为“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三个数比较大小 Description 从键盘上输入0~100之间的三个数,按从小到大的顺序输出。 Input 输入只有一行,为三个整数。 Output 按从小到大输出这三个数。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if语句判断各种情况可以解决这个问题。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 给定3个正整数a、b和c,按照如下规则求和: 如果这个数字是偶数,则累加到和中; 如果这个数字是奇数,则将大于该数的最小偶数累加到和中。 Input 三个正整数,均在100以内。 Output 一个和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不会使用分支语句,可使用条件运算符判断到底将哪个数累积到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你过线了吗? Description 经过四年的学习,你决定报考我国著名的“285”高校之一的北青大学,经过认真的复习,残酷的考试,终于知晓了自己的考试成绩,也知道了北青大学的录取分数线,请你编程判断,自己过线了吗? Input 输入有2行,第一行有4个正整数,分别表示三门课程的分数线以及总分分数线。第二行有3个非负整数,分别表示你考的三门课程的成绩。 Output 如果你的三门课程成绩都不低于相应课程的分数线,且你的考试总分也不低于北青大学的总分分数线要求,则输出“congratulations”,否则输出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入的第一行是一个整数N,后面有N对整数a和b,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的和,顺序与输入对应。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N给出了测试样例数,用for循环处理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系统上测试输入结束符为EOF(End Of File),其值为-1。用scanf()把文件所有内容读完后,会读到EOF,所以可以用来判断输入是否完成,测试时可以用Ctrl+Z产生EOF。本题解法参看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判断是否是元音字母 Description 输入一个英文字母,判断是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 输入一个英文字母 Output 是元音字母,输出“yes”,否则输出“no”,行尾没有回车。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按顺序输出三个数 Description 对于输入的3个整数,按照从小到大的顺序输出。 Input 输入3个int类型内的整数,两两之间用一个空格隔开。 Output 按照从小到大的顺序输出上述三个数,两两之间用一个空格隔开。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判断输入整数的奇偶性。 判断奇偶数 Input 输入为一个整数。 Output 输出只有一行,代表判断结果。如果输入的整数n是一个偶数,输出: n is an even number.否则输出: n is an odd number.见样例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判断两个整数的大小关系 Description 输入2个整数a和b,如果a>b,则输出1,否则输出0。 Input 两个整数a和b,均不超过int类型的表示范围。 Output 表示a>b的结果:如果a>b,则输出1,否则输出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成绩的等级 Description 把百分制的考试成绩转换成五级制的成绩: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之间的输入是非法数据,输出“Error”。 Input 输入多行,每行一个整数。 Output 输入所对应的成绩等级。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch语句解决这个问题比较方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 输出是m的倍数或n的倍数、但不是 m和n的公倍数的数 Description 输出1~k之间是m的倍数或n的倍数、但不是m和n的公倍数的数,其中1<=m,n Input 输入三个整数,依次为k、m、n。 Output 从小到大输出符合题意的所有整数,两数之间用一个空格分开。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 难点在于输出格式的控制:空格在数的中间,学会用循环时边界情况的特殊处理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 两整数相加减 Description 计算a+b和a-b。 Input 输入为一对整数a和b。a,b用空格分开。 Output 输出a+b和a-b的计算结果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它满足条件吗? Description 需要判断给定的一个整数是否同时满足如下三个条件: 1.它是一个完全平方数。2.它是一个偶数。3.它是一个正数。 注:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一个int范围内的整数。 Output 如果输入的数字满足条件,则输出yes,否则输出no。 Sample Input 100 Sample Output yes HINT 注意逻辑表达式判断三个条件的顺序。如果你不会使用分支语句,同样可以使用条件运算符实现该程序。 库函数sqrt()可以用于求一个数的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 编写一个完整的程序,运行时向用户提问”你考试考了多少分?(0-100)“接受输入后判断其等级并显示出来等级: 优:90<=分数<=100 良:80<=分数<90 中:60<=分数<80 差:0<=分数<60 Input 输入任意一个整数分数值,显示等级;再输入任意一个整数分数值,显示等级;....直到测试数据较充分,可输入-1止。 Output 对任意输入的分数值,输出对应的等级,直到输入的数为-1时才退出运行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 优 优 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”优n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 学校举行运动会,如果全体学生按照3人一队列队,则多了1个人;如果按照4人一队列队,则多了2个人;如果按照5人一队排队,则多了3个人。请问这个学校有多少学生? Input 一个int类型的正整数N,是学生人数的上界,即:该校学生数不超过N。 Output 所有可能的学生数,每个数占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正负数各有几个? Description 输入若干个整数,求其中正数、负数的个数。 Input 输入分为2行:第一行是一个数字N>0,表示下面有N个整数。第2行是N个整数,都是int类型的。 Output 输出所输入的N个整数的正数个数和负数个数,并用空格分开2个输出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似还有一种叫做0的数。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。当测试样为0 0时表示输入结束,0 0不参与运算。 Output 每行输出一个a+b的值,顺序与输入对应。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 练习break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 计算a+b,0<=a,b<1000。 Input 输入有多对整数a和b组成,每对a和b占一行,a,b用空格分开。 Output 每行输出一个a+b的值,顺序与输入对应。每个格式样例之间用一个空行分隔开。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于输出的和比空行多一个,所以全部计算放在一个循环里是不行的,必须要特殊处理开头或者结尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n个数的最大值和最小值 Description 找出n个数中最大的数和最小的数,并将它们的值输出出来。 Input 输入为n+1个整数,都在int类型范围内。这些数可能用若干空格或者换行符分隔开。输入的第1个数为n,表示后续有n个数输入。从输入的第2个数开始,求出直到第n+1个数中最大的数和最小的数。 Output 输出为两行,格式见sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格还是回车都是空白符,对scanf(”%d“)来说没有区别;先读入n,然后用for循环就很容易控制读入n个数的过程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n]; for(i=0;i scanf(”%d“,&a[i]); max=a[0]; min=a[0]; for(i=0;i { if(max max=a[i]; if(min>a[i]) min=a[i]; } printf(”The maximum number is %d.n“,max); printf(”The minimum number is %d.“,min); return 0;} 32.Problem D: 求100以内的素数 Description 素数是只能被1和自身整除的正整数,根据数学定义1不是素数。素数也叫质数。 Input 输入为两个整数m和n,满足0<=m<=n<=100。 Output 从大到小输出m~n之间的所有素数,一个素数一行。如果m~n之间没有素数,则不输出任何数。 输出的所有数在两行“=====”之间。 Sample Input 2 12 Sample Output ===== 11 7 5 3 2 ===== HINT 利用素数的数学规律可以很容易的解出此题,题目给出的数据范围是关键。 Append Code #include t=0; for(j=2;j<=sqrt(i);j++) if(i%j==0) t=1; if(t==0&&i>1) printf(”%dn“,i);} printf(”=====“);return 0;} 33.Problem E: 是否构成三角形? Description 给出三个整数,代表三条边的长度,判断这三条边的长度是否能构成一个三角形? Input 第一行是n(1<=n<=100),表示有n组测试数据 接下来有n行,每一行包含三个整数,表示三个边长(1<=边长<=100) Output 如果三条边能构成三角形,输出YES,否则输出NO Sample Input 3 1 2 3 2 8 7 20 20 1 Sample Output NO YES YES HINT Append Code #include {scanf(”%d%d%d“,&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) printf(”YESn“);else printf(”NOn“);} return 0;} 34.Problem C: 简单的整数排序 Description 对给出的若干整数按从小到大排序。 Input 输入的第一个数为n(n<=1000),后接n个整数。 Output 按从小到大的顺序输出这些整数,每两个整数之间用一个空格分隔开,最后一个整数后面没有空格。 Sample Input 10 3 9 1 5 2 8 5 6 7 3 Sample Output 1 2 3 3 5 5 6 7 8 9 HINT 排序前必须把所有的整数都存储下来。因为只有最多1000个数,1秒的时间足够任何排序算法运行处结果来。 Append Code #include int c,i,n,j; int a[1000]; scanf(”%d“,&n); for(i=0;i scanf(”%d“,&a[i]); for(i=1;i<=n-1;i++) { for(j=0;j { if(a[j]>a[j+1]) { c=a[j]; a[j]=a[j+1]; a[j+1]=c; } } } printf(”%d“,a[0]); for(i=1;i printf(” %d“,a[i]); return 0;} 35.Problem A: Description 购物的路程 Saya和Kudo一起去购物。假定她们逛的街是一条直线,而商铺是这条直线上的一些点。她们将车停在该直线最左端的店铺处,然后从左向右开始逛每一个店铺,然后从最右边的店铺再返回到停车处。你的任务是计算她们走了多少路。 Input 输入有多组。每一组的第一行是N(0 Output 对每组输入,输出她们走的路长。 Sample Input 4 13 89 37 6 7 30 41 14 39 42 0 Sample Output 152 70 HINT Append Code #include int n,i,max,min,a[100001]; while(scanf(”%d“,&n)&&n!=0) { scanf(”%d“,&a[0]); min=max=a[0]; for(i=1;i { scanf(”%d“,&a[i]); if(a[i]>max) max=a[i]; if(a[i] min=a[i]; } printf(”%dn“,(max-min)*2); } return 0;} 36.Problem B: 求累加和 Description 编程求min~max的累加和(含min和max),其中max>=min>0。部分程序已经给出,请填充其中的空白语句,并提交填充后的完整程序。 Input 输入为多行。第一行是一个整数N>0,表示后面有N个测试用例。后面有N行,每行包含2个整数,分别是min和max。 Output 输出为N行,每个测试用例的计算结果占据一行。每行的格式为: case i:sum=s.其中i表示测试用例的编号(从1开始),s是该测试用例对应的累加和(设不超过int的表示范围)。 Sample Input 3 1 10 1 100 1 1 Sample Output case 1:sum=55.case 2:sum=5050.case 3:sum=1.HINT Append Code #include int n,i,j,max,min,sum; scanf(”%d“,&n); for(i=0;i { sum=0; scanf(”%d%d“,&min,&max); if(max==min) printf(”case %d:sum=%d.n“,i+1,min); else { for(j=min;j<=max;j++) sum=sum+j; printf(”case %d:sum=%d.n“,i+1,sum); } } return 0;} 37.Problem G: 顺序输出字母 Description 按字母顺序输出两个字母st和ed之间的所有字母,但不包括st和ed。不输出逆序。 Input 两个字母st和ed,都是大写字母,用一个空格分开。 Output 在一行内按顺序输出st和ed之间的所有字母,但不包括st和ed。例如: 输入为A和E,则输出为BCD; 输入为A和B,则什么字母也不输出,只有一个空行; 输入为E和A,也是什么字母也不输出,只有一个空行。最后要输出一行(行尾不回车): ***END*** Sample Input A C Sample Output B ***END*** HINT Append Code #include char st,ed,a; int i; scanf(”%c%c%c“,&st,&a,&ed); { for(i=st+1;i printf(”%c“,i); printf(”n***END***“); } return 0;} 38.Problem F: 单字母变换 Description Tom和Jack是密码学爱好者,他们在聊天时经常使用一些暗语。他们使用的一种最简单的暗语是:将要说的每句话里面的英文字母变成这个字母之后的某个字母。现在要求你写一个程序,将一个字母变成它之后的某个字母。 Input 输入有2个:一个大写字母c和一个正整数d(0 Output 输出字母c之后的第d个字母。大小写与c一致。如果c之后的某个字母已经超出'Z',则再从字母'A'开始计数。 如:c='A',d=3,则输出应为:D。若:c='Y',d=3,则输出应为:B。 Sample Input A 3 Sample Output D HINT Append Code #include char c; int d; scanf(”%c%d“,&c,&d); if(c+d<='Z') printf(”%c“,c+d); else printf(”%c“,c+d-26); return 0;} 39.Problem B: 登录密码验证 Description 编写一个程序,模拟用户登录系统的密码验证过程。系统提供给用户的密码长度最长为20个字符,若密码输入错误可以再次输入。但为了保证用户密码安全,若连续输入密码错误超过5次就会锁定账号一段时间。 Input 输入为若干个串,至EOF结束。输入的第一个串是用户的正确密码,后面的串为模拟用户登录时的输入的密码。 Output 每次输入错误的密码,输出一个“Wrong!”,若输入的密码为正确的,输出一个“Welcome!”,并结束密码测试。若前5次输入的密码都是错误的,则后面的输入中不管是否有正确的密码都输出“Out of limited!”。 Sample Input abcdefg 123456 kkkkkkkk abcdefg Sample Output Wrong!Wrong!Welcome! HINT 输入可以用scanf(”%s“)处理,密码比较用字符串的比较可以完成。 Append Code #include char a[20],b[20]; int i,j=1; scanf(”%s“,a); while(scanf(”%s“,b)!=EOF) { if(j<=5) { if((strcmp(a,b)==0)) { printf(”Welcome!n“); break; } else printf(”Wrong!n“); j++; } else printf(”Out of limited!n"); } } 40.Problem C: 兔子的繁殖问题 Description 假设一对兔子每月能生一对小兔(一雌一雄),每对小兔出生后的下一个月是没有繁殖能力的,至出生后的第三个月开始又可以每月生一队小兔,问从一对刚出生的小兔开始,经过若干个月后一共有多少兔子(假设在此过程中兔子没有死亡)? 这个问题是意大利数学家菲波那契(Fibonacci)在他1202年出版的《算盘全书》中提出来的,从第一对刚出生的小兔开始每月的兔子数被乘坐菲波那契序列。 Input 输入的第一个数为n,接下来有n个数字。每个数字为一个月份m(m<=45)。 Output 输出为n行,每行为第m个月后的兔子总数。 《C 语言程序设计》主要在计算机软件、计算机网络、计算机应用、通信技术、智能电子、电子信息工程、多媒体以及核工程与核技术等专业中开设,是电子信息类、机械类等工科专业的重要专业基础课。 本校从2001至今,每年都开设《C语言程序设计》课程,由于,我校最开始时的特殊情况,主要把重点放在C语言中的各类重点、难点的语法、语义上,使得学生经过比较复杂和痛苦的过程后,对C语言在使用上很难做到自己编写程序。而且很多学生产生了畏惧心理。 2004年,学院成立计算机科学与技术系,为了更好学习和掌握C语言,计算机科学与技术专业和计算机维护专业(计算机应用技术前身)除了开设《C语言程序设计》课程外,在后续一学期还开设了《C语言程序设计课程设计》,使得计算机专业学生编程思想和能力得到了极大提高。 2005年,为了让我院工科学生更好的掌握C语言编程以及通过四川省计算机二级考试,在《C语言程序设计》课程后设置《C语言程序设计课程设计》,极大地提高了学生的动手机会和能力,过级率显著提高! 2007年,依托我校建设精品课程的契机,我们将C语言中的各个知识点进行重新规整,提出适用于三本院校学生的语言设计学习的方法。我们提出,先了解C语言,再学习C语言,再用C语言的思想。即在开始时让学生初步知道C语言,然后引入比较简单的运算符以及基本输入、输出和简单的顺序结构程序设计。通过这样的方式,我们发现,学生在C语言的学习就不会从开始的时候陷入大量难懂的语法、语义和数据结构中。有了以上铺垫再层层进入,最终进入复杂的各类数据结构以及指针等学习。通过以上的内容规整后,教学效果有明显提高。 C 语言程序设计课程形成性考核说明 一、课程性质 《 C语言程序设计》是计算机工程系和电气工程系的专业基础课,属于多个系的系级平台的专业必修课程。学时:80 二、考核对象 计算机工程系和电气工程系二年级学生。 三、考核方式 教学效果评价采取过程性评价与结果性评价相结合,理论与实践相结合,理论考试重点考核与实践能力紧密相关的知识,重点评价学生的职业能力。本课程考核采取形成性考核方式进行,由形成性考核的各项过程成绩组成,分数比例为: 总评成绩 =平时学习表现(10%)+作业(30%)+课程设计(20%)+期中考试(10%)+期末考试成绩(30%) 四、形成性考核具体内容及评分标准 •学习表现(100分) 基本原则:基本分50分,表现好累计加分至100分,表现不好累计减分至0分,如果迟到、早退、旷课次数等违纪扣分超过学习表现的总分值,则在期末总评分里酌情扣分。 扣分项目:玩游戏一次扣 15分(三次以上者取消本课程考核资格),睡觉一次扣5分,影响课堂秩序的行为如说话等一次扣5分。学生旷课一次扣15分,迟到及早退一次各扣5分。 加分项目:正确回答问题一次加 2分,主动回答问题一次加5分,在课堂上能起积极引导作用加5分,主动演示程序加5分。 •作业(100分) 作业至少有30个程序编制的题目(包括每章节的实训项目,上课时分次布置完成),保质保量完成得满分,每正确完成一道题得5分,在每一道题目中,程序结构正确,出现拼写等粗心导致的错误每个扣一分,出现语法错误每个扣1分,算法错误扣2分。 •课程设计(100分) (1)按照课程设计要求,每实现一项功能得10 分,程序全部调试成功得50分。 (2)设计报告完整规范,有框图和流程图得15-20分,有难点说明得10-15分,有总结得10-15分,满分50分。 •期中考试(100分) 期中考试为实训项目,总分 100分。 (1)程序调通得50分: 按照课程设计的要求,程序调试通过、功能实现得50分。 (2)报告完整规范得50分: 报告中有源程序清单的 10分,说明程序编制要点得10分,说明在程序编制中的难点及解决办法得10分,对项目中所涉及的知识点作全面总结得20分,如果知识点只是简单列出得10分。 •期末考试 期末考试为试卷答题,总分为 100分。 中央广播电视大学计算机科学与技术专业 C语言程序设计A课程考核说明(2008) 一、考核说明 《C语言程序设计》课程是全国电大系统计算机科学与技术专业(本科)的一门基础必修课程。本课程是学习数据结构、操作系统、计算机网络、数据库、软件工程等课程的先修课,在整个专业教学体系中占有非常重要的作用。 本课程主要介绍C语言的基本语法规则和程序设计方法,包括C语言程序结构和上机运行程序的基本过程,各种数据类型的常量和变量的定义与表示,各种运算符和表达式的表示与应用,各种流程控制语句的定义与作用,各种常用函数的定义格式与调用方法,用户函数的定义与调用,数组、指针、结构、文件等数据类型的定义与使用,结构化和模块化的程序设计方法等内容。 学习《C语言程序设计》需要理论与实践相结合,只注重书本知识是空洞的,只注重上机实践是迷茫的,必须两者结合循序渐进,通过书本知识指导实践,通过实践加深理解和吸收知识,以及运用知识解决问题的能力。 现将该课程考核的有关问题说明如下: 1.考核对象 全国电大系统开放教育计算机科学与技术专业(本科)的学生。2.教学媒体 文字主教材《C语言程序设计》 任爱华主编 中央广播电视大学出版社出版。 录象教材 20讲 任爱华等主讲 中央广播电视大学音像出版社出版,时间待定。IP网络课件 16讲 徐孝凯主讲 电大在线的该课程网站点播,2008年9月。 复习资料 《C语言程序设计期末复习指导》中央电大教育杂志社出版发行。 平时考核 《C语言程序设计形成性考核册》 中央电大教育杂志社出版发行。 网上辅导 在电大在线《C语言程序设计》课程教学网页上发表。 3.命题依据 本考核说明以中央电大计算机科学与技术专业《C语言程序设计》课程的教学大纲为依据编制。本考核说明是考试命题的依据。 4.考核要求 本课程是以掌握C语言知识并解决实际程序设计问题为目的。主要考核学生对C语言知识的掌握程度和对解决一般问题的程序设计能力。对C语言知识要在理解和应用的基础上加强记忆和掌握,不能死记硬背。 本课程教学内容包括了解、理解和应用三个层次,并且逐步递进,具体含义如下:(1)了解层次:记忆C语言中的基本概念和语法规则; (2)理解层次:掌握C语言中的每个语法成分和语句的定义格式、含义及作用;(3)应用层次:利用C语言,结合实际解决问题的需要,能够分析和编写程序。 5.命题原则 (1)在教学大纲和考核说明所规定的知识范围内命题。在教学知识范围之内,需要灵活运用才能够解决问题的试题不属于超纲。 (2)试题的取材要求覆盖面广、区分度高。 (3)试题兼顾各个能力层次,了解和理解约占40%,应用约占60%。 (4)试题的难易程度和题量适当,按难易程度分为四个层次:容易占20%,较易占40%,较难占30%,难占10%。题量安排以平时能够独立完成作业者,能在规定的考试时间内做完 1 并有一定时间检查为原则。 6.试题题型 选择:根据题意,从四种可选择的答案中选择合适的一种答案。 填空:根据题意,在画有横线或空白括号内填写合适内容。 写出程序运行结果:根据所给的C语言程序,写出运行后的输出结果。 指出程序或函数功能:根据所给的C语言程序或函数,指出运行程序或进行函数调用时所能实现的功能。 编写程序或函数:根据所给出的题目要求,编写出相应的程序或函数模块。 7.考核形式: 本课程考核采用终结性考试与形成性考核相结合的方式。形成性考核分为两种,一种视形成性考核册作业完成情况和所规定的上机实验完成情况而定,占总成绩的20%;另一种为省级电大统一命题和组织的期末上机考核,占总成绩的10%,要求完成一个带有多个程序文件的程序项目的编写(或修改)并上机运行通过,上机考核时限为60分钟。形成性考核成绩由省级电大考核和确认。终结性考试采用书面和闭卷方式,考试成绩占总成绩的70%,由中央电大统一命题和考试时间,答卷时限为90分钟。总成绩满分为100分,合成成绩达到60及以上分数者可获得该课程规定的4学分,否则不获得该课程学分。 第二部分 考核内容及要求 第一章 C语言概述 考核内容(知识点): 1.程序、程序文件和函数的概念及其相互之间的关系。2.函数的定义格式和作用,主函数的特殊地位和作用。3.C语言简单语句和复合语句的语法格式。4.#include预处理命令的格式与作用。 5.头文件的文件名格式、在程序中的使用方法和作用。6.程序中两种注释标记的写法和作用。 7.标准输出函数printf()和标准输入函数scanf()的定义格式和具体应用。 8.C语言程序文件名、编译后生成的目标文件名和连接后生成的可执行文件名的命名规则,以及上机输入、编辑、编译、连接和运行程序的过程。 考核要求: 要求了解和理解以上内容。 第二章 数据类型和表达式 重点考核的内容(知识点): 1.C语言中的数据类型的分类。 2.各种整数类型的关键字表示,存储空间的大小和值域范围。3.整型变量的定义和初始化,十进制整型常量的表示。 4.字符类型的关键字表示,存储空间的大小和值域范围;字符型常量的表示,回车、换行、单引号、双引号、反斜线、空字符等特殊字符的表示。5.字符型变量的定义和初始化,字符型与整型的关系。 6.枚举的概念,枚举类型的定义,枚举变量的定义和初始化,枚举常量与整型常量的对应关系。 7.各种实数类型的关键字表示,存储空间的大小和有效位数。 8.单精度和双精度实数的定点表示和浮点(科学)表示,实型变量的定义和初始化。 9.加、减、乘、除、取余、赋值、增 1、减 1、取数据存储长度等算术运算符的表示、含义、运算对象个数和运算优先级。 10.关系运算符的定义和关系表达式的计算,逻辑运算符的定义与逻辑表达式的计算,根据任意表达式的值判断其逻辑值的方法。 一般考核的内容(知识点): 1.整型常量的八进制和十六进制表示。 2.符号常量的两种定义方法,它们之间的区别。3.位操作符、复合赋值操作符的含义与使用。4.求关系或逻辑表达式的相反表达式的方法。 考核要求: 理解和掌握以上重点考核的内容,了解和理解以上一般考核内容。 第三章 流程控制语句 考核内容(知识点): 1.C语言程序中的顺序、分支和循环这三种基本结构,每种结构的执行过程。 2.简单if语句、带else子句的if语句、多分支结构的if语句的定义格式、执行过程和在处理问题中的具体应用。 3.switch语句的定义格式、执行过程和在处理问题中的具体应用。 4.if语句与switch语句之间的功能比较,if语句与switch语句之间的转换。 5.for循环、while循环和do-while循环的定义格式、执行过程和在处理问题中的具体应用。 6.三种循环结构不同特点。7.Break语句在switch语句和各种循环语句中的作用,continue语句在各种循环语句中的作用。 8.goto语句和return语句的定义格式和功能。 考核要求: 理解和掌握本章的所有内容,并能够灵活应用。 第四章 数组和字符串 考核内容(知识点): 1.一维数组的含义、定义格式及初始化格式。 2.数组长度、数组元素、元素下标的含义,访问数组元素的语法格式,下标运算符的操作对象和操作结果。 3.数组元素的下标变化范围,数组元素所占存储空间大小和整个数组所占存储空间大小的计算,各元素对应存储空间的排列情况,每个元素的存储地址的计算。 4.利用一维数组存储数据,按元素值的升序或降序排列数据,按给定条件或功能对数组元素依次进行访问和处理。 5.二维数组的含义、定义格式及初始化格式。 6.二维数组的行数和列数的概念,数组长度(即所含元素个数)的计算。7.访问二维数组元素的语法格式,每个下标运算符的操作对象和操作结果。 8.二维数组中的所有元素在存储空间中的排列情况,每个元素的存储地址的计算。9.利用二维数组存储矩阵数据,按给定条件或功能对数组元素依次进行访问和处理。10.字符串常量的定义格式,字符串的存储格式,字符串长度的概念。 11.一维字符数组、二维字符数组与字符串之间的关系,一维字符数组与二维字符数组 3 的初始化。 12.strlen、strcpy、strcmp、strcat等字符串函数的声明格式及功能。13.利用typedef语句定义数据类型的方法。 考核要求: 了解和理解一维数组、二维数组和字符串的概念的使用方法,会利用它们存储和处理数据。 第五章 指针 考核内容(知识点): 1.指针的概念,指针变量的定义和初始化。2.指针赋值(=)、取对象(变量)地址(&)、访问指针所指对象(*)、指针比较(==、!=、>、<等)、指针算术运算(+、-、+=等)、指针增1或减1(++、--)等各种运算的含义和使用。3.数组名的指针含义。 4.一维数组元素的下标访问方式与指针访问方式及其之间的转换。5.二维数组元素的下标访问方式与指针访问方式及其之间的转换。 6.动态存储分配函数malloc()和calloc()以及动态存储空间释放函数free()的定义格式与调用方法。 考核要求: 理解指针的概念,掌握利用指针访问简单数据和数组元素的方法,掌握进行动态存储分配与释放的方法。 第六章 函数 考核内容(知识点): 1.函数的定义格式。 2.函数调用表达式的语法格式及执行过程。 3.函数定义中形参变量的作用及实虚参数结合的过程。5.函数声明(原型)语句的定义格式及作用。 6.形参为一维数组或二维数组时的说明格式,调用时数组参数传递的过程。 7.变量的作用域的概念和含义;系统对全局变量、static变量、局部变量的建立和初始化过程。 8.函数的递归调用的概念和递归函数的具体执行过程。9.头文件在程序文件中的位置和作用。 考核要求: 掌握用户自定义函数的定义、声明与调用方法,掌握函数调用中一般参数、指针参数、数组参数的传递,以及函数体执行和返回的过程。 第七章 结构与联合考核内容(知识点): 1.结构的概念,结构类型的定义格式,结构类型的声明(即不完整定义)格式。2.结构对象(变量)的各种定义格式和初始化,结构大小的计算,结构对象和结构数组对象的动态分配和初始化。 3.结构赋值,结构成员的直接访问和间接访问,利用结构数组保存和处理数据。4.结构和结构指针作为函数参数和返回值类型的具体应用。 5.链表的概念,链表中结点的结构,链表的建立和遍历的方法和算法。 6.联合的概念,联合类型的定义格式,联合对象的定义和初始化,联合的存储结构及大小的计算,匿名联合的特点。 考核要求: 理解和掌握结构和联合类型的特点以及数据成员的访问方法,了解和理解链表中结点的结构和建立与访问链表的方法,以及结构与联合嵌套定义的概念。 第八章 文件 考核内容(知识点): 1.数据文件的概念。 2.文件的打开和关闭方法。 3.文件的各种访问方式的表示。 4.对字符文件进行的输入和输出数据的方法。 5.对字节文件进行的输入和输出数据的方法。 考核要求: 了解和理解文件的有关概念和访问方式,会利用字符或字节文件保存和处理数据。 第三部分 模拟考核试题及解答 一、选择题 1.由C语言源程序文件编译而成的目标文件的缺省扩展名为()。A.cpp B.exe C.obj D.C 2.C语言程序的基本模块为()。 A.表达式 B.标识符 C.语句 D.函数 3.x>0 || y==5的相反表达式为()。 A.x<=0 || y!=5 B.x<=0 && y!=5 C.x>0 || y!=5 D.x>0 && y==5 4.枚举类型中的每个枚举常量的值都是一个()。A.整数 B.浮点数 C.字符 D.逻辑值 5.循环语句“for(int i=0;i 9.假定a为一个整型数组名,则元素a[4]的地址比该数组的首地址大()个字节。A.4 B.8 C.16 D.32 10.下列给字符数组赋初值时,正确的是()。 A.char s1[]=“abcdef”;B.char s2[4]=“abcd”;5 C.char s3[2][3]={“abc”,“xyz”};D.char s4[4][]={'a','x','s','t'};A.char *p=s;B.char *p=&s;C.char *p;p=*s;D.char *p;p=&s;11.要使p指向二维整型数组a[10][20],p应定义为()。 A.int *p=a;B.int **p=a;C.int *p[20]=a;D.int(*p)[20]=a;12.标准输入设备的文件流标识符是()。 A.stdin B.stdout C.stderr D.stdio 13.若要以读/写操作方式打开一个二进制文件,当文件不存在时返回打开失败信息,则选用的打开方式字符串为()。 A.“r+” B.“ab+” C.“rb+” D.“wb+” 二、填空题 1.单行或多行注释的开始标记符为__________。 2.使用#include命令可以包含一个头文件,也可以包含一个______文件。 3.执行“printf(“%s%s%d”,“wei”,“rong”,18);”语句后得到的输出结果为________。4.执行“printf(“%c”,'A'+2);”语句后得到的输出结果为________。5.short类型的大小为________个字节。6.十进制数3.26f的类型为________。 7.假定y=10,则表达式++y*3的值为________。8.关系表达式(x==0)的等价表达式为________。9.若x=5,y=10,则x!=y的逻辑值为________。10.在if语句中,每个else关键字与它前面同层次并且最接近的________关键字相配套。 11.当在程序中执行到________语句时,将结束所在循环语句中循环体的一次执行。12.假定二维数组的定义为“char a[M][N];”,则该数组所占存储空间的字节数为________。 13.存储字符串“a”需要占用存储器的________个字节空间。14.strlen函数用于计算一个字符串的________。 15.函数中的形参变量的初值由调用该函数时对应的________值决定。16.程序的编译是以__________为单位进行的。 17.假定a是一个一维数组,则a[i]的指针访问方式为________。 18.执行int *p=malloc(sizeof(int))操作得到的一个动态分配的整型对象为________。 19.假定要动态分配一个类型为struct Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句表达式为 ________________ =malloc(n*sizeof(struct Worker))。 20.与结构成员访问表达式p->name等价的表达式是____________。 三、写出下列每个程序运行后的输出结果 1.#include 2.#include 3.#include 4.#include 5.#include 6.#include 7.#include 8.#include float pay;//工资 };int Equal(struct Worker* r1, struct Worker* r2){ if(strcmp(r1->name, r2->name)==0)return 1;else return 0;} void main(){ struct Worker a[4]={{“abc”,25,420},{“defa”,58,638}, {“ghin”,49,560},{“jklt”,36,375}};struct Worker x={“defa”};int i;for(i=0;i<4;i++)if(Equal(a+i,&x))break;if(i>=4)printf(“没有查找所需要的记录!n”);else printf(“%s %d %6.2fn”,a[i].name,a[i].age,a[i].pay);} 四、写出下列每个函数的功能 1.int SE(int n){ //n为大于等于1的整数 int x,s=0;printf(“输入%d个整数: ”,n);scanf(“%d”,&x);if(n==1)return x;s=x;while(--n){scanf(“%d”,&x);s+=x;} return s;} 2.#include 3.#include 4.int Output(struct IntNode *f){ int sum=0;if(!f)return-9999;//用返回特定值-9999表示空表 while(f){ sum+=f->data;f=f->next;} return sum;} 假定struct IntNode的类型定义为: struct IntNode { int data;//结点值域 struct IntNode* next;//结点指针域 }; 5.int wr4(FILE* fptr){ char ch;int c=0;fseek(fptr,0,SEEK_SET);while(1){ ch=fgetc(fptr);if(ch!=EOF)c++;else break;} return c;} 五、根据下列每个题目要求编写程序 1.编写一个函数fun(),首先从键盘上输入一个4行4列的一个实数矩阵到一个二维数组a[4][4]中,接着求出主对角线上元素之和,最后返回求和结果。 210 2.编写一个主函数,计算1+3+3+...+3的值并输出,假定分别用i,p,s作为循环变量、累乘变量和累加变量的标识符。 3.编写一个主函数,已知6≤a≤40,15≤b≤30,求出满足不定方程2a+5b=120的全部整数组解。如(13,20)就是其中的一组解。 参考解答: 一、选择题 1.C 2.D 3.B 4.A 5.C 6.C 7.B 8.A 9.C 10.A 11.D 12.A 13.C 二、填空题 1./* 2.程序 3.weirong18 4.C 5.2 6.float 7.33 8.(!x)9.1 10.if 11.continue 12.M*N 13.2 14.长度 15.实参 16.程序文件 17.*(a+i)18.*p 19.struct Worker* r 20.(*p).name 三、写出下列每个程序运行后的输出结果 11 1.i,s=15, 56 2.***** **** *** ** * 3.264 4.18 20 5.10 20 40 35 40 20 6.15 20 28 32 36 47 7.15 26 26 15 8.defa 58 638.00 四、写出下列每个函数的功能 1.求出从键盘上输入的n个整数之和并返回。 2.采用选择排序的方法对数组a中的n个整数按照从大到小的次序重新排列。3.求出数组a中n个元素的最大值元素,返回该元素的地址 4.对于以表头指针为f的链表,求出并返回所有结点中data域的值之和。5.求出一个以fptr为文件流的所对应文件的长度,即所存字符的个数。 五、根据下列每个题目要求编写程序 1.double fun(){ double a[4][4];double s=0;int i,j;printf(“输入一个4*4的数值矩阵:n”);for(i=0;i<4;i++)for(j=0;j<4;j++)scanf(“%lf”,&a[i][j]);for(i=0;i<4;i++)s+=a[i][i];return s;} 2.#include 3.#include第三篇:C 语言程序设计
第四篇:C语言程序设计考核方案
第五篇:《C语言程序设计》A课程考核说明