2023年C語言試題資料_第1頁
2023年C語言試題資料_第2頁
2023年C語言試題資料_第3頁
2023年C語言試題資料_第4頁
2023年C語言試題資料_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章:C語言基礎(chǔ)訓練1、有兩個整數(shù)變量a和b,它們的值分別為8和3,計算它們的和、差、積、商。#include<stdio.h>main(){inta=0,b=0,sum=0,m=0,t=0;floats=0.0;a=8;b=3;sum=a+b;m=a-b;t=a*b;printf("%d+%d=%d\n",a,b,sum);printf("%d-%d=%d\n",a,b,m);printf("%d*%d=%d\n",a,b,t);printf("%d/%d=%d\n",a,b,s);}擴展:計算并輸出a除b的余數(shù)和ab的值#include<stdio.h>main(){inta=8,b=3,m=0,t=0;m=a%b;t=a*a*a;printf("%d%%d=%d\n",a,b,m);printf("%d^%d=%d\n",a,b,t);}訓練2:假設圓柱體的底面半徑為r(=2.5),高為h(=3.5),計算該圓柱體的體積(體積=底面積*高,底面積=πr2#include<stdio.h>main(){floatr=2.5,h=3.5,v=0.0;v=3.14*r*r*h;printf("半徑:%.2f,高:%.2f,體積:%.2f\n",r,h,v);}擴展:輸入半徑和高,計算圓柱體的體積。數(shù)據(jù)輸入使用scanf函數(shù)。#include<stdio.h>main(){floatr=0,h=0,v=0.0;scanf("%f%f",&r,&h);v=3.14*r*r*h;printf("半徑:%.2f,高:%.2f,體積:%.2f\n",r,h,v);}第二章:順序結(jié)構(gòu)程序設計補充實驗:1、輸入一個三位十進制整數(shù),將其按逆序轉(zhuǎn)換為新的整數(shù)后輸出。如輸入127,輸出721#include<stdio.h>main(){inta=0,b=0;printf("pleassentera3-bitinteger:");scanf("%d",&a);printf("old:%d\n",a);/*如127*/b=a%10;/*獲取a的個位數(shù),7*/a=a/10;/*求得原a數(shù)值的百十位,12*/b=b*10+a%10;/*將得到的第一個數(shù)擴大10倍再加當前a的個位數(shù)70+2=72*/a=a/10;/*獲取當前a的十位數(shù),1*/b=b*10+a%10;/*將當前b值擴大10倍+當前a,720+1=721*/printf("new:%d\n",b);}2、將本人縮寫拼音名字譯成密碼,密碼規(guī)律是用本來的字母后面第3個字符代替本來的字母。如劉欣鵬的縮寫拼音名字為lxp,密碼為o{s。#include<stdio.h>main(){charc1='l',c2='x',c3='p';c1=c1+3;c2=c2+3;c3=c3+3;printf("%c%c%c\n",c1,c2,c3);}訓練2.1:下面的程序可以把攝氏溫度c轉(zhuǎn)化為華氏溫度f,轉(zhuǎn)化公式為3259cf,程序中有多處錯誤,請改正錯誤后運營對的的程序。#include<stdio.h>main(){floatc=0,F=0;printf("inputc:");scanf("%f",c);f=(9/5)·c+32;print("c=%f,f=%f\n",&c,&f);}擴展:把程序功能改為:輸入華氏溫度f,計算攝氏溫度c。#include<stdio.h>main()答:#include<stdio.h>main(){floatc=0,f=0;printf("inputc:");scanf("%f",&c);f=((float)9/5)*c+32;printf("c=%f,f=%f\n",c,f);{floatc=0,f=0;printf("inputf:");scanf("%f",&f);c=(f-32)*5/9;printf("c=%.2f,f=%.2f\n",c,f);}訓練2.2:下面程序是把500分鐘用小時和分鐘顯示,程序中有多處錯誤,請改正錯誤后運營對的的程序。#include<stdio.h>main(){intm=0;h=500/60;m=500%60;Printf("500minutes:%dhoursand%dminutes,"h,m);}擴展:不用500這一特殊數(shù)據(jù),而改為輸入的任意整數(shù),實現(xiàn)相同功能。#include<stdio.h>main(){inta=0,m=0,h=0;scanf("%d",&a);h=a/60;m=a%60;printf("%dminutes:%dhoursand%dminutes,",a,h,m);}第三章:選擇結(jié)構(gòu)程序設計補充實驗:1、輸入一個字符,若該字符為小寫字母,將其轉(zhuǎn)換為相應大寫字母;若為數(shù)字字符,則轉(zhuǎn)換為對應數(shù)字,其他字符按原樣輸出。#include<stdio.h>main(){charc='\0';scanf("%c",&c);if(c>='a'&&c<='z')printf("upperletter:%c\n",c-32);elseif(c>='0'&&c>='9')printf("digit:%d\n",c-'\0');elseprintf("letter:%c\n",c);}2、編寫程序,求下面分段函數(shù)的值,規(guī)定x的值從鍵盤輸入。時)(當時)(當時)(當時)當10101053x502x0(0y2xxxx答:#include<stdio.h>main(){intm=0,h=0;/*未定義變量h*/h=500/60;m=500%60;printf("500minutes:%dhoursand%dminutes,",h,m);/*printf中的p應小寫,且雙引號后缺少逗號*/}#include<stdio.h>#include<stdio.h>main(){doublex=0.0,y=0.0;intk=0;scanf("%lf",&x);k=1*(x<0)+2*(x>=0&&x<5)+3*(x>=5&&x<10)+4*(x>=10);switch(k){case1:y=0;break;case2:y=x+2;break;case3:y=x*x-3;break;case4:y=10;break;}printf("x=%lf,y=%lf\n",x,y);}訓練3.1:輸入一個字符,假如是數(shù)字字符,則轉(zhuǎn)換成相應的數(shù)字。#include<stdio.h>main(){charch='\0';inta=-1;ch=getchar();if(ch>='0'&&ch<='9'){a=ch-'0';printf("charter%c,digit:%d\n",ch,a);}elseprintf("%cisnotdigit\n",ch);}擴展:將程序的功能改為:假如所輸入的字符為大寫字母,則將其轉(zhuǎn)換為小寫字母。請使用庫函數(shù)判斷和轉(zhuǎn)換。#include<stdio.h>#include<ctype.h>main(){charch='\0';ch=getchar();printf("theinputcharteris%c\n",ch);if(isupper(ch)){ch=tolower(ch);printf("Thecorrespondinglowercaseletteris%c\n",ch);}elseprintf("Itisnotthecapitalletter!\n");}訓練3.2:求一元二次方程ax2+bx+c=0的實根(規(guī)定a,b,c的值從鍵盤輸入,a≠0)#include<stdio.h>#include<math.h>main(){inta=0,b=0,c=0;floatdelta=0,x1=0,x2=0;scanf("%d%d%d",&a,&b,&c);delta=b*b-4*a*c;if(delta<0)printf("這方程無實根\n");else{x1=(-1*b+sqrt(delta))/(2*a);x2=(-1*b-sqrt(delta))/(2*a);printf("這方程的根是:x1=%.2f,x2=%.2f\n",x1,x2);}}擴展:完善程序的功能,假如a的值為0,顯示不是合法的一元二次方程的信息,否則,計算兩個實根。#include<stdio.h>#include<math.h>main(){inta=0,b=0,c=0;floatdelta=0,x1=0,x2=0;scanf("%d%d%d",&a,&b,&c);if(a==0)printf("輸入數(shù)據(jù)錯誤!\n");else{delta=b*b-4*a*c;if(delta<0)printf("這方程無實根\n");else{x1=(-1*b+sqrt(delta))/(2*a);x2=(-1*b-sqrt(delta))/(2*a);printf("這方程的根是:x1=%.2f,x2=%.2f\n",x1,x2);}}}訓練3.3:輸入某年的年份,判斷此年是不是閏年。判斷閏年的方法是:若該年份能被400整除,或能被4整除而不能被100整除,則此年為閏年,否則為平年。#include<stdio.h>#include<math.h>main(){intyear=0;scanf("%d",&year);if(year%400==0||(year%4==0&&year%100!=0))printf("%d年是閏年!\n",year);elseprintf("%d年是平年\n",year);}擴展:使用不嵌套的確if-else語句實現(xiàn)功能。當輸入的年份為零或負數(shù)時,要顯示信息“Error!”。#include<stdio.h>#include<math.h>main(){intyear=0,flag=0;scanf("%d",&year);if(year%400==0)flag=1;if(year%4==0&&year%100!=0)flag=1;if(year<=0)flag=-1;if(flag==-1)printf("Error!\n");if(flag==1)printf("%d年是閏年!\n",year);if(flag==0)printf("%d年是平年\n",year);}訓練3.4:根據(jù)輸入的生日(年y月m日d)和今天的日期(年yt月mt日dt)計算并輸出實際年齡。#include<stdio.h>main(){inty=0,m=0,d=0,yt=0,mt=0,dt=0;intage=0;scanf("%d%d%d",&y,&m,&d);scanf("%d%d%d",&yt,&mt,&dt);age=yt-y;if(mt<m)age--;elseif(mt==m&&dt<d)age--;printf("年齡是:%d\n",age);}擴展:根據(jù)輸入的3個邊長,a,b,c,判斷它們能否構(gòu)成三角形;若能構(gòu)成三角形,繼續(xù)判斷該三角形是等邊、等腰還是一般三角形。#include<stdio.h>main(){inta=0,b=0,c=0;scanf("%d%d%d",&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a)if(a==b||a==c||b==c)if(a==b&&b==c)printf("這是一個等邊三角形\n");elseprintf("這是一個等腰三角形\n");elseprintf("這是一個一般三角形\n");elseprintf("這不是三角形\n");}第四章:循環(huán)結(jié)構(gòu)程序設計補充實驗:1、一頭母牛每年初生一頭小母牛,每頭小母牛從第4年起,年初也生小母牛。編寫程序計算,第2023時牛的頭數(shù)。#include<stdio.h>main(){inti=0,a=2,b=3,c=4,d=0;for(i=4;i<=20;i++){d=c+a;a=b;b=c;c=d;}訓練4.2:從鍵盤輸入的字符中記錄數(shù)字字符的個數(shù),規(guī)定用換行符結(jié)束循環(huán)。#include<stdio.h>main(){intcount=0;charch='\0';ch=getchar();while(ch!='\n'){if(ch>='0'&&ch<='9')count++;ch=getchar();}printf("%d\n",count);}擴展:從鍵盤輸入的字符中將“0”~“8”字符改為其后的數(shù)字字符,將“9”字符改為“0”字符,規(guī)定用“#”字符結(jié)束循環(huán)。#include<stdio.h>main(){charch='\0';ch=getchar();while(ch!='#'){if(ch>='0'&&ch<='8')ch=ch+1;elseif(ch=='9')ch='0';putchar(ch);ch=getchar();}}訓練4.3:編寫用人機對話形式進行加、減、乘、除運算的程序。用戶每輸入一次運算符和運算數(shù),系統(tǒng)輸出相應的計算結(jié)果。當輸入的運算符為“#”時結(jié)束循環(huán)。#include<stdio.h>main(){inti=1,flag=0;floata=0,b=0,result=0;charsym='\0';printf("%.2f%c%.2f",&a,&sym,&b);while(sym!='#'){switch(sym){case'+':result=a+b;break;case'-':result=a-b;break;case'*':result=a*b;break;case'/':result=a/b;break;default:flag=2;}if(flag==0){printf("%.2f%c%.2f=%.2f\n",a,sym,b,result);i++;}elseprintf("%cisanillegalcharacter!\n",sym);printf("(%d)\n",i);scanf("%f%c%f",&a,&sym,&b);flag=0;}}擴展:在Switch語句中,完善“case’/’”的分支,即假如除數(shù)為0,給flag賦值1,否則計算兩個數(shù)的商。退出switch語句后,假如flag的值為1,顯示除數(shù)為0的錯誤信息。#include<stdio.h>main(){inti=1,flag=0;floata=0,b=0,result=0;charsym='\0';printf("(%d)\n",i);scanf("%f%c%f",&a,&sym,&b);while(sym!='#'){switch(sym){case'+':result=a+b;break;case'-':result=a-b;break;case'*':result=a*b;break;case'/':if(b==0)flag=1;elseresult=a/b;break;default:flag=2;}if(flag==0){printf("%.2f%c%.2f=%.2f\n",a,sym,b,result);i++;}if(flag==1)printf("Dividedby0!\n");if(flag==2)printf("%cisanillegalcharacter!\n",sym);printf("(%d)\n",i);scanf("%f%c%f",&a,&sym,&b);flag=0;}}訓練4.4:編寫一個循環(huán)程序,當從鍵盤輸入字符Y或y或N或n,則終止循環(huán)否則一直等待輸入。#include<stdio.h>#include<conio.h>main(){charch='\0';printf("Doyoucontinue(Y/N)?\n");do{ch=getch();if(ch=='Y'||ch=='y'||ch=='N'||ch=='n')break;printf("Error,pleaseinputagain.\n");}while(1);printf("Right!\n");}擴展:在如下菜單中反復選擇菜單項,選擇3時結(jié)束循環(huán)。1、Hello!2.Welcome!3.Good-bye!#include<stdio.h>#include<conio.h>main(){inta=0;do{printf("1.Hello!\n");printf("2.Welcome!\n");printf("3.Good-bye!\n");scanf("%d",&a);switch(a){case1:printf("Hello!\n");printf("Pressanykeytocontinue…\n");getch();break;case2:printf("Welcome!\n");printf("Pressanykeytocontinue…\n");getch();break;case3:printf("Good-bye\n");break;}}while(a!=3);}第五章:數(shù)組補充實驗1、假設數(shù)組a中已經(jīng)存放20個整數(shù),編寫程序,將其中所有偶數(shù)存放在數(shù)組b中,將所有奇數(shù)存放在數(shù)組a中。#include<stdio.h>main(){inti=0,j=0,m=0;inta[20]={1,33,3,4,6,7,21,9,10,11,12,13,14,15,16,18,19,20,23,45};intb[20]={0},c[20]={0};printf("數(shù)組A中數(shù)據(jù)是:\n");for(i=0;i<20;i++)printf("%d",a[i]);printf("\n");for(i=0;i<20;i++)if(a[i]%2==0){b[j]=a[i];j++;}else{c[m]=a[i];m++;}printf("數(shù)組B中數(shù)據(jù)是:\n");for(i=0;i<j;i++)printf("%d",b[i]);printf("\n");printf("數(shù)組C中數(shù)據(jù)是:\n");for(i=0;i<m;i++)printf("%d",c[i]);printf("\n");}2、假設四名盜竊嫌疑犯中有一人是小偷,且每個人要么說真話,要么說假話,根據(jù)下面回答記錄決斷誰是小偷。甲說:“乙沒偷,是丁偷的”;乙說:“我沒偷,是丙偷的”;丙說:“甲沒偷,是乙偷的”;丁說:“我沒偷”#include<stdio.h>main(){inti=0,j=0,a[4]={0};for(i=0;i<4;i++){a[i]=1;if(a[3]+a[1]==1&&a[2]+a[1]==1&&a[0]+a[1]==1){printf("這小偷是:%c\n",'A'+i);break;}elsefor(j=0;i<4;j++)a[j]=0;}}3、編寫程序,輸出3*4矩陣中數(shù)據(jù)為負數(shù)的元素所在的位置和元素值,矩陣數(shù)據(jù)由鍵盤輸入;#include<stdio.h>main(){inti=0,j=0,a[3][4]={0};printf("請輸入數(shù)組數(shù):\n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",a[i][j]);printf("輸出數(shù)組A:");for(i=0;i<3;i++)for(j=0;j<4;j++){printf("%d",a[i][j]);printf("\n");}for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]<0);printf("a[%d][%d]=%d\n",i,j,a[i][j]);}4、編寫程序,數(shù)組中已存放若干身份證號碼,輸入某年某月某日期,自動給那天生日的人顯示賀詞。日期按8位輸入,如:19870109#include<stdio.h>#include<string.h>main(){charcard[5][19]={"1231231","1231232","1231235","1231230","1231232"};chartemp[19]="",today[9]="";inti=0;printf("請輸入日期:");scanf("%s",today);for(i=0;i<5;i++){strcpy(temp,card[i]+6);temp[8]='\0';if(strcmp(temp,today)==0)printf("Hello!%s:Happybirthday!\n",card[i]);}}上機訓練1、若有已按降序排列的數(shù)列20,18,16,14,12,10,8,6,4,2,現(xiàn)規(guī)定將鍵盤輸入的一個數(shù)插入到該數(shù)列中,并仍然按降序排列。#include<stdio.h>main(){inti=0,j=0,k=0,a[11]={20,18,16,15,12,10,5,4,2,-10};printf("輸出原排序數(shù)組:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");printf("請輸入要插入的數(shù):\n");scanf("%d",&k);while(a[j]>=k&&j<10)j++;for(i=10;i>=j+1;i--)a[i]=a[i-1];a[j]=k;printf("輸出插入數(shù)字后的數(shù)組:\n");for(i=0;i<11;i++)printf("%d",a[i]);printf("\n");}擴展:在本訓練題中,去掉已排好序的限制條件,并且在最大元素后插入一個數(shù)。#include<stdio.h>main(){inti=0,max=0,k=0,a[11]={23,45,64,-15,12,32,5,8,55,2};printf("輸出原排序數(shù)組:\n");for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");printf("請輸入要插入的數(shù):\n");scanf("%d",&k);for(i=1;i<10;i++)if(a[i]>a[max])max=i;for(i=10;i>=max+2;i--)a[i]=a[i-1];a[max+1]=k;printf("輸出插入數(shù)字后的數(shù)組:\n");for(i=0;i<11;i++)printf("%d",a[i]);printf("\n");}2、擲100次骰子,記錄各點數(shù)出現(xiàn)的次數(shù)。#include<stdio.h>#include<time.h>#include<stdlib.h>main(){inti=0,n=0,a[7]={0};srand(time(0));printf("所有數(shù)據(jù):\n");for(i=0;i<100;i++){n=rand()%6+1;a[n]=a[n]+1;printf("%d",n);}printf("\n輸出骰子6個點分別出現(xiàn)次數(shù):\n");printf("point1point2point3point4point5point6:\n");for(i=1;i<=6;i++)printf("%5d",a[i]);printf("\n");}擴展:在原功能基礎(chǔ)上再輸出出現(xiàn)的點數(shù)最多的元素值。#include<stdio.h>#include<time.h>#include<stdlib.h>main(){inti=0,j=0,n=0,a[7]={0};srand(time(0));printf("所有數(shù)據(jù):\n");for(i=0;i<100;i++){n=rand()%6+1;a[n]=a[n]+1;printf("%d",n);}printf("\n輸出骰子6個點分別出現(xiàn)次數(shù):\n");printf("point1point2point3point4point5point6:\n");for(i=1;i<=6;i++)printf("%5d",a[i]);printf("\n");for(i=1;i<=6;i++)if(a[i]>a[j])j=i;printf("%d點是出現(xiàn)最多的,總的有%d次!\n",j,a[j]);}3、不使用strcat函數(shù)實現(xiàn)連接兩個字符串的功能。#include<stdio.h>main(){inti=0,j=0;chara[80]="",b[30]="";printf("請輸入二個字符串:\n");gets(a);gets(b);while(a[i]!='\0')i++;while(b[j]!='\0'){a[i]=b[j];i++;j++;}a[i]='\0';printf("輸出鏈接后的字符串:\n");puts(a);}擴展:不使用strcmp函數(shù)實現(xiàn)比較兩個字符串的功能。找第1個不相等字符的代碼可用“while(a[i]==b[i]&&a[i]!=’\0’)i++;”#include<stdio.h>main(){inti=0;chara[30]="",b[30]="";printf("請輸入二個字符串:\n");gets(a);gets(b);while(a[i]==b[i]&&a[i]!='\0')i++;if(a[i]>b[i])printf("第一個字符串>第二個字符串\n");if(a[i]==b[i])printf("兩個字符串相等\n");if(a[i]<b[i])printf("第一個字符串<第二個字符串\n");}4、分別計算5*5矩陣的兩條對角線元素之和,規(guī)定每行每列元素值由隨機函數(shù)(rand函數(shù),參見訓練5.2)產(chǎn)生,且為1至20中的整數(shù)。#include<stdio.h>#include<time.h>#include<stdlib.h>main(){inti=0,j=0,s1=0,s2=0,a[5][5]={0};srand(time(0));for(i=0;i<5;i++)for(j=0;j<5;j++)a[i][j]=rand()%20+1;printf("輸出數(shù)組:\n");for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%5d",a[i][j]);printf("\n");}printf("\n\n");for(i=0;i<5;i++){s1=s1+a[i][i];s2=s2+a[i][4-i];}printf("s1=%d,s2=%d\n",s1,s2);}擴展:計算兩個4*5矩陣的和,兩個矩陣的每行每列元素值由隨機函數(shù)產(chǎn)生,且為1~20中的整數(shù)。提醒:兩個矩陣之和,就是兩個矩陣的相應元素相加是第3矩陣相應元素的值。#include<stdio.h>#include<time.h>#include<stdlib.h>main(){inti=0,j=0,s=0,a[4][5]={0},b[4][5]={0},c[4][5]={0};srand(time(0));for(i=0;i<4;i++)for(j=0;j<5;j++){a[i][j]=rand()%20+1;b[i][j]=rand()%20+1;}printf("輸出數(shù)組A:\n");for(i=0;i<4;i++){for(j=0;j<5;j++)printf("%5d",a[i][j]);printf("\n");}printf("輸出數(shù)組B:\n");for(i=0;i<4;i++){for(j=0;j<5;j++)printf("%5d",b[i][j]);printf("\n");}for(i=0;i<4;i++)for(j=0;j<5;j++)c[i][j]=a[i][j]+b[i][j];printf("輸出數(shù)組C:\n");for(i=0;i<4;i++){for(j=0;j<5;j++)printf("%5d",c[i][j]);printf("\n");}}第6章:指針補充實驗:1、用指針實現(xiàn)從銀行得到一字符串,然后逆序存回數(shù)組a中。#include<stdio.h>#include<string.h>main(){inti=0,lenth=0;charc='\0',a[80]="",*p=a,*q=NULL;puts("輸入一個字符串");gets(p);puts(p);lenth=strlen(p);q=p+lenth-1;for(i=0;i<lenth/2;i++){c=*(p+i);*(p+i)=*(q-i);*(q-i)=c;}puts(p);}上機實訓訓練6-1:已有定義“inta[11]={1,2,3,4,5,6,7,8,9,10};”,規(guī)定通過指針完畢在一維數(shù)組a中,且下標為j(0≤j≤10)處插入值100;#include<stdio.h>main(){inti=0,j=0,*p=a;inta[11]={1,2,3,4,5,6,7,8,9,10};printf("輸出原數(shù)組值:");for(i=0;i<10;i++)printf("%4d",p[i]);printf("\n");printf("請輸入100插入的位置:\n");scanf("%d",&j);for(i=10;i>=j+1;i--)a[i]=a[i-1];a[j]=100;printf("輸出插入100后的數(shù)組數(shù)列:\n");for(i=0;i<11;i++)printf("%4d",p[i]);printf("\n");}擴展:若有兩個已按升序排列的數(shù)列a和b,數(shù)列a為1,7,9,11,13,15,17,19,數(shù)列b為“2,4,6,8,10”,現(xiàn)將這兩個數(shù)列合并為c數(shù)列,且c數(shù)列仍按升序排列,規(guī)定通過指針完畢。#include<stdio.h>main(){inti=0,j=0,k=0;inta[8]={1,7,9,11,13,15,17,19},b[5]={2,4,6,8,10},c[20]={0},*p=a,*q=b,*w=c;printf("A數(shù)列值是:");for(i=0;i<8;i++)printf("%4d",p[i]);printf("\nB數(shù)列值是:");for(i=0;i<5;i++)printf("%4d",q[i]);i=0;j=0;while(i<8&&j<5){if(p[i]>q[j]){w[k]=q[j];k++;j++;}else{w[k]=p[i];k++;i++;}}while(i<8){w[k]=p[i];k++;i++;}while(j<5){w[k]=q[j];k++;j++;}printf("\nC數(shù)列值是:");for(i=0;i<k;i++)printf("%4d",w[i]);}訓練6-2:已有定義“inta[10]={1,2,3,4,5,6,7,8,9,10}”,規(guī)定用指針的方法從一維數(shù)組a中刪除下標為k的元素值。#include<stdio.h>main(){inti=0,j=0;inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;printf("輸出原數(shù)組值:");for(i=0;i<10;i++)printf("%4d",p[i]);printf("\n");printf("請輸入要刪除元素的位置:\n");scanf("%d",&j);for(i=j;i<9;i++)a[i]=a[i+1];printf("輸出刪除后的數(shù)組數(shù)列:\n");for(i=0;i<9;i++)printf("%4d",p[i]);printf("\n");}擴展:已有定義“inta[10]={2,4,7,15,34,67,23,9,56,12};”,規(guī)定用指針的方法在一維數(shù)組a中找出值最大的元素,并從數(shù)組a中刪除該值。提醒:可參考例5.9完畢在數(shù)組a中找出值最大元素的下標并將該值賦予k的操作。#include<stdio.h>main(){inti=0,j=0;inta[10]={2,4,7,15,34,67,23,9,56,12},*p=a;printf("輸出原數(shù)組值:");for(i=0;i<10;i++)printf("%4d",p[i]);printf("\n");for(i=0;i<10;i++)if(p[j]<p[i])j=i;printf("此數(shù)列中最大數(shù)是:%d\n",p[j]);for(i=j;i<9;i++)a[i]=a[i+1];printf("輸出刪除后的數(shù)組數(shù)列:\n");for(i=0;i<9;i++)printf("%4d",p[i]);printf("\n");}訓練6-3:設有兩個字符串a(chǎn)和b,規(guī)定將a、b串相應字符中的較小者存放在數(shù)組c的相應位置上。如:a和b字符串分別為“boy”、“girl”,則c中字符串“bir”。#include<stdio.h>main(){inti=0,j=0;chara[80]={0},b[80]={0},c[80]={0},*p=a,*q=b;printf("請輸入二個字符串\n");gets(p);gets(q);while(*p&&*q){if(*p<*q)c[i]=*p;elsec[i]=*q;p++;q++;i++;}printf("輸出整理后字符數(shù)組:\n");puts(c);}擴展:設有兩個字符串a(chǎn)和b,規(guī)定將a、b串相應字符中的較大者存放在數(shù)組c的相應位置上。提醒:最后要將長串余下的字符通過字符串連接函數(shù)接到c串之后。這是由于短串有效字符結(jié)束后余下的字符是’\0’,’\0’小于長串的相應有效字符。#include<stdio.h>#include<string.h>main(){inti=0,j=0;chara[80]={'\0'},b[80]={'\0'},c[80]={'\0'},*p=a,*q=b;printf("請輸入二個字符串\n");gets(p);gets(q);while(*p&&*q){if(*p>*q)c[i]=*p;elsec[i]=*q;p++;q++;i++;}if(*p!='\0')strcat(c,p);elsestrcat(c,q);printf("輸出整理后字符數(shù)組:\n");puts(c);}訓練6-4:編寫將兩個字符串連接的程序,規(guī)定用指針變量解決(可參見訓練5.3)。#include<stdio.h>main(){inti=0,j=0;chara[80]={'\0'},b[80]={'\0'},*p=a,*q=b;printf("請輸入二個字符串\n");gets(p);gets(q);while(*p!='\0')p++;while(*q!='\0'){*p=*q;p++;q++;}*p='\0';printf("輸出整理后字符數(shù)組:%s\n",a);}擴展:通過指針完畢字符串a(chǎn)和字符串b的比較。如何比較兩字符串的大小請見例5.18。提醒:一方面將指針p和q分別指向a串串首和b串串首;然后通過語句“while(*p==*q&&*p!=’\0’){p++;q++;},在兩串中找到第1個不相等到的字符;假如當前*p>*q,說明第1個字符串大于第2個字符串,假如當前工作*p==*q,說明兩個字符串相等,假如當前*p<*q,說明第1個字符串小于第2個字符串。#include<stdio.h>main(){inti=0,j=0;chara[30]={'\0'},b[30]={'\0'},*p=a,*q=b;printf("請輸入二個字符串\n");gets(p);gets(q);while(*p==*q&&*p!='\0'){p++;q++;}if(*p>*q)printf("第一個字符串大于第二個字符串\n");if(*p==*q)printf("二個字符串相同\n");if(*p<*q)printf("第一個字符串小于第二個字符串\n");}第7章:函數(shù)補充實驗1、編寫函數(shù)myfun,并調(diào)用該函數(shù)求任意整數(shù)的逆序數(shù)。如整數(shù)12345的逆序數(shù)為54321。#include<stdio.h>intmyfun(inta);main(){inta=0,k=0;printf("Pleaseenterainteger:");scanf("%d",&a);printf("old:%d\n",a);k=myfun(a);printf("New:%d\n",k);}myfun(inta){intb=0;while(a!=0){b=b*10+a%10;a=a/10;}returnb;}2、編寫程序,輸入若干個單詞(單詞間用空格隔開),調(diào)用函數(shù)myfun在最后一個單詞前后加“#”。如輸入bookpennote,則輸出bookpen#note##include<stdio.h>#include<string.h>voidmyfun(char*p);main(){charch[80]="";printf("Pleasenteastring:");gets(ch);printf("oldstring:%s\n",ch);myfun(ch);printf("Newstring:%s\n",ch);}voidmyfun(char*p){inti=0;i=strlen(p);p[i+2]='\0';p[i+1]='#';do{p[i]=p[i-1];i--;}while(p[i]!='');p[i+1]='#';}3、N個學生,每人有M門課考試,編寫程序,輸入每個學生的成績,調(diào)用函數(shù)計算每個學生的平均成績,并輸出有不及格科目的學生。#include<stdio.h>#defineN2#defineM3fun(intsco[N][M]);staticdoublesum=0;for(i=1;i<=m;i++)fac=fac*i;sum=sum+fac;returnsum;}doublemyfun2(intm){inti=0,fac=1;doublesum=0;for(i=1;i<=m;i++)fac=fac*i;sum=sum+fac;returnsum;}上機實訓訓練7-1:將1~100以內(nèi)的所有素數(shù)存放到一維數(shù)組s中,規(guī)定判斷素數(shù)在函數(shù)中完畢。#include<stdio.h>#include<math.h>intmyprime(inta){inti=0,end=0;end=(int)sqrt((double)a);for(i=2;i<=end;i++)if(a%i==0)return0;return1;}main(){inta=0,n=0,i=0,k=0,s[100]={0};for(a=2;a<=100;a++){k=myprime(a);if(k==1){s[n]=a;n++;}}printf("1to100primenumberhas:\n");for(i=0;i<n;i++)printf("%3d",s[i]);printf("\n");}擴展:將1~100的所有3的倍數(shù)值存放到一維數(shù)組s中,規(guī)定判斷在函數(shù)中完畢。#include<stdio.h>#include<math.h>intmyprime(inta){if(a%3==0)return1;return0;}main(){inta=0,n=0,i=0,k=0,s[100]={0};for(a=1;a<=100;a++){k=myprime(a);if(k==1){s[n]=a;n++;}}printf("1to1003multipleshas:\n");for(i=0;i<n;i++)printf("%3d",s[i]);printf("\n");}訓練7-2:已有定義“inta[10]={1,2,3,4,5,6,7,8,9,10};”,輸入一個下標值k,從數(shù)組中刪除與該下標相應的元素,規(guī)定刪除操作在函數(shù)中完畢??蓞⒖祭?.10#include<stdio.h>intmydel(int*p,intn,intk){inti=0;for(i=k;i<n-1;i++)p[i]=p[i+1];n--;returnn;}voidmyout(int*a,intn){while(n>0){printf("%4d",*a);a++;n--;}printf("\n");}main(){intn=0,k=0,a[10]={1,2,3,4,5,6,7,8,9,10};printf("Beforethedeletionarrayis:");myout(a,10);printf("pleaseinputdeletestheelementthesubscriptk:\n");scanf("%d",&k);n=mydel(a,10,k);printf("Afterthedeletionarrayis:");myout(a,n);}擴展:已有定義“inta[10]={2,4,7,15,34,67,23,9,56,12};”,在一維數(shù)組a中找出值最大的元素,并從數(shù)組a中刪除該值,規(guī)定刪除操作在函數(shù)中完畢。#include<stdio.h>intmydel(int*p,intn){inti=0,k=0;for(i=1;i<n;i++)if(p[k]<p[i])k=i;for(i=k;i<n-1;i++)p[i]=p[i+1];n--;returnn;}voidmyout(int*a,intn){while(n>0){printf("%4d",*a);a++;n--;}printf("\n");}main(){intn=0,k=0,a[10]={2,78,26,92,-56,125,20,45,92,53};printf("Beforethedeletionarrayis:");myout(a,10);n=mydel(a,10);printf("Afterthedeletionarrayis:");myout(a,n);}訓練7-3:編寫函數(shù),計算二維數(shù)組中除周邊元素之外的其他元素之和。#include<stdio.h>#defineN4voidmyout(inta[N][N]);intmyfun(inta[N][N]);main(){intsum=0,a[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};myout(a);sum=myfun(a);printf("thesum:%d\n",sum);}voidmyout(inta[N][N]){inti=0,j=0;for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}}intmyfun(inta[N][N]){inti=0,j=0,sum=0;for(i=1;i<N-1;i++)/*i≠0,N-1不含第1行和最后一行*/for(j=1;j<N-1;j++)/*j≠0,N-1不含第1列和最后一列*/sum=sum+a[i][j];returnsum;}擴展:編寫函數(shù),查找n*n矩陣主對角線值最大元素及其下標。#include<stdio.h>#defineN4voidmyout(inta[N][N]);intmymax(inta[N][N]);main(){intsum=0,a[N][N]={21,2,3,4,5,6,7,8,9,10,78,45,13,14,15,26};myout(a);sum=mymax(a);}voidmyout(inta[N][N]){inti=0,j=0;for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%4d",a[i][j]);printf("\n");}}intmymax(inta[N][N]){inti=0,j=0;for(i=0;i<N;i++)if(a[j][j]<a[i][i])j=iprintf("thebiggestelement:%d,thesubscript:%d,%d\n",a[j][j],j,j);}第8章:結(jié)構(gòu)體和其他構(gòu)造類型補充實驗:某商場2023年各部門每季度銷售銷售如下表所示。編寫程序,計算該商場的各季度銷售總計、部門年銷售總計和商場年銷售總計,并輸出。2023年各部門每季度銷售額(萬元)百貨部家電部服裝部季度銷售總計第1季度6371106912第2季度730998850第3季度6511210956第4季度5969201011部門年銷售總計#include<stdio.h>structsale{intseason;floatmon[4];};main(){structsalemarket[4]={{1,637.0,1106.0,912.0},{2,730.0,998.0,850.0},{3,651.0,1210.0,956.0},{4,596.0,920.0,1011.0}};floatysum[4]={0};inti=0,j;printf("seasongoodsaplianceclothing\n");for(i=0;i<4;i++){printf("%d",i+1);for(j=0;j<3;j++)printf("%12.1f",market[i].mon[j]);printf("\n");}for(i=0;i<4;i++)for(j=0;j<3;j++)market[i].mon[3]=market[i].mon[3]+market[i].mon[j];for(i=0;i<4;i++)for(j=0;j<4;j++)ysum[i]=ysum[i]+market[j].mon[i];printf("seasongoodsaplianceclothingtotal\n");for(i=0;i<4;i++){printf("%d",i+1);for(j=0;j<4;j++)printf("%12.1f",market[i].mon[j]);printf("\n");}printf("ayear\n");for(i=0;i<4;i++)printf("%12.1f",ysum[i]);printf("\n");}訓練8-1:讀入5位用戶的姓名(字符串)和電話號碼(8位數(shù)字),輸出這些用戶的姓名和電話號碼,并按電話號碼由小到大的順序排列,輸出排列后用戶的姓名和電話號碼。#include<stdio.h>#defineN5structuser{charname[20];longnum;};main(){structusersp[N]={0},temp={0};inti=0,j=0,k=0;printf("Entername&phonenumber:\n");for(i=0;i<N;i++)scanf("%s%ld",sp[i].name,&sp[i].num);printf("name&phonenumber:\n");for(i=0;i<N;i++)printf("%s,%ld\n",sp[i].name,sp[i].num);for(i=0;i<N-1;i++)/*按成員num的大小重新排列sp數(shù)組的元素*/{k=i;for(j=i+1;j<N;j++)if(sp[k].num>sp[j].num)k=j;if(k!=i){temp=sp[k];sp[k]=sp[i];sp[i]=temp;}}printf("aftersortedname&phonenumber:\n");for(i=0;i<N;i++)printf("%s,%ld\n",sp[i].name,sp[i].num);}擴展:讀入5位用戶的姓名(字符串)和電話號碼(8位數(shù)字),并按姓名的字典順序排列,輸出排列后用戶的姓名和電話號碼。提醒:題目規(guī)定姓名為字符串,因此在排序操作中要調(diào)用系統(tǒng)標準函數(shù)(字符串比較函數(shù))進行比較。#include<stdio.h>#include<string.h>#defineN5structuser{

溫馨提示

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

評論

0/150

提交評論