【MOOC】《C語言程序設(shè)計(jì)(上)》(北京理工大學(xué))中國大學(xué)慕課答案_第1頁
【MOOC】《C語言程序設(shè)計(jì)(上)》(北京理工大學(xué))中國大學(xué)慕課答案_第2頁
【MOOC】《C語言程序設(shè)計(jì)(上)》(北京理工大學(xué))中國大學(xué)慕課答案_第3頁
【MOOC】《C語言程序設(shè)計(jì)(上)》(北京理工大學(xué))中國大學(xué)慕課答案_第4頁
【MOOC】《C語言程序設(shè)計(jì)(上)》(北京理工大學(xué))中國大學(xué)慕課答案_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【MOOC】《C語言程序設(shè)計(jì)(上)》(北京理工大學(xué))中國大學(xué)慕課答案第二周:數(shù)據(jù)計(jì)算實(shí)現(xiàn)與順序結(jié)構(gòu)程序設(shè)計(jì)(一)第二周作業(yè)1.單選題:下列可以正確表示字符型常數(shù)的是____

選項(xiàng):

A、'\t’

B、"a"

C、"\n"

D、297

答案:【'\t’】2.單選題:已知intx=5,y=5,z=5;執(zhí)行語句x%=y+z;后,x的值是____

選項(xiàng):

A、5

B、0

C、1

D、6

答案:【5】3.單選題:已知inti=5;執(zhí)行語句i+=++i;i的值是____

選項(xiàng):

A、12

B、10

C、11

D、其他答案都不對(duì)

答案:【12】4.單選題:已知:chara;intb;floatc;doubled;執(zhí)行語句c=a+b+c+d;后,變量c的數(shù)據(jù)類型是____

選項(xiàng):

A、float

B、int

C、char

D、double

答案:【float】5.單選題:已知”inta=5,b=5,c;”,則執(zhí)行表達(dá)式”c=a=a>b”后變量a的值為____

選項(xiàng):

A、0

B、1

C、4

D、5

答案:【0】6.單選題:已知:intx,y;doublez;則以下語句中錯(cuò)誤的函數(shù)調(diào)用是____

選項(xiàng):

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;表達(dá)式“20-0<=i<=9”的值是____

選項(xiàng):

A、1

B、0

C、19

D、20

答案:【1】8.單選題:溫度華氏和攝氏的關(guān)系是:C=5(F-32)/9。已知:floatC,F;由華氏求攝氏的正確的賦值表達(dá)式是____

選項(xiàng):

A、C=5*(F-32)/9

B、C=5/9(F-32)

C、C=5/9*(F-32)

D、三個(gè)表達(dá)式都正確

答案:【C=5*(F-32)/9】9.單選題:把算術(shù)表達(dá)式表示為一個(gè)C語言表達(dá)式,正確的寫法是____

選項(xiàng):

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"的長度是____

選項(xiàng):

A、5

B、8

C、7

D、6

答案:【5】第三周:數(shù)據(jù)計(jì)算實(shí)現(xiàn)與順序結(jié)構(gòu)程序設(shè)計(jì)(二)第三周編程作業(yè)1.判斷三角形的形狀。題目內(nèi)容:輸入三角型的三條邊,判斷三角形的形狀。假設(shè)輸入的三邊邊長均>0。輸入格式:三角型的3條邊的長度(int型)。輸出格式:等邊三角形:equilateraltriangle等腰三角形:isocelestriangle不構(gòu)成三角形:non-triangle一般三角形:triangle輸入樣例:222輸出樣例:equilateraltriangle.

答案:【下面是一個(gè)C語言程序,用于判斷輸入的三條邊是否能構(gòu)成三角形,并判斷其形狀:

#include<stdio.h→

intmain(){

inta,b,c;

//輸入三條邊的長度

printf("請(qǐng)輸入三角形的三條邊的長度(整數(shù)):");

scanf("%d%d%d",&a,&b,&c);

//判斷是否能構(gòu)成三角形

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.一年級(jí)的算術(shù)題。題目內(nèi)容:小明上小學(xué)一年級(jí)了,老師已經(jīng)教會(huì)了他們進(jìn)行整數(shù)的+、-、*、/、%計(jì)算,下面老師開始出題,給出一個(gè)簡(jiǎn)單的算術(shù)表達(dá)式,請(qǐng)小明給出計(jì)算結(jié)果。輸入格式:接受兩個(gè)整數(shù),每個(gè)整數(shù)之間使用空格分隔。例如輸入格式為:123444輸出格式:分別輸出按照整型數(shù)據(jù)進(jìn)行+、-、*、/、*之后的運(yùn)行結(jié)果。輸入樣例:103輸出樣例:10+3=1310-3=710*3=3010/3=310%3=1

答案:【#include<stdio.h→

intmain(){

inta,b;

//輸入兩個(gè)整數(shù)

printf("請(qǐng)輸入兩個(gè)整數(shù),用空格分隔:");

scanf("%d%d",&a,&b);

//計(jì)算并輸出結(jié)果

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碼。題目內(nèi)容:我們?cè)谟?jì)算機(jī)基礎(chǔ)中已經(jīng)學(xué)過:字母在計(jì)算機(jī)中采用ASCII碼進(jìn)行存儲(chǔ)。下面要從鍵盤上輸入任意一個(gè)字符,然后輸出該字符對(duì)應(yīng)的ASCII碼。輸入格式:一個(gè)字符輸出格式:該字符對(duì)應(yīng)的ASCII碼輸入樣例:A輸出樣例:TheASCIIofcharacter'A'is65.

答案:【#include<stdio.h→

intmain(){

charch;

//輸入一個(gè)字符

printf("請(qǐng)輸入一個(gè)字符:");

scanf("%c",&ch);

//輸出該字符對(duì)應(yīng)的ASCII碼

printf("TheASCIIofcharacter'%c'is%d.\n",ch,(int)ch);

return0;

}】4.學(xué)學(xué)scanf和printf的用法吧。題目內(nèi)容:該如何處理double型的數(shù)據(jù):如何定義變量類型?如何使用scanf函數(shù)?如果已知圓柱的底面半徑r,以及高h(yuǎn),則可計(jì)算出圓柱的側(cè)面積,體積。其中。輸入格式:第一行輸入圓柱的底面半徑r第二行輸入圓柱的高h(yuǎn)輸出格式:s=<圓柱的側(cè)面積>,v=<圓柱的體積>要求1.所有變量都定義為雙精度類型2.結(jié)果精確到小數(shù)點(diǎn)后兩位。作為練習(xí)題目:我們已經(jīng)給您編寫好了大部分的代碼,請(qǐng)您自己修改幾個(gè)地方,完成程序的剩余部分。**********************************************分隔線************#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已經(jīng)是double類型

//使用scanf讀取兩個(gè)double類型的值

scanf("%lf",&r);

scanf("%lf",&h);

//計(jì)算圓柱的側(cè)面積和體積

s=2*PI*r*h;

v=PI*r*r*h;

//輸出結(jié)果,精確到小數(shù)點(diǎn)后兩位

printf("s=%.2f,v=%.2f\n",s,v);

return0;

}】5.讓我們學(xué)習(xí)用C語言向世界問好?!癏elloWorld”示例程序最早出現(xiàn)于1972年,由貝爾實(shí)驗(yàn)室成員BrianKernighan撰寫的內(nèi)部技術(shù)文件《IntroductiontotheLanguageB》之中。不久同作者于1974年所撰寫的《ProgramminginC:ATutorial》,也延用這個(gè)示例。一般來說,這是每一種計(jì)算機(jī)編程語言中最基本、最簡(jiǎn)單的程序,亦通常是初學(xué)者所編寫的第一個(gè)程序。它還可以用來確定該語言的編譯器、程序開發(fā)環(huán)境,以及運(yùn)行環(huán)境是否已經(jīng)安裝妥當(dāng)。將“HelloWorld”作為第一個(gè)示范程序,已經(jīng)成為編程語言學(xué)習(xí)的傳統(tǒng)。我們?cè)谶@里繼續(xù)傳統(tǒng),這也是一種向前輩們致敬的方式之一吧!最早的程序基本是這個(gè)樣子的:#includeintmain(){printf("Helloworld.\n");return0;}請(qǐng)模仿上面的程序,看看是否可以通過編譯?如果你能通過這個(gè)簡(jiǎn)單的程序,那就讓我們繼續(xù)完成后面的習(xí)題吧。

答案:【#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;

}】第四周:選擇結(jié)構(gòu)的程序設(shè)計(jì)第四周作業(yè)1.單選題:以下程序的輸出結(jié)果是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);}

選項(xiàng):

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);}

選項(xiàng):

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.下列程序段當(dāng)a的值為014和0x14時(shí)的執(zhí)行結(jié)果分別是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.若下列程序執(zhí)行后t的值為4,則執(zhí)行時(shí)輸入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】第四周編程作業(yè)1.確定母親節(jié)。題目內(nèi)容:母親節(jié)是每年的五月第二個(gè)星期天,針對(duì)輸入的年份,計(jì)算該年的哪一天是母親節(jié)。輸入格式:年份輸出格式:日期(5月的哪一天)輸入樣例:2014輸出樣例:11

答案:【#include<stdio.h>

//Zeller公式計(jì)算給定日期是星期幾

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("請(qǐng)輸入年份:");

scanf("%d",&year);

//五月第一個(gè)星期天是哪一天

intfirstSunday=1;

while(dayOfWeek(year,5,firstSunday)!=1){

firstSunday++;

}

//五月第二個(gè)星期天是哪一天

intsecondSunday=firstSunday+7;

printf("%d\n",secondSunday);

return0;

}】2.計(jì)算時(shí)鐘的夾角。題目內(nèi)容:鐘面上的時(shí)針和分針之間的夾角總是在0~180之間(包括0和180)。舉例來說,在十二點(diǎn)的時(shí)候兩針之間的夾角為0,而在六點(diǎn)的時(shí)候夾角為180,在三點(diǎn)的時(shí)候?yàn)?0。本題要解決的是計(jì)算12:00到11:59之間任意一個(gè)時(shí)間的夾角。輸入格式:每組測(cè)試數(shù)據(jù)包含兩個(gè)數(shù)字:第一個(gè)數(shù)字代表小時(shí)(大于0小于等于12),第二個(gè)數(shù)字代表分(在區(qū)間[0,59]上)。輸出格式:對(duì)應(yīng)每組測(cè)試數(shù)據(jù),用常用格式顯示時(shí)間以及這個(gè)時(shí)候時(shí)針和分針間的最小夾角,精確到小數(shù)點(diǎn)后一位。輸出格式如下所示。再看一看,想一想:是否可以不用if語句,只使用printf函數(shù)來簡(jiǎn)化你的程序?輸入樣例:120輸出樣例:At12:00theangleis0.0degrees.

答案:【#include<stdio.h>

intmain(){

inthour,minute;

printf("請(qǐng)輸入時(shí)間(小時(shí)分鐘):");

scanf("%d%d",&hour,&minute);

//計(jì)算時(shí)針和分針的角度

doublehour_angle=(hour%12)*30.0+minute*0.5;

doubleminute_angle=minute*6.0;

//計(jì)算兩針之間的夾角

doubleangle=fabs(hour_angle-minute_angle);

//取最小夾角

if(angle>180.0){

angle=360.0-angle;

}

//輸出結(jié)果

printf("At%d:%02dtheangleis%.1fdegrees.\n",hour,minute,angle);

return0;

}】3.求最后3位數(shù)值。題目內(nèi)容:小明在中學(xué)會(huì)求一個(gè)數(shù)的n次方了,但計(jì)算機(jī)還不會(huì),請(qǐng)你來編寫一個(gè)程序吧。由于計(jì)算機(jī)比較“笨”,所以我們編寫程序的功能不用太強(qiáng),只要能算出a的n次方的最后3位數(shù)就可以了。輸入格式:a和n的值。假設(shè)a<=150。輸出格式:求a的n次方的最后3位數(shù)。提示:再想一想,你的方法對(duì)嗎?你用的是什么數(shù)據(jù)類型?輸入樣例: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("請(qǐng)輸入a和n的值:");

scanf("%d%d",&a,&n);

//計(jì)算a的n次方的最后三位數(shù)

intlastThreeDigits=powerMod(a,n,1000);

//輸出結(jié)果

printf("Thelast3numbersis%d.\n",lastThreeDigits);

return0;

}】4.計(jì)算星期。題目內(nèi)容:給出任意一個(gè)年月日(年>1900),現(xiàn)在我們不能只是直接計(jì)算,要先判斷給出的日期是否合法,對(duì)于非法的日期要給出錯(cuò)誤提示信息,合法的日期要再計(jì)算是星期幾。輸入格式:年月日輸出格式:0~6。星期日用0表示,星期一用1表示,星期二用2表示......星期六用6表示。假設(shè)年份大于1900。先想一想:我們現(xiàn)在只會(huì)使用if語句,該如何建立數(shù)學(xué)模型?輸入樣例: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公式計(jì)算星期幾

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("請(qǐng)輸入年月日(年月日):");

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;

}】第五周:循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)(一)第五周編程作業(yè)1.求最小m值。題目內(nèi)容:求滿足下列不等式的最小m。1+2+3+4+......+m≥n例如:n=100,當(dāng)m=14時(shí),滿足: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("請(qǐng)輸入n的值:");

scanf("%d",&n);

//從1開始累加,直到累加和大于等于n

for(m=1;sum>n;m++){

sum+=m;

}

//輸出滿足條件的最小m值

printf("滿足條件的最小m值為:%d\n",m-1);

return0;

}】2.尋找特殊偶數(shù)。題目內(nèi)容:有一種特殊偶數(shù),它每一位上的數(shù)字都兩兩不相同。我們現(xiàn)在需要找出四位數(shù)中某一區(qū)間內(nèi)的這類偶數(shù)。輸入格式:所要尋找的四位偶數(shù)的范圍。每組輸入有兩個(gè)數(shù)字:第一個(gè)數(shù)字是最小范圍;第二個(gè)數(shù)字是最大范圍。如果輸入遇到0,輸入結(jié)束。輸出格式:列出此范圍內(nèi)的所有特殊偶數(shù),并且列出此范圍內(nèi)特殊偶數(shù)的個(gè)數(shù)。輸入樣例:300030206040609000輸出樣例:3012301430163018counter=46042604860526054605860726074607860826084counter=10輸入樣例:910187-100輸出樣例:ErrorError

答案:【#include<stdio.h>

#include

//函數(shù)用于檢查一個(gè)數(shù)是否是特殊偶數(shù)

boolisSpecialEven(intnum){

intdigits[4];

inttemp=num;

intcount=0;

//提取每一位數(shù)字

while(temp>0){

digits[count++]=temp%10;

temp/=10;

}

//檢查是否為偶數(shù)

if(digits[3]%2!=0){

returnfalse;

}

//檢查每一位數(shù)字是否兩兩不相同

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.鍛煉身體吧。題目內(nèi)容:沫沫,灰灰和渣渣去鍛煉身體,如果對(duì)他們跑步的距離分別只計(jì)整數(shù)a、b、c,由于他們身高的差距,造成了a<=b<=c,并且渣渣跑了N米之后就再也跑不動(dòng)了。但是,按照他們事先的約定:只有當(dāng)c*c==a*a+b*b時(shí),他們的鍛煉才有效果。現(xiàn)在他們?nèi)齻€(gè)人想知道,如果渣渣的極限N已知,那么有多少種有鍛煉效果的跑步方案(即a,b,c有多少種可能的取值)。輸入格式:一個(gè)整數(shù)N,表示渣渣的體力極限,N<=5000。輸出格式:一個(gè)整數(shù),代表他們跑步方案的個(gè)數(shù)。Hint:對(duì)于輸入N=5,有方案a=3,b=4,c=5,共一種。輸入樣例:5輸出樣例:1

答案:【#include<stdio.h>

intmain(){

intN;

intcount=0;

//從用戶那里獲取輸入值N

printf("請(qǐng)輸入N的值:");

scanf("%d",&N);

//遍歷所有可能的c值

for(intc=1;c<=N;c++){

//遍歷所有可能的b值

for(intb=1;b<=c;b++){

//計(jì)算a的值

inta_squared=c*c-b*b;

inta=(int)sqrt(a_squared);

//檢查a是否為整數(shù)且a<=b

if(a*a==a_squared&&a<=b){

count++;

}

}

}

//輸出滿足條件的跑步方案?jìng)€(gè)數(shù)

printf("滿足條件的跑步方案?jìng)€(gè)數(shù)為:%d\n",count);

return0;

}】第六周:循環(huán)結(jié)構(gòu)的程序設(shè)計(jì)(二)第六周作業(yè)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()是浮點(diǎn)數(shù)絕對(duì)值函數(shù)。

選項(xiàng):

A、1.600000

B、1.500000

C、2.000000

D、2.400000

答案:【1.600000】2.單選題:下面程序的輸出結(jié)果是____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);}

選項(xiàng):

A、x=4

B、x=8

C、x=6

D、x=12

答案:【x=4】3.單選題:已知inti=1;執(zhí)行語句while(i++<4);后,變量i的值為

選項(xiàng):

A、5

B、3

C、4

D、6

答案:【5】4.單選題:下面的for語句for(x=0,y=10;(y>0)&&(x<4);x++,y--)

選項(xiàng):

A、循環(huán)執(zhí)行4次

B、是無限循環(huán)

C、循環(huán)次數(shù)不定

D、循環(huán)執(zhí)行3次

答案:【循環(huán)執(zhí)行4次】5.單選題:求取滿足式的n,正確的語句是____

選項(xiàng):

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++)】第六周編程作業(yè)1.火鍋火鍋和火鍋。題目內(nèi)容:眾所周知,沫沫以火鍋為生。在E8的聚餐活動(dòng)中,他經(jīng)常賣萌賣無辜領(lǐng)著大家吃火鍋。。有一天,沫沫聽說學(xué)校附近的哺呷哺呷在某現(xiàn)充的贊助下有一個(gè)優(yōu)惠活動(dòng),只需30軟妹幣,對(duì)每個(gè)客人,它會(huì)上N道菜,但是客人只能挑選其中連續(xù)上的一些菜。于是他非常興奮的拉著灰灰和渣渣去吃火鍋去啦。沫沫是一個(gè)十分挑食的人,所以他對(duì)每一道菜都有一個(gè)愉快度(當(dāng)然因?yàn)樗奶羰常承┦挛锏挠淇於葧?huì)是負(fù)數(shù))。為了讓沫沫能非常愉快的享受這次聚餐,善解人意的灰灰和渣渣決定幫他計(jì)算,他們應(yīng)該怎么選擇菜才能使沫沫最開心地吃完這次聚餐。輸入格式:第一行是一個(gè)整數(shù)T,(T<=10)表示測(cè)試案例的個(gè)數(shù)對(duì)于每個(gè)測(cè)試案例,第一行是一個(gè)整數(shù)N,(1<=N<=10000)表示菜的個(gè)數(shù)接下來的N個(gè)數(shù)字,第i個(gè)數(shù)字si表示沫沫對(duì)第i道菜的愉快度。(-1000<=si<=1000)PS:由于CF又被血虐掉rating,所以沫沫的起始愉快度是0PPS:沫沫完全可能得到一個(gè)為負(fù)值的愉快值,poor沫沫。。輸出格式:對(duì)于每個(gè)樣例,輸出一個(gè)數(shù)字,表示沫沫吃完之后愉快度的最大值。HINT:對(duì)于56-154-7我們選擇6,-1,5,4這四道菜(注意必須是連續(xù)的,所以不能跳過-1)做完后請(qǐng)思考,如果N的范圍是1<=N<=100000呢?輸入樣例:256-154-7706-11-67-5輸出樣例:147

答案:【#include<stdio.h>

//Kadane算法計(jì)算最大子數(shù)組和

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.郵票組合。題目內(nèi)容:我們寄信都要貼郵票,在郵局有一些小面值的郵票,通過這些小面值郵票中的一張或幾張的組合,可以滿足不同郵件的不同的郵資?,F(xiàn)在,郵局有4種不同面值的郵票。在每個(gè)信封上最多能貼5張郵票,面值可相同,可不同。輸入格式:四種郵票的面值。輸出格式:用這四種面值組成的郵資最大的從1開始的一個(gè)連續(xù)的區(qū)間。說明:如結(jié)果為10,則表明使用4張郵票可組合出1、2、3、4、5、6、7、8、9、10這些郵資。名詞解釋:郵資:就是你寄東西需要花多少錢。郵票面額:是由國家發(fā)行的具有固定價(jià)格的花紙片,被稱為郵票。如果你寄東西,郵局稱了重量,告訴你要240分。這樣你就要貼郵票了。如果現(xiàn)在郵局的郵票有面值為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("請(qǐng)輸入四種郵票的面值:");

for(inti=0;i<4;i++){

scanf("%d",&values[i]);

}

//動(dòng)態(tài)規(guī)劃數(shù)組,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]可以組合出,且使用的郵票數(shù)小于MAX_STAMPS

if(dp[j-values[i]]&&dp[j-values[i]]<MAX_STAMPS){

dp[j]=dp[j-values[i]]+1;

}

}

}

//找到最大連續(xù)區(qū)間

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.空心字符菱形。題目內(nèi)容:根據(jù)菱型起始字母和菱形的高度,打印空心的由字符組成的菱形。輸入格式:菱型起始字母和菱形的高度。輸出格式:參照樣例,打印空心的由字符組成的菱形。輸入樣例:C4輸出樣例:C[回車]DD[回車]EE[回車]FF[回車]EE[回車]DD[回車]C

答案:【#include<stdio.h>

intmain(){

charstartChar;

intheight;

printf("請(qǐng)輸入菱型起始字母和菱形的高度:");

scanf("%c%d",&startChar,&height);

//計(jì)算字母的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.數(shù)字正方型。題目內(nèi)容:這是雙重循環(huán)的入門題目,大家來看看,你會(huì)做嗎?輸入n的值,輸出如下例(n=4)所示的由數(shù)字組成的正方型。(字母中間是兩個(gè)空格)12345678910111213141516輸入格式:n輸出格式:數(shù)字組成的正方型輸入樣例:1輸出樣例:1

答案:【#include<stdio.h>

intmain(){

intn;

printf("請(qǐng)輸入n的值:");

scanf("%d",&n);

intcount=1;//用于記錄當(dāng)前數(shù)字

//外層循環(huán)控制行數(shù)

for(inti=0;i<n;i++){

//內(nèi)層循環(huán)控制每行中的數(shù)字

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

printf("%d",count);//打印數(shù)字,后面跟兩個(gè)空格

count++;

}

printf("\n");//每行結(jié)束后換行

}

return0;

}】第七周:數(shù)組(一)第七周作業(yè)1.虛擬實(shí)驗(yàn):冒泡排序算法程序設(shè)計(jì)實(shí)驗(yàn)-按考生成績排序(重要提示:虛擬實(shí)驗(yàn)網(wǎng)址開頭是http,如果打開后網(wǎng)址默認(rèn)是https,請(qǐng)去掉s再重新刷新打開。)做“冒泡排序算法程序設(shè)計(jì)”實(shí)驗(yàn),完成以下實(shí)驗(yàn)報(bào)告表并提交??蓪⒁韵聦?shí)驗(yàn)報(bào)告表內(nèi)容復(fù)制到word中,填寫完成后,轉(zhuǎn)成pdf后即可提交。實(shí)驗(yàn)報(bào)告表:冒泡排序?qū)嶒?yàn)過程數(shù)據(jù)與結(jié)果實(shí)驗(yàn)內(nèi)容操作名稱實(shí)驗(yàn)數(shù)據(jù)備注排序程序的幾個(gè)重要概念內(nèi)循環(huán)控制變量名稱外循環(huán)控制變量名稱內(nèi)循環(huán)開始條件外循環(huán)結(jié)束條件填空數(shù)據(jù)實(shí)現(xiàn)冒泡排序的語句i的終值是j的終值是RAM中數(shù)據(jù)變化外重循環(huán)是0,內(nèi)重循環(huán)是9時(shí)a[0]的值外重循環(huán)是2,內(nèi)重循環(huán)是7時(shí)a[6]的值實(shí)驗(yàn)結(jié)束時(shí),i、j、a[0]、a[9]中的值最終結(jié)果外循環(huán)進(jìn)行了多少次內(nèi)循環(huán)進(jìn)行了多少次

答案:【#include<stdio.h>

intmain(){

inta[10]={53,100,34,23,56,89,76,45,67,23};//假設(shè)的初始數(shù)組

inttemp;

inti,j;

//外循環(huán)控制變量名稱

intouterLoopVar=0;

//打印外重循環(huán)是0,內(nèi)重循環(huán)是9時(shí)a[0]的值

printf("外重循環(huán)是0,內(nèi)重循環(huán)是9時(shí)a[0]的值:%d\n",a[0]);

//冒泡排序

for(i=0;i<9;i++){//外循環(huán),i從0到8,共9次

for(j=0;j<9-i;j++){//內(nèi)循環(huán),j從0到8-i

if(a[j]>a[j+1]){//實(shí)現(xiàn)冒泡排序的語句

temp=a[j];

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

a[j+1]=temp;

}

}

}

//打印外重循環(huán)是2,內(nèi)重循環(huán)是7時(shí)a[6]的值

printf("外重循環(huán)是2,內(nèi)重循環(huán)是7時(shí)a[6]的值:%d\n",a[6]);

//打印實(shí)驗(yàn)結(jié)束時(shí),i、j、a[0]、a[9]中的值

printf("實(shí)驗(yàn)結(jié)束時(shí),i、j、a[0]、a[9]中的值:%d、%d、%d、%d\n",i,j,a[0],a[9]);

//打印最終結(jié)果

printf("外循環(huán)進(jìn)行了多少次:%d\n",i+1);//i從0到8,共9次

printf("內(nèi)循環(huán)進(jìn)行了多少次:%d\n",(1+2+3+4+5+6+7+8)*2);//內(nèi)循環(huán)次數(shù)計(jì)算

return0;

}】第七周編程作業(yè)1.子數(shù)整除。題目內(nèi)容:對(duì)于一個(gè)五位數(shù)a1a2a3a4a5,可將其拆分為三個(gè)子數(shù):sub1=a1a2a3sub2=a2a3a4sub3=a3a4a5例如,五位數(shù)20207可以拆分成:sub1=202sub2=020(=20)sub3=207現(xiàn)在給定一個(gè)正整數(shù)K,要求你編程求出10000到30000之間所有滿足下述條件的五位數(shù),條件是這些五位數(shù)的三個(gè)子數(shù)sub1、sub2、sub3都可被K整除。輸出時(shí)請(qǐng)按照由小到大的順序排列(每行輸出一個(gè)數(shù))。輸入格式:一個(gè)正整數(shù)K輸出格式:請(qǐng)按照由小到大的順序排列(每行輸出一個(gè)數(shù))輸入樣例:15輸出樣例:22555[回車]25555[回車]28555[回車]30000[回車]

答案:【#include<stdio.h>

intmain(){

intK;

printf("請(qǐng)輸入一個(gè)正整數(shù)K:");

scanf("%d",&K);

//遍歷所有10000到30000之間的五位數(shù)

for(intnum=10000;num<=30000;num++){

intsub1=num/1000;//獲取前三位子數(shù)

intsub2=(num/100)%10;//獲取第二三位子數(shù)

intsub3=num%100;//獲取后三位子數(shù)

//檢查三個(gè)子數(shù)是否都能被K整除

if(sub1%K==0&&sub2%K==0&&sub3%K==0){

printf("%d\n",num);

}

}

return0;

}】2.洗牌。題目內(nèi)容:假設(shè)我們有2n張牌,它們以1,2,...,n,n+1,...,2n編號(hào)并在開始時(shí)保持著這種順序。一次洗牌就是將牌原來的次序變?yōu)閚+1,1,n+2,2,...,2n,n,也就是將原來的前n張牌放到位置2,4,...,2n,并且將余下的n張牌按照他們?cè)瓉淼拇涡蚍诺狡鏀?shù)位置1,3,...,2n-1。已經(jīng)證明對(duì)于任何一個(gè)自然數(shù)n,這2n張牌經(jīng)過一定次數(shù)的洗牌就回到原來的次序。但我們不知道對(duì)于一個(gè)特定的n,需要幾次洗牌才能將牌洗回原來的次序。輸入格式:牌張數(shù)的一半n,即初始情況下一共有2n張牌,n為int型整數(shù)輸出格式:將牌洗回原來的次序所需要的洗牌次數(shù)輸入樣例: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("請(qǐng)輸入牌張數(shù)的一半n:");

scanf("%d",&n);

intdeck[2*n];//創(chuàng)建一個(gè)數(shù)組來存儲(chǔ)2n張牌

for(inti=0;i<2*n;i++){

deck[i]=i+1;//初始化牌的編號(hào)

}

intcount=0;//洗牌次數(shù)計(jì)數(shù)器

while(deck[0]!=1||deck[1]!=2){//檢查是否回到原始順序

shuffle(deck,n);

count++;

}

printf("%d\n",count);//輸出洗牌次數(shù)

return0;

}】3.回文數(shù)。題目內(nèi)容:輸出所有不超過n(取n<256)的、其平方具有對(duì)稱性質(zhì)的正整數(shù)(也稱為回文數(shù))。如:1*1=1;2*2=4;3*3=9;11*11=121;1,2,3,11是回文數(shù)。輸入格式:輸入n(n<256)輸出格式:輸出所有不超過n的回文數(shù)輸入樣例:3輸出樣例:1[回車]2[回車]

答案:【#include<stdio.h>

#include

//函數(shù)用于檢查一個(gè)數(shù)是否是回文數(shù)

boolisPalindrome(intnum){

intoriginal=num;

intreversed=0;

while(num>0){

intdigit=num%10;

reversed=reversed*10+digit;

num/=10;

}

returnoriginal==reversed;

}

intmain(){

intn;

printf("請(qǐng)輸入n(n<256):");

scanf("%d",&n);

for(inti=1;i<=n;i++){

intsquare=i*i;

if(isPalindrome(square)){

printf("%d\n",i);

}

}

return0;

}】4.組成最大數(shù)。題目內(nèi)容:任意輸入一個(gè)自然數(shù),輸出該自然數(shù)的各位數(shù)字組成的最大數(shù)。輸入格式:自然數(shù)n輸出格式:各位數(shù)字組成的最大數(shù)輸入樣例:1593輸出樣例:9531[回車]

答案:【#include<stdio.h>

#include

//比較函數(shù),用于qsort

intcompare(constvoid*a,constvoid*b){

return(*(int*)b-*(int*)a);

}

intmain(){

intn;

printf("請(qǐng)輸入自然數(shù)n:");

scanf("%d",&n);

//將數(shù)字轉(zhuǎn)換為字符串,以便提取每一位數(shù)字

charstr[50];

sprintf(str,"%d",n);

//獲取字符串長度

intlen=strlen(str);

//將字符串中的字符轉(zhuǎn)換為整數(shù)數(shù)組

intdigits[len];

for(inti=0;i<len;i++){

digits[i]=str[i]-'0';

}

//使用qsort進(jìn)行排序

qsort(digits,len,sizeof(int),compare);

//將排序后的數(shù)字重新組合成一個(gè)新的整數(shù)

intmaxNumber=0;

for(inti=0;i<len;i++){

maxNumber=maxNumber*10+digits[i];

}

printf("%d\n",maxNumber);

return0;

}】第八周:數(shù)組(二)第八周編程作業(yè)1.安全的密碼。題目內(nèi)容:隨著電子設(shè)備的廣泛運(yùn)用,密碼也漸漸融入每個(gè)人的生活。保護(hù)好密碼,不僅關(guān)系到個(gè)人隱私,更關(guān)系到個(gè)人的財(cái)產(chǎn)和安全。一個(gè)安全的密碼,最好由大小寫字母、數(shù)字或符號(hào)組成。包含越多種類的字符,其安全性就越高。同時(shí)密碼還需要有一定的長度,通常至少要由六個(gè)以上的字符組成。并不是每個(gè)人都喜歡這樣復(fù)雜的密碼,很多人在設(shè)置密碼的時(shí)候,喜歡使用自己的名字或者生日,但這是很大的安全隱患。任務(wù)林曉煒正在設(shè)計(jì)一個(gè)網(wǎng)絡(luò)交易系統(tǒng),為了保證用戶的密碼安全,他需要一個(gè)程序,判斷用戶自己設(shè)置的密碼是否安全,如果不安全,則給出提示。現(xiàn)在他向你求助,請(qǐng)你幫忙設(shè)計(jì)一個(gè)程序來解決這個(gè)問題。應(yīng)當(dāng)按照以下的規(guī)則來判斷密碼是否安全:如果密碼長度小于6位,則不安全如果組成密碼的字符只有一類,則不安全如果組成密碼的字符有兩類,則為中度安全如果組成密碼的字符有三類或以上,則為安全通常,可以認(rèn)為數(shù)字、大寫字母、小寫字母和其它符號(hào)為四類不同的字符。輸入格式:輸入的第一行是一個(gè)整數(shù)N,表明后面有多少組密碼。隨后的N行輸入包括N個(gè)密碼,每個(gè)密碼的長度均小于20個(gè)字符。輸出格式:針對(duì)每一個(gè)密碼判斷并輸出它是否安全。對(duì)于不安全的密碼輸出"NotSafe",對(duì)于中度安全的密碼輸出"MediumSafe",對(duì)于安全的密碼輸出"Safe"輸入樣例:41234abcdefABC1231#c3Gh[回車]輸出樣例:NotSafeNotSafeMediumSafeSafe[回車]

答案:【#include<stdio.h>

#include

//函數(shù)用于檢查密碼的安全性

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("請(qǐng)輸入密碼數(shù)量N:");

scanf("%d",&N);

for(inti=0;i<N;i++){

charpassword[21];//假設(shè)密碼長度不超過20

printf("請(qǐng)輸入密碼#%d:",i+1);

scanf("%20s",password);//讀取密碼,最多20個(gè)字符

constchar*security=checkPasswordSecurity(password);

printf("%s\n",security);

}

return0;

}】2.身份證的奧秘。題目內(nèi)容:18位身份證標(biāo)準(zhǔn)在國家質(zhì)量技術(shù)監(jiān)督局于1999年7月1日實(shí)施的GB11643-1999《公民身份號(hào)碼》中做了明確的規(guī)定。GB11643-1999《公民身份號(hào)碼》為GB11643-1989《社會(huì)保障號(hào)碼》的修訂版,其中指出將原標(biāo)準(zhǔn)名稱"社會(huì)保障號(hào)碼"更名為"公民身份號(hào)碼",另外GB11643-1999《公民身份號(hào)碼》從實(shí)施之日起代替GB11643-1989。GB11643-1999《公民身份號(hào)碼》主要內(nèi)容如下:一、范圍該標(biāo)準(zhǔn)規(guī)定了公民身份號(hào)碼的編碼對(duì)象、號(hào)碼的結(jié)構(gòu)和表現(xiàn)形式,使每個(gè)編碼對(duì)象獲得一個(gè)唯一的、不變的法定號(hào)碼。二、編碼對(duì)象公民身份號(hào)碼的編碼對(duì)象是具有中華人民共和國國籍的公民。三、號(hào)碼的結(jié)構(gòu)和表示形式1、號(hào)碼的結(jié)構(gòu)公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位校驗(yàn)碼組成。排列順序從左至右依次為:六位數(shù)字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗(yàn)碼。2、地址碼表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼,按GB/T2260的規(guī)定執(zhí)行。3、出生日期碼表示編碼對(duì)象出生的年、月、日,按GB/T7408的規(guī)定執(zhí)行,年、月、日代碼之間不用分隔符。4、順序碼表示在同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、同月、同日出生的人編定的順序號(hào),順序碼的奇數(shù)分配給男性,偶數(shù)分配給女性。5、校驗(yàn)碼(1)十七位數(shù)字本體碼加權(quán)求和公式S=Sum(Ai*Wi),i=0,...,16,先對(duì)前17位數(shù)字的權(quán)求和Ai:表示第i位置上的身份證號(hào)碼數(shù)字值Wi:表示第i位置上的加權(quán)因子Wi:7910584216379105842(2)計(jì)算模Y=mod(S,11)(3)通過模得到對(duì)應(yīng)的校驗(yàn)碼Y:012345678910校驗(yàn)碼:10X98765432四、舉例如下:北京市朝陽區(qū)東省汕頭市:44052418800101001415位的身份證號(hào)升級(jí)辦法:15位的身份證號(hào):ddddddyymmddxxp18位的身份證號(hào):ddddddyyyymmddxxpy其中dddddd為地址碼(省地縣三級(jí))yyyymmddyymmdd為出生年月日xx順號(hào)類編碼p性別15位的yy年升為18位后,變成19yy年,但對(duì)于百歲以上老人,則為18yy年,此時(shí),他們的最后三位順序碼為996,997,998或999來標(biāo)記。輸入格式:輸入n組身份證號(hào)碼,第一行為個(gè)數(shù),以后每行為身份證號(hào)碼。輸出格式:如果輸入的身份證號(hào)碼為15位,則將其升級(jí)為18位后顯示輸出;否則判斷其是否為合法身份證號(hào),并逐行輸出。輸入樣例:435062219790413033111010519491231002X110105491231002110105491231996[回車]輸出樣例:Invalid[回車]Valid[回車回車回車]

答案:【#include<stdio.h>

#include

#include

//函數(shù)用于將15位身份證升級(jí)到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);

}

}

//函數(shù)用于計(jì)算校驗(yàn)碼

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];

}

//函數(shù)用于驗(yàn)證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');

//簡(jiǎn)單的日期有效性檢查

if(year<1800||year>2100||month<1||month>12||day<1||day>31)return0;

//校驗(yàn)碼檢查

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.尋找矩陣的鞍點(diǎn)。題目內(nèi)容:二維數(shù)組中的鞍點(diǎn),即該位置上的元素是所在行上的最大值,是所在列上的最小值。二維數(shù)組也可能沒有鞍點(diǎn)。輸入一個(gè)二維數(shù)組的行數(shù)n,列數(shù)m,二維數(shù)組的諸元素值;輸出數(shù)組的鞍點(diǎn),以及鞍點(diǎn)所在的行列號(hào)。輸入格式:第一行為矩陣的行數(shù)和列數(shù),從第二行開始,為矩陣本身(假設(shè)輸入的矩陣只有0和1個(gè)鞍點(diǎn))輸出格式:數(shù)組的鞍點(diǎn),以及鞍點(diǎn)所在的行列號(hào)(下標(biāo)從0開始)輸入樣例1:34135323413267[回車]輸出樣例1:Point:a[1][2]==4[回車]輸入樣例2:34123484369451[回車]輸出樣例2:NoPoint[回車]

答案:【#include<stdio.h>

intmain(){

intn,m;

scanf("%d%d",&n,&m);//讀取矩陣的行數(shù)和列數(shù)

intmatrix[n][m];

for(inti=0;i<n;i++){

for(intj=0;j<m;j++){

scanf("%d",&matrix[i][j]);//讀取矩陣元素

}

}

inthasSaddlePoint=0;//標(biāo)記是否找到鞍點(diǎn)

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.單詞排序。題目內(nèi)容:輸入5個(gè)單詞,將它們按從大到小的順序排列后輸出。輸入格式:5個(gè)單詞輸出格式:排序后的順序輸入樣例: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個(gè)單詞

for(inti=0;i<MAX_WORDS;i++){

scanf("%s",words[i]);

}

//使用冒泡排序?qū)卧~進(jìn)行降序排序

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語言程序設(shè)計(jì)(上)期末單選題1.單選題:對(duì)二維數(shù)組的正確說明是

選項(xiàng):

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’};

選項(xiàng):

A、x數(shù)組和y數(shù)組的長度相同

B、x數(shù)組長度大于y數(shù)組長度

C、x數(shù)組長度小于y數(shù)組長度

D、x數(shù)組等價(jià)于y數(shù)組

答案:【x數(shù)組長度大于y數(shù)組長度】3.單選題:運(yùn)算符有優(yōu)先級(jí),在C語言中關(guān)于運(yùn)算符優(yōu)先級(jí)的敘述中正確的是:

選項(xiàng):

A、邏輯運(yùn)算符高于算術(shù)運(yùn)算符,算術(shù)運(yùn)算符高于關(guān)系運(yùn)算符

B、算術(shù)運(yùn)算符高于關(guān)系運(yùn)算符,關(guān)系運(yùn)算符高于邏輯運(yùn)算符

C、算術(shù)運(yùn)算符高于邏輯運(yùn)算符,邏輯運(yùn)算符高于關(guān)系運(yùn)算符

D、關(guān)系運(yùn)算符高于邏輯運(yùn)算符,邏輯運(yùn)算符高于算術(shù)運(yùn)算符

答案:【算術(shù)運(yùn)算符高于關(guān)系運(yùn)算符,關(guān)系運(yùn)算符高于邏輯運(yùn)算符】4.單選題:錯(cuò)誤的轉(zhuǎn)義字符是:

選項(xiàng):

A、’\\’

B、’\’’

C、’\81’

D、’\0’

答案:【’\81’】5.單選題:對(duì)字符數(shù)組s賦初值。不合法的一個(gè)是

選項(xiàng):

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”時(shí),下面程序的輸出是____。#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”);}

選項(xiàng):

A、888988

B、668966

C、88898787

D、66898787

答案:【88898787】[vk-content]7.單選題:變量a整型,f實(shí)型,i雙精度型,則表達(dá)式10+'a'+i*f值的數(shù)據(jù)類型為

選項(xiàng):

A、double

B、int

C、float

D、不確定

答案:【int】8.單選題:對(duì)于數(shù)據(jù)類型的自動(dòng)轉(zhuǎn)換,正確的說法是

選項(xiàng):

A、字符型與單精度實(shí)型進(jìn)行運(yùn)算時(shí)都轉(zhuǎn)換為雙精度實(shí)型

B、字符型與字符型進(jìn)行運(yùn)算時(shí)不進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換

C、整型與字符型進(jìn)行運(yùn)算時(shí)根據(jù)字符的ASCII碼值來決定是否進(jìn)行類型轉(zhuǎn)換

D、單精度實(shí)型之間進(jìn)行運(yùn)算時(shí)不進(jìn)行類型轉(zhuǎn)換

答案:【字符型與單精度實(shí)型進(jìn)行運(yùn)算時(shí)都轉(zhuǎn)換為雙精度實(shí)型】9.單選題:下面有關(guān)for循環(huán)的正確描述是

選項(xiàng):

A、for循環(huán)必須用于循環(huán)次數(shù)已經(jīng)確定的情況

B、for循環(huán)是先執(zhí)行循環(huán)體語句,后判斷表達(dá)式

C、for循環(huán)中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論