C语言习题课级期末考试题专讲课件_第1页
C语言习题课级期末考试题专讲课件_第2页
C语言习题课级期末考试题专讲课件_第3页
C语言习题课级期末考试题专讲课件_第4页
C语言习题课级期末考试题专讲课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/JudgeOnline/showcontest?contest_id=11612022/11/111/JudgeO1植树问题Description某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且m>n),请问每位同学平均可以植树几株?还有几株剩余?Input输入两个整数m和n,分别表示树苗的数量和学生的人数(m>n)Output输出每位同学平均植树的数量及剩余的树苗数量。SampleInput16332SampleOutput532022/11/1121植树问题Description2022/11/921植树问题:code#include<stdlib.h>main(){intm,n;

scanf("%d",&m);scanf("%d",&n);printf("%d%d",m/b,m%n);}m/b:求商m%n:求余数2022/11/1131植树问题:code#include<stdlib.h>m2工资问题Description某工厂规定一个工人正常工作时间为每个月160小时。若一个工人本月工作时间不超过160小时,则每小时工资为20元。若本月工作时间超出160小时,超出部分可算作加班时间,加班时间每小时30元。输入该工人当月的工作时间,请计算并输出该工人当月的工资。….Input输入一个正整数n,表示该工人当月工作n个小时。Output输出一个整数,单独占一行,表示该工人当月的工资。SampleInput170

SampleOutput35002022/11/1142工资问题Description2022/11/942工资问题code#include<stdlib.h>main(){ intn; scanf("%d",&n); if(n<=160) { printf("%d",20*n); }else{ printf("%d",160*20+(n-160)*30); }}2022/11/1152工资问题code#include<stdlib.h>203回文数Description“回文数”是一个正读和反读都一样的数,编程判断一个5位数n是否是一个回文数。Input输入一个整数n,10000<=n<=99999Output判断n是否是一个回文数,如果是,输出yes,否则输出noSampleInput15751SampleOutputyes2022/11/1163回文数Description2022/11/963回文数:code#include<stdlib.h>main(){ intn; scanf("%d",&n);

if((n/10000==n%10)&&((n/1000)%10==(n/10)%10)) printf("yes"); else printf("no");}2022/11/1173回文数:code#include<stdlib.h>204分数数列求和Description输入一个正整数,计算1-1/4+1/7-1/10+1/13……的前n项之和,输出时保留2位小数。Input输入正整数n,表示项数。Output输出前n项之和,保留2位小数。SampleInput3SampleOutput0.892022/11/1184分数数列求和Description2022/11/984分数数列求和:code#include<stdlib.h>#include<math.h>#include<stdio.h>main(){ inti,n; doublenumber=1.0; scanf("%d",&n); for(i=1;i<n;i++) {

number+=(pow(-1,i)/(1+3*i)); } printf("%.2f",number);}2022/11/1194分数数列求和:code#include<stdlib.h5画箭Description在冷兵器时代,弓箭是最可怕的致命武器。弓由弹性的弓臂和有韧性的弓弦构成;箭包括箭头、箭杆和箭羽。现在,我们想要用字符串表示箭,箭羽用‘+’表示,箭杆的长度用减号的个数表示,比如”+--->”,这是一个长度为3,向右射的箭。”<--+”,这是一个长度为2,向左射的箭。Input输入一个非零整数n,-100<=n<=100,正数表示向右射的箭,负数表述向左Output按描述输出箭的形状SampleInput-2SampleOutput<--+2022/11/11105画箭Description2022/11/9105画箭code inti,n; scanf("%d",&n);

if(n>0) { printf("+"); for(i=0;i<n;i++) { printf("-"); } printf(">"); }else{ printf("<"); for(i=0;i<-1*n;i++) { printf("-"); } printf("+"); }2022/11/11115画箭code inti,n; 2022/11/9116各位数字和Description从键盘任意输入一个整数n,编程计算n的每一位数字相加之和(忽略整数前的正负号)。例如,输入n为-1234,则有1+2+3+4=10,输出10。

要求定义并使用函数DigitSum()求n的各位数字和,其余功能在main()函数中实现。

intDigitSum(intn)

{

//函数返回n的各位数字之和

}Input输入一个int范围内的正整数n。Output输出一个整数,为n的各位数字之和。SampleInput2345111

SampleOutput172022/11/11126各位数字和Description2022/11/9126各位数字和:code#include<stdlib.h>#include<math.h>#include<stdio.h>main(){ intnumber=0,n; scanf("%d",&n);

n=abs(n); while(n>0) { number+=n%10; n=n/10; } printf("%d",number+n);}将此处代码提取出来,按题目要求封装成函数DigitSum2022/11/11136各位数字和:code#include<stdlib.h>7最勤奋的学生Description鉴于晚自习迟到早退现象比较严重,计算机学院出台一个鼓励政策,记下每位同学到达和离开自习室的时间,然后根据上晚自习的时间的长短评选出每个班当天最勤奋的学生,第二天张榜表扬。现有计科1班某天晚自习的签到记录,请选出计科1班该天最勤奋的学生。Input第一行输入n。表示一共有n个记录(n<=100)。接下来n行,每行三个数据,分别是姓名,到达时间和离开时间(姓名长度不超过20)。姓名不含空格,且不会有相同姓名出现。Output自习时间最长的姓名。SampleInput3Jim6:229:22Lucy8:009:45Kate6:459:30SampleOutputJim2022/11/11147最勤奋的学生Description2022/11/9147最勤奋的学生:code#defineN100typedefstructstu{ charname[20]; intstartH; intstartM; intendH; intendM; intpriority;}STU;

2022/11/11157最勤奋的学生:code#defineN1002022/7最勤奋的学生:codeinti,n,temp=0,stunumber=0; //temp临时变量,记录学生自习的最长时间(分钟为单位)stunumber记录最长自习时间的学生编号STUs[N];scanf("%d",&n);for(i=0;i<n;i++){ scanf("%s%d:%d%d:%d",&s[i].name,&s[i].startH,&s[i].startM,&s[i].endH,&s[i].endM);

s[i].priority=s[i].endH*60+s[i].endM-s[i].startH*60-s[i].startM;}for(i=0;i<n;i++){ if(temp<s[i].priority){ temp=s[i].priority; stunumber=i; }}printf("%s",s[stunumber].name);2022/11/11167最勤奋的学生:codeinti,n,temp=0,stu8多种进制数的排序Description有n个数字串,这n个数字串的进制可能不同,每个数字串的进制由数字k指定,k>=2且k<=10,如,k=2,则数字串1101表示一个二进制数,转化为10进制数为13将这n个数转化为十进制,然后按从小到大的顺序输出。Input首先输入整数n(1<=n<=10),然后是n行,每行包含一个整数k和一个数字串,用空格隔开,该数字串表示一个k进制数。所有输入均为非负数。输入的所有整数均在int范围内。Output按从小到大的顺序输出这n个数对应的十进制数。2022/11/11178多种进制数的排序Description2022/11/9多种进制数的排序SampleInput421101322121827610134SampleOutpu/p>

Hint提示:将这四个数转化为10进制数分别是故排序后为:131341902322022/11/1118多种进制数的排序SampleInput2022/11/98多种进制数的排序:code#include<stdlib.h>#include<stdio.h>typedefstructsystem{//进制 intbasenumber;//基数

intdigit;//数字}SYS;intchange(intbnumber,intdigit);intpowint(intbnumber,intdigit);voidbubble(inta[],intn);2022/11/11198多种进制数的排序:code#include<stdlib8多种进制数的排序:codeintmain(){ inti,n,a[10]; SYSs[10]; scanf("%d",&n); for(i=0;i<n;i++) {

scanf("%d%d",&s[i].basenumber,&s[i].digit);

a[i]=change(s[i].basenumber,s[i].digit); }

bubble(a,n);}2022/11/11208多种进制数的排序:codeintmain()2022/18多种进制数的排序:codeintchange(intbnumber,intdigit)//转换函数{ intdec=0; inti=0; while(digit>0){

dec+=(digit%10)*powint(bnumber,i); digit/=10; i++; } returndec;}Math中自带的pow()函数,返回值为double型2022/11/11218多种进制数的排序:codeintchange(intb8多种进制数的排序:codeintpowint(intbnumber,intn){ intj,temp=1; for(j=0;j<n;j++) {

temp*=bnumber; } returntemp;}2022/11/11228多种进制数的排序:codeintpowint(intbvoidbubble(inta[],intn){ inti,j,temp=0; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){

temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }}}

for(i=0;i<n-1;i++){printf("%d",a[i]);} printf("%d",a[n-1]);}8多种进制数的排序:code分两次打印输出。最后一个数后面没有空格2022/11/1123voidbubble(inta[],intn)8多种进8多种进制数的排序:code2022/11/11248多种进制数的排序:code2022/11/924补充:矩阵边界和(指针专题)题目描述给定一个m行n列的二维矩阵,求其四周边元素和。1<=m、n<=100000,可能是1行100000列,也可能是10000行50列,但保证矩阵元素不多于500000。你可能不能预定义数组的大小了,你要学会使用动态内存分配哦。你可以动态申请m*n个内存单元,然后用一维数组来存储二维数组,二维数组元素a[i][j]对应一维数组a[i*n+j],i、j均从0开始。输入输入第一行是m和n,然后是一个m行n列的矩阵。输出输出一个整数,表示矩阵所有边界元素的和。样例输入34123456789546样例输出

472022/11/1125补充:矩阵边界和(指针专题)题目描述2022/11/925code#include<stdio.h>#include<stdlib.h>main(){ intm,n; inti,j; int*p=NULL; intsum=0; scanf("%d%d",&m,&n);

p=(int*)calloc(m*n,sizeof(int)); for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf("%d",&p[i*n+j]); } }

2022/11/1126for(i=0;i<m;i++){

for(j=0;j<n;j++){

if(i==0||j==0||i==m-1||j==n-1) sum+=p[i*n+j]; }} printf("%d",sum);}free(p);code#include<stdio.h>2022/11/1174:矩阵转置(指针专题)题目描述给定一个m行n列的二维矩阵,输出其转置矩阵。1<=m、n<=100000,可能是1行100000列,也可能是10000行50列。你可能不能预定义数组的大小了,你要学会使用动态内存分配哦。输入输入第一行是m和n,然后是一个m行n列的矩阵。输出输出转置后的矩阵2022/11/1127样例输入34123456789546样例输出1592653744861174:矩阵转置(指针专题)题目描述2022/11/92code

for(j=0;j<n;j++)//列 {

for(i=0;i<m;i++)//行 { printf("%d",p[i*n+j]); } printf("\n"); }2022/11/1128每列最后一个也有一个空格,想想怎么解决?if(i==m-1)printf(“%d”,p[i*n+j];elseprintf("%d",p[i*n+j]);code for(j=0;j<n;j++)//列2022/1/JudgeOnline/showcontest?contest_id=11612022/11/1129/JudgeO1植树问题Description某学校植树节开展植树活动,已知树苗有m株,参加植树的同学有n人(且m>n),请问每位同学平均可以植树几株?还有几株剩余?Input输入两个整数m和n,分别表示树苗的数量和学生的人数(m>n)Output输出每位同学平均植树的数量及剩余的树苗数量。SampleInput16332SampleOutput532022/11/11301植树问题Description2022/11/921植树问题:code#include<stdlib.h>main(){intm,n;

scanf("%d",&m);scanf("%d",&n);printf("%d%d",m/b,m%n);}m/b:求商m%n:求余数2022/11/11311植树问题:code#include<stdlib.h>m2工资问题Description某工厂规定一个工人正常工作时间为每个月160小时。若一个工人本月工作时间不超过160小时,则每小时工资为20元。若本月工作时间超出160小时,超出部分可算作加班时间,加班时间每小时30元。输入该工人当月的工作时间,请计算并输出该工人当月的工资。….Input输入一个正整数n,表示该工人当月工作n个小时。Output输出一个整数,单独占一行,表示该工人当月的工资。SampleInput170

SampleOutput35002022/11/11322工资问题Description2022/11/942工资问题code#include<stdlib.h>main(){ intn; scanf("%d",&n); if(n<=160) { printf("%d",20*n); }else{ printf("%d",160*20+(n-160)*30); }}2022/11/11332工资问题code#include<stdlib.h>203回文数Description“回文数”是一个正读和反读都一样的数,编程判断一个5位数n是否是一个回文数。Input输入一个整数n,10000<=n<=99999Output判断n是否是一个回文数,如果是,输出yes,否则输出noSampleInput15751SampleOutputyes2022/11/11343回文数Description2022/11/963回文数:code#include<stdlib.h>main(){ intn; scanf("%d",&n);

if((n/10000==n%10)&&((n/1000)%10==(n/10)%10)) printf("yes"); else printf("no");}2022/11/11353回文数:code#include<stdlib.h>204分数数列求和Description输入一个正整数,计算1-1/4+1/7-1/10+1/13……的前n项之和,输出时保留2位小数。Input输入正整数n,表示项数。Output输出前n项之和,保留2位小数。SampleInput3SampleOutput0.892022/11/11364分数数列求和Description2022/11/984分数数列求和:code#include<stdlib.h>#include<math.h>#include<stdio.h>main(){ inti,n; doublenumber=1.0; scanf("%d",&n); for(i=1;i<n;i++) {

number+=(pow(-1,i)/(1+3*i)); } printf("%.2f",number);}2022/11/11374分数数列求和:code#include<stdlib.h5画箭Description在冷兵器时代,弓箭是最可怕的致命武器。弓由弹性的弓臂和有韧性的弓弦构成;箭包括箭头、箭杆和箭羽。现在,我们想要用字符串表示箭,箭羽用‘+’表示,箭杆的长度用减号的个数表示,比如”+--->”,这是一个长度为3,向右射的箭。”<--+”,这是一个长度为2,向左射的箭。Input输入一个非零整数n,-100<=n<=100,正数表示向右射的箭,负数表述向左Output按描述输出箭的形状SampleInput-2SampleOutput<--+2022/11/11385画箭Description2022/11/9105画箭code inti,n; scanf("%d",&n);

if(n>0) { printf("+"); for(i=0;i<n;i++) { printf("-"); } printf(">"); }else{ printf("<"); for(i=0;i<-1*n;i++) { printf("-"); } printf("+"); }2022/11/11395画箭code inti,n; 2022/11/9116各位数字和Description从键盘任意输入一个整数n,编程计算n的每一位数字相加之和(忽略整数前的正负号)。例如,输入n为-1234,则有1+2+3+4=10,输出10。

要求定义并使用函数DigitSum()求n的各位数字和,其余功能在main()函数中实现。

intDigitSum(intn)

{

//函数返回n的各位数字之和

}Input输入一个int范围内的正整数n。Output输出一个整数,为n的各位数字之和。SampleInput2345111

SampleOutput172022/11/11406各位数字和Description2022/11/9126各位数字和:code#include<stdlib.h>#include<math.h>#include<stdio.h>main(){ intnumber=0,n; scanf("%d",&n);

n=abs(n); while(n>0) { number+=n%10; n=n/10; } printf("%d",number+n);}将此处代码提取出来,按题目要求封装成函数DigitSum2022/11/11416各位数字和:code#include<stdlib.h>7最勤奋的学生Description鉴于晚自习迟到早退现象比较严重,计算机学院出台一个鼓励政策,记下每位同学到达和离开自习室的时间,然后根据上晚自习的时间的长短评选出每个班当天最勤奋的学生,第二天张榜表扬。现有计科1班某天晚自习的签到记录,请选出计科1班该天最勤奋的学生。Input第一行输入n。表示一共有n个记录(n<=100)。接下来n行,每行三个数据,分别是姓名,到达时间和离开时间(姓名长度不超过20)。姓名不含空格,且不会有相同姓名出现。Output自习时间最长的姓名。SampleInput3Jim6:229:22Lucy8:009:45Kate6:459:30SampleOutputJim2022/11/11427最勤奋的学生Description2022/11/9147最勤奋的学生:code#defineN100typedefstructstu{ charname[20]; intstartH; intstartM; intendH; intendM; intpriority;}STU;

2022/11/11437最勤奋的学生:code#defineN1002022/7最勤奋的学生:codeinti,n,temp=0,stunumber=0; //temp临时变量,记录学生自习的最长时间(分钟为单位)stunumber记录最长自习时间的学生编号STUs[N];scanf("%d",&n);for(i=0;i<n;i++){ scanf("%s%d:%d%d:%d",&s[i].name,&s[i].startH,&s[i].startM,&s[i].endH,&s[i].endM);

s[i].priority=s[i].endH*60+s[i].endM-s[i].startH*60-s[i].startM;}for(i=0;i<n;i++){ if(temp<s[i].priority){ temp=s[i].priority; stunumber=i; }}printf("%s",s[stunumber].name);2022/11/11447最勤奋的学生:codeinti,n,temp=0,stu8多种进制数的排序Description有n个数字串,这n个数字串的进制可能不同,每个数字串的进制由数字k指定,k>=2且k<=10,如,k=2,则数字串1101表示一个二进制数,转化为10进制数为13将这n个数转化为十进制,然后按从小到大的顺序输出。Input首先输入整数n(1<=n<=10),然后是n行,每行包含一个整数k和一个数字串,用空格隔开,该数字串表示一个k进制数。所有输入均为非负数。输入的所有整数均在int范围内。Output按从小到大的顺序输出这n个数对应的十进制数。2022/11/11458多种进制数的排序Description2022/11/9多种进制数的排序SampleInput421101322121827610134SampleOutpu/p>

Hint提示:将这四个数转化为10进制数分别是故排序后为:131341902322022/11/1146多种进制数的排序SampleInput2022/11/98多种进制数的排序:code#include<stdlib.h>#include<stdio.h>typedefstructsystem{//进制 intbasenumber;//基数

intdigit;//数字}SYS;intchange(intbnumber,intdigit);intpowint(intbnumber,intdigit);voidbubble(inta[],intn);2022/11/11478多种进制数的排序:code#include<stdlib8多种进制数的排序:codeintmain(){ inti,n,a[10]; SYSs[10]; scanf("%d",&n); for(i=0;i<n;i++) {

scanf("%d%d",&s[i].basenumber,&s[i].digit);

a[i]=change(s[i].basenumber,s[i].digit); }

bubble(a,n);}2022/11/11488多种进制数的排序:codeintmain()2022/18多种进制数的排序:codeintchange(intbnumber,intdigit)//转换函数{ intdec=0; inti=0; while(digit>0){

dec+=(digit%10)*powint(bnumber,i); digit/=10; i++; } returndec;}Math中自带的pow()函数,返回值为double型2022/11/11498多种进制数的排序:codeintchange(intb8多种进制数的排序:codeintpowint(intbnumber,intn){ intj,temp=1; for(j=0;j<n;j++) {

temp*=bnumber; } returntemp;}2022/11/11508多种进制数的排序:codeintpowint(intbvoidbubble(inta[],intn){ inti,j,temp=0; for(i=0;i<n-1;i++){ for(j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){

temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; }}}

for(i=0;i<n-1;i++){printf("%d",a[i]);} printf("%d",a[n-1]);}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论