第一篇:c语言程序设计基础
《c语言程序设计基础》重修试卷
一、选择题(2’*20=40’)
1、c程序由构成。
A.函数B.命令C.程序D.表达式
2、以下选项中合法的变量名是
A.#y2B.a A.floatB.charC.intD.double4、在我们使用的turboC中,一个int型数据在内存中占个字节 A.0B.1C.2D.45、若有定义:int a=8,b=5,c;执行语句c=ab+0.4后c= A.1.4B.1C.2.0D.26、在c语言中,char型数据在内存中的存储形式是 A.补码B.ASSCIIC.原码D.反码 7、若运行时给变量x输入 总第3课时备课 第 3课时 课题:E语言程序设计基础 教学内容:青岛版八年级下册信息技术第 13页至第 17 页 一、教学分析 【教学内容分】 本课是在第1课学习用E语言程序解决高斯问题的基础上,继续学习用E 语言的基础知识,包括数据类型、常量、变量等以及赋值的方法。 【教学对象分析】学生对程序运行的结果或者说是对程序能够解决的问题比较感兴趣,但对 设计程序所要设计的组件,编写代码比较陌生,无从下手,还没有形成一个编写程序的思想。 【教学目标】 知识和技能目标:了解E语言的基础知识,包括基本数据类型、常量、变量、运算符、命 令等;能够正确定义常量和变量及其数据类型;掌握赋值、输入、输出的方法;熟悉程序设计中的运算符与数学运算符号的区别 过程与方法目标: 通过学生的自主探究,组内交流及教师的耐心指导完成任务情感态度与价值观目标:了解E语言的基础知识,熟悉E语言编程代码的输入以及数据类 型的定义与使用,尝试通过设计小程序来解决问题,培养学习E语言的兴趣和信心。 【教学重点】 定义常量和变量及其数据类型;赋值、输入、输出的方法。 【教学难点】 正确定义常量和变量及其数据类型;赋值、输入、输出的方法;熟悉程序设计 中的运算符与数学运算符号的区别 【教学方法】 自主探究、合作交流 【教学资源】 硬件资源:计算机、电子教室软件资源:E语言 软件 【评价方法】 评价量规:优秀、良好、一般评价方式: 自我评价与小组评价 二、教学过程 教学进程 教师活动 学生活动 设计意图 修订 复习导入: 回顾上节课所学知识并回答 巩固所学知识让学生回顾解决高斯问有利于本课的学 导入新课 题的大体步骤习 引入:使用E语言编程解决1+2等于几 探究任务一:启动E语同学们参照课本完成组件的锻炼学生的动手 探究任务言,并在程序窗体中设计设计并思考 操作能力,并培养一如需组件: 学生在操作中思 考方法 要求:想一想能不能不用 让同学们在掌握组内交流 课本中给的方法,你有其学生思考并交流是否可行 方法的基础上勇 他方法吗 于探索 完成任务让学生脱离课本进行操 加深记忆 一 作 学生观察并识记 探究任务定义变量、并了解全局变学生参照课本正确定义所需 二量和局部变量以及常量的区别 变量 检查任务有的同学不会输入变量 二的完成行,或者是不能删除多余 情况的行 探究任务 编写代码并运行程序 学生自主完成发挥学生的主观三 能动性 并检查完成情况 要求同学们在有限的时 巩固本课知识 限进作业 间内完成课本第17页实同学们认真完成并让学生进行知 践与创新部分 识的迁移 发挥学生的主观师生评价 先让组内进行交流评价 同学们观察,并进行评价发表能力性,让学生参 老师随机抽取每个组内自己的观点或建议 与评价,激发学生 一个作品进行演示 的兴趣 巩固本课的知识归纳总结 师让生归纳,师进行补充学生归纳 要点 或强调 程序设计基础课程设计报告 课程名称: 课程设计题目: 程序设计基础课程设计 学生信息管理系统 姓 名: 系: 专 业: 年 级: 学 号: 指导教师: 职 称: 计算机科学技术系 计算机网络技术 讲师 2012年1月1日 一、设计题目及要求。 1、题目:学生信息管理系统 2、要求: 1)建立学生信息的结构体 2)学生信息的初始化(可以从文件获取)3)学生信息的添加、修改、查找 4)学生信息的输出 5)对学生信息按学号排序 6)计算一门课的平均分和总分 7)将学生信息保存为文件 二、设计算法设计分析。 1、主要功能模块:添加模块、查找模块、修改模块、排序模块 添加模块: (1)从键盘中输入添加学生的人数n.(2)从键盘中输入学生的学号和各科成绩,分别存入一维数组sum和二维数组score中。 (3)计算各科的总分和平均分,分别存入一维数组sum和aver中。 (4)判断各个学生的三科成绩是否都大于90,如果是则输出“Y”,表示该生能获得奖学金,否则输出“N”表示该生不能获得奖学金。 添加模块结果图 查找模块 (1)从键盘中输入要查找的学生的学号k..(2)编写程序使num[i]与k一一对比,直到num[i]==k,输出该生的学号及相应成绩。 查找模块结果图 修改模块: (1)从键盘中输入要修改的学生的学号x..(2)编写程序使num[i]==x,输出该生的成绩,选择你要修改的科目并输入你修改后的新分数,重新计算该生的总分和平均分。 (3)重新判断该生的三门课成绩是否都大于 90,如果是则输出“Y”,表示该生能获得奖学金,否则输出“N”表示该生不能获得奖学金。 修改模块的结果图 三、程序编码实现。源代码与执行结果2部分 /*函数功能:添加一个或几个学生的成绩,查找某个学生的成绩,修改某个学生的成绩 函数参数:长整型数组num,存储每个学生的学号 整型数组score,存储每个学生的成绩 整型数组sum,存储每个学生的总分 实型数组aver,存储每个学生的平均分 字符型数组c,标志每个学生能否获得奖学金 整型数n,存储学生总数 函数返回值:无 */ void Find(long num[],int score[][3],int sum[],float aver[],char c[],int n){ long x,t,k;int i,j; printf(“请选择您要实现的功能:1-添加,2-查找,3-修改n”);scanf(“%ld”,&t);if(t==1){ printf(“请输入你要添加的人数:”);scanf(“%d”,&A);printf(“Enter No and Score as: MT EN PHn”);for(i=n;i printf(“学号t数学t英语t物理t总分t平均成绩t>90n”); printf(“%4ldt”,num[i]); for(j=0;j<3;j++){ printf(“%4dt”,score[i][j]);} printf(“%5dt%6.1ftt%cn”,sum[i],aver[i],c[i]);} } } if(t==3){ printf(“请输入学号:”);scanf(“%ld”,&x);for(i=0;i printf(“请输入你要修改的选项所对应的数字:0-MT,1-EN,2-PHn”); scanf(“%d”,&j); printf(“你将修改为:”); scanf(“%d”,&score[i][j]); sum[i]=0; for(j=0;j<3;j++) { sum[i]=sum[i]+score[i][j]; } aver[i]=(float)sum[i]/3; if((score[i][0]>=90)&&(score[i][1]>=90)&&(score[i][2]>=90)) { c[i]='Y'; } else { c[i]='N'; } } } } } /*函数功能:按学号对学生排序 函数参数:长整型数组num,存储每个学生的学号 整型数组score,存储每个学生的成绩 整型数组sum,存储每个学生的总分 实型数组aver,存储每个学生的平均分 字符型数组c,标志每个学生能否获得奖学金 整型数n,存储学生总数 函数返回值:无 */ void order(long num[],int score[][3],int sum[],float aver[],char c[],int n){ int i,j,t,x;long k;float g;char h;for(i=0;i x=score[i][j]; score[i][j]=score[t][j]; score[t][j]=x;} } } 执行结果(1): (2) 四、程序调试过程中出现的问题: 开始运用添加功能时,虽然添加了,但在输出结果中不显示。 解决办法:将最后的输出中的i 五、总结 在课程设计的这段日子里,我真正体会到什么叫失败是成功之母,因为在编写程序时会出现这样或那样的错误,有的是语法错误,有的是逻辑错误,还有的是由于自己粗心漏掉或多加了一些符号等等,但只要你能静下心来慢慢寻找原因,慢慢修改,最后终能成功。但如果你在编程时格外细心,你将会减少许多麻烦,同时也会节省很多时间。 分类: 一、概念(13---51,54,55)、数据类型、输入输出格式、转义符、运算及表达式等:1---66 二、选择语句:67---72(其中67为条件运算,72可归于一类); 三、循环语句:73---102(其中78为输出格式可归于一类) 四、数组:103---133(其中123 – 125为与数组相关的函数调用) 五、函数调用:134---156 六、文件:157 – 183 七、指针:184---195 八、结构体:196---207(204.205,206为函数调用) 1、在C语言中,最基本的数据类型包括 (A)整型、实型、字符型(B)整型、实型、逻辑型(C)整型、字符型、逻辑型(D)实型、字符型、逻辑型 2 C语言中整常数的书写形式不能使用的数制形式是(A)十进制(B)十六进制(C)八进制(D)二进制 3 字符串常量“abncde125”包含字符的个数是(A)8(B)12(C)9(D)13 4 C语言的标识符只能由字母、数字和下划线三种字符组成,且第一个字符(A)必须为下划线(B)可以是这三种字符中的任一种(C)必须为字母或下划线(D)必须为字母 5 下列是用户自定义标识符的是(A)#x(B)_x(C)2x(D)int 6 在C语言中,下列常数不能作为常量的是(A)0xA3(B)068(C)5.6E-3(D)2e5 7 在C语言中,运算对象必须是整型的运算符是(A)%(B)>=(C)&&(D)= 8 下列表达式与x =(y++)等价的是(A)x = ++y(B)x = x + 1, y = x(C)x = y, y = y + 1(D)x += y + 1 9 若定义int x = 17;,则表达式x++ * 1 / 6的值是(A)1(B)2(C)3(D)4 10 如果在一个C语言表达式中有多个运算符,则运算时应该(A)只考虑优先级(B)只考虑结合性(C)先考虑优先级,然后考虑结合性(D)先考虑结合性,然后考虑优先级 11在C程序中,下面叙述不正确的是 (A)x和X 是两个不同的变量(B)从键盘输入数据时,对整型变量只能输入整型数据,对于实型变量只能输入实型数据(C)逗号运算符的优先级最低(D)若x、y类型相同,则执行语句y = x,后,将把x的值放入y中,而x的值不变 12 已知字符A的ASCII值为65,若定义int i;,则执行语句i = 'A' + 3.5;后,正确的叙述是(A)i的值是字符E(B)语句不合法 (C)i的值是字符A的ASCII值加上3,即68(D)i的值是字符A的ASCII值加上3.5,即68.5 13 C语言是计算机高级语言,它适合作为系统描述语言,它 (A)不以用来编写系统软件,可以用来编写应用软件(B)不以用来编写系统软件,不可以用来编写应用软件 (C)可以用来编写系统软件,不可以用来编写应用软件(D)可以用来编写系统软件,也可以用来编写应用软件 14 在纸上写好一个C语言程序后,上机运行的基本步骤为 (A)编辑、连接、编译、运行(B)编译、连接、编辑、运行(C)编译、编辑、连接、运行(D)编辑、编译、连接、运行 15 用C语言等高级语言编写的程序称为(A)可执行程序(B)编译程序(C)目标程序(D)源程序 16 一个C语言源程序经过“编译程序”翻译后生成一个二进制代码文件,它的扩展名为(A).dat(B).exe(C).c(D).obj 17 通过“连接程序”软件,把C语言目标程序与C语言提供的各种库函数连接起来生成一个文件,它的扩展名为(A).exe(B).dat(C).obj(D).c 18 下面叙述中正确的是 (A)在C语言程序中,要调用的函数必须在main()函数中定义(B)C语言程序总是从main()函数开始执行 (C)C语言程序总是从第一个函数开始执行(D)在C语言程序中,main()函数必须放在程序的开始位置 19 在一个C语言源程序中,main()函数的位置(A)必须在其他所有的函数之后(B)可以在任意位置(C)必须在其他所有的函数之前(D)必须在固定位置 20 一个C语言程序由 (A)若干个过程组成(B)若干个子程序组成(C)一个主程序和若干个子程序构成(D)一个主函数和若干个子函数构成 21一个函数的组成有 (A)函数的声明部分和执行部分(B)函数名、函数类型、函数参数名、函数参数类型(C)主函数和子函数(D)函数首部和函数体 22 下面叙述不正确的是 (A)在程序中任意合适的地方都可以加上注释以便阅读(B)C语言中的每条执行语句都需要用分号结束 (C)include命令所在行后面需要加分号(D)C语言具有高级语言的功能,也具有低级语言的一些功能 23 下面叙述正确的是 (A)在C程序中,main()函数的位置必须在其他所有的函数之前(B)C语言自身没有输入输出语句 (C)在C程序的编译过程中可以发现注释中的拼写错误(D)C程序的每一行只能写一条语句 24 在C语言中,用来表示“取地址”的符号是(A)$(B)#(C)@(D)& 25 在C语言中,用于结构化程序设计的三种基本结构是(A)顺序结构、选择结构、转移结构(B)顺序结构、条件结构、循环结构(C)顺序结构、选择结构、重复结构(D)顺序结构、选择结构、循环结构 26 一个算法应具有“确定性”等5个特性,则对另外4个特性描述错误的是(A)有效性(B)有穷性(C)有零个或多个输入(D)有零个或多个输出 27 程序设计一般可以简化为以下4个步骤,其中首先应该完成的是(A)调试并运行程序(B)编写程序(C)建立数学模型(D)设计数据结构和算法 28 以下不正确的C语言标识符是(A)ab.c(B)a_bc(C)abc(D)ABC 29 以下正确的C语言标识符是(A)a+b(B)test!(C)_123(D)%x 30 编辑程序的功能是 (A)命令计算机执行指定的操作(C)将C源程序编译成目标程序 (B)调试程序 (D)建立并修改程序 31 C语言程序的基本单位是(A)过程(B)函数(C)子程序(D)标识符 32 下列说法中错误的是 (A)主函数可以分为两部分:主函数首部和主函数体(B)主函数可以调用任何非主函数的其它函数 (C)任何非主函数可以调用其它任何非主函数(D)程序可以从任何非主函数开始执行 33 在下列数据中属于“字符串常量”的是(A)ABC(B)“ABC”(C)'abc'(D)'a' 34 在C语言中,字符'n'在内存占用的字节数是(A)1(B)2(C)3(D)4 35 字符串“ABC”在内存占用的字节数是(A)3(B)4(C)6(D)8 ·试题讲评 编译字符串“ABC”时,编译器会自动加上字符串结束标志' ',因此字符串“ABC”占用的内存为4个字节。36 在C语言中,合法的长整型常数是(A)0L(B)4321(C)0.07654321(D)2.3456e10 ·试题讲评 4321在C语言中默认为是int型数据,数据后加L或l表示该数的类型为长整型。37 char型常量在内存中存放的是(A)ASCII值(B)BCD码值 (C)内码值(D)十进制代码值 38 设m, n, a, b, c, d均为0,执行(m = a == b)||(n = c == d)后,m,n的值是(A)0,0(B)0,1(C)1,0(D)1,1 ·试题讲评 (1)在C语言中,“||”表示逻辑或,“&&”表示逻辑与。 (2)对于“m =(表达式a)||(表达式b)”,若“表达式a”为真或“表达式b”为真,则m为真。特别指出,若“表达式a”为真,则m的值肯定为真(无论“表达式b”的结果是否为真),在C语言中,为提高运算速度,此时就不再去执行“表达式b”。 (3)对于“m =(表达式a)&&(表达式b)”,若“表达式a”为假或“表达式b”为假,则m为假。特别指出,若“表达式a”为假,则m的值肯定为假(无论“表达式b”的结果如何),在C语言中,为提高运算速度,此时就不再去执行“表达式b”。 (4)在本题的表达式中,从左至右,先计算“(m = a == b)”,在此表达式中,先计算“a == b”,由于a,b的值均为0,因此“a == b”的结果是真(即1)。再将“a == b”的运算结果(即1)赋值给m,则m的值为1,因此“(m = a == b)”的结果为1,即真,按前述规则,不再对表达式“(n = c == d)”进行计算,因此结果为选项C。39 设a为5,执行下列语句后,b的值不为2的是(A)b = a / 2(B)b = 6c的值的类型是(A)float(B)int(C)char(D)double 43 在以下一组运算符中,优先级最高的运算符是(A)<=(B)=(C)%(D)&& 44 下列叙述中正确的是 (A)C程序中的所有字母都必须小写(B)C程序中的关键字必须小写,其他标识符不区分大小写 (C)C语言中的所有字母都不区分大小写(D)C语言中的所有关键字必须小写 45 下面不属于C语言关键字的是(A)integer(B)typedef(C)enum(D)union 46 以下叙述不正确的是 (A)分号是C语句的必要组成部分(B)C程序的注释可以写在语句的后面(C)函数是C程序的基本单位(D)主函数的名字是mian 47 下列能正确表示a≥10或a≤0的C语言关系表达式是(A)a>= 10 or a <= 0(B)a >= 10 | a <= 0(C)a>= 10 || a <= 0(D)a >= 10 && a <= 0 48 下列只有当整数x为奇数时,才是逻辑“真”的表达式是(A)x % 2 == 0(B)!(x % 2 == 0)(C)!(x % 2)(D)(x'0';printf(“%ld#”, number);ch= getchar();}(A)2#18#(B)2402#18#(C)22#1818#(D)# 103 在C语言中,数组名代表的是(A)数组中全部元素的个数(B)数组中第一个元素的值(C)数组中全部元素的值(D)数组的首地址 104 下面叙述中错误的是 (A)同一个数组中的每一个元素都属于同一个数据类型(B)对于实型数组,不可以直接用数组名对数组进行整体的输入或输出 (C)数组名代表数组所占存储区的首地址,其值不可以改变(D)在程序运行时,如果数组元素的下标超出了所定义的下标范围,系统将给出“下标越界”的出错信息 105 如果有语句:int x[3][2];,则下面能正确引用数组元素的选项是(A)x[0][2](B)x[1][2](C)x[2][1](D)x[2][2] 106 如果有语句:int x;char y[6];,则下面正确的输入语句是(A)scanf(“%d%s”, x, y);(B)scanf(“%d%s”, &x, y);(C)scanf(“%d%s”, x, &y);(D)scanf(“%d%s”, &x, &y);107 下面能正确定义一维数组的选项是(A)int num[];(B)int num[0...50];(C)int N = 50, num[N];(D)#define N 50 int num[N];·试题讲评 数组长度不能为变量。108 下面不能正确定义二维数组的选项是(A)int a[2][] = {{1, 2}, {3, 4}};(B)int a[][2] = {1, 2, 3, 4};(C)int a[2][2] = {{1}, {2}};(D)int a[2][2] = {{1}, 2, 3};109 如果有定义:int a[2][2] = {0, 1, 2, 3};,则a数组的各个元素分别为 (A)a[0][0]=0, a[0][1]=1, a[1][0]=2, a[1][1]=3(B)a[0][0]=0, a[0][1]=2, a[1][0]=1, a[1][1]=3(C)a[0][0]=3, a[0][1]=2, a[1][0]=1, a[1][1]=0(D)a[0][0]=3, a[0][1]=1, a[1][0]=2, a[1][1]=0 110 下面能正确定义一维数组的选项是 (A)int a1[] = “string”;(B)int a2[5] = {1, 2, 3, 4, 5, 6};(C)char a3 = {“string”};(D)char a4[] = {1, 2, 3, 4, 5, 6};111 如果有语句:char a[] = “string”, b[] = {'s', 't', 'r', 'i', 'n', 'g'};,则下面叙述中正确的是(A)数组a的长度大于数组b的长度(B)数组a的长度等于数组b的长度(C)数组a的长度小于数组b的长度(D)数组a和数组b二者等价 112 若定义str1、str2、str3为字符串,则语句strcat(strcpy(str1, str2), str3);的功能是 (A)把字符串str1连接到字符串str2中再把字符串str2复制到字符串str3之后(B)把字符串str1复制到字符串str2中再把字符串str2连接到字符串str3之后 (C)把字符串str2连接到字符串str1之后再把字符串str3复制到字符串str1中(D)把字符串str2复制到字符串str1中再把字符串str3连接到字符串str1之后 113 下面叙述中错误的是 (A)对于实型数组,不可以直接用数组名对数组进行整体的输入或输出(B)对于字符型数组,可以直接用数组名对数组进行整体输入或输出 (C)对于字符型数组,可以用来存放字符串(D)对于字符型数组,可以在赋值语句中运用运算符“=”进行整体赋值 114 若有以下语句,各选项中数值为4的表达式是 int a[12] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};char c = 'a', d, g;(A)a[g-c](B)a[4](C)a['d'c] 115 假设int型变量占4个字节的存储单元,对于如下定义,数组x在内存中所占字节数为 int x[10] = {0, 2, 4};(A)4(B)12(C)20(D)40 116 以下程序段的输出结果是 int j;int x[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; for(j=0;j<3;j++){ printf(“%d ”, x[j][2-j]);}(A)3 5 7(B)3 6 9(C)1 5 9(D)1 4 7 117 以下程序段运行后的输出结果是 int n[3], t, j, k; for(t=0;t<3;t++){ n[t] = 0;} k = 2;for(t=0;t { n[j] = n[t] + 1; } } printf(“%dn”, n[1]);(A)0(B)1(C)2(D)3 118 以下程序段运行后的输出结果是 int p[7] = {11, 13, 14, 15, 16, 17, 18}, i=0, k=0; while(i<7 && p[i]%2){ k = k + p[i];i++;} printf(“%dn”, k);(A)58(B)56(C)45(D)24 119 以下程序段运行后的输出结果是 int m[][3] = {1, 4, 7, 2, 5, 8, 3, 6 ,9};int i, k=2; for(i=0;i<3;i++){ printf(“%d ”, m[k][i]);}(A)3 6 9(B)4 5 6(C)2 5 8(D)7 8 9 120 下列选项中正确的语句是 (A)char *s;s = “Beijing”;(B)char *s;s = {“Beijing”};(C)char s[8];s = “Beijing”;(D)char s[8];s = {“Beijing”};121 以下代码段执行后,b中的值是:2960 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = &a[3], b;b = p[5];(A)5(B)6(C)8(D)9 122 以下程序段运行后的输出结果是 char a[]=“abcdefg”, b[10]=“abcdefg”; printf(“%d %dn”, sizeof(a), sizeof(b));(A)7 7(B)8 8(C)8 10(D)10 10 123 下列程序运行后的输出结果是 #include int main(void){ int a[2]={3, 5}, b[2]={3, 5}; swap1(a); swap2(b[0], b[1]);printf(“%d %d %d %dn”, a[0], a[1], b[0], b[1]);return 0;} void swap1(int c[]){ int t; t = c[0]; c[0] = c[1]; c[1] = t;} void swap2(int c0, int c1){ int t; t = c0; c0 = c1; c1 = t;}(A)5 3 3 5(B)5 3 5 3(C)3 5 3 5(D)3 5 5 3 124 下列程序运行后的输出结果是 #include int main(void){ int aa[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i; sort(aa, 10);for(i=0;i<10;i++)printf(“%d ”, aa[i]);printf(“n”);return 0;} void sort(int a[], int n){ int i, j, t; for(i=0;i a[i] = a[j]; a[j] = t;} }(A)9 2 7 4 5 6 3 8 1 10(B)1 2 3 4 5 6 7 8 9 10(C)10 9 8 7 6 5 4 3 2 1(D)1 10 3 8 5 6 7 4 9 2 125 下列程序运行后的输出结果是 #include int main(void){ int i, aa[5] = {1, 2, 3, 4, 5}; f(aa, 0, 4);for(i=0;i<5;i++)printf(“%d,”, aa[i]);return 0;} void f(int a[], int i, int j){ int t; if(i < j) { t = a[i]; a[i] = a[j]; a[j] = t;f(a, i+1, j-1); } }(A)5,4,3,2,1,(B)1,2,3,4,5,(C)5,4,3,2,1(D)5,2,3,4,1 126 以下程序段运行后的输出结果是 char ch[3][5] = {“AAAA”, “BBB”, “CC”}; printf(“"%s”n“, ch[1]);(A)”AAAA“(B)”BBB“(C)”BBBCC“(D)”CC“ 127 以下程序段运行后的输出结果是 int b[3][3] = {0, 1, 2, 0, 1, 2, 0, 1, 2}, i, j, t=1; for(i=0;i<3;i++){ for(j=i;j<=i;j++) { t += b[i][b[j][j]]; } } printf(”%dn“, t);(A)4(B)3(C)9(D)1 128 以下程序段运行后的输出结果是 int aa[4][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {3, 9, 10, 2}, {4, 2, 9, 6}};int i, s=0; for(i=0;i<4;i++){ s += aa[i][1];} printf(”%dn“, s);(A)19(B)20(C)11(D)13 129 以下程序段的运行结果是: char s[10], s=”abcd“; printf(”%s“, s);(A)abcd(B)a(C)ab cd(D)编译不通过 130 对于定义char s[] = ”“NameAddress”n“;,字符串s所占字节数是(A)16(B)14(C)15(D)19 131 以下程序段的运行后结果是 char str[] = ”abn 12“"; printf(”%d“, strlen(str));(A)6(B)12(C)3(D)4 132 对于定义char c[8] = ”Tianjin“和int j,下面的输出函数调用中错误的是(A)printf(”%s“, c);(B)puts(c);(C)for(j=0;j<8;j++){ printf(”%c“, c[j]);}(D)for(j=0;j<8;j++){ puts(c[j]);} 133 对于定义char a[10] = {0};和int j;,下面输入函数调用中错误的是(A)scanf(”%s“, a);(B)gets(a);(C)for(j=0;j<9;j++){ scanf(”%c“, a[j]);}(D)for(j=0;j<9;j++){ scanf(”%c“, &a[j]);} 134 在C语言中,程序的基本单位是(A)函数(B)语句(C)程序段(D)文件 135 在C语言中,程序进行编译的单位是(A)语句(B)程序段(C)函数(D)文件 136 在C语言中,若定义函数时对函数类型未加显式说明,则函数的隐含类型为(A)void`(B)int(C)double(D)char 137 在C语言的函数调用中,如果普通变量作为函数的参数,则调用函数时(A)实参和形参共用一个存储单元(B)由用户确定是否共用一个存储单元(C)实参和形参分别占用一个独立的存储单元(D)由计算机系统确定是否共用一个存储单元 138 在C语言的函数调用中,如果普通变量作为函数的实参,则它与对应形参之间的传递方式是(A)由实参传递给形参,再由形参传递给实参(B)由用户指定传递方式(C)单向值传递(D)地址传递 139 在C语言的函数调用中,如果数组名作为函数的实参,则传递给形参的是(A)数组第一个元素的值(B)数组全部元素的值(C)数组全部元素的个数(D)数组的首地址 140 在C语言中规定,函数返回值的类型由(A)定义该函数时所指定的函数类型决定(B)return语句中的表达式类型决定(C)调用该函数的主调函数决定(D)调用该函数时系统临时决定 141 函数调用在程序中出现的位置一般有3种方式,下面叙述中错误的是 (A)函数调用可以出现在表达式中(B)函数调用可以作为独立的语句存在(C)函数调用可以作为一个函数的实参(D)函数调用可以作为一个函数的形参 142 在C语言中,下面关于函数正确的叙述是(A)函数可以嵌套定义,也可以嵌套调用(B)函数可以嵌套定义,但不可以嵌套调用(C)函数不可以嵌套定义,但可以嵌套调用(D)函数不可以嵌套定义,也不可以嵌套调用 143 在C语言中,函数调用语句function((a, b, c),(d, e));中参数的个数是(A)1(B)2(C)4(D)5 ·试题讲评 (a, b, c)和(d, e)分别都是逗号表达式 144 在函数调用中,若funA调用了函数funB,函数funB又调用了函数funA,则(A)C语言中不允许这样的递归调用(B)称为函数的直接递归调用(C)称为函数的间接递归调用(D)称为函数的循环调用 145 下面叙述中不正确的是 (A)函数中的形参是函数自己的局部变量(B)在不同的函数中可以使用相同名字的变量,它们在内存中占用不同的单元 (C)在一个函数中定义的变量只在本函数范围内有效(D)在一个函数内的复合语句中定义的变量只在本函数范围内有效 ·试题讲评 在一个函数内的复合语句中定义的变量只在本复合语句范围内有效 146 在一个源程序文件中定义的全局变量的作用域为 (A)从定义该变量的位置开始至本文件结束(B)本程序的全部范围(C)本文件的全部范围(D)本函数的全部范围 147 下面叙述中不正确的是(A)函数可以没有形参,可是函数名后的一对括号却不能省略(B)在C语言中,不能在一个函数的内部再定义函数 (C)在没有声明函数返回值类型时,函数返回值的类型默认为int(D)函数的类型可以是整型、实型、字符型,但不可以是指针型 148 下面程序的输出结果是 #include int main(void){ int x=5, y=3, s; s = function(x, y); printf(”%dn“, s);return 0;} int function(int a, int b){ return a*a-b*b;}(A)2(B)8(C)16(D)32 149 下面程序的输出结果是 #include int main(void){ printf(”%ldn“, func(5));return 0;} long func(int n){ if(n > 2){ return func(n-1)+ func(n-2);} else { return 1;} }(A)5(B)6(C)7(D)8 150 下面程序的输出结果是 #include int main(void){ int a=27, b=15, c; c = zdgys(a, b); printf(”%dn“, c);return 0;} int zdgys(int x, int y){ int w; while(y) { w = x % y; x = y; y = w; } return x;}(A)2(B)3(C)4(D)5 151 下面程序的输出结果是 #include int main(void){ double x;int a=3, b=4, c=5; x = func(a, b, c); printf(”%fn“, x);return 0;} double func(int x, int y, int z){ double t; t = x % y * z;return t;}(A)3(B)3.000000(C)15(D)15.000000 152 下面程序的输出结果是 #include int main(void){ int i, s; for(i = 0;i < 4;i++)s = func();printf(”%dn“, s);return 0;} int func(void){ static int x = 6;x++;return x;}(A)7(B)8(C)9(D)10 153 下面程序中应该补充(填写在横线位置)的代码是 #include //函数功能:求两数中的较大数 int main(void){ int a, b, c; scanf(”%d, %d“, &a, &b); c = __________________;printf(”max is %d“, c);return 0;} int max(int x, int y){ int z; if(x > y)z = x;else z = y;return z;}(A)max(a, b)(B)max(&a, &b);(C)max(x, y)(D)int max(int a, int b)154 下面程序中应该补充(填写在横线位置)的代码中,有错的是 #include int main(void){ int a, b, c; scanf(”%d, %d“, &a, &b);c = min(a, b);printf(”min is %d“, c);return 0;} //函数功能:求两数中的较大数 int min(int x, int y){ int z; z = x int x1=30, x2=40;void sub(int x, int y); int main(void){ int x3=10, x4=20; sub(x3, x4); sub(x2, x1);printf(”%d,%d,%d,%dn“, x3, x4, x1, x2);return 0;} void sub(int x, int y){ x1 = x; x = y; y = x1;}(A)10,20,40,40(B)20,10,40,30(C)20,10,40,40(D)10,20,30,40 156 下面程序的输出结果是 #include int main(void){ increment(); increment(); increment();return 0;} void increment(void){ int x = 0; x += 1;printf(”%d “, x);}(A)1 1 1(B)1 2 3(C)1(D)3 3 3 157 在C语言中,下面关于文件的存取方式正确的叙述是(A)只能从文件的开头存取(B)可以顺序存取,但不可以随机存取 (C)不可以顺序存取,但可以随机存取(D)可以顺序存取,也可以随机存取 158 下列关于C语言数据文件的叙述中正确的是 (A)文件由ASCII码字符序列组成,C语言只能读写文本文件(B)文件由二进制数据序列组成,C语言只能读写二进制文件 (C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件(D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件 159 在C语言中,读写操作时需要进行转换的文件是(A)二进制文件(B)文本文件 (C)二进制文件和文本文件都需要转换(D)二进制文件和文本文件都不需要转换 160 在C语言中,下面关于文件操作正确的叙述是 (A)对文件操作时,必须先检查文件是否存在,然后再打开文件(B)对文件操作时需要先打开文件 (C)对文件操作时需要先关闭文件(D)对文件操作时打开和关闭文件的顺序没有要求 161 为了进行写操作而打开二进制文件wr.dat的正确写法是(A)fp = fopen(”wr.dat“, ”r“);(B)fp = fopen(”wr.dat“, ”w“);(C)fp = fopen(”wr.dat“, ”rb“);(D)fp = fopen(”wr.dat“, ”wb“);162 下面的语句中,将fp定义为文件型指针的是(A)file fp;(B)file *fp;(C)FILE fp;(D)FILE *fp;163 以下要作为fopen函数中第一个参数的正确格式是(A)”c:usertext.txt“(B)”c:usertext.txt“(C)”usertext.txt“(D)”c:user ext.txt“ ·试题讲评 字符常量反斜线()的书写形式是''(转义符方式)164 若执行fopen函数时发生错误,则函数的返回值是(A)0(NULL)(B)1(C)-1(EOF)(D)地址值 165 当顺利执行了文件关闭操作时,fclose函数的返回值是(A)-1(B)1(C)TRUE(D)0 166 如果不能实现文件“打开”的任务,fopen函数将会带回一个出错信息。以下对出错原因描述错误的是 (A)用”r“方式打开一个并不存在的文件(B)磁盘出故障 (C)磁盘已满无法建立新文件(D)用”w“方式打开文件时,没有先建立文件 167 在C语言中,标准库函数fread(buf, size, count, fp)中参数buf的含义是 (A)一个指针,指向要读入数据的存放地址(B)一个文件指针,指向要读的文件(C)一个整型变量,代表要读入的数据总数(D)一个存储区,存放要读的数据项 ·试题讲评 size:要读写的字节数;count:要读写多少个数据项(每个数据项的长度为size)。168 在C语言中,标准库函数fwrite(buf, size, count, fp)的功能是 (A)从buf所指向的文件中读取长度为size的count个数据项存入fp起始的内存(B)从fp所指向的文件中读取长度为size的count个数据项存入buf起始的内存 (C)把buf起始的内存中长度为size的count个数据项输出到fp所指向的文件中(D)把fp起始的内存中长度为size的count个数据项输出到buf所指向的文件中 169 下面程序的功能是 #include FILE *fp1, *fp2; fp1 = fopen(”c:xxxfile.c“, ”r“);if(NULL == fp1) { printf(”cannot open file in disk c!n“); exit(1); } fp2 = fopen(”d:file.c“, ”w“);if(NULL == fp2) { printf(”cannot open file in disk d!n“); fclose(fp1);exit(2); } while(!feof(fp1))fputc(fgetc(fp1), fp2);printf(”copy success!n“); fclose(fp1); fclose(fp2);return 0;}(A)将c盘xxx子目录下file.c文件复制到d盘xxx子目录下file.c文件中(B)将d盘xxx子目录下file.c文件复制到c盘xxx子目录下file.c文件中 (C)将c盘根目录下file.c文件复制到d盘xxx子目录下file.c文件中(D)将c盘xxx子目录下file.c文件复制到d盘根目录下file.c文件中 170 当已存在一个abc.txt文件时,执行函数fopen(”abc.txt“, ”r+“)的功能是 (A)打开abc.txt文件,清除原有的内容(B)打开abc.txt文件,只能写入新的内容 (C)打开abc.txt文件,只能读取原有内容(D)打开abc.txt文件,可以读取和写入新的内容 171 fopen(filename, mode)函数的mode取值”r“和”w“时,它们之间的差别是 (A)”r“可向文件输入,”w“不可向文件输入(B)”r“不可向文件输入,”w“可向文件输入(C)”r“不可由文件输出,”w“可由文件输出(D)文件不存在时,”r“建立新文件,”w“出错 172 若用fopen函数打开一个新的二进制文件,该文件可以读也可以写,则文件打开模式是(A)”ab+“(B)”wb+“(C)”rb+“(D)”ab“ ·试题讲评 ”rb+“:为了读和写,打开一个二进制文件,若指定文件不存在则出错;”wb+“:为了读和写,打开一个新的二进制文件,若指定文件不存在,则建立新文件。173 fread(buf, 64, 2, fp)的功能是 (A)从fp文件流中读出整数64,并存放在buf中(B)从fp文件流中读出整数64和2,并存放在buf中 (C)从fp文件流中读出64字节的字符,并存放在buf中(D)从fp文件流中读出2个64字节的字符,并存放在buf中 174 以下程序的功能是 #include FILE *fp;char str[] = ”HELLO“; fp = fopen(”CON“, ”w“);if(NULL == fp) { printf(”file open error!n“); exit(1); } fputs(str, fp);fclose(fp);return 0;}(A)在屏幕上显示HELLO(B)在打印机上打印出HELLO(C)把HELLO存入CON文件中(D)都不对 ..作为输出设备时,CON是标准输出设备显示器的文件名,是dos的保留字。175 C语言中文件的格式化输入输出函数对是(A)fscanf/fprintf(B)fread/fwrite(C)fgets/fputs(D)fgetc/fputc 176 C语言中文件的数据块输入输出函数对是(A)fread/fwrite(B)fscanf/fprintf(C)fgetc/fputc(D)fgets/fputs 177 feof(fp)函数用来判断文件是否结束,如果未遇到文件结束,函数值为(A)0(B)1(C)非零(D)false 178 fgetc函数的作用是从指定文件读入一个字符,关于对应文件的打开方式,不正确的是(A)只读(B)只写(C)”r“(D)读写 179 若调用fputc函数输出字符成功,则其返回值是(A)0(B)1(C)EOF(D)输出的字符 180 fseek函数的功能是 (A)改变文件位置的指针位置(即下一次读写操作从文件的什么位置开始)(B)使文件位置指针重新置于文件开头(C)返回文件位置指针的当前值(D)关闭文件 181 以下程序的功能是 #include FILE *fp;char ch; fp = fopen(”filename.txt“, ”w“);if(NULL == fp){ printf(”file open error!“); exit(1);} while((ch=getchar())!= '@') { fputc(ch ,fp); putchar(ch); } fclose(fp); return 0;}(A)把从键盘输入的字符依次输出到名为filename.txt的磁盘文件中(用@作为输入结束标志),同时在屏幕上显示这些字符。(B)把从键盘输入的字符依次输出到名为filename.txt的磁盘文件中(用@作为输入结束标志)。 (C)把从键盘输入的字符输出到屏幕(用@作为输入结束标志)。(D)从名为filename.txt的磁盘文件中读入字符(用@作为输入结束标志),并在屏幕上显示这些字符。182 下面程序的功能是将数组str的4个元素写到名为filename.dat的二进制文件中。程序中需要补充的语句是 #include FILE *fp;char str[] = ”abcd“; fp = fopen(”filename.dat“, ”wb“);if(NULL == fp){ printf(”file open error!“); exit(1);} ____________________________ fclose(fp); return 0;}(A)fwrite(str, sizeof(char), 4, fp);(B)fwrite(fp, sizeof(char), 4, str);(C)fread(str, sizeof(char), 4, fp);(D)fwrite(str[0], sizeof(char), 1, fp);183 下面的程序执行后,文件file.txt中的内容是 #include fun(”file.txt“, ”Fine, thank you!“);return 0;} void fun(char *fname, char *st){ FILE *fp;int len, i; fp = fopen(fname, ”w“);if(NULL == fp){ printf(”file open error!“); exit(1);} len = strlen(st);for(i=0;i 变量的指针即变量的地址,是指变量所占内存单元的首地址。185 如果已经定义int x;,则对指针变量pointer进行说明和初始化正确的是(A)int pointer = x;(B)int pointer = &x;(C)int *pointer = &x;(D)int *pointer = *x;186 如果已经定义int x, *pointer;,则下面赋值语句正确的是(A)pointer = &x;(B)pointer = x;(C)*pointer = &x;(D)*pointer = *x;187 即使两个指针变量的类型相同,它们也不能(A)相减(B)相加(C)比较(D)指向同一地址 188 在C语言中,对变量的访问方式是 (A)能直接访问,能间接访问(B)能直接访问,不能间接访问(C)不能直接访问,能间接访问(D)不能直接访问,不能间接访问 189 在C程序说明语句int(*pointer)[5];中,pointer表示的是一个 (A)指向整型变量的指针(B)指针数组的名字,包含5个指向整型数据的指针(C)指向包含5个整型元素的一维数组的指针(D)指向函数的指针 190 在C程序说明语句int *pointer[5];中,pointer表示的是一个 (A)指向整型变量的指针(B)指针数组的名字,包含5个指向整型数据的指针(C)指向包含5个整型元素的一维数组的指针(D)指向函数的指针 191 在C程序说明语句int(*pointer)();中,pointer表示的是一个(A)指向整型变量的指针(B)指向数组的指针 (C)返回值为指针的函数名字(D)指向函数的指针,函数返回值为一个整数 192 在C程序说明语句int *pointer();中,pointer表示的是一个(A)指向整型变量的指针(B)指向数组的指针 (C)返回值为指针(指向的对象为int)的函数名字(D)指向函数的指针,函数返回值为一个整数 193 设有定义int a=3, b, *p=&a;,则下列语句表达有错的是(A)b = *a;(B)b = *&a;(C)b = *p;(D)b = a;·试题讲评 a不是指针变量,不能使用指针运算符*。194 若有说明int i, j=7, *p=&i;,则与i = j;等价的语句是(A)i = p;(B)*p = j;(C)p = &j;(D)*p = &j;195 若有说明int a[10], *p=a;,则对数组元素引用不正确的是(A)*(a + 2)(B)p[2](C)*(p + 2)(D)p + 2 196 若有如下说明语句,则下面叙述中不正确的是 struct student { long num;char name[20];char sex;int age;} stu;(A)struct是结构体类型关键字(B)struct student是结构体类型(C)num,name,sex,age都是结构体成员名(D)stu是结构体类型名 197 若有如下说明语句,则定义了 union student { long num;char name[20];char sex;int age;};(A)结构体类型(B)结构体变量(C)共用体类型(D)共用体变量 198 当定义一个结构体变量时,系统分配给它的内存空间字节数是 (A)各成员所需内存字节数的总和(B)结构体中第一个成员所需内存字节数(C)结构体中最后一个成员所需内存字节数(D)成员中占内存字节数最大的 199 有以下三种形式可供选择,则为了表示结构体变量中的成员,各选项中叙述正确的是 1、结构体变量.成员名 2、(*结构体指针变量).成员名 3、结构体指针变量->成员名(A)只能用1或2表示(B)只能用1或3表示(C)只能用2或3表示(D)三种形式均可 200 以下程序在VC6.0下运行后的输出结果为 #include struct dt { char a[4];int b;double c;} data; int main(void){ printf(”%dn“, sizeof(struct dt)); return 0;}(A)4(B)8(C)16(D)3 201 若有以下定义,则对变量student1中“生日”的正确赋值方式是 struct student { int num;char name[20], sex;struct { int year, month, day; } birthday;}; struct student student1;(A)student1.birthday.year = 2003;student1.birthday.month = 5;student1.birthday.day = 1;(B)year = 2003;month = 5;day = 1;(C)birthday.year = 2003;birthday.month = 5;birthday.day = 1;(D)student1.year = 2003;student1.month = 5;student1.day = 1;202 若有以下定义,则下面各输出语句中能输出字母J的是 struct student { int num;char name[20];}; struct student school[10000] = {{1001, ”Mike“}, {1002, ”James“}, {1003, ”Tom“}};(A)printf(”%c“, school[0].name[0]);(B)printf(”%c“, school[1].name[0]);(C)printf(”%c“, school[2].name[0]);(D)printf(”%c“, school[1].name);203 若有以下定义,则下面各输入语句中不正确的是 struct student { int num;char name[20];char sex;float score;} student1,*p = &student1;(A)scanf(”%d“, &student1.num);(B)scanf(”%s“, &student1.name);(C)scanf(”%c“, &(*p).sex);(D)scanf(”%f“, &(p->score));204 以下程序的输出结果是: #include struct student { int num; float score;}; void fun(struct student tmp);int main(void){ struct student stu[2] = {{1001,650}, {1002,550}};fun(stu[0]);printf(”%d,%4.0fn“, stu[0].num, stu[0].score);return 0;} void fun(struct student tmp){ struct student stu[2] = {{1003, 450}, {1004, 250}}; tmp.num = stu[1].num;}(A)1001, 650(B)1002, 550(C)1004, 650(D)1004, 250 205 以下程序的输出结果是: #include struct student { int num; float score; char name[20];}; void fun(struct student *p);int main(void){ struct student stu[2] = {{1003, 450, ”Liu“}, {1004, 250, ”Tao“}};fun(stu);printf(”%d,%3.0f,%sn“, stu[0].num, stu[0].score, stu[0].name);return 0;} void fun(struct student *p){ struct student stu[2] = {{1001,650, ”He“}, {1002,550, ”Li“}},*q=stu; ++q; *p = *q;}(A)1002,550,Li(B)1004,250,Tao(C)1001,650,He(D)1003,450,Liu 206 以下程序的输出结果是: #include struct student { long num; char name[10]; int age;}; void func(struct student *p);int main(void){ struct student stu[3] = {{1101, ”Liu“, 21}, {11102, ”Tao“, 22}, {1103, ”Xu“, 23}};func(stu + 1); return 0;} void func(struct student *p){ printf(”%s“, p->name);}(A)Tao(B)Liu(C)Xu(D)11102 207 以下程序的输出结果是: #include struct student { int num;int *q;}; int main(void){ int age[3] = {16, 17, 18};struct student stu[3] = {{1001, &age[0]}, {1003, &age[1]}, {1005, &age[2]}};struct student *p = stu; printf(”%d,%d",(p+1)->num, *((p+1)->q));return 0;}(A)1003,17(B)1001,16(C)1005,18(D)1003,16 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];第二篇:E语言程序设计基础
第三篇:C语言程序设计基础课程设计报告
第四篇:C语言程序设计基础单项选择题库
第五篇:C语言程序设计