版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【MOOC】《C语言程序设计(上)》(北京理工大学)中国大学慕课答案第二周:数据计算实现与顺序结构程序设计(一)第二周作业1.单选题:下列可以正确表示字符型常数的是____
选项:
A、'\t’
B、"a"
C、"\n"
D、297
答案:【'\t’】2.单选题:已知intx=5,y=5,z=5;执行语句x%=y+z;后,x的值是____
选项:
A、5
B、0
C、1
D、6
答案:【5】3.单选题:已知inti=5;执行语句i+=++i;i的值是____
选项:
A、12
B、10
C、11
D、其他答案都不对
答案:【12】4.单选题:已知:chara;intb;floatc;doubled;执行语句c=a+b+c+d;后,变量c的数据类型是____
选项:
A、float
B、int
C、char
D、double
答案:【float】5.单选题:已知”inta=5,b=5,c;”,则执行表达式”c=a=a>b”后变量a的值为____
选项:
A、0
B、1
C、4
D、5
答案:【0】6.单选题:已知:intx,y;doublez;则以下语句中错误的函数调用是____
选项:
A、scanf("%x%o%6.2f",&x,&y,&z)
B、scanf("%d,%lx,%le",&x,&y,&z)
C、scanf("%2d%d%lf",&x,&y,&z)
D、scanf("%x%*d%o",&x,&y)
答案:【scanf("%x%o%6.2f",&x,&y,&z)】7.单选题:已知inti=10;表达式“20-0<=i<=9”的值是____
选项:
A、1
B、0
C、19
D、20
答案:【1】8.单选题:温度华氏和摄氏的关系是:C=5(F-32)/9。已知:floatC,F;由华氏求摄氏的正确的赋值表达式是____
选项:
A、C=5*(F-32)/9
B、C=5/9(F-32)
C、C=5/9*(F-32)
D、三个表达式都正确
答案:【C=5*(F-32)/9】9.单选题:把算术表达式表示为一个C语言表达式,正确的写法是____
选项:
A、–(31.6*a*8+1.0/7)*12
B、–(31.6a*8+1/7)*12
C、–(31.6a*8.0+1.0/7.0)*12
D、–31.6*a*8+1.0/7*12
答案:【–(31.6*a*8+1.0/7)*12】10.单选题:字符串"\\\065a,\n"的长度是____
选项:
A、5
B、8
C、7
D、6
答案:【5】第三周:数据计算实现与顺序结构程序设计(二)第三周编程作业1.判断三角形的形状。题目内容:输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。输入格式:三角型的3条边的长度(int型)。输出格式:等边三角形:equilateraltriangle等腰三角形:isocelestriangle不构成三角形:non-triangle一般三角形:triangle输入样例:222输出样例:equilateraltriangle.
答案:【下面是一个C语言程序,用于判断输入的三条边是否能构成三角形,并判断其形状:
#include<stdio.h→
intmain(){
inta,b,c;
//输入三条边的长度
printf("请输入三角形的三条边的长度(整数):");
scanf("%d%d%d",&a,&b,&c);
//判断是否能构成三角形
if(a+b<=c||a+c<=b||b+c<=a){
printf("non-triangle.\n");
}else{
//判断三角形的形状
if(a==b&&b==c){
printf("equilateraltriangle.\n");
}elseif(a==b||b==c||a==c){
printf("isocelestriangle.\n");
}else{
printf("triangle.\n");
}
}
return0;
}】2.一年级的算术题。题目内容:小明上小学一年级了,老师已经教会了他们进行整数的+、-、*、/、%计算,下面老师开始出题,给出一个简单的算术表达式,请小明给出计算结果。输入格式:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123444输出格式:分别输出按照整型数据进行+、-、*、/、*之后的运行结果。输入样例:103输出样例:10+3=1310-3=710*3=3010/3=310%3=1
答案:【#include<stdio.h→
intmain(){
inta,b;
//输入两个整数
printf("请输入两个整数,用空格分隔:");
scanf("%d%d",&a,&b);
//计算并输出结果
printf("%d+%d=%d\n",a,b,a+b);
printf("%d-%d=%d\n",a,b,a-b);
printf("%d*%d=%d\n",a,b,a*b);
printf("%d/%d=%d\n",a,b,a/b);
printf("%d%%%d=%d\n",a,b,a%b);
return0;
}】3.输出字符的ASCII码。题目内容:我们在计算机基础中已经学过:字母在计算机中采用ASCII码进行存储。下面要从键盘上输入任意一个字符,然后输出该字符对应的ASCII码。输入格式:一个字符输出格式:该字符对应的ASCII码输入样例:A输出样例:TheASCIIofcharacter'A'is65.
答案:【#include<stdio.h→
intmain(){
charch;
//输入一个字符
printf("请输入一个字符:");
scanf("%c",&ch);
//输出该字符对应的ASCII码
printf("TheASCIIofcharacter'%c'is%d.\n",ch,(int)ch);
return0;
}】4.学学scanf和printf的用法吧。题目内容:该如何处理double型的数据:如何定义变量类型?如何使用scanf函数?如果已知圆柱的底面半径r,以及高h,则可计算出圆柱的侧面积,体积。其中。输入格式:第一行输入圆柱的底面半径r第二行输入圆柱的高h输出格式:s=<圆柱的侧面积>,v=<圆柱的体积>要求1.所有变量都定义为双精度类型2.结果精确到小数点后两位。作为练习题目:我们已经给您编写好了大部分的代码,请您自己修改几个地方,完成程序的剩余部分。**********************************************分隔线************#include#definePAI3.1415926intmain(){intr,h;doubles,v;scanf("%d%d",);s=2*PAI*r*h;v=PAI*r*r*h;printf("s=%.2f,v=\n",s,);return0;}输入样例:28输出样例:s=100.53,v=100.53
答案:【#include<stdio.h>
#definePI3.1415926
intmain(){
doubler,h;//将r和h定义为double类型
doubles,v;//s和v已经是double类型
//使用scanf读取两个double类型的值
scanf("%lf",&r);
scanf("%lf",&h);
//计算圆柱的侧面积和体积
s=2*PI*r*h;
v=PI*r*r*h;
//输出结果,精确到小数点后两位
printf("s=%.2f,v=%.2f\n",s,v);
return0;
}】5.让我们学习用C语言向世界问好。“HelloWorld”示例程序最早出现于1972年,由贝尔实验室成员BrianKernighan撰写的内部技术文件《IntroductiontotheLanguageB》之中。不久同作者于1974年所撰写的《ProgramminginC:ATutorial》,也延用这个示例。一般来说,这是每一种计算机编程语言中最基本、最简单的程序,亦通常是初学者所编写的第一个程序。它还可以用来确定该语言的编译器、程序开发环境,以及运行环境是否已经安装妥当。将“HelloWorld”作为第一个示范程序,已经成为编程语言学习的传统。我们在这里继续传统,这也是一种向前辈们致敬的方式之一吧!最早的程序基本是这个样子的:#includeintmain(){printf("Helloworld.\n");return0;}请模仿上面的程序,看看是否可以通过编译?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。
答案:【#include<stdio.h>
intmaxSubArray(int*nums,intnumsSize){
intmaxEndingHere=nums[0];
intmaxSoFar=nums[0];
for(inti=1;i<numsSize;i++){
maxEndingHere=(maxEndingHere+nums[i]>nums[i])?maxEndingHere+nums[i]:nums[i];
maxSoFar=(maxSoFar>maxEndingHere)?maxSoFar:maxEndingHere;
}
returnmaxSoFar;
}
intmain(){
intT,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
intnums[N];
for(inti=0;i<N;i++){
scanf("%d",&nums[i]);
}
intresult=maxSubArray(nums,N);
printf("%d\n",result);
}
return0;
}】第四周:选择结构的程序设计第四周作业1.单选题:以下程序的输出结果是main(){floatx=2,y;if(x<0)y=0;elseif(x<5&&!x)y=1/(x+2);elseif(x<10)y=1/x;elsey=10;printf(”%f\n”,y);}
选项:
A、0.500000
B、0.000000
C、0.250000
D、10.000000
答案:【0.500000】2.单选题:下面程序的输出是#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}
选项:
A、a=2,b=1
B、a=1,b=1
C、a=1,b=0
D、a=2,b=2
答案:【a=2,b=1】3.下列程序段当a的值为014和0x14时的执行结果分别是if(a=0xA|a>12)if(011&10==a)printf(”%d!\n”,a);elseprintf(”Right!%d\n”,a);elseprintf(”Wrong!%d\n”,a);
答案:【10!Right!11】4.若下列程序执行后t的值为4,则执行时输入a,b的值范围是#include”stdio.h”main(){inta,b,s=1,t=1;scanf(”%d,%d”,&a,&b);if(a>0)s+=1;if(a>b)t+=s;elseif(a==b)t=5;elset=2*s;printf(”s=%d,t=%d\n”,s,t);}
答案:【0】第四周编程作业1.确定母亲节。题目内容:母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。输入格式:年份输出格式:日期(5月的哪一天)输入样例:2014输出样例:11
答案:【#include<stdio.h>
//Zeller公式计算给定日期是星期几
intdayOfWeek(intyear,intmonth,intday){
if(month<3){
month+=12;
year-=1;
}
intt=year+year/4-year/100+year/400;
intd=(1+(13*(month+1))/5+t+day)%7;
returnd;//返回值为0表示星期六,1表示星期日,依此类推
}
intmain(){
intyear;
printf("请输入年份:");
scanf("%d",&year);
//五月第一个星期天是哪一天
intfirstSunday=1;
while(dayOfWeek(year,5,firstSunday)!=1){
firstSunday++;
}
//五月第二个星期天是哪一天
intsecondSunday=firstSunday+7;
printf("%d\n",secondSunday);
return0;
}】2.计算时钟的夹角。题目内容:钟面上的时针和分针之间的夹角总是在0~180之间(包括0和180)。举例来说,在十二点的时候两针之间的夹角为0,而在六点的时候夹角为180,在三点的时候为90。本题要解决的是计算12:00到11:59之间任意一个时间的夹角。输入格式:每组测试数据包含两个数字:第一个数字代表小时(大于0小于等于12),第二个数字代表分(在区间[0,59]上)。输出格式:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。再看一看,想一想:是否可以不用if语句,只使用printf函数来简化你的程序?输入样例:120输出样例:At12:00theangleis0.0degrees.
答案:【#include<stdio.h>
intmain(){
inthour,minute;
printf("请输入时间(小时分钟):");
scanf("%d%d",&hour,&minute);
//计算时针和分针的角度
doublehour_angle=(hour%12)*30.0+minute*0.5;
doubleminute_angle=minute*6.0;
//计算两针之间的夹角
doubleangle=fabs(hour_angle-minute_angle);
//取最小夹角
if(angle>180.0){
angle=360.0-angle;
}
//输出结果
printf("At%d:%02dtheangleis%.1fdegrees.\n",hour,minute,angle);
return0;
}】3.求最后3位数值。题目内容:小明在中学会求一个数的n次方了,但计算机还不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出a的n次方的最后3位数就可以了。输入格式:a和n的值。假设a<=150。输出格式:求a的n次方的最后3位数。提示:再想一想,你的方法对吗?你用的是什么数据类型?输入样例:100输出样例:Thelast3numbersis1.
答案:【#include<stdio.h>
intpowerMod(inta,intn,intmod){
intresult=1;
while(n>0){
if(n%2==1){
result=(result*a)%mod;
}
a=(a*a)%mod;
n=n/2;
}
returnresult;
}
intmain(){
inta,n;
printf("请输入a和n的值:");
scanf("%d%d",&a,&n);
//计算a的n次方的最后三位数
intlastThreeDigits=powerMod(a,n,1000);
//输出结果
printf("Thelast3numbersis%d.\n",lastThreeDigits);
return0;
}】4.计算星期。题目内容:给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。输入格式:年月日输出格式:0~6。星期日用0表示,星期一用1表示,星期二用2表示......星期六用6表示。假设年份大于1900。先想一想:我们现在只会使用if语句,该如何建立数学模型?输入样例:2013311输出样例:1输入样例:20131315输出样例:monthiserror.输入样例:2013332输出样例:dayiserror.
答案:【#include<stdio.h>
//判断是否是闰年
intisLeapYear(intyear){
return(year%4==0&&year%100!=0)||(year%400==0);
}
//判断日期是否合法
intisValidDate(intyear,intmonth,intday){
if(month<1||month>12){
return0;
}
if(day<1){
return0;
}
intdaysInMonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(isLeapYear(year)){
daysInMonth[1]=29;
}
if(day>daysInMonth[month-1]){
return0;
}
return1;
}
//Zeller公式计算星期几
intdayOfWeek(intyear,intmonth,intday){
if(month<3){
month+=12;
year-=1;
}
intt=year+year/4-year/100+year/400;
intd=(1+(13*(month+1))/5+t+day)%7;
returnd;
}
intmain(){
intyear,month,day;
printf("请输入年月日(年月日):");
scanf("%d%d%d",&year,&month,&day);
if(!isValidDate(year,month,day)){
if(month<1||month>12){
printf("monthiserror.\n");
}else{
printf("dayiserror.\n");
}
return0;
}
intweek=dayOfWeek(year,month,day);
printf("%d\n",week);
return0;
}】第五周:循环结构的程序设计(一)第五周编程作业1.求最小m值。题目内容:求满足下列不等式的最小m。1+2+3+4+......+m≥n例如:n=100,当m=14时,满足:1+2+3+4+...+13=91<100,而1+2+3+4+......+14=105>100。输入格式:n输出格式:m输入样例:100输出样例:14
答案:【#include<stdio.h>
intmain(){
intn,m;
intsum=0;
//从用户那里获取输入值n
printf("请输入n的值:");
scanf("%d",&n);
//从1开始累加,直到累加和大于等于n
for(m=1;sum>n;m++){
sum+=m;
}
//输出满足条件的最小m值
printf("满足条件的最小m值为:%d\n",m-1);
return0;
}】2.寻找特殊偶数。题目内容:有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。输入格式:所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。输出格式:列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。输入样例:300030206040609000输出样例:3012301430163018counter=46042604860526054605860726074607860826084counter=10输入样例:910187-100输出样例:ErrorError
答案:【#include<stdio.h>
#include
//函数用于检查一个数是否是特殊偶数
boolisSpecialEven(intnum){
intdigits[4];
inttemp=num;
intcount=0;
//提取每一位数字
while(temp>0){
digits[count++]=temp%10;
temp/=10;
}
//检查是否为偶数
if(digits[3]%2!=0){
returnfalse;
}
//检查每一位数字是否两两不相同
for(inti=0;i<4;i++){
for(intj=i+1;j<4;j++){
if(digits[i]==digits[j]){
returnfalse;
}
}
}
returntrue;
}
intmain(){
intmin,max;
intcount=0;
while(scanf("%d%d",&min,&max)==2){
if(min==0&&max==0){
break;
}
if(min<1000||max>9999||min>max){
printf("Error\n");
continue;
}
count=0;
for(inti=min;i<=max;i++){
if(isSpecialEven(i)){
printf("%d",i);
count++;
}
}
printf("counter=%d\n",count);
}
return0;
}】3.锻炼身体吧。题目内容:沫沫,灰灰和渣渣去锻炼身体,如果对他们跑步的距离分别只计整数a、b、c,由于他们身高的差距,造成了a<=b<=c,并且渣渣跑了N米之后就再也跑不动了。但是,按照他们事先的约定:只有当c*c==a*a+b*b时,他们的锻炼才有效果。现在他们三个人想知道,如果渣渣的极限N已知,那么有多少种有锻炼效果的跑步方案(即a,b,c有多少种可能的取值)。输入格式:一个整数N,表示渣渣的体力极限,N<=5000。输出格式:一个整数,代表他们跑步方案的个数。Hint:对于输入N=5,有方案a=3,b=4,c=5,共一种。输入样例:5输出样例:1
答案:【#include<stdio.h>
intmain(){
intN;
intcount=0;
//从用户那里获取输入值N
printf("请输入N的值:");
scanf("%d",&N);
//遍历所有可能的c值
for(intc=1;c<=N;c++){
//遍历所有可能的b值
for(intb=1;b<=c;b++){
//计算a的值
inta_squared=c*c-b*b;
inta=(int)sqrt(a_squared);
//检查a是否为整数且a<=b
if(a*a==a_squared&&a<=b){
count++;
}
}
}
//输出满足条件的跑步方案个数
printf("满足条件的跑步方案个数为:%d\n",count);
return0;
}】第六周:循环结构的程序设计(二)第六周作业1.单选题:假定从键盘上输入“3.6,2.4<回车>”,下面程序的输出是____#includemain(){floatx,y,z;scanf(”%f,%f”,&x,&y);z=x/y;while(1){if(fabs(z)>1.0){x=y;y=z;z=x/y;}elsebreak;}printf(”%f\n”,y);}注:fabs()是浮点数绝对值函数。
选项:
A、1.600000
B、1.500000
C、2.000000
D、2.400000
答案:【1.600000】2.单选题:下面程序的输出结果是____main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<-3;j++){if(j%2)continue;x++;}x++;}printf(”x=%d\n”,x);}
选项:
A、x=4
B、x=8
C、x=6
D、x=12
答案:【x=4】3.单选题:已知inti=1;执行语句while(i++<4);后,变量i的值为
选项:
A、5
B、3
C、4
D、6
答案:【5】4.单选题:下面的for语句for(x=0,y=10;(y>0)&&(x<4);x++,y--)
选项:
A、循环执行4次
B、是无限循环
C、循环次数不定
D、循环执行3次
答案:【循环执行4次】5.单选题:求取满足式的n,正确的语句是____
选项:
A、for(i=1,s=0;(s=s+i*i)<=1000;n=i++)
B、for(i=1,s=0;(s=s+i*i)<=1000;n=++i)
C、for(i=1,s=0;(s=s+i*++i)<=1000;n=i)
D、for(i=1,s=0;(s=s+i*i++)<=1000;n=i)
答案:【for(i=1,s=0;(s=s+i*i)<=1000;n=i++)】第六周编程作业1.火锅火锅和火锅。题目内容:众所周知,沫沫以火锅为生。在E8的聚餐活动中,他经常卖萌卖无辜领着大家吃火锅。。有一天,沫沫听说学校附近的哺呷哺呷在某现充的赞助下有一个优惠活动,只需30软妹币,对每个客人,它会上N道菜,但是客人只能挑选其中连续上的一些菜。于是他非常兴奋的拉着灰灰和渣渣去吃火锅去啦。沫沫是一个十分挑食的人,所以他对每一道菜都有一个愉快度(当然因为他的挑食,某些事物的愉快度会是负数)。为了让沫沫能非常愉快的享受这次聚餐,善解人意的灰灰和渣渣决定帮他计算,他们应该怎么选择菜才能使沫沫最开心地吃完这次聚餐。输入格式:第一行是一个整数T,(T<=10)表示测试案例的个数对于每个测试案例,第一行是一个整数N,(1<=N<=10000)表示菜的个数接下来的N个数字,第i个数字si表示沫沫对第i道菜的愉快度。(-1000<=si<=1000)PS:由于CF又被血虐掉rating,所以沫沫的起始愉快度是0PPS:沫沫完全可能得到一个为负值的愉快值,poor沫沫。。输出格式:对于每个样例,输出一个数字,表示沫沫吃完之后愉快度的最大值。HINT:对于56-154-7我们选择6,-1,5,4这四道菜(注意必须是连续的,所以不能跳过-1)做完后请思考,如果N的范围是1<=N<=100000呢?输入样例:256-154-7706-11-67-5输出样例:147
答案:【#include<stdio.h>
//Kadane算法计算最大子数组和
intmaxSubArray(int*nums,intnumsSize){
intmaxEndingHere=nums[0];
intmaxSoFar=nums[0];
for(inti=1;i<numsSize;i++){
maxEndingHere=(maxEndingHere+nums[i]>nums[i])?maxEndingHere+nums[i]:nums[i];
maxSoFar=(maxSoFar>maxEndingHere)?maxSoFar:maxEndingHere;
}
returnmaxSoFar;
}
intmain(){
intT,N;
scanf("%d",&T);
while(T--){
scanf("%d",&N);
intnums[N];
for(inti=0;i<N;i++){
scanf("%d",&nums[i]);
}
intresult=maxSubArray(nums,N);
printf("%d\n",result);
}
return0;
}】2.邮票组合。题目内容:我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可相同,可不同。输入格式:四种邮票的面值。输出格式:用这四种面值组成的邮资最大的从1开始的一个连续的区间。说明:如结果为10,则表明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。名词解释:邮资:就是你寄东西需要花多少钱。邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有面值为80分、50分、20分和10分的四种,你就可以采用不同的组合得到240的邮资,例如:采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组合都可以得到同样一种邮资。输入样例:141221输出样例:Themaxis71.
答案:【#include<stdio.h>
#include
#defineMAX_STAMPS5
#defineMAX_VALUE1000
intmain(){
intvalues[4];
printf("请输入四种邮票的面值:");
for(inti=0;i<4;i++){
scanf("%d",&values[i]);
}
//动态规划数组,dp[i]表示能否用最多MAX_STAMPS张邮票组合出i的邮资
intdp[MAX_VALUE+1]={0};
dp[0]=1;//0邮资总是可以组合出的
//遍历每种邮票面值
for(inti=0;i<4;i++){
//遍历邮资从values[i]到MAX_VALUE
for(intj=values[i];j<=MAX_VALUE;j++){
//如果j-values[i]可以组合出,且使用的邮票数小于MAX_STAMPS
if(dp[j-values[i]]&&dp[j-values[i]]<MAX_STAMPS){
dp[j]=dp[j-values[i]]+1;
}
}
}
//找到最大连续区间
intmaxContinuous=0;
for(inti=1;i<=MAX_VALUE;i++){
if(dp[i]&&dp[i]<=MAX_STAMPS){
maxContinuous=i;
}else{
break;
}
}
printf("Themaxis%d.\n",maxContinuous);
return0;
}】3.空心字符菱形。题目内容:根据菱型起始字母和菱形的高度,打印空心的由字符组成的菱形。输入格式:菱型起始字母和菱形的高度。输出格式:参照样例,打印空心的由字符组成的菱形。输入样例:C4输出样例:C[回车]DD[回车]EE[回车]FF[回车]EE[回车]DD[回车]C
答案:【#include<stdio.h>
intmain(){
charstartChar;
intheight;
printf("请输入菱型起始字母和菱形的高度:");
scanf("%c%d",&startChar,&height);
//计算字母的ASCII值
intstart=startChar;
//打印上半部分
for(inti=0;i<height;i++){
//打印空格
for(intj=0;j<height-i-1;j++){
printf("");
}
//打印字符
printf("%c",start+i);
if(i!=0){
for(intj=0;j<2*i-1;j++){
printf("");
}
printf("%c",start+i);
}
printf("\n");
}
//打印下半部分
for(inti=height-2;i>=0;i--){
//打印空格
for(intj=0;j<height-i-1;j++){
printf("");
}
//打印字符
printf("%c",start+i);
if(i!=0){
for(intj=0;j<2*i-1;j++){
printf("");
}
printf("%c",start+i);
}
printf("\n");
}
return0;
}】4.数字正方型。题目内容:这是双重循环的入门题目,大家来看看,你会做吗?输入n的值,输出如下例(n=4)所示的由数字组成的正方型。(字母中间是两个空格)12345678910111213141516输入格式:n输出格式:数字组成的正方型输入样例:1输出样例:1
答案:【#include<stdio.h>
intmain(){
intn;
printf("请输入n的值:");
scanf("%d",&n);
intcount=1;//用于记录当前数字
//外层循环控制行数
for(inti=0;i<n;i++){
//内层循环控制每行中的数字
for(intj=0;j<n;j++){
printf("%d",count);//打印数字,后面跟两个空格
count++;
}
printf("\n");//每行结束后换行
}
return0;
}】第七周:数组(一)第七周作业1.虚拟实验:冒泡排序算法程序设计实验-按考生成绩排序(重要提示:虚拟实验网址开头是http,如果打开后网址默认是https,请去掉s再重新刷新打开。)做“冒泡排序算法程序设计”实验,完成以下实验报告表并提交。可将以下实验报告表内容复制到word中,填写完成后,转成pdf后即可提交。实验报告表:冒泡排序实验过程数据与结果实验内容操作名称实验数据备注排序程序的几个重要概念内循环控制变量名称外循环控制变量名称内循环开始条件外循环结束条件填空数据实现冒泡排序的语句i的终值是j的终值是RAM中数据变化外重循环是0,内重循环是9时a[0]的值外重循环是2,内重循环是7时a[6]的值实验结束时,i、j、a[0]、a[9]中的值最终结果外循环进行了多少次内循环进行了多少次
答案:【#include<stdio.h>
intmain(){
inta[10]={53,100,34,23,56,89,76,45,67,23};//假设的初始数组
inttemp;
inti,j;
//外循环控制变量名称
intouterLoopVar=0;
//打印外重循环是0,内重循环是9时a[0]的值
printf("外重循环是0,内重循环是9时a[0]的值:%d\n",a[0]);
//冒泡排序
for(i=0;i<9;i++){//外循环,i从0到8,共9次
for(j=0;j<9-i;j++){//内循环,j从0到8-i
if(a[j]>a[j+1]){//实现冒泡排序的语句
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//打印外重循环是2,内重循环是7时a[6]的值
printf("外重循环是2,内重循环是7时a[6]的值:%d\n",a[6]);
//打印实验结束时,i、j、a[0]、a[9]中的值
printf("实验结束时,i、j、a[0]、a[9]中的值:%d、%d、%d、%d\n",i,j,a[0],a[9]);
//打印最终结果
printf("外循环进行了多少次:%d\n",i+1);//i从0到8,共9次
printf("内循环进行了多少次:%d\n",(1+2+3+4+5+6+7+8)*2);//内循环次数计算
return0;
}】第七周编程作业1.子数整除。题目内容:对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:sub1=a1a2a3sub2=a2a3a4sub3=a3a4a5例如,五位数20207可以拆分成:sub1=202sub2=020(=20)sub3=207现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。输出时请按照由小到大的顺序排列(每行输出一个数)。输入格式:一个正整数K输出格式:请按照由小到大的顺序排列(每行输出一个数)输入样例:15输出样例:22555[回车]25555[回车]28555[回车]30000[回车]
答案:【#include<stdio.h>
intmain(){
intK;
printf("请输入一个正整数K:");
scanf("%d",&K);
//遍历所有10000到30000之间的五位数
for(intnum=10000;num<=30000;num++){
intsub1=num/1000;//获取前三位子数
intsub2=(num/100)%10;//获取第二三位子数
intsub3=num%100;//获取后三位子数
//检查三个子数是否都能被K整除
if(sub1%K==0&&sub2%K==0&&sub3%K==0){
printf("%d\n",num);
}
}
return0;
}】2.洗牌。题目内容:假设我们有2n张牌,它们以1,2,...,n,n+1,...,2n编号并在开始时保持着这种顺序。一次洗牌就是将牌原来的次序变为n+1,1,n+2,2,...,2n,n,也就是将原来的前n张牌放到位置2,4,...,2n,并且将余下的n张牌按照他们原来的次序放到奇数位置1,3,...,2n-1。已经证明对于任何一个自然数n,这2n张牌经过一定次数的洗牌就回到原来的次序。但我们不知道对于一个特定的n,需要几次洗牌才能将牌洗回原来的次序。输入格式:牌张数的一半n,即初始情况下一共有2n张牌,n为int型整数输出格式:将牌洗回原来的次序所需要的洗牌次数输入样例:10输出样例:6[回车]
答案:【#include<stdio.h>
voidshuffle(int*deck,intn){
for(inti=0;i<n;i++){
deck[2*i]=n+1+deck[i];
deck[2*i+1]=deck[i];
}
}
intmain(){
intn;
printf("请输入牌张数的一半n:");
scanf("%d",&n);
intdeck[2*n];//创建一个数组来存储2n张牌
for(inti=0;i<2*n;i++){
deck[i]=i+1;//初始化牌的编号
}
intcount=0;//洗牌次数计数器
while(deck[0]!=1||deck[1]!=2){//检查是否回到原始顺序
shuffle(deck,n);
count++;
}
printf("%d\n",count);//输出洗牌次数
return0;
}】3.回文数。题目内容:输出所有不超过n(取n<256)的、其平方具有对称性质的正整数(也称为回文数)。如:1*1=1;2*2=4;3*3=9;11*11=121;1,2,3,11是回文数。输入格式:输入n(n<256)输出格式:输出所有不超过n的回文数输入样例:3输出样例:1[回车]2[回车]
答案:【#include<stdio.h>
#include
//函数用于检查一个数是否是回文数
boolisPalindrome(intnum){
intoriginal=num;
intreversed=0;
while(num>0){
intdigit=num%10;
reversed=reversed*10+digit;
num/=10;
}
returnoriginal==reversed;
}
intmain(){
intn;
printf("请输入n(n<256):");
scanf("%d",&n);
for(inti=1;i<=n;i++){
intsquare=i*i;
if(isPalindrome(square)){
printf("%d\n",i);
}
}
return0;
}】4.组成最大数。题目内容:任意输入一个自然数,输出该自然数的各位数字组成的最大数。输入格式:自然数n输出格式:各位数字组成的最大数输入样例:1593输出样例:9531[回车]
答案:【#include<stdio.h>
#include
//比较函数,用于qsort
intcompare(constvoid*a,constvoid*b){
return(*(int*)b-*(int*)a);
}
intmain(){
intn;
printf("请输入自然数n:");
scanf("%d",&n);
//将数字转换为字符串,以便提取每一位数字
charstr[50];
sprintf(str,"%d",n);
//获取字符串长度
intlen=strlen(str);
//将字符串中的字符转换为整数数组
intdigits[len];
for(inti=0;i<len;i++){
digits[i]=str[i]-'0';
}
//使用qsort进行排序
qsort(digits,len,sizeof(int),compare);
//将排序后的数字重新组合成一个新的整数
intmaxNumber=0;
for(inti=0;i<len;i++){
maxNumber=maxNumber*10+digits[i];
}
printf("%d\n",maxNumber);
return0;
}】第八周:数组(二)第八周编程作业1.安全的密码。题目内容:随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。任务林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。应当按照以下的规则来判断密码是否安全:如果密码长度小于6位,则不安全如果组成密码的字符只有一类,则不安全如果组成密码的字符有两类,则为中度安全如果组成密码的字符有三类或以上,则为安全通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。输入格式:输入的第一行是一个整数N,表明后面有多少组密码。随后的N行输入包括N个密码,每个密码的长度均小于20个字符。输出格式:针对每一个密码判断并输出它是否安全。对于不安全的密码输出"NotSafe",对于中度安全的密码输出"MediumSafe",对于安全的密码输出"Safe"输入样例:41234abcdefABC1231#c3Gh[回车]输出样例:NotSafeNotSafeMediumSafeSafe[回车]
答案:【#include<stdio.h>
#include
//函数用于检查密码的安全性
constchar*checkPasswordSecurity(constchar*password){
inthasUpper=0,hasLower=0,hasDigit=0,hasSymbol=0;
intlength=0;
while(*password){
length++;
if(isupper(*password))hasUpper=1;
if(islower(*password))hasLower=1;
if(isdigit(*password))hasDigit=1;
if(!isalnum(*password))hasSymbol=1;
password++;
}
if(length<6){
return"NotSafe";
}elseif(hasUpper+hasLower+hasDigit+hasSymbol==1){
return"NotSafe";
}elseif(hasUpper+hasLower+hasDigit+hasSymbol==2){
return"MediumSafe";
}else{
return"Safe";
}
}
intmain(){
intN;
printf("请输入密码数量N:");
scanf("%d",&N);
for(inti=0;i<N;i++){
charpassword[21];//假设密码长度不超过20
printf("请输入密码#%d:",i+1);
scanf("%20s",password);//读取密码,最多20个字符
constchar*security=checkPasswordSecurity(password);
printf("%s\n",security);
}
return0;
}】2.身份证的奥秘。题目内容:18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如下:一、范围该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。二、编码对象公民身份号码的编码对象是具有中华人民共和国国籍的公民。三、号码的结构和表示形式1、号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。2、地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。3、出生日期码表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。4、顺序码表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。5、校验码(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi:7910584216379105842(2)计算模Y=mod(S,11)(3)通过模得到对应的校验码Y:012345678910校验码:10X98765432四、举例如下:北京市朝阳区东省汕头市:44052418800101001415位的身份证号升级办法:15位的身份证号:ddddddyymmddxxp18位的身份证号:ddddddyyyymmddxxpy其中dddddd为地址码(省地县三级)yyyymmddyymmdd为出生年月日xx顺号类编码p性别15位的yy年升为18位后,变成19yy年,但对于百岁以上老人,则为18yy年,此时,他们的最后三位顺序码为996,997,998或999来标记。输入格式:输入n组身份证号码,第一行为个数,以后每行为身份证号码。输出格式:如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。输入样例:435062219790413033111010519491231002X110105491231002110105491231996[回车]输出样例:Invalid[回车]Valid[回车回车回车]
答案:【#include<stdio.h>
#include
#include
//函数用于将15位身份证升级到18位
voidupgradeID(char*id){
if(strlen(id)==15){
intyear=(id[0]-'0')*1000+(id[1]-'0')*100+(id[2]-'0')*10+(id[3]-'0');
if(year<1950){
year+=2000;
}else{
year+=1800;
}
charnewId[19];
sprintf(newId,"%s%02d%s",id,year%100,id+6);
strcpy(id,newId);
}
}
//函数用于计算校验码
charcalculateCheckDigit(char*id){
intweights[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
charcheckDigits[]="10X98765432";
intsum=0;
for(inti=0;i<17;i++){
sum+=(id[i]-'0')*weights[i];
}
returncheckDigits[sum%11];
}
//函数用于验证18位身份证的有效性
intvalidateID(char*id){
upgradeID(id);//确保是18位身份证
if(strlen(id)!=18)return0;//长度检查
//出生日期检查
intyear=(id[6]-'0')*1000+(id[7]-'0')*100+(id[8]-'0')*10+(id[9]-'0');
intmonth=(id[10]-'0')*10+(id[11]-'0');
intday=(id[12]-'0')*10+(id[13]-'0');
//简单的日期有效性检查
if(year<1800||year>2100||month<1||month>12||day<1||day>31)return0;
//校验码检查
charcheckDigit=calculateCheckDigit(id);
returnid[17]==checkDigit;
}
intmain(){
intn;
scanf("%d",&n);
while(n--){
charid[19];
scanf("%s",id);
if(validateID(id)){
printf("Valid\n");
}else{
printf("Invalid\n");
}
}
return0;
}】3.寻找矩阵的鞍点。题目内容:二维数组中的鞍点,即该位置上的元素是所在行上的最大值,是所在列上的最小值。二维数组也可能没有鞍点。输入一个二维数组的行数n,列数m,二维数组的诸元素值;输出数组的鞍点,以及鞍点所在的行列号。输入格式:第一行为矩阵的行数和列数,从第二行开始,为矩阵本身(假设输入的矩阵只有0和1个鞍点)输出格式:数组的鞍点,以及鞍点所在的行列号(下标从0开始)输入样例1:34135323413267[回车]输出样例1:Point:a[1][2]==4[回车]输入样例2:34123484369451[回车]输出样例2:NoPoint[回车]
答案:【#include<stdio.h>
intmain(){
intn,m;
scanf("%d%d",&n,&m);//读取矩阵的行数和列数
intmatrix[n][m];
for(inti=0;i<n;i++){
for(intj=0;j<m;j++){
scanf("%d",&matrix[i][j]);//读取矩阵元素
}
}
inthasSaddlePoint=0;//标记是否找到鞍点
for(inti=0;i<n;i++){
intmaxRow=matrix[i][0];
intcolOfMax=0;
for(intj=1;j<m;j++){
if(matrix[i][j]>maxRow){
maxRow=matrix[i][j];
colOfMax=j;
}
}
intminCol=matrix[0][colOfMax];
for(intk=1;k<n;k++){
if(matrix[k][colOfMax]<minCol){
minCol=matrix[k][colOfMax];
}
}
if(maxRow==minCol){
printf("Point:a[%d][%d]==%d\n",i,colOfMax,maxRow);
hasSaddlePoint=1;
}
}
if(!hasSaddlePoint){
printf("NoPoint\n");
}
return0;
}】4.单词排序。题目内容:输入5个单词,将它们按从大到小的顺序排列后输出。输入格式:5个单词输出格式:排序后的顺序输入样例:BASIC[回车]C++[回车]Pascal[回车]C[回车]Fortran[回车]输出样例:Pascal[回车]Fortran[回车]C++[回车]C[回车]BASIC[回车]
答案:【#include<stdio.h>
#include
#defineMAX_WORDS5
#defineMAX_LENGTH100
intmain(){
charwords[MAX_WORDS][MAX_LENGTH];
chartemp[MAX_LENGTH];
//读取5个单词
for(inti=0;i<MAX_WORDS;i++){
scanf("%s",words[i]);
}
//使用冒泡排序对单词进行降序排序
for(inti=0;i<MAX_WORDS-1;i++){
for(intj=0;j<MAX_WORDS-1-i;j++){
if(strcmp(words[j],words[j+1])<0){
//交换words[j]和words[j+1]
strcpy(temp,words[j]);
strcpy(words[j],words[j+1]);
strcpy(words[j+1],temp);
}
}
}
//输出排序后的单词
for(inti=0;i<MAX_WORDS;i++){
printf("%s\n",words[i]);
}
return0;
}】C语言程序设计(上)期末单选题1.单选题:对二维数组的正确说明是
选项:
A、inta[][]={1,2,3,4,5,6};
B、inta[2][]={1,2,3,4,5,6};
C、inta[][3]={1,2,3,4,5,6};
D、inta[2,3]={1,2,3,4,5,6};
答案:【inta[][3]={1,2,3,4,5,6};】2.单选题:若有以下语句,则正确的描述是:staticcharx[]="12345";staticchary[]={’1’,’2’,’3’,’4’,’5’};
选项:
A、x数组和y数组的长度相同
B、x数组长度大于y数组长度
C、x数组长度小于y数组长度
D、x数组等价于y数组
答案:【x数组长度大于y数组长度】3.单选题:运算符有优先级,在C语言中关于运算符优先级的叙述中正确的是:
选项:
A、逻辑运算符高于算术运算符,算术运算符高于关系运算符
B、算术运算符高于关系运算符,关系运算符高于逻辑运算符
C、算术运算符高于逻辑运算符,逻辑运算符高于关系运算符
D、关系运算符高于逻辑运算符,逻辑运算符高于算术运算符
答案:【算术运算符高于关系运算符,关系运算符高于逻辑运算符】4.单选题:错误的转义字符是:
选项:
A、’\\’
B、’\’’
C、’\81’
D、’\0’
答案:【’\81’】5.单选题:对字符数组s赋初值。不合法的一个是
选项:
A、chars[20];s="Beijing";
B、chars[]="Beijing";
C、chars[20]={"Beijing"};
D、chars[20]={'B','e','i','j','i','n','g'};
答案:【chars[20];s="Beijing";】6.单选题:从键盘上输入“446755”时,下面程序的输出是____。#includemain(){intc;while((c=getchar())!=’\n’)switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}printf(”\n”);}
选项:
A、888988
B、668966
C、88898787
D、66898787
答案:【88898787】[vk-content]7.单选题:变量a整型,f实型,i双精度型,则表达式10+'a'+i*f值的数据类型为
选项:
A、double
B、int
C、float
D、不确定
答案:【int】8.单选题:对于数据类型的自动转换,正确的说法是
选项:
A、字符型与单精度实型进行运算时都转换为双精度实型
B、字符型与字符型进行运算时不进行数据类型的转换
C、整型与字符型进行运算时根据字符的ASCII码值来决定是否进行类型转换
D、单精度实型之间进行运算时不进行类型转换
答案:【字符型与单精度实型进行运算时都转换为双精度实型】9.单选题:下面有关for循环的正确描述是
选项:
A、for循环必须用于循环次数已经确定的情况
B、for循环是先执行循环体语句,后判断表达式
C、for循环中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025北京市茶叶购买合同范本
- 2025合法的劳务聘用合同样本
- 沙盘定制合同
- 课题申报参考:老龄化应对政策、生育支持政策、健康社会研究
- 课题申报参考:跨组织团队成员间不对称依赖关系与协作绩效-基于资源依赖理论视角
- 课题申报参考:考虑生态补偿的跨界环境污染协同治理绩效测度与政策优化研究
- 2024年工业涂料水性色浆项目资金申请报告代可行性研究报告
- 跨区域、跨领域的学校合作项目策划实践
- 科技在宠物健康监测中的应用
- 2023年柴油资金筹措计划书
- 完整版秸秆炭化成型综合利用项目可行性研究报告
- 油气行业人才需求预测-洞察分析
- 《数据采集技术》课件-Scrapy 框架的基本操作
- 2025年河北省单招语文模拟测试二(原卷版)
- 高一化学《活泼的金属单质-钠》分层练习含答案解析
- DB34∕T 4010-2021 水利工程外观质量评定规程
- 2024年内蒙古中考英语试卷五套合卷附答案
- 2024年电工(高级)证考试题库及答案
- 农产品质量评估与分级
- 储能电站火灾应急预案演练
- 人教版(新插图)二年级下册数学 第4课时用“进一法”和“去尾法”解决简单的实际问题 教学课件
评论
0/150
提交评论