C语言第三次大作业
C语言程序设计第三次作业

C语⾔程序设计第三次作业 态度决定⼀切,⽆论做什么事情,秉持⼀个认真的态度,相信⼀定会让你受益⽆穷。
当提交作业时,如果只是粘贴⼀下代码和运⾏结果,那么,你也只是写了⼀个程序⽽已,对你⾃⼰⽔平的提升帮助并不⼤,这次犯的错误或许下次还会出现。
如果你能够认真进⾏⼀下总结,这道程序⽤到了我们学过的哪些知识点,这些知识点应⽤于什么场合,需要注意哪些问题,那么你对所学知识会有更深刻的理解和掌握,应⽤起来也会更加⾃如。
在编程的过程中,⾃⼰是如何考虑的,碰到了什么问题,怎么解决的,在程序调试的过程中,⼜出现了哪些错误,原因是什么?认真总结⼀下,假以时⽇,你的编程能⼒⼀定会有⼀个很⼤的提升。
所以,同学们,希望⼤家在完成作业的时候,能够对知识点和实验过程做⼀个认真的总结。
本次作业要求如下:⼀、学习内容1. 掌握字符型数据(字符型常量和变量、字符串常量、字符型数据的输⼊输出格式和输⼊输出函数)2. 如何产⽣随机数⼆、实验内容1. 字符判断输⼊⼀个字符,判断它如果是⼩写字母输出其对应⼤写字母;如果是⼤写字母输出其对应⼩写字母;如果是数字输出数字本⾝;如果是空格,输出“space”;如果不是上述情况,输出“other”。
2. 年龄问题输⼊⼀个学⽣的⽣⽇(年:⽉:⽇),并输⼊当前⽇期(年:⽉:⽇),计算该⽣的实际年龄(周岁)。
3. 判断三⾓形类型 输⼊三个整数,判断由其构成的三⾓形的类型(等边三⾓形、等腰三⾓形、等腰直⾓三⾓形、直⾓三⾓形、⼀般三⾓形以及⾮三⾓形)4. 看商品猜价格⼩游戏附加题:⾍⼦吃苹果问题(完成此题加1分)你买了⼀箱n个苹果,很不幸的是买完时箱⼦⾥混进了⼀条⾍⼦。
⾍⼦每x⼩时能吃掉⼀个苹果,假设⾍⼦在吃完⼀个苹果之前不会吃另⼀个,那么经过y⼩时你还有多少个完整的苹果?输⼊n,x和y(均为整数)。
输出剩下的苹果个数。
测试数据: 10 4 95 3 16三、实验要求作业提交必须按照以下格式写,不能只写源代码,或只提交运⾏结果截图。
C语言 第三次作业

第三次作业
1. 声明一个圆类Circle,其成员为圆心的坐标和圆半径,并设计构造函数(必须赋初值),析构函数(可以什么都不做,只打印信息,表示其被调用),设置新值函数set, 打印成员值函数print,计算圆面积函数Area,并用此类定义对象,调用所有成员函数。
2. 声明一个矩形类Rectangle,其成员为矩形的左下角和右上角两个点的坐标,并设计构造函数(可赋初值也可以不赋初值),拷贝构造函数,析构函数(可以什么都不做,只打印信息,表示其被调用),设置新值函数set, 打印成员值函数print,计算矩形面积函数Area,以及其它你认为对访问此类对象有用的成员函数。
,并用此类定义对象,调用所有成员函数。
大三c语言考试题及答案

大三c语言考试题及答案大三C语言考试题及答案一、选择题1. 在C语言中,以下哪个选项是正确的标识符?A. 2variableB. variable2C. variable-nameD. variable$name答案:B2. C语言中,哪个关键字用于定义一个函数?A. classB. functionC. defD. void答案:D3. 下列哪个选项是C语言中的合法整型常量?A. 0x12B. 0b1010C. 0.123D. 1e2答案:A4. C语言中,哪个运算符用于逻辑与操作?A. &&B. ||C. !D. &答案:A5. 在C语言中,以下哪个选项是正确的字符串字面量?A. "Hello, World!"B. 'Hello, World!'C. "Hello", "World!"D. "Hello" 'World!'答案:A二、填空题1. 在C语言中,使用________运算符可以连接两个字符串。
答案:+2. C语言中,________关键字用于声明一个变量为静态存储期。
答案:static3. C语言中,________函数用于计算并返回一个字符串的长度。
答案:strlen4. 在C语言中,________关键字用于声明一个变量为全局变量。
答案:extern5. C语言中,________函数用于将整数转换为字符串。
答案:itoa三、简答题1. 简述C语言中数组和指针的区别。
答案:数组是一种数据结构,用于存储相同类型的多个元素,而指针是一种变量,它存储的是另一个变量的地址。
数组名本身代表数组的首地址,而指针变量可以被赋值为任意类型的地址。
数组的大小在定义时必须确定,而指针可以指向不同大小的内存块。
2. 描述C语言中结构体(struct)的作用。
答案:结构体是一种用户自定义的数据类型,它允许将多个不同类型的数据项组合成一个单一的数据结构。
C语言上机作业试题5套含答案

第一次上机作业(2021):要求:独立完成,上机调试通事后上交作业提交邮件主题命名:班级学号姓名(第1次作业),例如:电1301班2王鹏(第1次作业)以附件形式将每次作业的所有程序源程序紧缩打包后提交,紧缩文件命名格式同上。
程序必需采用缩进格式1.大写字母转换成小写字母从键盘输入一个大写英文字母,输出相应的小写字母。
例:输入G输出g2.求平方根输入一个实数x,计算并输出其平方根(保留1 位小数)。
例:输入17输出The square root of is3.温度转换设计一个程序将华氏温度转换成摄氏温度c = 5/9(f-32)a)输入华氏温度(实型)b)输出的摄氏温度结果保留两位小数例:Please input Fahrenheit temperature:The corresponding Celsius temperature is4. 计算旅途时刻输入二个整数time1 和time2,表示火车的起身时刻和抵达时刻,计算并输出旅途时刻。
(输入的有效的时刻范围是0000 到2359,不需要考虑起身时刻晚于抵达时刻的情形。
)例:输入712 1411 (起身时刻是7:12,抵达时刻是14:11)输出The train journey time is 6 hours 59 minutes.5. 数字加密输入一个四位数,将其加密后输出。
方式是将该数每一名上的数字加9,然后除以10 取余,做为该位上的新数字,最后将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。
例:输入1257输出The encrypted number is 4601试探题:你可否编程找出谁做的好事?有四位同窗中的一名做了好事,不留名,夸奖信来了以后,校长问这四位是谁做的好事。
⏹A说:不是我。
⏹B说:是C。
⏹C说:是D。
⏹D说:他乱说。
已知三个人说的是实话,一个人说的是谎话。
此刻要依照这些信息,找出做了好事的人。
C语言第三次作业

实验3 循环结构程序设计一、实验目的(1) 掌握while、do~while、for语句的使用。
(2) 掌握循环体内使用break、continue语句的作用。
(3) 掌握循环及嵌套循环结构的程序设计方法。
二、实验内容及步骤(一)实验准备(1) C语言实现循环的方法①while循环:实现“当型”循环,首先判断循环条件,当条件为真,执行循环体,再判断循环条件……此种循环有可能一次也不执行循环体。
②do~while循环:实现“直到型”循环,与while循环的区别是先执行循环体,再判断循环条件,当循环条件为真,再执行循环体……此种循环至少执行一次循环体。
③for循环:与while循环类似,一般用于知道循环变量初值、终值及步长值的循环。
(2) break 和continue 语句①break 语句:可用在循环体或switch语句中,作用是跳出其所在的控制结构。
若是在循环体中,则是跳出其所在的循环,使得循环不止一个出口。
②continue语句:只能用在循环体中,其作用是结束本层本次循环,注意不是退出循环。
(3) 阅读以下程序,并分析其功能,调试运行程序后再分析其运行结果。
①掌握三种方法求数列求和。
文件名为ex6-1-1.c,内容如下:# include <stdio.h>main(){ int sum=0,i=1;while(i<=100)sum+=i++;printf("sum is %d\n",sum);}文件名为ex6-1-2.c,内容如下:# include <stdio.h>main(){ int sum=0,i=1;dosum+=i++;while(i<=100);printf("sum is %d\n",sum);}文件名为ex6-1-3.c,内容如下:# include <stdio.h>main(){ int sum=0,i;for(i=1;i<=100;i++)sum+=i;printf("sum is %d\n",sum);}②程序二,程序文件名为ex6-2.c。
中石大C语言程序设计第3次在线作业答案

第三次在线作业单选题(共20道题)收起1.(2.5分)在C语言中,当函数调用时()。
A、A. 实参和形参各占一个独立的存储单元B、B. 实参和形参共用存储单元C、C. 可以由用户指定实参和形参是否共用存储单元D、D. 由系统自动确定实参和形参是否共用存储单元我的答案:A 此题得分:2.5分2.(2.5分)以下函数调用语句中实参的个数为()。
exce((v1,v2),(v3,v4,v5),v6);A、A. 3B、B. 4C、C. 5D、D. 6我的答案:A 此题得分:2.5分3.(2.5分)如果在一个函数的复合语句中定义了一个变量,则该变量()。
A、A. 只在该符合语句中有效,在该符合语句外无效B、B. 在该函数中任何位置都有效C、C. 在本程序的原文件范围内均有效D、D. 此定义方法错误,其变量为非法变量我的答案:A 此题得分:2.5分4.(2.5分)C语言允许函数值类型缺省定义,此时该函数值隐含的类型是()。
A、A. float型B、B. int型C、C. long型D、D. double型我的答案:B 此题得分:2.5分5.(2.5分)C语言规定,函数返回值的类型是由()。
A、A. return语句中的表达式类型所决定B、B. 调用该函数时的主调函数类型所决定C、C. 调用该函数时系统临时决定D、D. 在定义该函数时所指定的函数类型决定我的答案:D 此题得分:2.5分6.(2.5分)在C语言程序中,以下描述正确的是()。
A、A. 函数的定义可以嵌套,但函数的调用不可以嵌套B、B. 函数的定义不可以嵌套,但函数的调用可以嵌套C、C. 函数的定义和函数的调用均不可以嵌套D、D. 函数的定义和函数的调用均可以嵌套我的答案:B 此题得分:2.5分7.(2.5分)以下叙述中正确的是()。
A、A. 全局变量的作用域一定比局部变量的作用域范围大B、B. 静态(static)类别变量的生存期贯穿于整个程序的运行期间C、C. 函数的形参都属于全局变量D、D. 未在定义语句中赋初值的auto变量和static变量的初值都是随机值我的答案:B 此题得分:2.5分8.(2.5分)以下程序的运行结果是()。
c语言第三次作业

C语言第三次作业补充题1:程序编写为:# include <stdio.h>void main(){inti,j,sum,a[10];sum=0; j=0;printf("Please enter any 10 integers:");for(i=0;i<10;i++) /*输入十个整数*/scanf("%d",&a[i]);for(i=0;i<10;i++){ /*判断输入的十个数中的非负数,用j记录下个数,并求出它们的和*/if(a[i]>=0){sum=sum+a[i];j=j+1;}}printf("An negative number is %d in 10 integers.\n",j); /*输出非负数的个数*/printf("The negative and is %d in 10 integers.\n",sum); /*输出非负数的和*/}补充题2程序编写为:# include <stdio.h>void main(){inti,j,k,max,min,a[8];printf("Please enter any 8 integers : ");for(i=0;i<8;i++) /*依次输入八个整数*/scanf("%d",&a[i]);max=a[0]; min=a[0]; /*给最大值和最小值设定初值*/for(i=1;i<8;i++){if(a[i]>max) /*将max的初值依次和数组中其他数比较,求出最大值*/ max=a[i];}for(i=1;i<8;i++){if(a[i]<min) /*将min的初值依次和数组中的其他数比较,求出最小值*/ min=a[i];}for(i=0;i<8;i++){if(a[i]==max) /*找出数组中的最大值,将其替换为最小值*/a[i]=min;else if(a[i]==min) /*找出数组中的最小值,将其替换为最大值*/a[i]=max;}printf("After exchanging, the order is : "); /*输出交换最大值和最小值后的数组*/ for(i=0;i<8;i++)printf("%d ",a[i]);printf("\n");}P168页第一题程序编写为:# include <stdio.h># define num 10 /*先定义一个常量,若要改变数组大小时,就改这里就好了*/ void main(){int a[num],i,j,k,t;printf("input %d members:\n",num);for (i=0;i<num;i++)scanf("%d", &a[i]);for(i=0;i<num-1;i++){ /*选择升序*/k=i; /*k为当前最小数的下标,初始值设为i*/for(j=i+1;j<num;j++) /*查找比a[k]小的下标放入k中*/if(a[k]>a[j])k=j; /*更改最小数的下标*/if(k!=i){ /*如果下标有更改,将最小值a[k]与a[i]交换*/t=a[i];a[i]=a[k];a[k]=t;}}printf("the sorted numbers:\n"); /*输出排序好的数据*/for(i=0;i<num;i++)printf("%d ",a[i]);printf("\n");P168页第二题程序编写为:# include <stdio.h>void main ()inti,j,sum,k,a[3][3]; /*先定义所要用到的变量*/sum=0;printf("请输入3*3矩阵中的9个数\n"); /*提示要输入9个整数*/for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d", &a[i][j]); }/*依次输入整形矩阵中的九个数*/}k=a[1][1]; /*由于下面的else if 的判断中不包含a[1][1],所以先将其赋值给k*/for(i=0;i<3;i++)for(j=0;j<3;j++){if(j==i) /*判断数是不是主对角线上的*/sum=sum+a[i][j]; /*满足上述条件时,求主对角线上数的和*/ else if(j==2-i) {k=k*a[i][j];} /*满足条件时,求反对角线上的积*/}printf("此整形矩阵主对角线上的数的和是:%d。
2013年9月份考试C语言程序设计第三次作业

2013年9月份考试C语言程序设计第三次作业一、填空题(本大题共40分,共 20 小题,每小题 2 分)1. 编写C语言程序四个步骤是: ______ , ______ , ______ , ______ .2. 源程序的基本单位是 ______3. 函数体一般包括 ______ 部分和 ______ 部分4. C语言提供的预处理功能有 ______ 、 ______ 、 ______ 等三种.5. 在C语言中(以16位PC为例),一个float类型的数据在内存中所占的字节数是 ______ ;一个double类型的数据在内存中所占的字节数是 ______ . 6. C语言中变量和函数的存储方式有四种,分别是: ______ , ______ ,______ , ______ .7. 写出下面表达式运算后Val 的值,假设Val = 10 ,Num = 5.Val 和 Num 都定义为整型变量. (1) ______ ,(2) ______ ,(3) ______ (1) Val += Val; (2) Val *= Num + Val; (3) Val += Val -= Val *= Val;8. 下面程序段的运行结果是 ______ .Char s[80],*sp="HELLO!";sp=strcpy(s,sp);s[0]=''h'';puts(sp);9. 下列程序的输出结果是 ______main(){int a=-1,b=4,k;k=(a++<0)&&(!(b--<=0));printf("%d%d%d\n",k,a,b) ;}10. 当a的值分别为:1,2,3时,程序的结果是 ______#include main(){int a;printf("Please enter a=");scanf("%d",&a); switch(a){case 1: printf("*");break;default: printf("#");case 2: printf("-") ;}}11. 下面程序段的运行结果是 ______char s[80],*sp="you";sp=strcpy(s,sp);s[0]=''Y'';puts(sp);12. 以下程序的执行结果是: ______ .#include main(){int a,b,c,d,x;a=c=0; b=1;d=20; if(a) d=d-10;else if(!b) if(!c) x=15;else x=25;printf("d=%d\n",d);}13. 写出下面表达式运算后Val 的值,假设Val = 12 ,Num = 7.Val 和 Num 都定义为整型变量. ______ Val += Val; ______ Val *= Val; ______ Val *= Num + Val; ______ Val %= (Num %= 4); ______ Val /= Val + Val; ______ Val += Val -= Val *= Val;14. 若a是 int型变量,则执行下面表达式后a的值是 ______ . a=25/3%315. 输入:teacher时,下列程序的输出结果是 ______#include main(){char c ;int v0=0,v1=0;do switch(c=getchar()){case ''a'': case ''b'': case ''c'':v0++;default: 2:v1++;}while(c!=''\n'');printf("v0=%d,v1=%d\n",v0,v1);}16. 下列程序的输出结果是 ______main(){int a=-1,b=4,k;k=(++a<0)&&(!(b--<=0));printf("%d%d%d\n",k,a,b) ;}17. 下列程序的输出结果是 ______main(){int x=1,a=0,b=0;switch(x){case 0: b++;case 1: a++;case 2: a++; b++ ;}printf("a=%d,b=%d\n",a,b);}18. 以下程序的运行结果是 ______int a=3,b=5;max(int a,int b){int c;c=a>b?a:b;return(c);}main(){int a=8;printf("%d",max(a,b)):}19. 当a的值分别为:1,2,3时,程序的结果是 ______ .#include main(){int a;printf("Please enter a=");scanf("%d",&a);switch(a){case 1: printf("a");break;default: printf("b");case 2: printf("c") ;}}20. 下列程序的输出结果是 ______ .#include main(){int a=-1,b=2,k;k=(++a<0)&&(!(b--<=0));printf("%d%d%d\n",k,a,b) ;}二、程序阅读题(本大题共60分,共 10 小题,每小题 6 分)1. 表示"整数x的绝对值大于5"时值为"真"的C语言表达式是().2. 已知字符A的ASCII码值为65,以下语句的输出结果是().char ch=''B'';printf("%c %d\n",ch,ch);3. 以下程序运行时,若从键盘输入:10 20 30<回车>,输出的结果是(). #include main(){int i=0,j=0,k=0;scanf("%d%*d%d",&i,&j,&k);printf("%d%d%d\n",i,j,k);}4. 以下程序运行后的输出结果是().void swap(int x,int y){int t;t=x;x=y;y=t;printf("%d %d ",x,y);}main(){int a=3,b=4;swap(a,b);printf("%d %d",a,b);}5. 以下程序运行后的输出结果是().main(){char m;m=''B''+32;printf("%c\n",m);}6. 以下程序运行后的输出结果是().main(){int a[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};int i=0,j=0,s=0;while(i++<4) { if(i==2||i==4) continue;j=0;do{ s+= a[i][j]; j++;}while(j<4);}printf("%d\n",s);}7. 有以下语句段int n1=10,n2=20;printf("()",n1,n2);要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空. n1=10 n2=208. 以下程序运行后的输出结果是()main (){char a[]="Language",b[]="Programe";char *p1,*p2; int k;p1=a;p2=b;for(k=0;k<=7;k++) if(*(p1+k)==*(p2+k)) printf("%c",*(p1+k));}9. 求ax*x+bx+c=0的方程的根.a,b,c由键盘输入,设b -4ac>0.10. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和.答案:一、填空题(40分,共 20 题,每小题 2 分)1.参考答案:编辑编译连接运行解题方案:基本知识、记忆评分标准:每答对1空得2分2.参考答案:函数解题方案:基本知识点、记忆评分标准:每答对1空得2分3.参考答案:声明执行解题方案:函数体一般包括声明部分和执行部分评分标准:每答对1空得2分4.参考答案:宏定义文件包含条件编译解题方案:基本概念,记忆评分标准:每答对1空得2分5.参考答案:4 8解题方案:Float 4字节 Double 8字节评分标准:每答对1空得2分6.参考答案:自动(auto)静态(static)寄存器(register)外部的(extern)解题方案:4种存储方式是自动(auto)、静态(static)、寄存器(register)、外部的(extern)评分标准:每答对1空得2分7.参考答案:20 150 0解题方案:Val += Val, Val=20 等价于Val *= (Num + Val),Val=150 等价于Val *= Val, Val -= Val, Val += Val, Val=0评分标准:每答对1空得2分8.参考答案:hELLO!解题方案:"HELLO!"字符串常量自动添加结束符’\0’,所以sp=strcpy(s,sp); s="triz",且sp指向s所以输出hELLO!评分标准:每答对1空得2分9.参考答案:103解题方案:(a++<0)&&(!(b--<=0))等价于1&&(!0) 所以k=1,a=0,b=3评分标准:每答对1空得2分10.参考答案:*-#-解题方案:执行case 1,输出* 执行case 2,输出执行default,输出#-评分标准:每答对1空得2分11.参考答案:Y ou解题方案:"you "字符串常量自动添加结束符’\0’,所以sp=strcpy(s,sp); s="you ",且sp指向s所以输出Y ou评分标准:每答对1空得2分12.参考答案:d=20解题方案:Else和最近的if配对,所以 if(a)[假] d=d-10; else if(!b)[假] if(!c)x=15; else x=25; 从而,赋值语句都没有执行,所以d=20评分标准:每答对1空得2分13.参考答案:24 144 228 0 0 0解题方案:(1)Val+=Val, Val = 24 (2)val*=Val, Val = 144 (3) 等价Val*=(Num+Val), Val=12*(12+7)=228 (4) Val %= (Num %= 4); Val%=(Num%4)=12%(7%4)=12%3=0 (5 )等价Val /=( Val + Val) 12/=(12+12) Val=0 (6)等价Val *= Val,Val -= Val,Val *= Val+=Val,则Val=(144, 0, 0, 0)=0评分标准:每答对1空得2分14.参考答案:2解题方案:/优先即高于%,等价于(25/3)%3=8%3=2评分标准:每答对1空得2分15.参考答案:v0=2,v1=8解题方案:Case中没有break,因此?v0增加2次,v1增加8次,所以v0=2,v1=8评分标准:每答对1空得2分16.参考答案:004解题方案:++a<0 即 0<0为假,不执行&&的后的表达式,所以k=0,a=0,b=4评分标准:每答对1空得2分17.参考答案:a=2,b=1解题方案:执行case 1,case中没有break,执行完该switch语句,所以a=2,b=1评分标准:每答对1空得2分18.参考答案:8解题方案:对于全局变量和局部变量同名时,在程序局部变量作用域,局部变量覆盖全局变量,所以max(a,b)等价于max(8,5)评分标准:每答对1空得2分19.参考答案:acbc解题方案:Case 1 输出a Case 2 输出c Case 3 输出bc评分标准:每答对1空得2分20.参考答案:002解题方案:(++a<0)&&(!(b--<=0))即(0<0)&&( !(b--<=0)),即0&&( !(b--<=0)),所以( !(b--<=0))不执行.K=0,a=0,b=2评分标准:每答对1空得2分二、程序阅读题(60分,共 10 题,每小题 6 分)1.参考答案:x>5||x5 或 abs(x)>5 或 (x>5)||(x5)解题方案:要使整数x的绝对值大于5,则x大于5或x小于-5,用C语言表示即为:x>5||x<-或者(x>5)||(x<-5).评分标准:回答正确得5分,错误不得分2.参考答案:B 66解题方案:printf函数的一般格式为 printf(格式控制,输出表列) "格式控制"是用双引号括起来的字符串,也称"转换控制字符串". 1、d格式符,用来输出十进制整数.2、c格式符,用来输出一个字符. 已知字符A的ASCII码值为65,则字符B的ASCII码值为66,所以本题输出结果为:B 66评分标准:回答正确得5分,错误不得分3.参考答案:10300解题方案:在scanf格式控制符中,如果在%后有一个"*"附加说明符,表示跳过它指定的列数.本题中""%d%*d%d""表示将10赋给i,%*d表示读入整数但不赋给任何变量,然后再读入整数30赋给变量j,那么变量k并没有重新赋值,仍为初始值0.所以输出的结果为10300.评分标准:回答正确得5分,错误不得分4.参考答案:4 3 3 4解题方案:用变量作为函数的实参时,属单向传递,即"值传送"方式,此种函数参数的传递方式只能由实参传给形参,不能由形参传回来给实参.本题中,变量a,b的值传递给了函数swap的形参x,y,并在函数中对x,y的值进行了交换,所以函数swap中输出的x,y的值为4,3,但此时实参a,b的值并没有随形参x,y的改变而改变,所以在主函数中输出的a,b的值为3,4.评分标准:回答正确得5分,错误不得分5.参考答案:b解题方案:考察的主要知识点是不同类型数据间的转换与运算.本题所要实现的功能是把大写字母转换为小写字母,在C中,小写字母的ASCII码值比大写字母的ASCII码值大32.评分标准:回答正确得5分,错误不得分6.参考答案:92解题方案:本题考查的是循环的嵌套. 解题过程: (1)当i=0时执行while 1)i<4,i=1 2)因为i=1,所以不执行continue 3)j赋值0 4)执行do while①s=0+a[1][0]=5,j=1,因为j<4,所以继续循环②s=5+a[1][1]=5+6=11,j=2,因为j<4,所以继续循环③s=11+a[1][2]=11+7=18,j=3,因为j<4,所以继续循环④s=18+a[1][3]=18+8,j=26,因为j=4,所以终止循环(2)当i=1时,i<4执行while,i=2,因为i=2,所以执行continue,结束本次while循环(3)当i=2时,i<4执行while,i=3 1)因为i=3,所以不执行continue 2)j赋值0 3)执行do while ①s=26 ②s=26+a[3][0]=26+15=41,j=1,因为j<4,所以继续循环③s=41+a[3][1]=41+16=57,j=2,因为j<4,所以继续循环④s=57+a[3][2]=57+17=74,j=3,因为j<4,所以继续循环⑤s=74+a[3][3]=74+18=92,j=4,因为j=4,所以终止循环(4)i=3时,i<4执行while,i=4因为i=4,所以执行continue,结束本次循环(5)当i=4时,i=4结束while循环(6)结果输出s=92.评分标准:回答正确得5分,错误不得分7.参考答案:n1=%d\nn2=%d解题方案:printf函数的一般格式为 printf(格式控制,输出表列) "格式控制"是用双引号括起来的字符串,也称"转换控制字符串",它包括两种信息: 1、格式说明,由"%"和格式字符组成,如%d,%f等.它的作用是将输出的数据转换为指定的格式输出.格式说明总是由"%"字符开始的. 2、普通字符,即需要原样输出的字符. 结果要求输出为: n1=10 n2=20 所以格式控制中需含有"n1="部分,又因为要求按两行输出,需含有回车符:\n.评分标准:回答正确得5分,错误不得分8.参考答案:gae解题方案:解题过程: (1)当k=0时,*(p1+0)=''L'',*(p2+0)=''P'',L!=P,所以没有输出(2)当k=1时,*(p1+1)=''a'',*(p2+1)=''r'',a!=r,所以没有输出(3)当k=2时,*(p1+2)=''n'',*(p2+2)=''o'',n!=o,所以没有输出(4)当k=3时,*(p1+3)=''g'',*(p2+3)=''g'',g==g,所以输出g (5)当k=4时,*(p1+4)=''u'',*(p2+4)=''r'',u!=r,所以没有输出(6)当k=5时,*(p1+5)=''a'',*(p2+5)=''a'',a==a,所以输出a (7)当k=6时,*(p1+6)=''g'',*(p2+6)=''m'',g!=m,所以没有输出(8)当k=7时,*(p1+7)=''e'',*(p2+7)=''e'',e==e,所以输出e (9)当k=8时结束循环(10)输出结果为:gae.评分标准:回答正确得5分,错误不得分9.参考答案:#include main(){float a,b,c,disc,x1,x2,p,q;scanf("a=%f,b=%f,c=%f",&a,&b,&c);disc=b*b-4*a*c; p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q; x2=p-q;printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);}解题方案:一元二次函数的球根公式是(-b+sqrt(b*b-4*a*c))/2a, (-b-sqrt(b*b-4*a*c))/2a评分标准:程序机构3,算法5,其他210.参考答案:main(){int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++){s=s+a/b;t=a;a=a+b;b=t;}printf("sum is %9.6f\n",s);}解题方案:分子的规律是2,3,5,8,13… 分母的规律是1,2,3,5,8,13… 可知第n项f[n]的值为f[n-1]+f[n-2]评分标准:程序机构3,算法5,其他2[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]11 / 11。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★C语言第三次大作业班级:机电***姓名:*******学号:*********★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★题目一:利用数组编写一个简单的成绩管理系统,要求有效依据至少150条,利用程序设计模块化思想,自定义函数不少于5个。
其他要求:1、班级的人数由用户键盘输入;2、录入学生学号和考试成绩3、数据分析功能包括计算课程总分和平均分、按成绩由高到低排出成绩表、按学号由小到大排出成绩表、可按学号查询学生成绩及排名、按优秀(90~100),良好(80~89),中等(70~79),及格(60~69),不及格(<60)5个类别统计成绩并计算百分比和输出每个学生的学号、成绩及课程总分和平均分。
1、题意及算法分析根据题目要求,结合程序设计模块化思想,可自定义7~9个函数,分别实现相应的功能。
根据题目要求可定义学号数组为整形数组,平均分、成绩数组为float 类型;定义宏常量N,使得数组足够大;成绩和学号的排序可采用交换法、选择法、插入排序、冒泡法、快速排序法等,本题采用交换法排序,在采用交换法排序的时候可以通过定义一个标志变量(中间变量)实现;通过学号查找成绩可通过线性查找(顺序查找)或折半查找,本题采用的是顺序查找,采用顺序查找可以用for循环语句实现,查找次数最多为总人数n。
统计等级时,利用整数除法(区别于实数除法),结合switch语句和计数控制循环语句即可得到不同等级所占百分比。
菜单功能选择是可使用switch-case条件结构。
要注意的是数组的下标从0开始;只能逐个引用数组元素,不能一次引用整个数组;数组做函数形式参数时,数组的大小可以不出现在数组名后面的方括号内;被调用函数的实际参数用数组名或数组定义式。
2、NS流程图传统流程图:3、调试及改错1、缺少取地址运算符“&”写好程序后,解决ERROR后会情不自禁的执行程序,一执行便弹出如下对话框,回过头看程序,发现int read(long number[],float score[])函数中“printf("请输入学生总人数:"); ret=scanf("%d",n);”的语句中出现一个明显的低级错误,缺少取地址运算符“&”。
2、交换法排序逻辑错误解决了上述错误后,程序运行时执行功能2,出现如下错误,并没有达到预期交换成绩的目的,但是学号却排序正确,可以初步确定错误出现在void sort (long number[],float score[], int n)函数中。
检查发现标志变量temp为起到作用,交换法语句中出现逻辑错误。
错误的程序语句及修改如下:void sort(long number[],float score[],int n){int i,j;float temp;long m;for(i=1;i<n;i++)for(j=0;j<n-i;j++)if(score[j]<score[j+1]){score[j]=temp; // 应改为“temp=score[j];”m=number[j];score[j]=score[j+1];number[j]=number[j+1];score[j+1]=temp;number[j+1]=m;}printf("\n");for(i=0;i<n;i++)printf("成绩第%d名成绩:%ld\t%.1f\n",i+1,number[i],score[i]);}3、数据类型错误解决了以上问题,再次编译组建执行时,统计各等级所占百分比出现失真。
各成绩等级均为0.00%。
如下图所示:一开始并未发现问题,step into void analysis(float score[],int n)函数调试,输入3位学生成绩分别是98,93和67,调试时查看数据,如下图:(100*a)/10的值并非为0,但是输出结果却是0.00%。
错误的程序语句及修改:void analysis(float score[],int n){int a=0,b=0,c=0,d=0,e=0,i;for(i=0;i<n;i++){switch((int)score[i]/10){case 10:case 9:a=a+1;break;case 8:b=b+1;break;case 7:c=c+1;break;case 6:d=d+1;break;default:e=e+1;}}printf("\n");printf("优秀(90~100)的人数为:%4d\n",a);printf("良好(80~ 89)的人数为:%4d\n",b);printf("中等(70~ 79)的人数为:%4d\n",c);printf("及格(60~ 69)的人数为: %4d\n",d);printf("不及格(0~59)的人数为: %4d\n",e);printf("优秀率:%.2f%%\n",float(100*a)/n); //红色为修改后添加语句printf("良好率:%.2f%%\n",float(100*b)/n); //因为a~e,n已被定义为int printf("中等率:%.2f%%\n",float(100*c)/n); //而输出却是float类型printf("及格率: %.2f%%\n",float(100*d)/n); //因此必须把(100*a)/a printf("不及格率:%.2f%%\n",float(100*e)/n);//转化为强制转化为float型}4、源程序#include <stdio.h>#include <conio.h>#include <windows.h>#define N 100void screen(char c[]);int read(long number[],float score[]);void total_average(float score[],int n);void sort(long number[],float score[],int n);void sortnumber(long number[],float score[],int n);void search(long number[],float score[],int n);void analysis(float score[],int n);void listrecord(long number[],float score[],int n);void main(void){int n=0;char choose;char ch[]={"简单的学生成绩管理系统by施芳辉"};long number[N];float score[N];screen(ch);n=read(number,score); //数组名做函数实参调用函数read()while(1){printf("\n");printf("1、计算课程总分和平均分\n");printf("2、按成绩由高到低排出名次表\n");printf("3、按学号由小到大排出成绩表\n");printf("4、按学号查询学生排名及其成绩\n");printf("5、统计各等级所占的百分比\n");printf("6、输出每个学生的学号、成绩,课程总分和平均分\n");printf("请选择分析功能(按ESC退出):");choose=getche();if(choose==27)break;else{switch(choose){case 49:printf("\n");total_average(score,n); //调用计算课程总分和平均分的函数break;case 50:printf("\n");sort(number,score,n);//调用成绩排序函数break;case 51:printf("\n");sortnumber(number,score,n);//调用学号排序函数break;case 52:printf("\n");search(number,score,n); //调用查询函数research()break;case 53:printf("\n");analysis(score,n); //调用统计等级函数analysis()break;case 54:printf("\n");listrecord(number,score,n);break;default:printf("\n");printf("对不起,没有该功能选项!");break;}}}}void delay(void){int a;for(a=0;a<2000;a++);}void gotoxy(int x,int y){COORD c={x,y};SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); }void screen(char c[]){int i;gotoxy(20,1);for(i=0;i<5;i++){printf("\3\7");Sleep(200);delay();}printf("%s",c); //输出字符串数组ch[]中的内容for(i=0;i<5;i++){printf("\3\7");Sleep(200);delay();}putchar('\n');}int read(long number[],float score[]) //录入学生成绩,返回学生人数供后续函//数使用{int n,i,ret;printf("\n");printf("请输入学生总人数:");ret=scanf("%d",&n); //记录scanf函数的返回值while(ret!=1) //此处输入数据个数或格式是否错误{while(getchar()!='\n'); //清除输入缓冲区中错误数据printf("请输入学生总人数:");ret=scanf("%d",&n); //记录scanf函数的返回值}for(i=0;i<n;i++){printf("请输入第%d位学号和成绩:如(0000000,90.0):",i+1);ret=scanf("%ld%*c%f",&number[i],&score[i]); // *为忽略输入修//饰符,此处%*c使得输入学号与成绩之间可用任意一个字符隔开while(ret!=2) //此处while语句与上述作用一样{while(getchar()!='\n');printf("请输入第%d位学号和成绩:如(0000000,90.0):",i+1);ret=scanf("%ld%*c%f",&number[i],&score[i]);}}return n;}void total_average(float score[],int n){int i;float sum=0;for(i=0;i<n;i++) //总分计数循环语句{sum=sum+score[i];}printf("\n");printf("该课程的总分为:%.2f\n",sum); // “.2”对于float类型,限//定其小数点位数为2位printf("课程的平均分为:%.2f\n",sum/n);}void sort(long number[],float score[],int n){int i,j;float temp; //定义一个标志变量,用于排序long m;for(i=1;i<n;i++)for(j=0;j<n-i;j++) //此段程序if(score[j]<score[j+1]) //用于成绩{ // 的排序,temp=score[j]; // 并交换m=number[j]; //相应的score[j]=score[j+1]; //学号number[j]=number[j+1];score[j+1]=temp;number[j+1]=m;}printf("\n");for(i=0;i<n;i++)printf("成绩第%d名成绩:%ld\t%.1f\n",i+1,number[i],score[i]);}void sortnumber(long number[],float score[],int n) //此函数与上述sort()//函数类似,关键是排序{int i,j;float temp;long m;for(i=1;i<n;i++)for(j=0;j<n-i;j++)if(number[j]>number[j+1]){m=number[j];temp=score[j];number[j]=number[j+1];score[j]=score[j+1];number[j+1]=m;score[j+1]=temp;}printf("\n");for(i=0;i<n;i++)printf("学号由小到大排序:%ld\t%.1f\n",number[i],score[i]);}void search(long number[],float score[],int n){int i;long sort;printf("请输入要查询的学生学号:");scanf("%ld",&sort);printf("\n");for(i=0;i<n;i++) //利用for循环语句,实现顺序查找{if(number[i]==sort)printf("查询学生的学号%ld,成绩为%.1f\n",sort,score[i]);}}void analysis(float score[],int n){int a=0,b=0,c=0,d=0,e=0,i;for(i=0;i<n;i++){switch((int)score[i]/10) //数据类型的强制转换,因为score数组//的数据类型是float,而这里算等级利用整数。