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。
华科C语言第三次作业参考答案

一、有一个字符串,包含n个字符。
将此字符串从第m个字符开始的全部字符复制成为另一个字符串。
最后输出合成的字符串。
void main( ){char str1[100],str2[100];int m;printf("请输入起始串:");gets(str1);printf("请输入连接串:");gets(str2);printf("请输入连接位置:");scanf("%d",&m);if(m>strlen(str1))printf("输入连接位置有误!");else{strcpy(str1+m,str2);printf("合成串为%s:",str1);}}二、求出某一个字符在某一字符串中最后一次出现的位置。
#include<stdio.h>#include<string.h>void main( ){ char str[100];char c;int i,locate=-1;printf("请输入字符串:");gets(str);printf("请输入匹配字符:");c=getchar();for(i=strlen(str)-1;i>=0;i--){if(str[i]= =c){ locate=i;break;}}if(locate= =-1)printf("字符串中未出现匹配字符");elseprintf("匹配字符最后一次出现在第%d个字符位置.",locate+1);3.编写一个程序,读入一段正文,并读入一个单词,然后删除正文中出现的单词。
最后显示正文结果。
(例如正文是123abc4567abc89,单词是abc,结果是123456789)void main(){char str1[200],str2[50];char *ptr;printf("请输入正文内容:\n");gets(str1);printf("请输入匹配字符串:\n");gets(str2);do{ptr=strstr(str1,str2);if(ptr!=NULL)strcpy(ptr,ptr+strlen(str2));}while(ptr!=NULL);printf("请输出最终内容:%s\n",str1);}。
C语言第三次作业(循环)参考答案

C语言第三次作业(循环结构)参考答案1. 求Sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/(2n))其中n的值由键盘获得。
#include <stdio.h>#include <math.h>int main(){int n,i;double SN=0;printf("请输入n的值:");scanf("%d",&n);for(i=1;i<=n;i++)SN+=1.0/(2*n-1)-1.0/(2*n);printf("SN=%lf\n",SN);return 0;}2.求S=aa….a -… -aaa - aa - a的值,其中a=3,n=6。
n个a例如:22222-2222-222-22-2(例如:a=2,n=5)#include <stdio.h>#include <math.h>{int i,s=0,t=0,a,n;scanf("%d,%d",&a,&n);for(i=0;i<n;i++)t=t*10+a;s=t;printf("%d",s);for(i=1;i<n;i++){ t=t/10;s=s-t;}printf("s=%d",s);return 0;}3..根据以下公式求∏的值(要求满足精度0.0005,即某项小于0.0005时停止迭代)∏/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+(1*2*3*4)/(3*5*7*9)+…+(1*2*3*4*…*n) /(3*5*7*9*…*(2n+1))程序运行后,如果输入精度0.0005,则程序输出为3.140578。
#include <stdio.h>#include <math.h>{int n=1;double t=1.0,pi=0.0;while(t>=0.0005){ pi+=t;t=t*n/(2*n+1);n++;}pi=2*pi;printf("pi=%lf\n",pi);return 0;}4.输出1至100之间每位数的乘积大于每位数的和的数#include<stdio.h>int main(){int n,k=1,s=0,m;for(n=1;n<=100;n++){ k=1;s=0;m=n;while(m){k*=m%10;s+=m%10;m/=10;}if(k>s) printf("%d ",n);}}5.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
第三次c语言题

问题 A: 十进制整数转二进制时间限制: 1 Sec 内存限制: 2 MB提交: 932 解决: 399[提交][状态][讨论版]题目描述给出一个十进制的非负整数x,x<=216,把它转换成二进制数输出。
输入输入为多行,每行一个整数x,至读入EOF结束。
输出每行输出x对应的二进制数值。
样例输入133365535样例输出1111000011111111111111111提示本题有多种解法:可以用循环迭代对2的除法和取余操作,不过处理的顺序与输出顺序相反,需要利用数组存储;用取对数或从大到小减去2的整数次幂的方法计算与输出顺序是相同的;也可以用printf()把十进制的数值处理成十六进制,然后1位十六进制转4位二进制;也可以用位运算处理。
#include<stdio.h>int main(){long int a[65536],b,c,i,j;while (scanf("%ld",&b)!=EOF){if(b==0)printf("0\n");else{c=0;for(i=b;(i/2!=0)||(i==1);i=i/2){a[c]=i%2;c=c+1;}for(j=c-1;j>0;j--)printf("%ld",a[j]);printf("%ld\n",a[0]);}}}问题 B: 求一元二次方程的根时间限制: 1 Sec 内存限制: 2 MB提交: 1050 解决: 106[提交][状态][讨论版]题目描述一元二次方程的标准形式为ax2+bx+c=0(a≠0),其中a、b、c为常数。
求解一元二次方程的根x时有三种情况,分别为(记Δ=b2-4ac):1. Δ>0,有两个不等的实根;2. Δ=0,有两个相同的实根;3. Δ<0,有两个共轭的虚根。
输入输入为多行,每行为一元二次方程的三个常数a,b,c,在double类型范围之内。
C语言第三次大作业

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★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牰湩晴尨“long number[],float score[])函数中话框,回过头看程序,发现int read(缺的语句中出现一个明显的低级错误,:); ret=scanf(%d,n);”请输入学生总人数”。
XXXC语言程序设计A第三次形考任务及答案

XXXC语言程序设计A第三次形考任务及答案在下面的函数定义中,存在着语法错误的是()。
a。
int func(int a。
float b)b。
float func(float a。
int b)c。
void func(int a)d。
int func(int a。
int b。
int c)题目121在下面的保留字中,不能作为变量名的是()。
a。
intb。
doublec。
returnd。
char题目131假定有语句为“int a=5.int *p=”,则下面正确的语句为()。
a。
*p=6;b。
&a=*p;c。
p=d。
a=*p;题目141假定有语句为“int a[3]={1,2,3};”,则下面正确的语句为()。
a。
int b=a;b。
int *b=a;c。
int b[3]=a;d。
int *b=a+1;题目151在下面的运算符中,优先级最高的是()。
a。
+b。
==c。
&&d。
*二、简答题(共70分)1.请简述指针和引用的区别。
(10分)指针和引用都是C++语言中的数据类型,但指针是一个变量,存储的是另一个变量的地址,而引用是一个别名,与原变量共享同一块内存空间。
指针可以改变指向的变量,而引用不能改变指向的变量。
另外,指针可以为空,引用不能为空。
2.请简述动态内存分配的方法及其使用场景。
(10分)动态内存分配的方法有两种:malloc和new。
malloc函数可以分配指定大小的内存空间,返回一个void类型的指针,需要手动释放内存空间;new操作符可以分配指定类型的内存空间,返回一个指向该类型的指针,需要使用delete操作符释放内存空间。
动态内存分配适用于需要在程序运行过程中动态创建和释放内存空间的场景,如不确定数组大小、对象的数量等情况。
3.请简述面向对象编程中的封装、继承和多态的概念。
(15分)封装是面向对象编程的一个重要特性,它将数据和操作数据的函数封装在一起,对外部隐藏对象的内部细节,使得对象的使用更加简单和安全。
C语言程序设计-第三次作业的部分答案及分析

三、写出下列每个程序运行后的输出结果1. #include<stdio.h>void SB(char ch) {switch(ch) {case 'A': case 'a'://相当于if(ch==’A’||ch==’a’)printf("WW "); break;case 'B': case 'b':printf("GG "); break;case 'C': case 'c':printf("PP "); break;default:printf("BB "); break;}}void main() {char a1='b',a2='C',a3='f';SB(a1);SB(a2);SB(a3);SB('A');//4次调用SB,实际参数分别为b、C、f和Aprintf("\n");}GG PP BB WW2. #include<stdio.h>#include<stdlib.h>double SD(int a, int b, char op) {double x;switch(op) {case '+': x=a+b; break;case '-': x=a-b; break;case '*': x=a*b; break;case '/': if(b) x=(double)a/b;else exit(1);break;default: {printf("运算符错!\n");exit(1);}}return x;}void main() {int x=20,y=8;printf("%3.2lf ",SD(x,y,'-'));//以浮点形式输出x和y 的差printf("%3.2lf ",SD(x,y,'*'));//以浮点形式输出x和y 的积printf("%3.2lf\n",SD(x+y,y,'/')); //以浮点形式输出x+y和y 的商}//小数点后保留2位。
第三次c语言作业

第三次c语⾔作业这个作业属于那个课程C语⾔程序设计II这个作业要求在哪⾥我在这个课程的⽬标是更加深层次了解C语⾔这个作业在那个具体⽅⾯帮助我实现⽬标⾃学能⼒,实践能⼒参考⽂献1.pta作业1.1输出三⾓形⾯积与周长题⽬内容描述:本题要求编写程序,根据输⼊的三⾓形的三条边a、b、c,计算并输出⾯积和周长。
注意:在⼀个三⾓形中,任意两边之和⼤于第三边。
三⾓形⾯积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
1.1.1实验代码截图1.1.2数据处理数据表达:我⽤了变量abcs,了解了整数变量。
数据处理:我⽤了赋值和算数表达式以及分⽀结构。
1.1.3pta提交列表及说明Q1:不清楚&的具体⽤法,只能在同学的指导下完成这次作业。
A1:勉强完成这次作业,但具体做法不知道。
1.2阶梯电价题⽬内容描述:为了提倡居民节约⽤电,某省电⼒公司执⾏“阶梯电价”,安装⼀户⼀表的居民⽤户电价分为两个“阶梯”:⽉⽤电量50千⽡时(含50千⽡时)以内的,电价为0.53元/千⽡时;超过50千⽡时的,超出部分的⽤电量,电价上调0.05元/千⽡时。
请编写程序计算电费。
1.2.1实验代码截图1.2.2数据处理数据表达:我⽤了%,了解了使⽤做法。
数据处理:我⽤了赋值和算数表达式以及分⽀结构。
1.2.3pta提交列表及说明Q1:不清楚为什么利息直接使⽤点加数字,⽽不是零点⼏。
A1:本次作业失败了多次,然后成功。
1.3计算分段函数题⽬内容描述:本题⽬要求计算下列分段函数f(x)的值:注:可在头⽂件中包含math.h,并调⽤sqrt函数求平⽅根,调⽤pow函数求幂。
1.3.1实验代码截图1.3.2数据处理数据表达:我使⽤了赋值法解决此问题数据处理:我⽤了赋值和算数表达式以及分⽀结构。
1.3.3pat提交列表及说明Q1:此题⽬我⼀开始没有看明⽩,请教了同学之后做完了。
A1:能完成这次的作业。
2.阅读代码这是⼀个放苹果的代码⽤了⾃定义函数3.学习总结3.1学习进度条周/⽇期这周所花的时间代码⾏学习到的知识点简介⽬前⽐较疑惑的问题第六周16⼩时365⾏学习C语⾔没第七周4⼩时128⾏学习c语⾔不咋会3.2累计代码和博客字数时间博客字数代码⾏第四周00第五周00第六周600400第七周6004003.3学习感悟我现在感觉c语⾔对于我还是有很⼤的困难,虽然以前接触过类似的东西,但没有⾃⼰编程过不知道其中的困难,在接下来的⽇⼦⾥我会更加努⼒学习。
C语言程序设计第三次作业

C语⾔程序设计第三次作业C语⾔程序设计第三次作业(⼀)改错题计算f(x)的值:输⼊实数x,计算并输出下列分段函数f(x)的值,输出时保留1位⼩数。
1.源程序:2.错误及改正。
错误信息1:错误原因:中括号内内容未加分号。
改正⽅法:在x后加分号。
错误信息2:错误原因:if语句后的括号后不应该有分号。
改正⽅法:将括号后分号去掉。
错误信息3:错误原因:else后不应加括号。
改正⽅法:将括号及以内内容去掉。
错误信息4:错误原因: x,y前没有逗号。
改正⽅法:在下x,y前加上逗号。
错误信息5:同错误信息4反映情况⼀。
错误原因:经检查xy之间仍旧差⼀个逗号。
改正⽅法:xy之间加⼀个逗号。
错误信息6:经检查,输⼊语句中未加⼊地址符&。
错误原因:x未取地址符。
改正⽅法:在x前加⼀个&。
错误信息7:经继续检查,发现输⼊语句存在问题。
错误原因:输⼊语句中“%f”不能直接输⼊,应改为“%lf”。
改正⽅法: 将%f改为%lf。
3.改正后正确程序。
(⼆)1.if(a)if(b) x=x+1;else y=y+1;的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对⽅法?将该段代码按照规范化的格式进⾏书写。
1.如果输⼊的语句符合括号内的条件就执⾏x=x+1;否则就执⾏y=y+12.与第⼆个配对3.在else后加{}改正后的代码:2.C语⾔的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?1.不能。
2.这样的话先会⽐较-10和x的⼤⼩,然后再⽐较后者,这样不会输出正确结果。
3.只能⽤x>-10 && x<10;来表⽰。
3.C语⾔中输⼊数据时,如果遇到⾮法字符,如果遇到⾮法字符,则认为输⼊结束。
运⾏程序(1),输⼊123a,看看输出结果是什么?你能解释是为什么吗?1.输出结果:2.原因:⾮法字符⽆法输出,所以就输出了⼀个随机数。
C语言第三次作业

2.
竖式打印
键盘输入两个两位正整数 a,b ( 11 < = a,b < = 99,且 a 和 b 都不包含数字’0’ ),在屏幕 上输出 a 与 b 相乘的竖式。注意尽量按照样例的格式进行输出。
样例: 输入 25 12 输出 25 * 12 -----50 25 -----300
程序代码: #include<stdio.h> #include<math.h> void main() { int a,b,m,n,k; scanf("%d %d",&a,&b); m=(b%10)*a; n=floor(b/10)*a; k=a*b; printf("%6d\n",a); printf("*");
程序代码: #include<stdio.h> #include<math.h> void main() { int m,n,k,a,b,c,d,p,q,i; scanf("%d,%d,%d",&n,&m,&k); i=n-1; do { i=i+1; p=i%(n+1); q=i%(m+1); } while(p!=0||q!=0); b=floor(k/i); c=floor(k/(m+1))-b; d=floor(k/(n+1))-b; a=k-(b+c+d); printf("%d %d %d %d\n",a,b,c,d); }
4.
计算工资
某工厂规定一个工人工作时间每个月 160 小时,每小时工资为 5 元,如果加班的话,每 小时加班费为 4 元; 但是单位同时又规定, 一个工人每月加班时间平均计算下来最多不能超 过 6 个小时/天,多出的加班时间不给加班费。(本题暂规定即使是周末、节假日加班也不 能超过 6 小时;2 月份假设全按照 28 天计算)。请编程完成如下的功能。 输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算: 由键盘输入月份数,某个工人的当月工作总时间,计算并打印此工人该月的工资。
- 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,而这里算等级利用整数。