C语言作业5
- 格式:doc
- 大小:226.00 KB
- 文档页数:29
C语⾔程序设计第五次作业——循环结构(1)(⼀)改错题输出华⽒摄⽒温度转换表:输⼊两个整数lower和upper,输出⼀张华⽒摄⽒温度转换表,华⽒温度的取值范围是{lower,upper},每次增加2℉。
计算公式如下:c = 5×(f-32)/9其中,c表⽰摄⽒温度,f表⽰华⽒温度。
输⼊输出样例1: Enter lower:32 Enter upper:35 fahr celsius 32 0.0 34 1.1输⼊输出样例2: Enter lower:40 Enter upper:30 fahr celsius源程序(有错误的程序)#include <stdio.h>int main(void){int fahr , lower, upper; /* fahr表⽰华⽒度 */double celsius; /* celsius表⽰摄⽒度 */printf("Enter lower:");scanf("%d",&lower);printf("Enter upper:");scanf("%d",&upper);printf("fahr celsius\n"); /* 显⽰表头 *//* 温度转换 */for (fahr = lower , fahr <= upper, fahr ++) ;celsius = 5 /9 * (fahr - 32.0);printf("%3.0f %6.1f\n", fahr, celsius);return 0;}对源程序进⾏编译,结果如下:错误信息1:错误原因:for语句后⾯加了分号。
改正⽅法:将分号去掉。
错误信息2:错误原因:for语句下没有加“{}“改正⽅法:在for语句下加上“{}”错误信息3:错误原因:发现for语句内语句⽤逗号隔开了。
习题5参考解答1.数组是相同数据类型的集合,分为一维数组、二维数组及多维数组。
在什么情况下使用数组?在什么情况下使用一维数组?解:当需要处理的数据为相同类型的数据的集合时,可以使用数组。
如果这些数据的描述用一个量就可以,这时就用一维数组。
例如,一组学生的学号,就可以使用一维数组。
2.数组元素又称为下标变量,数组元素的下标有何意义?解:下标的意义是对数组的各个数组元素进行标识和区分。
由数组名和下标结合起来形成数组元素的名字。
3.使用字符数组来存储字符串应注意什么问题?解:需要注意的问题是字符数组在存储字符串时是以'\0'作为结束标记的。
这个'\0'是系统自动加上的。
所以字符数组的长度需要比它要存储的字符串的长度至少多1。
例如,要存储字符串"abcd",因为它的长度为4,所以存储它的字符数组的长度至少为5。
4.常用的字符处理函数有哪些?解:常用的字符处理函数有以下8个。
(1)puts(字符串):作用为将一个字符串输出到终端。
(2)gets(字符数组):作用为从终端输入一个字符串到字符数组,并且得一个函数值。
(3)strcat(字符串1,字符串2):作用为进行字符串的连接。
(4)strcpy(字符串1,字符串2):作用为进行字符串的复制。
(5)strcmp(字符串1,字符串2):作用为进行字符串的比较。
(6)strlen(字符串):作用为求字符串的长度。
(7)strlwr(字符串):作用为将字符串中的大写字母转换成小写字母。
(8)strupr(字符串):作用为将字符串中的小写字母转换成大写字母。
5.随机产生10个两位整数存储到一个一维数组中,找出其中的最大数。
解:#include<stdio.h>#include<stdlib.h>#define random(x) (rand()%x) int main(){int a[10],max;int x;for(x=0;x<10;x++)a[x]=random(100);max=a[0];for(x=0;x<10;x++){if(a[x]>max)max=a[x];printf("%4d",a[x]);}printf("\nmax=%d\n",max);return 0;}程序运行结果如下:41 67 34 0 69 24 78 58 62 64 max=786.输入10个整数,要求按照从小到大的顺序输出。
第一篇:c程序设计作业(5)1、分析下面程序:# include int main() { char c1,c2;c1=97;c2=98;printf("c1=%c,c2=%c\n"c1,c2);printf("c1=%d,c2=%d\n",c1,c2);return 0; } (1)运行时会输出什么信息?为什么?(2)如果将程序第4,5行改为c1=197; c2=198; 运行时会输出什么信息?为什么?(3)如果将程序第3行改为int c1,c2; 运行时会输出什么信息?为什么?答:(1)程序运行不了,因为程序存在错误。
正确的程序为:#include int main() {char c1,c2;c1=97;c2=98;printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",c1,c2);return 0; }(2)如果将程序第4,5行改为c1=197; c2=198;运行时会输出:(3)如果将程序第3行改为int c1,c2; 运行时会输出:因为int表示整型,%c是输出字符,a的ASCLL代码是97,b的是98,所以输出c1=a,c2=b.%d是表示输出十进制整型,所以输出c1=97,c2=982、用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。
问在键盘上如何输入?#include int main() {int a,b;float x,y;char c1,c2;scanf("a=%db=%d",&a,&b);scanf("%f%e",&a,&y);scanf("%c%c",&c1,&c2);return 0; } 答:输入如图:输出如图:第二篇:C程序设计课程作业(4分)C语言是解释性语言纠错得分:0知识点:C语言概述收起解析答案错误解析C语言程序设计/C语言概述(4分)C语言程序中,一个文件中的函数可以引用另一个文件中的函数和变量纠错知识点:文件收起解析答案正确解析C语言程序设计/文件(4分)下面是对s的初始化,其中不正确的是( ) A. char s[5]={'abc'} B. char s[5]={'a','b','c'} C. char s[5]=''D. char s[5]='abcde'纠错得分:0知识点:数组收起解析答案D解析C语言程序设计/数组/字符数组初始化(4分)函数ftell的作用是( ) A. 取得当前文件指针的位置,该位置为相对于文件开头的位移量表示B. 取得当前文件指针的位置,该位置为相对于文件末尾的位移量表示C. 出错时返回值为0D. 以上叙述都不正确纠错得分:0知识点:文件收起解析答案A解析C语言程序设计/文件/文件的定位(4分)表达式a A. &,纠错知识点:位运算收起解析答案D解析C语言程序设计/位运算/位运算符优先级(4分)若x,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是( ) A. scanf('%d%lx,%le',&x,&y,&z) B. scanf('%2d*%d%lf',&x,&y,&z) C. scanf('%x%*d%o',&x,&y)D. scanf('%x%o%6.2f',&x,&y,&z)纠错得分:0知识点:顺序程序设计收起解析答案D解析C语言程序设计/顺序程序设计/整型和实型数据的格式输入(4分)写出下面程序的输出结果( )main(){intx;x=-3+4*5-6;printf('%d',x);x=3+4%5-6;printf('%d',x);x=-3*4%6/5;printf('%d',x);x=(7+6)%5/2;printf('%d',x);}A. 11 1 0 1B. 11 -3 2 1C. 12 -3 2 1D. 11 1 2 1纠错得分:0知识点:顺序程序设计收起解析答案A解析C语言程序设计/顺序程序设计/整型变量的输出格式综合(4分)C语言中while和do while循环的主要区别是( ) A. do-while的循环至少无条件执行一次B. while循环控制条件比do-while的循环控制条件严格C. do-while允许从外部转入到循环体内D. do-while的循环体不能是复合语句纠错得分:0知识点:循环程序设计收起解析答案A解析C语言程序设计/循环程序设计/while语句与do-while语句(4分)C语言规定,函数返回值的类型是由( )所决定。
第五次上机作业:(请用指针实现)1.数据移位有n(n<=10)个整数,使前面各数顺序向后移m(m<=n)个位置,最后m 个数变成最前面的m个数,如图所示。
编写函数shift(a,n,m)实现上述功能,在主函数中输入n个整数和输出调整后的n个数。
SAMPLE OUTPUTnInput n(n<=10):10Input 10 integers:Output the original:Output the shifted:#include <>#define N 10void shift(int a[ ],int n,int m);void main( ){ int i,n,m;int a[N];printf("Input n(n<=10):");scanf("%d",&n);printf("Input %d integers:\n",n);for(i=0;i<n;i++)scanf("%d",a+i);printf("Output the original:\n");for(i=0;i<n;i++)printf("%d ",*(a+i));printf("\n");printf("Input m(m<=%d):",n);scanf("%d",&m);shift(a,n,m);printf("Output the shifted:\n");for(i=0;i<n;i++)printf("%d ",*(a+i));printf("\n");}void shift(int a[ ],int n,int m){ int i,j,t;for(i=0;i<m;i++){ t=a[n-1];for(j=n-2;j>=0;j--)a[j+1]=a[j];a[0]=t;}}2.字符串排序在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数sort()利用指针数组对其排序,在主函数中输出排好序的字符串。
第一次上机作业(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说:他乱说。
已知三个人说的是实话,一个人说的是谎话。
此刻要依照这些信息,找出做了好事的人。
2023年9月青少年软件编程C语言等级考试试卷五级(含答案)分数:100 题数:4一、编程题(共4题,共100分)第1题.红与黑有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。
你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。
请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
时间限制:1000内存限制:65536输入:包括多个数据集合。
每个数据集合的第一行是两个整数W和H,分别表示x方向和y方向瓷砖的数量。
W和H都不超过20。
在接下来的H行中,每行包括W个字符。
每个字符表示一块瓷砖的颜色,规则如下:(1)‘.’黑色的瓷砖;(2)‘#’白色的瓷砖;(3)‘@’黑色的瓷砖,并且你站在这块瓷砖上。
该字符在每个数据集合中唯一出现一次。
当在一行中读入的是两个零时,表示输入结束。
输出:对每个数据集合,分别输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。
样例输入:6 9....#......#..............................#@...#.#..#.0 0样例输出:45参考答案:#include <iostream>#define xa x+a[i]#define ya y+b[i]using namespace std;int graph[21][21];int w=0,h=0;int X1=0,Y1=0,cnt=0;const int a[]={-1,0,1,0},b[]={0,-1,0,1};void dfs(int x,int y){graph[x][y]=0;cnt++;for(int i=0;i<4;i++){if(graph[xa][ya]==1 && xa>0 && xa<=w && ya>0 && ya<=h)dfs(xa,ya);}}void get(){for(int i=1;i<=w;i++){for(int j=1;j<=h;j++){char a;cin>>a;if(a=='#') graph[i][j]=0;else if(a=='.') graph[i][j]=1;else if(a=='@'){X1=i,Y1=j;graph[i][j]=1;}}}dfs(X1,Y1);cout<<cnt<<endl;cnt=0;}int main(){while(1){cin>>h>>w;if(h==0 && w==0) break;get();}return 0;}第2题.装箱问题一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1,2*2,3*3,4*4,5*5,6*6。
1、从键盘上输入一个学生的成绩,用switch结构编程输出该同学成绩的档次。
(成绩>=90 为“优秀”,成绩>=80并且成绩<90 为“良好”,成绩>=70并且成绩<80 为“中等”,成绩>=60并且成绩<70 为“及格”,其余为“不及格”)2、编写一个程序,从键盘上输入10个数,求出这10个数中的最大数和最小数。
3、书上大奖赛题#include "stdio.h"main(){ float score;scanf("%f",&score);{ switch((int)(score/10.0)){ case 10:case 9: printf("优秀");break;case 8: printf("良好");break;case 7: printf("中等");break;case 6: printf("及格");break;case 5:case 4:case 3:case 2:case 1:case 0: printf("不及格");}printf("score=%5.2f \n",score);} }#include "stdio.h"main(){ int score,i,n,max,min;float sum,average;scanf("%d",&n);max=0, min=100,sum=0;for(i=1;i<=n;i++){ printf("\n输入评委打分(%d):",i);scanf("%d",&score);if(score>max) max=score;if(score<min) min=score;sum=sum+score;}average=(sum-max-min)/(n-2);printf("\n\n去掉一个最高分: %d",max); printf("\n去掉一个最低分: %d",min); printf("\n最后得分为: %.2f\n",average); }#include "stdio.h"main(){ int digit,i,n,max,min,sum;scanf("%d",&n);scanf("%d",&digit);sum=max=min=digit;for(i=1;i<=n-1;i++){ scanf("%d",&digit);if(digit>max) max=digit;if(digit<min) min=digit; }printf("%d %d",max,min); }。
28 组成最大数成绩: 10 / 折扣: 0.8任意输入一个自然数,输出该自然数的各位数字组成的最大数。
例如,输入 1593 ,则输出为 9531 。
输入: 自然数 n输出: 各位数字组成的最大数测试输入 期待的输出 时间限制 内存限制 额外进程测试用例 1以文本方式显示 1. 1593✪以文本方式显示 1. 9531✪1秒64M#include<stdio.h> #include<string.h> int main(){ char a[10000]; int x[10]={0}; scanf("%s",a); int n=strlen(a); for(int i=0;i<n;i++){x[a[i]-'0']++;} for(int i=9;i>=0;i--) for(int j=0;j<x[i];j++){printf("%d",i);} printf("\n"); }29 北理工的恶龙成绩: 10 / 折扣: 0.8背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。
要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。
而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。
校长想花 最少的学分数 杀死恶龙,于是找到你寻求帮助。
输入:第一行龙头数n , 勇士人数m (1<=n, m<=100 )接下来n 行,每行包含一个整数,表示龙头的直径接下来m 行,每行包含一个整数,表示勇士的身高l输出:如果勇士们能完成任务,输出校长需要花的最小费用;否则输出“ bit is doomed! ”测试输入期待的输出时间限制内存限制额外进程测试用例1 以文本方式显示1. 2 3✪2.5✪3.4✪4.7✪5.8✪6.4✪以文本方式显示1.11✪1秒64M 0测试用例2 以文本方式显示1. 2 1✪2.5✪3.5✪4.10✪以文本方式显示1.bit is doomed!✪1秒64M 0#include<stdio.h>int main(){int dragon,hero;scanf("%d%d",&dragon,&hero);int dragonhead[100]={0};int herohight[100]={0};//inputfor(int i=0;i<dragon;i++)scanf("%d",&dragonhead[i]);for(int i=0;i<hero;i++)scanf("%d",&herohight[i]); //make the date in orderint temp;for(int i=0;i<dragon;i++){for(int j=0;j<dragon-1;j++){if(dragonhead[j]>dragonhead[j+1]){temp=dragonhead[j];dragonhead[j]=dragonhead[j+1];dragonhead[j+1]=temp;}}}for(int i=0;i<hero;i++){for(int j=0;j<hero-1;j++){if(herohight[j]>herohight[j+1]){temp=herohight[j];herohight[j]=herohight[j+1];herohight[j+1]=temp;}}}//arrange hero to kill the dragonint start=0;for(int i=0;i<dragon;i++){for(int j=start;j<hero;j++){if(herohight[j]>=dragonhead[i]){dragonhead[i]=0;start++;break;}else{herohight[j]=0;start++;}}if (start>hero)break;}for(int i=start;i<hero;i++)herohight[i]=0;//caculate the gradeint sd=0;int sh=0;for(int i=0;i<dragon;i++)sd=sd+dragonhead[i];for(int i=0;i<hero;i++)sh=sh+herohight[i];if(sd==0)printf("%d\n",sh);elseprintf("bit is doomed!\n");}31 合并字符串成绩: 10 / 折扣: 0.8输入两个已经按从小到大顺序排列好的字符串,编写一个合并两个字符串的函数,使合并后的字符串,仍然是从小到大排列。
输入:两个已经排好顺序(升序)的两个字符串输出:一个合并在一起的有序(升序)的字符串要求:设计一个效率尽量高的算法,对每个字符串只扫描一遍就可以了。
如果采用先进行串连接,然后再进行排序的算法,则效率太低了。
测试输入期待的输出时间限制内存限制额外进程测试用例1 以文本方式显示1.abcdef✪2.bcefghi✪以文本方式显示1.abbccdeeffghi✪1秒64M 0#include<stdio.h>int main(){char a[50],b[50];gets(a);gets(b);char *p1;p1=&a[0];char *p2;p2=&b[0];for(;1;){if(*p1=='\0'){printf("%s",p2);break;}if(*p2=='\0'){printf("%s",p1);break;}if(*p1>*p2){printf("%c",*p2);p2++;}else{printf("%c",*p1);p1++;}}printf("\n");}32 串的减法成绩: 10 / 折扣: 0.8输入字符串s和t(串长不超过80个字符),将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。
例如:当s="112345",t="2467"时,u="1135"。
输入:第一行为串s第二行为串t输出:串u测试输入期待的输出时间限制内存限制额外进程测试用例1 以文本方式显示以文本方式显示1秒64M 0#include<stdio.h>#include<string.h>int main(){char a[80];char b[80];gets(a);gets(b);int l=strlen(a);for(int i=0;b[i]!='\0';i++){for(int j=0;j<l;j++)if(a[j]==b[i])a[j]='\0';}for(int k=0;k<l;k++)if(a[k]!='\0')printf("%c",a[k]);printf("\n");}H9:五年级小学生的题目(选做)成绩: 5 / 折扣: 0.8那两个小朋友在不断进步,他们已经学会了负数和多位数,于是他们又开始进行游戏了。
小明给出一堆整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数及最小数进行算术运算的结果。
输入:用逗号分隔的整数序列,及其运算符和等号输出:最大数op 最小数=结果说明:本题目应该可以不使用数组就可以完成,关键是如何处理负数和减法。
测试输入期待的输出时间限制内存限制额外进程测试用例1 以文本方式显示1.1,10,100,+,=✪以文本方式显示1.100 + 1 = 101✪1秒64M 0测试用例2 以文本方式显示1.-100,-1,1,100,+,=✪以文本方式显示1.100 + (-100) = 0✪1秒64M 0测试用例3 以文本方式显示1.-20,-10,0,10,20,*,=✪以文本方式显示1.20 * (-20) = -400✪1秒64M 0#include<stdio.h>#include<string.h>int intpow(int a,int b)//a^b{int result=1;for(int i=0;i<b;i++)result=result*a;return result;}struct date{int max;int min;char op;int r;};struct date function(char p[],int n) {struct date result;n=n-4;int max=-10000;int min=10000;int count=0;//need back to 0int x[10]={0};//need back to 0int temp=0;//need back to 0int sign=1;//need back to 1for(int i=0;i<=n;i++){if (p[i]==',')//meet , means end caculate the value and compare with max and min {for(int k=0;k<count;k++)temp=temp+x[k]*intpow(10,count-1-k);temp=temp*sign;if(temp>max) max=temp;if(temp<min) min=temp;count=0;temp=0;sign=1;continue;}if(p[i]=='-'){sign=-1;continue;}else{x[count]=p[i]-'0';count++;}}char opp;opp=p[n+1];if(opp=='+'){result.r=max+min;result.op='+';}else if(opp=='-'){result.r=max-min;result.op='-';}else if(opp=='*'){result.r=max*min;result.op='*';}else if(opp=='/'){if(min==0)result.r=0;else{result.r=max/min;}result.op='/';}else if(opp=='%'){result.r=max%min;result.op='%';}result.max=max;result.min=min;return result;}int main(){char w[100];gets(w);int l=strlen(w);struct date cc=function(w,l);if(cc.op=='/'&&cc.min==0)printf("Error!");else{if(cc.max<0)printf("(%d)",cc.max);elseprintf("%d",cc.max);printf(" %c ",cc.op);if(cc.min<0)printf("(%d)",cc.min);elseprintf("%d",cc.min);printf(" = ");printf("%d",cc.r);printf("\n");}}H10:扫雷(选做)成绩: 5 / 折扣: 0.8背景你玩儿过扫雷游戏吧?有个操作系统中带了这个小游戏,那个系统叫什么来着?在游戏中要想过关,就必须要在一个NxM 的区域上找出所有的地雷。