AnyviewC程式設計作業系統——支援程式視覺化執行、除錯和測評
AnyviewC程式設計作業系統——支援程式視覺化執行、除錯和測評
AnyviewC題庫:C程式設計 例題62--習題239(2012-4-27)
1.025 編寫一個C程式,用函式printf(char
*s)輸出以下3行資訊:第1章 程式設計和C語言(例題0--習題0/2)
********************
* Very Good! *
********************
注意:(1)要求精確到每個字元、空格、字母及其大小寫。
(2)可多次呼叫printf(char *s),每次僅一個字串引數。
1.055 編寫一個程式,輸入a、b、c三個值,輸出其中最大值。要求不改變下列給定的程式框架內容,填入合適語句,使其成為滿足題目要求的正確程式。
void main()
{ int a,b,c,max;
scanf("%d,%d,%d",&a,&b,&c); /*請輸入三個數*/
printf("最大數為:"%d",max);
}
第2章 演算法——程式的靈魂
第3章 最簡單的程式設計——順序結構程式設計(例題49--習題0/61)
(含:資料型別、運算和表示式)
【例題3.010e】顯示字串
編寫程式,顯示字串"Let's study C."並換行。
【程式】
void main()
{ printf("Let's study C.\n"); //'\n'為換行符,可出現在字串中
}
【習題3.012】用printf語句顯示一行字元編寫程式,顯示字串"I am a student."後換行。
【程式】
void main()
{
printf( );
}
【習題3.013】顯示一行
編寫程式,顯示字串"C Language Program"後換行。
【例題3.020e】用printf語句顯示多個字串
編寫程式,用printf語句將3個字串"Let's","study"和"programming"用空格分隔顯示在同一行。
【程式】
void main()
{ printf("Let's "); //末尾加一個空格,但不換行
printf("study "); //末尾加一個空格,但不換行
printf("programming\n"); //顯示後換行
}
【習題3.023】用printf語句在一行上顯示多個字串編寫程式,用printf語句將3個字串"I","love"和"China"用空格分隔顯示在同一行。
【程式】
void main()
{ printf( );
printf( );
printf( ); //注意:最後要換行
}
【例題3.030e】換行顯示
編寫程式,在顯示字串"C Language"後,換行顯示字串"C++ Language"。
【程式】
void main()
{ printf("C Language\n"); //顯示後換行
printf("C++ Language\n"); //顯示後換行
}
【習題3.032】換行顯示
編寫程式,顯示字串"Apple is red."後,換行顯示"Banana is yellow."。
【程式】
void main()
{ printf( );
printf( ); //最後一行顯示後,通常也換行
}
【習題3.033】顯示多行
編寫程式,將字串"Apple iPad","Apple iPhone"和"Apple iPod"分三行顯示。注意:最後一行顯示後,也應換行。
【例題3.040e】隔行顯示
編寫程式,在顯示字串"C Language"後,隔1行再顯示字串"C++ Language"。
【程式】
void main()
{ printf("C Language\n"); //顯示後換行
printf("\n"); //只換行,即隔1行再顯示
printf("C++ Language\n"); //顯示後換行
}
【習題3.042】隔行顯示
編寫程式,在顯示字串"Apple is red."後,隔1行再顯示"Banana is yellow."。
【程式】
void main()
{ printf( );
printf( ); //只換行,實現“隔1行”
printf( ); //最後一行顯示後,通常也換行
}
【例題3.050e】註釋
編寫程式,顯示字串"C Language Exercise",要求在主函式之前加上內容為C Language Exercise的註釋。
【程式】
/*C Language Exercise*/ //符合題意的註釋
void main()
{ printf("C Language Exercise\n");//顯示
}
【習題3.053】註釋
編寫程式,顯示字串"C Program",並要求在第一行加註釋"Printf Test"。
【例題3.060e】整型變數,賦值,四則運算
編寫程式,分別給變數a賦值15和變數b賦值3,然後依次求並顯示兩者的和、差、積、商。
【程式】
void main()
{ int a,b,sum,min,tim,sep; //整形變數說明
a=15; //賦值
b=3; //賦值
sum=a+b; //加
min=a-b; //減
tim=a*b; //乘
sep=a/b; //除
printf("%d+%d=%d\n",a,b,sum);
printf("%d-%d=%d\n",a,b,min);
printf("%d*%d=%d\n",a,b,tim);
printf("%d/%d=%d\n",a,b,sep);
}
【習題3.063】整型變數,賦值,加減四則運算
編寫程式,分別給變數a賦值7和變數b賦值5,求a加b賦給c,a減去b賦給d,並顯示。
【程式】
void main()
{ int a,b,c,d;
a= ;
b= ;
c= ; //加
d= ; //減
printf("%d+%d=%d\n",a,b,c);
printf("%d-%d=%d\n",a,b,d);
}
【例題3.070e】餘數
編寫程式,將215÷9的商和餘數分別賦給c和d。
【程式】
void main()
{ int a,b,c,d; //整形變數說明
a=215; //賦值
b=9; //賦值
c=a/b; //將商賦給c
d=a%b; //將餘數賦給d
printf("%d/%d=%d...%d\n",a,b,c,d); //顯示
}
【習題3.073】整型變數,求商和餘數
在以下程式空缺處填寫合適內容,使得程式能夠分別給變數a賦值215,變數b賦值19,c賦值75,然後依次求a除以b,a除以c的商和餘數並顯示結果。
void main()
{ int a,b,c,d,e,f,g;
a=215;
b=19;
c=75;
d= /*a除以b的商*/
e= /*a除以b的餘數*/
f= /*a除以c的商*/
g= /*a除以c的餘數*/
printf("%d/%d=%d...%d\n",a,b,d,e);
printf("%d/%d=%d...%d\n",a,c,f,g);
}
【習題3.076】整型變數,賦值,乘除餘四則運算
編寫程式,分別給變數a賦值17和變數b賦值5,求a乘b賦給c,a÷b的商賦給d,餘賦給e,並顯示。
【程式】
void main()
{ int a,b,c,d,e;
a=
b=
c=
d=
e=
printf("%d*%d=%d\n",a,b,c); /* 顯示a乘b的積c */
printf("%d/%d=%d...%d\n",a,b,d); /* 顯示a除以b的商d */
printf("%d%%%d=%d...%d\n",a,b,e); /* 顯示a除以b的餘數e */
}
【例題3.080e】算術表示式
編寫程式,不使用變數,顯示35*25的值。
【程式】
void main()
{ printf("%d*%d=%d\n",35,25,35*25);//顯示結果
}
【習題3.083】算術表示式
編寫程式,不使用變數,顯示11+2*3的值。
【程式】
void main()
{ printf("%d+%d*%d=%d\n", );
}
【例題3.090e】算術表示式
編寫程式,先對整型變數a賦值15,b賦值10,然後將a+b與a-b的商賦給c,並顯示c的值。
【程式】
void main()
{ int a,b,c;
a=15;
b=10;
c=(a+b)/(a-b);
printf("(%d+%d)/(%d-%d)=%d\n",a,b,a,b,c);//顯示結果
}
【習題3.092】算術表示式
編寫程式,先對整型變數a賦值11,b賦值2,然後將a/b與b-a%10的乘積賦給c,並顯示c的值。
【程式】
void main()
{ int a,b,c;
a= ;
b= ;
c= ;
printf( );
}
在以下程式空缺處填寫合適內容,使得程式能夠分別給變數a賦值511,變數b賦值246,c賦值257,d賦值495,然後求(a+b)與(b-c)*(a-d)的商並賦給e和顯示結果。
void main()
{ int a,b,c,d,e;
printf("(%d+%d)/((%d-%d)*(%d-%d))=%d\n",a,b,b,c,a,d,e);
}
【例題3.100e】逗號運算子(也稱為順序運算子)
編寫程式,求a*b與c*d之和,其中用順序運算子對變數a,b,c和d依次賦值為8,7,5和6。
【程式】
void main()
{ int a,b,c,d,timsum;
a=8,b=7,c=5,d=6; //使用逗號分隔,4個賦值構成一個語句
timsum=a*b+c*d;
printf("%d*%d+%d*%d=%d\n",a,b,c,d,timsum);
}
【習題3.103】
在空缺處填寫合適內容,使得程式能夠在一個語句中,用逗號運算子依次對變數a,b和c賦值為27,36和7,求a+b與c的商並賦給d和顯示結果。
void main()
{ int a,b,c,d;
printf("(%d+%d)/%d=%d\n",a,b,c,d);
}
【習題3.106】逗號運算子(也稱為順序運算子)
在以下程式空缺處填寫合適內容,使得程式能夠在一個語句中利用逗號運算子依次將-25賦給a,5賦給b,a/b賦給c,最後顯示c的值。
【程式】
void main()
{ int a,b,c;
c=
printf("c=%d\n",c);
}
【例題3.110e】重複賦值
編寫程式,對變數a和b均賦值為5,變數c賦值為8,分行顯示a,b和c的平方值。
【程式】
void main()
{ int a,b,c;
a=b=5,c=8; //對a和b重複賦值
printf("%d*%d=%d\n",a,a,a*a);
printf("%d*%d=%d\n",b,b,b*b);
printf("%d*%d=%d\n",c,c,c*c);
}
【習題3.113】重複賦值,表示式,顯示
在以下程式空缺處填寫合適內容,使得程式能夠將變數a和b均賦值為20,c賦值為58,d賦值為表示式c-a/5除以c-2*b的商,並顯示該表示式和變數d的值的等式。
【程式】
void main()
{ int a,b,c,d;
a=b=
d=
printf("(%d-%d/5)/(%d-2*%d)=%d\n",c,a,c,b,d);
}
【例題3.120e】變數初始化
編寫程式,變數a和b分別賦值為123和20,求a和b的乘積。要求在進行變數說明的同時給變數賦值。
【程式】
void main()
{ int a=123,b=20; //在說明變數a和b的同時對其賦值(初始化)
int c;
c=a*b;
printf("%d*%d=%d\n",a,b,c);
}
【習題3.123】整型變數初始化,表示式,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數a賦值12,b賦值34,c賦值56,d賦值表示式a*b*c的值,並顯示該表示式和變數d的值的等式。
【程式】
void main()
{
printf("%d*%d*%d=%d\n",a,b,c,d);
}
【例題3.130e】浮點數(實數)
編寫程式,將789.456123賦給變數a,28.2468賦給變數b,求a和b的和、差、積、商。
【程式】
void main()
{ float a,b,sum,min,tim,sep; //實數型變數說明
a=789.456123;
b=28.2468;
sum=a+b;
min=a-b;
tim=a*b;
sep=a/b;
printf("%f+%f=%f\n",a,b,sum);
printf("%f-%f=%f\n",a,b,min);
printf("%f*%f=%f\n",a,b,tim);
printf("%f/%f=%f\n",a,b,sep);
}
【習題3.132】浮點數,賦值,加減四則運算
編寫程式,將1.234賦給變數a,23.456賦給變數b,求a加b賦給c,a減去b賦給d,並顯示。
【程式】
void main()
{ float a,b,c,d;
a= ;
b= ;
c= ; //加
d= ; //減
printf("%f+%f=%f\n",a,b,c);
printf("%f-%f=%f\n",a,b,d);
}
【習題3.133】浮點型變數,賦值,表示式,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數f賦值12.345,g賦值67.89,h賦值表示式f*g的值,並顯示該表示式和變數h的值的等式。
【程式】
void main()
{
f= ,g=
h=
printf("%.3f*%.2f=%f\n",f,g,h);
}
【習題3.135】浮點數,賦值,乘除四則運算
編寫程式,將111.234賦給變數a,23.456賦給變數b,求a乘b賦給c,a÷b賦給d,並顯示。
【程式】
void main()
{ float a,b,c,d;
printf("%.3f*%.3f=%f\n",a,b,c);
printf("%.3f/%.3f=%f\n",a,b,d);
}
【例題3.140e】浮點數計算
編寫程式,將圓周率3.14159賦給變數a,半徑7.24賦給變數b,求其圓面積和圓周長。
【程式】
void main()
{ float a,b,c,d;
a=3.14159;
b=7.24;
c=b*b*a;
d=2*a*b;
printf("area=%.3f\n",c); //按3位小數的格式顯示結果
printf("circ=%.4f\n",d); //按4位小數的格式顯示結果
}
【習題3.142】浮點數計算
編寫程式,給三角形的三邊長分別賦值:3.45賦給a,4.56賦給b,5.67賦給c,求其三邊長之和。
【程式】
void main()
{ float a,b,c;
printf("%.2f+%.2f+%.2f=%.2f\n",a,b,c,a+b+c);
}
【習題3.143】浮點型變數,賦值,表示式,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數f賦值2.345,g賦值6.789,h賦值f與g的平方和,並顯示h的值。
【程式】
void main()
{
printf("%f\n",h);
}
【習題3.145】浮點型變數,賦值,表示式,顯示在以下程式空缺處填寫合適內容, 使得程式能夠分別對變數f賦值-2.345,g賦值6.789,h賦值f與g的3次方和,並顯示h的值。
【程式】
void main()
{
printf("%f\n",h);
}
【例題3.150e】將整數轉換為浮點數
編寫程式,對變數a賦值為321,b賦值為123.4567,求其浮點數的和。
【程式】
void main()
{ int a;
float b,c;
a=321,b=123.4567;
c=(float)a+b;
printf("%f\n",c);
}
【習題3.153】賦值,表示式,型別轉換,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數a賦值12,b賦值345.678,將a實數化後求a*b賦給a。
【程式】
void main()
{ int a;
float b,c;
a= ,b=
c=
printf("%f\n",c);
}
【例題3.160e】浮點數轉換為整數
編寫程式,令變數b取值35.425,c取值52.954,先將b+c的結果轉換為整數後賦給變數a1,然後將b和c的值分別轉換為整數後求和賦給變數a2。
【程式】
void main()
{ int a1,a2;
float b,c;
b=35.425,c=52.954;
a1=(int)(b+c);
a2=(int)b+(int)c;
printf("%d\n",a1);
printf("%d\n",a2);
}
【習題3.162】強制型別轉換運算子
編寫程式,對變數a賦值為1.63,b賦值為4.46,將a+b的和取整後賦給c,並顯示c。
【程式】
void main()
{ float a,b;
int c;
a= ;
b= ;
c= ;
printf("c=%d\n",c);
}
【習題3.163】浮點型變數,賦值,表示式,型別轉換,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數b賦值34.567,c賦值56.789,將b*c的值整數化後賦給a1,再將b與c分別整數化後求積賦給a2。
【程式】
void main()
{ int a1,a2;
printf("a1=%d\n",a1);
printf("a2=%d\n",a2);
}
【習題3.166】浮點變數,賦值,表示式,型別轉換,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數b賦值2.34567,c賦值56.789,將b與c分別整數化後求和賦給a。
【程式】
void main()
{ int a;
printf("a=%d\n",a);
}
【習題3.168】浮點變數,賦值,表示式,型別轉換,顯示
在以下程式空缺處填寫合適內容,使得程式能夠先後對浮點型變數y賦值1/3和1.0/3.0。請觀察程式執行輸出的結果。
【程式】
void main()
{
float y;
y=
printf("y=%f\n",y); /*輸出*/
y=
printf("y=%f\n",y); /*再次輸出*/
}
【例題3.170e】組合運算子
編寫程式,首先令變數a值為2,b值為5,c值為6,d值為10,然後依次將a加b的值賦予a,b減c的值賦予b,c乘以d的值賦予c,d除以a的值賦予d,a除以c的餘數賦予a。
【程式】
void main()
{ int a=2,b=5,c=6,d=10;
a+=b;
b-=c;
c*=d;
d/=a;
a%=c;
printf("%d %d %d %d %d\n",a,b,c,d,a);
//用空格分隔,在同一行顯示各運算結果
}
【習題3.173】自反運算賦值,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數a賦值34,b賦值56,用自反運算賦值將a+b的值賦給a,b*a的值賦給b,並顯示a和b的值。
【程式】
void main()
{
a+=
b*=
printf("a=%d b=%d\n",a,b);
}
【習題3.175】自反運算賦值,顯示
在以下程式空缺處填寫合適內容,使得程式能夠分別對變數a賦值567,b賦值18,c賦值5,用自反運算賦值將a÷b的商賦給a,b÷c的餘數賦給b,並顯示a和b的值。
【程式】
void main()
{
a/=
b%=
printf("%d %d %d\n",a,b,c);
}
【例題3.180e】增1運算:++
編寫程式,先對整型變數a賦值為80,然後依次分行顯示++a,a++和a的值。
【程式】
void main()
{ int a=80;
printf("%d\n",++a); //前++
printf("%d\n",a++); //後++
printf("%d\n",a);
}
【習題3.183】增1運算:++
編寫程式,先對整型變數a賦值600,然後依次分行顯示a++,++a的值。
【程式】
void main()
{ int a=600;
printf("%d\n", );
printf("%d\n", );
}
【習題3.184】增1運算:++
編寫程式,先對整型變數a賦值為10,然後依次分行顯示a++,a,++a,和a的值。
【程式】
void main()
{ int a=10;
printf("%d\n", );
printf("%d\n", );
printf("%d\n", );
printf("%d\n", );
}
【習題3.185】增1運算:++
編寫程式,先對整型變數a賦值1;接著將++a+10賦給b,顯示b的值;然後將10-a++賦給c,顯示c的值;最後再次顯示a的值。
【程式】
void main()
{ int a=1,b,c;
b= ;
printf("b=%d ",b);
c= ;
printf("c=%d ",c);
printf("a=%d\n",a);
}
【習題3.186】增1運算:++
編寫程式,先對整型變數a賦值10,顯示a的值;接著將++a+5賦給b,顯示b的值;然後將7+a++賦給c,顯示c的值;最後再次顯示a的值。
【程式】
void main()
{ int a=10,b,c;
printf("a=%d ",a);
b=
printf("b=%d ",b);
c=
printf("c=%d ",c);
printf("a=%d\n",a);
}
【例題3.190e】減1運算:--
編寫程式,先令整型變數a的值為80,然後依次分行顯示--a,a--和a的值。
【程式】
void main()
{ int a=80;
printf("%d\n",--a);
printf("%d\n",a--);
printf("%d\n",a);
}
【習題3.193】減1運算:--
編寫程式,先對整型變數a賦值600,然後依次分行顯示a--,--a的值。
【程式】
void main()
{ int a=600;
printf("%d\n", );
printf("%d\n", );
}
【習題3.194】減1運算:--
編寫程式,先對整型變數a賦值為10,然後依次分行顯示a--,a,--a,和a的值。
【程式】
void main()
{ int a=10;
printf("%d\n", );
printf("%d\n", );
printf("%d\n", );
printf("%d\n", );
}
【習題3.196】減1運算:--
編寫程式,先對整型變數a賦值10,顯示a的值;接著將--a+5賦給b,顯示b的值;然後將7+a--賦給c,顯示c的值;最後再次顯示a的值。
【程式】
void main()
{ int a=10,b,c;
printf("a=%d ",a);
b=
printf("b=%d ",b);
c=
printf("c=%d ",c);
printf("a=%d\n",a);
}
【習題3.197】減1運算:--
編寫程式,先對整型變數a賦值100;接著將--a-10賦給b,顯示b的值;然後將10+a--賦給c,顯示c的值;最後再次顯示a的值。
【程式】
void main()
{ int a=100,b,c;
b= ;
printf("b=%d ",b);
c= ;
printf("c=%d ",c);
printf("a=%d\n",a);
}
【例題3.210e】移位運算:左移 <<,右移 >>
編寫程式,先令整型變數a值為7,b值為11,依次將a的值右移1位賦給c,將b的值左移3位賦給d,最後顯示c和d的值。
【程式】
void main()
{ int a=7,b=11;
int c,d;
c=a>>1; //c賦值為a的值右移1個二進位的結果
d=b<<3; //d賦值為b的值左移3個二進位的結果
printf("%d %d\n",c,d);
}
【習題3.213】移位運算:左移 <<,右移 >>
編寫程式,先令整型變數a值為9,b值為11,依次將a的值右移2位賦給c,將b的值左移2位賦給d,最後顯示c和d的值。
【程式】
void main()
{ int a=9,b=11;
int c,d;
c=
d=
printf("c=%d d=%d\n",c,d);
}
【例題3.220e】按位運算子
編寫程式,先令整型變數a取值7,b取值11,依次求出並顯示a和b的AND、OR、XOR的結果。
【程式】
void main()
{ int a=7,b=11;
int c,d,e;
c=a&b;
d=a|b;
e=a^b;
printf("%d&%d=%d\n",a,b,c);
printf("%d|%d=%d\n",a,b,d);
printf("%d^%d=%d\n",a,b,e);
}
【習題3.223】16進位制數,按位與運算:&
編寫程式,先令整型變數a值為16進位制數0x123a,b值為0x1100,將a和b按位與的值賦給c之後,顯示a,b和c的值。
【程式】
void main()
{
c=
printf("%x & %x = %x\n",a,b,c);
}
【例題3.230e】運算子&,|和^的組合運用
編寫程式,先令變數a取值5,b取值12,c取值4,求a|b和a^c的結果的&。
【程式】
void main()
{ int a=5,b=12,c=4;
int er,ok;
er=a&b|a^c; //不符合題意
ok=(a|b)&(a^c); //注意運算的優先順序和括號的使用
printf("%d|%d&%d^%d=%d error\n",a,b,a,c,er);
printf("(%d|%d)&(%d^%d)=%d ok\n",a,b,a,c,ok);
}
【例題3.240e】按位取反運算:~
編寫程式,先令整型變數a取值9,然後對a的值按位取反後賦給b,顯示b的值。
【程式】
void main()
{ int a=9;
int b;
b=~a;
printf("%d\n",b);
}
【習題3.243】長整型,16進位制數,按位取反運算:~
編寫程式,先令整型變數a值為16進位制數0x12ac,顯示a的值;然後將a的值按位求反後賦給b,顯示b的值。
【程式】
void main()
{ long a=
long b;
printf("a=%x\n",a);
b=
printf("b=%x\n",b);
}
【例題3.270e】字元型變數
編寫程式,先將字元'C'賦予變數a、'H'賦予b,字元'N'賦予c,然後在同一行用空格分隔顯示a、b、c的值。
【程式】
void main_ans()
{ char a,b,c;
a='C';
b='H';
c='N';
printf("%c %c %c\n",a,b,c);
}
【例題3.280e】字元顯示
編寫程式,先將字元'A'、'n'、'y'、'v'、'i'、'e'、'w'分別賦給變數a、b、c、d、e、f、g,然後在同一行依次顯示各變數的值。
【程式】
void main()
{ char a,b,c,d,e,f,g;
a='A',b='n',c='y',d='v';
e='i',f='e',g='w';
printf("%c%c%c%c%c%c%c\n",a,b,c,d,e,f,g);
}
【例題3.290e】字元和ASCII碼
編寫程式,先將字元'C'、'H'、'N'分別賦給變數a,b,c,然後顯示變數a、b、c的字元值和ASCII碼。
【程式】
void main()
{ char a,b,c;
a='C',b='H',c='N';
printf("%c:%d %c:%d %c:%d\n",a,a,b,b,c,c);
}
【習題3.293】字元的ASCII碼
在以下程式空缺處填寫合適內容,使得程式能夠對字元變數a、b和c分別賦值為'O'、'K'和'!',顯示各變數的字元值和ASCII碼。
【程式】
void main()
{
printf("%c:%d %c:%d %c:%d\n",a,a,b,b,c,c);
}
【例題3.300e】ASCII碼和字元
編寫程式,先將67,72,78分別賦給整型變數a,b,c,然後顯示三個變數值及其作為ASCII碼所對應的字元。
【程式】
void main()
{ int a,b,c;
a=67,b=72,c=78;
printf("%d:%c %d:%c %d:%c\n",a,a,b,b,c,c);
}
【習題3.303】ASCII碼對應的字元
在以下程式空缺處填寫合適內容,使得程式能夠對整型變數a、b和c分別賦值為79、75和33,顯示各變數的值和以其為ASCII碼的字元。
【程式】
void main()
{
printf("%d:%c %d:%c %d:%c\n",a,a,b,b,c,c);
}
【習題3.305】ASCII碼對應的字元
在以下程式空缺處填寫合適內容,使得程式能夠對整型變數a、b、c、d和e分別賦值為83、116、117、100和121,顯示以各變數的值作為ASCII碼的字元。
【程式】
void main()
{
printf("%c%c%c%c%c\n",a,b,c,d,e);
}
【習題3.542】a和b是系統給定的外部整型變數(不需要自行定義)。編寫程式,取a的值並將其個位數清0後存放到b。例如,若a=1,則b=0;若a=12,則b=10;若a=123,則b=120。
【習題3.544】a和b是系統給定的外部整型變數(不需要自行定義)。編寫程式,取a的值並將其個位和十位數清0後存放到b。例如,若a=1,則b=0;若a=12,則b=0;若a=123,則b=100。
【習題3.546】a和b是系統給定的外部整型變數(不需要自行定義)。編寫程式,取a的值並將其十位數清0後存放到b。例如,若a=1,則b=1;若a=12,則b=2;若a=123,則b=103。
【習題3.554】a和b是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a的十位數和個位數“組成”一個整數,並將結果存放到b。例如,若a=12,則b=12;若a=123,則b=23。
【習題3.555】a和b是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a的個位數和十位數逆位“組成”一個整數,並將結果存放到b。例如,若a=12,則b=21;若a=123,則b=32。
【習題3.556】a是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a的個位數和十位數互換。例如,若a=12,則互換後a=21;若a=123,則互換後a=132。
【習題3.557】a是系統給定的外部整型變數(不需要自行定義),其值是一個3位十進位制數。編寫程式,將a的值迴圈右移1位。例如,若a=123,則移位後a=312;若a=360,則移位後a=36。
【習題3.558】a是系統給定的外部整型變數(不需要自行定義),其值是一個3位十進位制數。編寫程式,將a的值迴圈左移1位。例如,若a=123,則移位後a=231;若a=408,則移位後a=84。
【習題3.560】 a、b和c是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a和b的個位數順位“拼接”為整數,並將結果存放到c。例如,若a=123,b=456,則c=36;若a=100,b=357,則c=7。
【習題3.561】 a、b和c是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a和b的個位數逆位“拼接”為整數,並將結果存放到c。例如,若a=123,b=456,則c=63;若a=100,b=357,則c=70。
【習題3.562】 a、b和c是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a和b的低2位數順位“拼接”為整數,並將結果存放到c。例如,若a=123,b=456,則c=2356;若a=300,b=108,則c=8。
【習題3.563】 a、b和c是系統給定的外部整型變數(不需要自行定義)。編寫程式,將a和b的低2位數逆位“拼接”為整數,並將結果存放到c。例如,若a=123,b=456,則c=3265;若a=300,b=108,則c=80。
【習題3.566】 系統給定外部整型變數a和b,長整型變數c(不需要自行定義)。編寫程式,將a和b的低3位數順位“拼接”為整數,並將結果存放到c。例如,若a=1234,b=4567,則c=234567;若a=3000,b=1080,則c=80。
【習題3.567】 系統給定外部整型變數a和b,長整型變數c(不需要自行定義)。編寫程式,將a和b的低3位數逆位“拼接”為整數,並將結果存放到c。例如,若a=1234,b=4567,則c=432765;若a=6003,b=2800,則c=300008。
【例題3.710e】用scanf輸入
編寫程式,用scanf輸入一個整數並將其顯示。
【程式】
void main()
{ int a;
scanf("%d",&a);
printf("%d\n",a);
}
【習題3.713】輸入整數
在以下程式空缺處填寫合適內容,使得程式能夠通過scanf語句輸入一個整數到整型變數a,計算a的立方值並賦給整型變數b。
【程式】
void main()
{
printf("%d^3=%d\n",a,b);
}
【例題3.720e】用scanf輸入
編寫程式,用scanf輸入2個整數到變數a和b,求其之積並顯示等式。
【程式】
void main()
{ int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
c=a*b;
printf("%d*%d=%d\n",a,b,c);
}
【習題3.723】輸入整數
在以下程式空缺處填寫合適內容,使得程式能夠通過兩個scanf語句分別輸入整數到整型變數a和b,計算a和b的平方和並賦給整型變數c。
【程式】
void main()
{
printf("%d^2+%d^2=%d\n",a,b,c);
}
【例題3.730e】用一個scanf語句輸入兩個整數
編寫程式,用一個scanf語句輸入兩個整數,求其和並顯示等式。
【程式】
void main()
{ int a,b,c;
scanf("%d %d",&a,&b);
c=a+b;
printf("%d+%d=%d\n",a,b,c);
}
【例題3.740e】用一個scanf語句輸入兩個實數
編寫程式,用一個scanf語句輸入兩個實數,求其差並顯示等式。
【程式】
void main()
{ float a,b,c;
scanf("%f %f",&a,&b);
c=a-b;
printf("%f-%f=%f\n",a,b,c);
}
【例題3.750e】用scanf語句輸入一個字元
編寫程式,用scanf語句輸入1個字元到字元變數a,顯示其字元值和ASCII碼。
【程式】
void main()
{ char a;
scanf("%c",&a);
printf("%c:%d\n",a,a);
}
【例題3.760e】用一個scanf語句輸入兩個字元
編寫程式,用一個scanf語句輸入兩個字元到字元變數a和b,顯示其字元值和ASCII碼。
【程式】
void main()
{
char a,b;
scanf("%c%c",&a,&b);
printf("%c:%d %c:%d\n",a,a,b,b);
}
【例題3.770e】用一個scanf語句輸入兩個字元(忽略分隔空格)
編寫程式,用一個scanf語句,忽略分隔空格,輸入兩個字元到字元變數a和b,顯示其字元值和ASCII碼。
【程式】
void main()
{ char a,b;
scanf("%c %c",&a,&b);
printf("%c:%d %c:%d\n",a,a,b,b);
}
【例題3.780e】用兩個scanf語句各輸入一個字元
編寫程式,用兩個scanf語句各輸入一個字元到字元變數a和b,顯示其字元值和ASCII碼。
【程式】
void main( )
{
char a,b;
scanf("%c",&a);
scanf("%c",&b);
printf("%c:%d %c:%d\n",a,a,b,b);
}
【例題3.790e】忽略中間一個字元的輸入
編寫程式,用兩個scanf語句,忽略中間一個字元,分別輸入一個字元到字元變數a和b,顯示其字元值和ASCII碼。
【程式】
void main()
{ char a,b;
scanf("%c",&a);
scanf("%*c%c",&b);
printf("%c:%d %c:%d\n",a,a,b,b);
}
【例題3.800e】16進位制數和8進位制數的輸出
編寫程式,顯示175的16進製表示和23的8進製表示。
【程式】
void main()
{ int a,b;
a=175;
b=23;
printf("a=(%d)10#=(%x)16#\n",a,a);
printf("b=(%d)10#=(%o)8#\n",b,b);
}
【例題3.810e】科學記數法
編寫程式,分別賦值變數a為123.4567和b為97531.68,並用科學記數法形式顯示。
【程式】
void main()
{ float a,b;
a=123.4567;
b=97531.68;
printf("a=%f=%e\n",a,a); /*a=123.456700=1.234567e+002*/
printf("b=%f=%e\n",b,b); /*b=97531.680000=9.753168e+004*/
}
【例題3.820e】輸入和顯示16進位制數
編寫程式,用scanf語句輸入一個16進位制數到變數a,並顯示其16進位制和10進製表示。
【程式】
void main()
{ int a;
scanf("%x",&a);
printf("a=(%x)16#=(%d)10#\n",a,a);
}
【例題3.830e】輸入和顯示8進位制數
編寫程式,用一個scanf語句輸入兩個8進位制數到變數a和b,顯示a和b的乘積。
【程式】
void main()
{
int a,b;
scanf("%o %o",&a,&b);
printf("%o*%o=%o\n",a,b,a*b);
}
【例題3.840e】long長整型變數
編寫程式,將123456789和87654321分別賦給長整型變數a和b,求其和賦給sum並顯示結果。
【程式】
void main()
{ long a,b,sum;
a=123456789;
b=87654321;
sum=a+b;
printf("%ld+%ld=%ld\n",a,b,sum);
}
【例題3.850e】unsigned int無符號整型變數
編寫程式,將88、89和90分別賦給無符號整型變數a、b和c,顯示其值和相應字元。
【程式】
void main()
{ unsigned int a,b,c;
a=88;
b=89;
c=90;
printf("%d:%c %d:%c %d:%c\n",a,a,b,b,c,c);
}
【例題3.860e】指定顯示位數
編寫程式,將135、43和6789依次賦給整型變數a、b和c,分別用域寬5位、3位、9位進行顯示。
【程式】
void main()
{ int a,b,c;
a=135,b=43,c=6789;
printf("123456789\n");
printf("%5d\n",a);
printf("%3d\n",b);
printf("%9d\n",c);
}
【例題3.870e】指定浮點數的顯示格式
編寫程式,將543.3456和23.4567賦給浮點型變數a和b,求其和、差、積、商,並在顯示時分別指定了不同的域寬和小數點後的位數。
【程式】
void main()
{ float a,b,sum,min,tim,sep;
a=543.3456;
b=23.4567;
sum=a+b;
min=a-b;
tim=a*b;
sep=a/b;
printf("%10.4f+%10.4f=%10.4f\n",a,b,sum);
printf("%10.2f-%10.2f=%10.2f\n",a,b,min);
printf("%10.5f*%10.5f=%10.5f\n",a,b,tim);
printf("%10.4f/%10.4f=%5.2f\n",a,b,sep);
}
【例題3.880e】指定小數點後的顯示位數
編寫程式,輸入一個浮點數,分別按小數點後3位、2位和1位的格式顯示。
【程式】
void main()
{ float a;
scanf("%f",&a);
printf("%.3f %.2f %.1f\n",a,a,a);
}
【例題3.890e】字元顯示格式
編寫程式,將'X'賦給字元變數a,分別按1位、2位、3位和4位域寬的格式顯示。
【程式】
void main()
{ char a;
a='x';
printf("%1c%2c%3c%4c\n",a,a,a,a);
}
【例題3.900e】顯示字元圖案
編寫程式,顯示字元圖案:
x x
x x
xx
xx
x x
x x
【程式】
void main()
{ char a;
a='x';
printf("%1c%5c\n",a,a);
printf("%2c%3c\n",a,a);
printf("%3c%1c\n",a,a);
printf("%3c%1c\n",a,a);
printf("%2c%3c\n",a,a);
printf("%1c%5c\n",a,a);
}
【習題3.905】顯示多個相關字元
s是系統給定的外部字元型變數(不需要自行定義)。編寫程式,依次以空格分隔輸出s字元的前導字元、s字元和s的後續字元。例如,若s='b',則輸出 a b c
【程式】
void main()
{
printf("%c %c %c\n", , s, );
}
【例題3.910e】指定有效輸入位數
編寫程式,輸入一個不超過3位的整數。
【程式】
void main()
{ int a;
scanf("%3d",&a);
printf("%d\n",a);
}
【例題3.920e】指定有效輸入位數
編寫程式,分別按1位和2位輸入兩個整數到整型變數a和b,求其積賦給c並顯示。
【程式】
void main()
{ int a,b,c;
scanf("%1d%2d",&a,&b);
c=a*b;
printf("%d*%d=%d\n",a,b,c);
}
第4章 選擇結構程式設計(例題13—習題0/13)
【例題4.010e】if語句
編寫程式,輸入一個整數到變數a,若其值為0或正數,則顯示其值。
【程式】
void main()
{ int a;
scanf("%d",&a); /*輸入a*/
if(a>=0)
printf("a=%d\n",a);
}
【習題4.011】關係表示式,if語句第一種形式
在以下程式空缺處填寫合適內容,使得程式能夠判斷使用者輸入的字元是否為'@',若是則顯示:"輸入正確"。
【程式】
#include<stdio.h>
void main()
{ char c;
scanf("%c",&c);
if( ) printf("輸入正確\n");
}
【習題4.012】關係表示式,if語句第一種形式
在以下程式空缺處填寫合適內容,使得程式能夠輸入一個整數賦給變數a,計算並輸出a的絕對值a1。
【程式】
#include<stdio.h>
void main( )
{ int a,a1;
scanf("%d",&a);
printf("|%d| = %d\n",a,a1);
}
【習題4.013】邏輯表示式,if語句第一種形式
在以下程式空缺處填寫合適內容,使得程式能夠對輸入的整型變數x的值進行判斷,若變數x值為“假”時輸出
“False”。
【程式】
#include<stdio.h>
int main( )
{ int x;
scanf("%d",&x);
if( )
printf("False!\n");
return 0;
}
【例題4.015e】if語句
編寫程式,輸入兩個整數到變數a和b,使用if語句由小到大顯示這兩個數。
【程式】
void main()
{ int a,b,t;
scanf("%d %d",&a,&b);
if(a>b){
t=a; a=b; b=t;
}
printf("%d %d\n",a,b);
}
【習題4.016】if語句的子句為複合語句
在以下程式空缺處填寫合適內容,使得程式能夠將輸入到變數a和b的兩個整數按照由大到小的順序輸出。
【程式】
#include<stdio.h>
void main( )
{ int a,b,t;
scanf("%d %d",&a,&b);
if( )
{ }
printf("%d %d\n",a,b);
}
【例題4.020e】if-else語句
編寫程式,輸入兩個整數到變數a和b,使用if-else語句由小到大顯示這兩個數。
【程式】
void main()
{ int a,b;
scanf("%d %d",&a,&b);
if(a<b)
printf("%d %d\n",a,b);
else
printf("%d %d\n",b,a);
}
【例題4.025e】條件表示式
編寫程式,輸入兩個整數到變數a和b,使用條件表示式顯示這兩個數中的較大者。
【程式】
void main()
{ int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a>b?a:b);
}
【例題4.030e】if-else語句
編寫程式,輸入一個整數到變數a,若為0或正數,則顯示:其值及“is positive”;若為負數,則顯示:其值及“is negative”。
【程式】
void main()
{ int a;
scanf("%d",&a); /*輸入a*/
if (a>=0)
printf("%d is positive\n", a); /*a為0或正數*/
else
printf("%d is negative\n", a); /*a為負數*/
}
【例題4.040e】if-else語句
編寫程式,輸入兩個整數到變數a和b,若a<=b,則求其積賦給c並顯示,否則求其商賦給c並顯示。
【程式】
void main()
{ int a,b,c;
scanf("%d %d",&a,&b);
if (a<=b) {
c=a*b;
printf("%d*%d=%d\n",a,b,c);
} else {
c=a/b;
printf("%d/%d=%d\n",a,b,c);
}
}
【例題4.050e】巢狀if-else語句
編寫程式,輸入一個整數到變數a,按其數值小於10、10-99、100-999、1000以上等四種情形分類並顯示。例如:輸入248時,顯示:“248∈[100,999]”。
【程式】
void main()
{ int a;
scanf("%d",&a);
if (a>=100) {
if (a>=1000)
printf("%d∈[1000,+∞)\n",a);
else
printf("%d∈[100,999]\n",a);
} else {
if (a<10)
printf("%d∈(-∞,10]\n",a);
else
printf("%d∈[10,99]\n",a);
}
}
【例題4.060e】switch語句
編寫程式,輸入一個整數到變數x,若x的值在1到4之間,則顯示x個城市的市名,否則不顯示。
【程式】
void main()
{ int x;
scanf("%d",&x);
switch (x) {
case 4: printf("Shenzhen\n");
case 3: printf("Guangzhou\n");
case 2: printf("Beijing\n");
case 1: printf("Shanghai\n");
}
}
【例題4.070e】switch和break語句
編寫程式,輸入“brics”中的一個字母到變數x,顯示“金磚5國”中以該字母打頭的國家名稱。
【程式】
void main()
{ char x;
scanf("%c",&x);
switch (x) {
case 'b':
printf("Brazil\n") ;
break;
case 'r':
printf("Russia\n");
break;
case 'i':
printf("India\n");
break;
case 'c':
printf("China\n");
break;
case 's':
printf("South Africa\n");
}
}
【例題4.080e】switch和break語句
編寫程式,輸入三個整數到變數a、b和c,當a為1時顯示b和c之和,a為2時顯示b與c之差,a為3時顯示b和c之積,a為其他值時顯示b+c和b-c之積。
【程式】
void main()
{ int a,b,c;
scanf("%d %d %d",&a,&b,&c);
switch (a) {
case 1:
printf("%d+%d=%d\n",b,c,b+c);
break;
case 2:
printf("%d-%d=%d\n",b,c,b-c);
break;
case 3:
printf("%d*%d=%d\n",b,c,b*c);
break;
default:
printf("(%d+%d)*(%d-%d)=%d\n",b,c,b,c,(b+c)*(b-c));
}
}
【例題4.200e】條件運算(3目運算)
編寫程式,令整型變數a取值52,b取值25,若a>b成立則將a的值賦予c,否則將b的值賦予c。同時,若a<b成立則將a的值賦予d,否則將b的平方值賦予d。
【程式】
void main()
{ int a=52,b=25;
int c,d;
c=((a>b)?a:b);
d=((a<b)?a:b*b);
printf("%d\n",c);
printf("%d\n",d);
}
【習題4.203】條件運算(3目運算)
編寫程式,先令整型變數a取值0,b取值-20;然後用條件運算實現:若a>b成立則將b的平方值賦予c,否則將0賦予c;最後顯示c的值。
【程式】
void main()
{ int a=0,b=-20,c;
c=
printf("c=%d\n",c);
}
【習題4.211】已知3個非零整數被分別輸入到整型變數a,b和c。編寫一個條件表示式,判定這3個值能否作為一個三角形的3條邊的長度?若能,則該表示式的值為1,否則值為0。
【習題4.213】已知3個非零整數被分別輸入到整型變數a,b和c。編寫一個條件表示式,判定這3個值能否作為一個等腰三角形的3條邊的長度?若能,則該表示式的值為1,否則值為0。
【習題4.215】已知3個非零整數被分別輸入到整型變數a,b和c。編寫一個條件表示式,判定這3個值能否作為一個等邊三角形的3條邊的長度?若能,則該表示式的值為1,否則值為0。
【習題4.223】已知3個非零整數被分別輸入到整型變數a,b和c。編寫一個條件表示式,判定這3個值能否作為一個直角三角形的3條邊的長度?若能,則該表示式的值為1,否則值為0。
【習題4.225】已知3個非零整數被分別輸入到整型變數a,b和c。編寫一個條件表示式,判定這3個值能否作為一個銳角三角形的3條邊的長度?若能,則該表示式的值為1,否則值為0。
【習題4.227】已知3個非零整數被分別輸入到整型變數a,b和c。編寫一個條件表示式,判定這3個值能否作為一個鈍角三角形的3條邊的長度?若能,則該表示式的值為1,否則值為0。
【例題4.250e】邏輯運算:&&和||
編寫程式,先將6賦予a、9賦予b、0賦予c,然後依次求a&&b,a||b和a&&c並顯示結果。
【程式】
void main()
{ int a=6,b=9,c=0;
int d,e,f;
d=a&&b;
e=a||b;
f=a&&c;
printf("%d&&%d=%d\n",a,b,d);
printf("%d||%d=%d\n",a,b,e);
printf("%d&&%d=%d\n",a,c,f);
}
【習題4.253】邏輯運算:&& 和 ||
編寫程式,先令整型變數a和b的值均為34,c的值為78,然後依次將a和b的邏輯與賦給d,a和c的邏輯或賦給e,a和c的邏輯與賦給f,最後分行顯示d,e和f的值。
【程式】
void main()
{ int a=34,b=34,c=78;
int d,e,f;
d=
e=
f=
printf("%d && %d = %d\n",a,b,d);
printf("%d || %d = %d\n",a,c,e);
printf("%d && %d = %d\n",a,c,f);
}
【例題4.260e】邏輯運算:!(邏輯非)
編寫程式,先對整型變數a賦值1,b賦值0,然後分別求其邏輯非。
【程式】
void main()
{ int a=1,b=0;
int c,d;
c=!a;
d=!b;
printf("!%d=%d\n",a,c);
printf("!%d=%d\n",b,d);
}
【習題4.263】邏輯非運算:!
編寫程式,先令整型變數a的值為700,b的值為-30,然後依次將a的邏輯非賦給c,b的邏輯非賦給d,最後分行顯示c和d的值。
【程式】
void main()
{
c=
d=
printf("!%d=%d\n",a,c);
printf("!%d=%d\n",b,d);
}
第5章 迴圈結構程式設計(含:序列求和)(例題0—習題41)
【習題5.002】編寫程式,利用while語句在同一行中逐個顯示從1至5的數字,每個數字之前保留2個空格。
【習題5.003】編寫程式,利用for語句在同一行中逐個顯示從1至6的數字,每個數字之前保留2個空格。
【習題5.004】n是系統給定的外部整型變數(不需要自行定義)。編寫程式,利用迴圈語句在同一行中逐個顯示從1至n的數字,每個數字之前保留2個空格。
【習題5.012】請僅在程式空缺處填入合適內容,使其實現功能:依次入5個整數,計算它們之和並輸出。
#include <stdio.h>
void main()
{ int i,sum=0, n;
for (i=1;i<=5;i++)
{ scanf("%d", );
sum= ;
}
printf("sum = %d",sum);
}
【習題5.020】n和s是系統給定的外部整型變數(不需要自行定義)。編寫程式,求1到n之間的整數之和,並將結果存放到s。
【習題5.022】n是系統給定的外部變數。編寫程式,求1到n間的自然數之和。請定義區域性變數s存放求和的結果,並用下列語句輸出結果
printf("1+2+...+n=%d\n",s);
【習題5.026】n和s是系統給定的外部整型變數(不需要自行定義)。編寫程式,求1到n之間的奇數之和,並將結果存放到s。
【習題5.028】n和s是系統給定的外部整型變數(不需要自行定義)。編寫程式,求1到n之間的偶數之和,並將結果存放到s。
【習題5.029】請僅在程式空缺處填入合適內容,使其實現功能:輸入大於1的整數到n,在同一個迴圈語句中分別計算1到n之間的奇數和偶數之和。
#include<stdio.h>
void main()
{ int odd,even,i,n;
scanf("%d", &n);
printf("sum of odd=%d ",odd); /*奇數之和*/
printf("sum of even=%d\n", even);/*偶數之和*/
}
【習題5.030】系統給定外部整型變數n和長整型變數f(不需要自行定義)。編寫程式,求n的階乘n!,並將結果存放到f。
例如,當n=6時,f=6!=1*2*...*6=720。注意:0!=1。
【習題5.032】系統給定外部整型變數n和長整型變數f(不需要自行定義)。編寫程式,求n的雙階乘n!!,並將結果存放到f。雙階乘的定義是:
當n是奇數時,n!為不大於n的所有奇數的乘積,如:7!!=1×3×5×7。
當n為偶數時表示不大於n的所有偶數的乘積(0除外),如:8!!=2×4×6×8。
【習題5.034】系統給定外部整型變數n和浮點變數f(不需要自行定義)。編寫程式,求負整數n的階乘n!,並將結果存放到f。假設m是正整數,負整數-m的階乘定義是:(-m)!=1/(m+1)!。
【習題5.040】m,n和s是系統定義的外部整型變數(不需要自行定義)。編寫程式,根據m的值求滿足1+2+...+n>=m的最小n,並將1+2+...+n的結果存放到s。例如,若m=50,則n=10,s=55。
【習題5.042】 m,n和s是系統定義的外部整型變數(不需要自行定義)。編寫程式,根據m的值求滿足1+2+...+n<m的最大n,並將1+2+...+n的結果存放到s。例如,若m=50,則n=9,s=45。
【習題5.050】n和s是系統給定的外部整型變數(不需要自行定義)。編寫程式,求1+1/2+1/3+...+1/n,並將結果存放到s。
【習題5.051】系統給定外部整型變數n和浮點型變數s(不需要自行定義)。編寫程式,求1-1/2+1/3-1/4+...1/n,並將結果存放到s。
【習題5.053】系統給定外部整型變數n和浮點型變數s(不需要自行定義)。編寫程式,求1+1/(1+2)+1/(1+2+3)+...+1/(1+2+...+n),並將結果存放到s。
【習題5.055】系統給定外部整型變數n和浮點型變數pi(不需要自行定義)。編寫程式,求序列4,-4/3,4/5,-4/7,4/9,-4/11...的前n項和,並將結果存放到pi。
【習題5.056】系統給定外部整型變數n和浮點型變數pi2(不需要自行定義)。編寫程式,求1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+...+1*2*...*n/(3*5*7*...*(2n+1)),並將結果存放到pi2。
【習題5.062】請僅在程式空缺處填入合適內容,使其實現功能:逐個輸入整數,直到輸入0為止,計算所輸入數值之和並輸出。
#include <stdio.h>
void main()
{ int sum=0, n=0;
scanf("%d",&n);
while( )
{
}
printf("sum = %d",sum);
}
【習題5.095】n和s是分別是系統給定的外部整型變數和實型變數(不需要自行定義)。編寫程式,求分數序列2/1,3/2,5/3,8/5,13/8,21/13,...的前n項和,並將結果存放到s。
【習題5.112】請僅在程式空缺處填入合適內容,使其實現功能:計算正整數n的各位數字之和。例如,輸入n的值是12345時,1+2+3+4+5=15,輸出sum=15。
#include <stdio.h>
void main()
{ int n,sum=0;
scanf("%d",&n);
do
{ sum=sum+ ;
n= ;
}while(n);
printf("sum = %d",sum);
}
【習題5.125】請僅在程式空缺處填入合適內容,使其實現功能:從鍵盤輸入一批整數,直到輸入0時結束,輸出其中百位數字是3的整數之和。
#include <stdio.h>
void main()
{ int num,sum=0;
scanf("%d",&num);
do
{ if( ) ;
scanf("%ld",&num);
}while( );
printf("sum = %ld",sum);
}
【習題5.132】請僅在程式空缺處填入合適內容,使其實現功能:輸入大於1的整數到n,計算1至n中是7的倍數的整數之和。
#include<stdio.h>
void main()
{ int i,sum,n;
scanf("%d",&n);
printf("sum = %d",sum);
}
【習題5.161】n和s是分別是系統給定的外部整型變數和長整型變數(不需要自行定義)。編寫程式,求1!+2!+3!+4!+5!+…+n!,並將結果存放到s。
【習題5.163】n和e是分別是系統給定的外部整型變數和浮點型變數(不需要自行定義)。編寫程式,求1+1/1!+1/2!+1/3!+…+1/n!,並將結果存放到e。
【習題5.165】系統給定外部整型變數n和浮點型變數x和e(不需要自行定義)。編寫程式,求1+x/1!+x^2/2!+x^3/3!+…+x^n/n!,並將結果存放到e,其中,^是冪運算,x^2表示x的平方,x^n表示x的n次方。
【習題5.172】系統給定外部長整型變數s,整型變數a和n,且a和n的值均在0和9之間(不需要自行定義)。編寫程式,求a+aa+aaa+…+aa…aaa(有n個a)之值,並將結果存放到s。例如:a=3和n=5時,求3+33+333+3333+33333。
【習題5.175】系統給定外部長整型變數s,整型變數a、m和n,1<=a<=9且1<=m<=n<=9(不需要自行定義)。編寫程式,求序列a,aa,aaa,…,aa…a(第n項為n個a)中,第m項至第n項之和,並將結果存放到s。例如:當a=8,m=3且n=6時,置s=888+8888+88888+888888。
【習題5.176】系統給定外部長整型變數s,整型變數a、m和k,1<=a<=9,1<=m<=9且m+k<=9(不需要自行定義)。編寫程式,求數列a,aa,aaa,…,aa…a,…(第i項為i個a)中,第m項起的k項之和,並將結果存放到s。例如:當a=6,m=4且k=3時,置s=6666+66666+666666。
【習題5.183】系統給定外部長整型變數s和整型變數n,且n的值在0和9之間(不需要自行定義)。編寫程式,求1+12+123+…+12…n之值,並將結果存放到s。例如,n=5時,置s=1+12+123+1234+12345。
【習題5.184】系統給定外部長整型變數s和整型變數n,且n的值在0和9之間(不需要自行定義)。編寫程式,求1+21+321+…+n…21之值,並將結果存放到s。例如,n=5時,置s=1+21+321+4321+54321。
【習題5.186】系統給定外部長整型變數s,整型變數m和n,且1<=m<=n<=9(不需要自行定義)。編寫程式,求12…m+12…(m+1)+…+12…n之值,並將結果存放到s。例如,m=3且n=6時,置s=123+1234+12345+123456。
【習題5.187】系統給定外部長整型變數s,整型變數m和n,且1<=m<=n<=9(不需要自行定義)。編寫程式,求m…21+(m+1)…21+…+n…21之值,並將結果存放到s。例如,m=3且n=6時,置s=321+4321+54321+654321。
【習題5.203】已知雞和貓共有30只,腳共有90只。請僅在程式空缺處填入合適內容,實現功能:計算雞和貓各有幾隻?
#include <stdio.h>
void main()
{ int x,y,heads=30,feet=90;
for(x=1; )
{ y=
if( )
{ printf("chicken:%d, cat:%d\n",x,y);
break;
}
}
}
【習題5.205】有一堆蘋果(數量在100到200之間),如果分成4個蘋果一組的若干組,則多2個蘋果;若分成7個蘋果一組,則多4個蘋果; 若分成9個蘋果一組,則多5個蘋果。請僅在程式空缺處填入合適內容,實現功能:求這堆蘋果的總數。
#include <stdio.h>
void main()
{ int i;
for(i=100;i<=200;i++)
{
if( )
{
printf("total: %d",i);
}
}
}
【習題5.215】請僅在程式空缺處填入合適內容,實現功能:求等式xyz+yzz=532中x,y和z的值(其中xyz和yzz分別表示一個三位數)。
#include<stdio.h>
void main()
{ int x,y,z,i,result=532;
//程式輸出要用語句 printf("x=%d,y=%d,z=%d\n",x,y,z);
}
【習題5.223】請僅在程式空缺處填入合適內容,使其實現功能:輸入並計算一個只包含加減運算的表示式,其中每個運算數都是正整數,運算子都是“+”或“-”,除第一個數以外,其餘每個數前面都有一個運算子,當運算數為0時表示式終止。
#include<stdio.h>
void main()
{ int term,result;
char ch;
scanf("%d",&result);
ch=getchar();
//可以使用while迴圈
printf("result: %d\n",result);
}
【習題5.225】請僅在程式空缺處填入合適內容,使其實現功能:輸入並計算一個只包含加減運算的表示式,其中每個運算數都是正整數,運算子都是“+”或“-”,除第一個數以外,其餘每個數前面都有一個運算子,表示式以分號“;”終止,例如“23+43-234+157;”。
#include<stdio.h>
void main()
{ int term,result;
char ch;
scanf("%d",&result);
ch=getchar();
//可以使用while迴圈
printf("result: %d\n",result);
}
【習題5.233】請僅在程式空缺處填入合適內容,使其實現功能:輸入並計算一個只包含乘除運算的表示式,其中每個運算數都是正整數,運算子都是“*”或“\”,除第一個數以外,其餘每個數前面都有一個運算子,表示式以分號“;”終止,例如“9/3*7;”。
#include<stdio.h>
void main()
{ int term,result;
char ch;
scanf("%d",&result);
ch=getchar( );
//可以使用while迴圈
printf("result: %d\n",result);
}
【習題5.255】請僅在程式空缺處填入合適內容,使其實現功能:輸入非負整數到變數n和0到9中的某一個數到變數d,統計n的各位數字中值為d的個數num,並求各位數字中的最小值m。
#include<stdio.h>
void main()
{ long int n;
int d,num,m=9,t;
num=0;
scanf("%d %d",&n,&d);
do
{
}while(n);
printf("num=%d, min=%d",num,m);
}
第6章 利用陣列處理批量資料(例題0—習題24+13)
【習題6.033】系統給定外部整型陣列a、整型變數n、max、min和實型變數avg(不需要自行定義)。編寫程式,求陣列a中前n個元素的最大值max、最小值min及平均值avg。
【習題6.043】系統給定外部整型變數n和整型陣列a(不需要自行定義)。編寫程式,找出陣列a中前n個元素中的最小元素及其下標,然後把它和陣列中最前面的元素a[0]交換位置。
【習題6.050】系統給定外部字串s和整型陣列c[26](不需要自行定義)。編寫程式,將字串s中26個小寫字母出現的次數依次統計到陣列c中。例如,當s=“abcijkabcdexyzuvwx”時,陣列c的26個元素值依次為:2 2 2 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 2 1 1。
【習題6.051】系統給定外部字串s和整型陣列c[26](不需要自行定義)。編寫程式,將字串s中26個字母(不區分大小寫)出現的次數依次統計到陣列c中。例如,當s=“AbcijKaBcdEXyzuvwx”時,陣列c的26個元素值依次為:2 2 2 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 2 1 1。
【習題6.110】系統給定外部字元陣列變數s和陣列長度n(不需要自行定義)。main函式的功能是:把字串s中所有小寫字母轉換為大寫字母,其他字元不變。例如,當s="68abcdEFGhijkLM86"時,轉換後s="68ABCDEFGHIJKLM86"。
請僅在空缺處填入合適內容,使其實現上述功能。
【習題6.120】系統給定外部長整型變數n和字元陣列變數s(不需要自行定義)。main函式的功能是:把n的整數值轉換成字串,並逆序儲存在s中。例如,當n=20120826時,由n轉換得到s="62802102"。
請僅在空缺處填入合適內容,使其實現上述功能。
【習題6.121】系統給定外部長整型變數n和字元陣列變數s(不需要自行定義)。main函式的功能是:把n的整數值轉換成字串,並儲存在s中。例如,當n=20120826時,由n轉換得到s="20120826"。
請僅在空缺處填入合適內容,使其實現上述功能。
【習題6.225】系統給定外部整型變數n、e和整型陣列a(不需要自行定義),其中陣列a中前n個元素(a[0],a[1],…,a[n-1])已經按元素值由小到大排序。編寫程式,把變數e的值插入到陣列a中,並且仍然保持a中元素由小到大的排列順序。若e的值比原有所有的數都大時,插入在末尾的a[n]。若比原有的數都小時,則插入在最前面的a[0]。
【習題6.255】系統給定外部整型變數n和整型陣列a(不需要自行定義)。編寫程式,用起泡法對陣列a中前n個元素(a[0],a[1],…,a[n-1])進行分段排序,其中前一半為從小到大排序,後一半為從大到小排序,n為奇數時,位於中間點的數不需要排序。
【習題6.265】系統給定外部整型變數n和整型陣列a(不需要自行定義)。編寫程式,用起泡法對陣列a中前n個元素(a[0],a[1],…,a[n-1])進行分段排序,其中前一半為從大到小排序,後一半為從小到大排序,並把n個數的平均值存在a[n]中,n為奇數時,位於中間點的數不需要排序。
【習題6.425】系統給定外部整型變數n和整型陣列a(不需要自行定義)。編寫程式,求某數列中前n個數,並依次存放在陣列a中,該數列的前兩個數為2和3,以後每一個數都是前兩個數之差(後面的數減去前面的數)的2倍,如前6個數依次為:2,3,2,-2,-8,-12)。
【習題6.435】系統給定外部整型變數n和整型陣列a和b(不需要自行定義)。編寫程式,對陣列a的前n個元素依次賦予從2開始的偶數,然後按順序每5個數求出一個平均值並依次儲存在另一陣列b中。
【習題6.615】系統給定外部整型變數m、n和整型二維陣列a和b(不需要自行定義)。編寫程式,將m´n二維陣列a的行和列元素互換,存到n´m二維陣列b中。
【習題6.621】系統給定外部整型變數n、i、imin和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中第i行的元素最小值imin。
【習題6.622】系統給定外部整型變數n、i、imax和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中第i行的元素最大值imax。
【習題6.623】系統給定外部整型變數n、j、jmin和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中第j列的元素最小值jmin。
【習題6.624】系統給定外部整型變數n、j、jmax和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中第j列的元素最大值jmax。
【習題6.625】系統給定外部整型變數n、dmin和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的主對角線元素的最小值dmin。
【習題6.626】系統給定外部整型變數n、dmax和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的主對角線元素的最大值dmax。
【習題6.633】系統給定外部整型變數n、min和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中的元素最小值min。
【習題6.634】系統給定外部整型變數n、max和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中的元素最大值max。
【習題6.636】系統給定外部整型變數n、d2min和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的兩條對角線上的元素的最小值d2min。
【習題6.637】系統給定外部整型變數n、d2max和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的兩條對角線上的元素的最大值d2max。
【習題6.641】系統給定外部整型變數n、i、isum和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中第i行的元素之和isum。
【習題6.642】系統給定外部整型二維陣列a、整型變數n、i和實型變數iavg(不需要自行定義)。編寫程式,求n*n二維陣列a中第i行的元素平均值iavg。
【習題6.643】系統給定外部整型變數n、j、jsum和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a中第j列的元素之和jsum。
【習題6.644】系統給定外部整型二維陣列a、整型變數n、j和實型變數javg(不需要自行定義)。編寫程式,求n*n二維陣列a中第j列的元素平均值javg。
【習題6.645】系統給定外部整型變數n、dsum和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的主對角線元素之和dsum。
【習題6.646】系統給定外部整型變數n、整型二維陣列a和實型變數davg(不需要自行定義)。編寫程式,求n*n二維陣列a的主對角線元素平均值davg。
【習題6.653】系統給定外部整型變數n、sum和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的全部元素之和sum。
【習題6.654】系統給定外部整型二維陣列a、整型變數n和實型變數avg(不需要自行定義)。編寫程式,求n*n二維陣列a的全部元素平均值avg。
【習題6.656】系統給定外部整型二維陣列a和整型變數n、d2s(不需要自行定義)。編寫程式,求n*n二維陣列a的兩條對角線上各元素值之和d2s。注意:對角線的元素只能計算一次。
【習題6.657】系統給定外部整型二維陣列a、整型變數n和實型變數d2avg(不需要自行定義)。編寫程式,求n*n二維陣列a的兩條對角線上各元素值的平均值d2avg。注意:對角線的元素只能計算一次。
【習題6.662】系統給定外部整型變數n、ss和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的周邊元素之和ss。
【習題6.663】系統給定外部整型二維陣列a、整型變數n和實型變數savg(不需要自行定義)。編寫程式,求n*n二維陣列a的周邊元素的平均值savg。
【習題6.664】系統給定外部整型變數n、smin和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的周邊元素的最小值smin。
【習題6.665】系統給定外部整型變數n、smax和整型二維陣列a(不需要自行定義)。編寫程式,求n*n二維陣列a的周邊元素的最大值smax。
【習題6.725】系統給定外部整型變數n和整型二維陣列a(不需要自行定義)。編寫程式,檢驗n×n的二維整型陣列a,是否為魔方矩陣。說明:每一行、每一列、每一對角線上的元素之和都是相等的為魔方矩陣。(初始化值為如下矩陣)
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
【習題6.755】找出一個二維陣列的鞍點,即該位置上的元素在該行上最大,在該列上最小。也可能沒有鞍點。如:下面陣列存在鞍點6。
12223
365
179
第7章 用函式實現模組化程式設計(例題0—習題42)
【習題7.010】寫一函式求3個整數中最小的數。
要求實現下列函式:
int min(int x,int y,int z);
【習題7.020】編寫函式,求將整筆錢換為1元、5元和10元的零錢共有多少種換法?
要求實現下列函式:
int change(int n);
【習題7.030】先編寫一個判斷素數的函式。再編寫一個函式將一個偶數表示為兩個素數之和,並返回其中較小的素數。注:素數指只能被1和自身整除的正整數。規定0,1不是素數。
要求實現下列2個函式:
int prime(int n);
/* 判斷素數,如果是素數返回1,不是素數則返回0 */
int f(int i);
/* 將偶數i表示為兩個素數之和,返回其中較小的素數*/
【習題7.050】編寫函式,將字串中ASCII碼最小的字元放在第一個字元位置,其餘字元依次往後移。
要求實現下列函式:
void func(char str[]);
【習題7.060】編寫函式將一個nxn的二維陣列按“次對角線”翻轉。
例如:翻轉前的陣列 翻轉後的陣列
1 2 3 9 6 3
4 5 6 ---> 8 5 2
7 8 9 7 4 1
要求實現的函式原型為:
void invert(char a[N][N]);
【習題7.064】編寫函式將一個NxN的二維陣列“水平”翻轉。
例如:翻轉前的陣列 翻轉後的陣列
1 2 3 7 8 9
4 5 6 ---> 4 5 6
7 8 9 1 2 3
要求實現的函式原型為:
void invertH(char a[N][N]);
【習題7.065】編寫函式將一個NxN的二維陣列“垂直”翻轉。
例如:翻轉前的陣列 翻轉後的陣列
1 2 3 3 2 1
4 5 6 ---> 6 5 4
7 8 9 9 8 7
要求實現的函式原型為:
void invertV(char a[N][N]);
【習題7.067】編寫函式將一個NxN的二維陣列的周邊元素“順時針”輪轉1位。
例如:輪轉前的陣列 輪轉後的陣列
1 2 3 4 1 2
4 5 6 ---> 7 5 3
7 8 9 8 9 6
要求實現的函式原型為:
void turningClockwise(char a[N][N]);
【習題7.068】編寫函式將一個NxN的二維陣列的周邊元素“逆時針”輪轉1位。
例如:輪轉前的陣列 輪轉後的陣列
1 2 3 2 3 6
4 5 6 ---> 1 5 9
7 8 9 4 7 8
要求實現的函式原型為:
void turningAnticlockwise(char a[N][N]);
【習題7.072】編寫函式將一個NxN的二維陣列a的元素按行向右輪轉1位。
例如:輪轉前的陣列 輪轉後的陣列
1 2 3 3 1 2
4 5 6 ---> 6 4 5
7 8 9 9 7 8
要求實現的函式原型為:
void turningRight(char a[N][N]);
【習題7.075】編寫函式將一個NxN的二維陣列a的元素按行向左輪轉1位。
例如:輪轉前的陣列 輪轉後的陣列
1 2 3 2 3 1
4 5 6 ---> 5 6 4
7 8 9 8 9 7
要求實現的函式原型為:
void turningLeft(char a[N][N]);
【習題7.082】編寫函式將一個NxN的二維陣列a的元素按列向下輪轉1位。
例如:輪轉前的陣列 輪轉後的陣列
1 2 3 7 8 9
4 5 6 ---> 1 2 3
7 8 9 4 5 6
要求實現的函式原型為:
void turningDown(char a[N][N]);
【習題7.085】編寫函式將一個NxN的二維陣列a的元素按列向上輪轉1位。
例如:輪轉前的陣列 輪轉後的陣列
1 2 3 4 5 6
4 5 6 ---> 7 8 9
7 8 9 1 2 3
要求實現的函式原型為:
void turningUp(char a[N][N]);
【習題7.103】編寫函式,求整數m和n的最大公約數,並作為函式的返回值。
要求實現的函式原型為:
int gdc(int m, int n);
【習題7.105】編寫函式,求整數m和n的最小公倍數,並作為函式的返回值。
要求實現的函式原型為:
int lcm(int m, int n);
【習題7.115】 編寫函式,將兩個兩位數的正整數a、b合併形成一個整數c且作為函式值返回。合併的方式是:將a的十位和個位數分別作為c的千位和十位數,b的十位和個位數分別作為c的百位和個位數。例如,若a=45,b=12,則該函式返回值為4152。
要求實現的函式原型為:
int func(int a, int b);
【習題7.125】編寫函式,對非負浮點數r的值的第三位小數四捨五入,返回保留2位小數的值。例如:若r的值為8.32488,則函式返回8.32;若r的值為8.32533,則返回8.33。
要求實現的函式原型為:
float func(float r);
【習題7.135】假設n是一個k(k≥2)位的正整數,編寫函式,求出由n的低k-1位構成的數並作為函式值返回。例如:若n值為5923,則函式返回923;若n值為923,則函式返回23。
要求實現的函式原型為:
int func(int n);
【習題7.175】編寫函式,求n以內(不包括n)同時能被3與7整除的所有自然數之和的平方根,並作為函式值返回。例如,若n為100時,函式返回值應為14.491。
要求實現的函式原型為:
float func(int n);
【習題7.184】編寫函式,根據公式s=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+…+n)計算s,並作函式值返回。例如:若n的值為11時,函式的值為1.833333。
要求實現的函式原型為:
float func(int n);
【習題7.187】編寫函式,計算下列級數和:1/(1*2)+1/(2*3)+1/(3*4)+ … +1/(n*(n+1)),並返回結果。例如,當n=10時,函式值為0.90909。
要求實現的函式原型為:
float func(int n);
【習題7.195】編寫函式,求m!/(n!(m-n)!)的值,結果由函式值返回。m與n為兩個正整數且要求m>n。例如:m=12,n=8時,執行結果為495.000000。
要求實現的函式原型為:
float func(int m, int n);
【習題7.205】編寫函式,計算並返回給定整數n除了1與自身之外的所有因子之和。例如,若n=8,則函式返回6(=2+4)。
要求實現的函式原型為:
int func(int n);
【習題7.255】編寫函式,根據以下公式返回π的值
π/2 = 1+1!/3+2!/(3*5)+...+n!/(3*5*7*...*(2*n+1))
要求滿足精度eps,即一旦有小於eps的項值加入後停止迭代。例如,若精度eps=0.0005,則返回值為3.141106。
要求實現的函式原型為:
float func(float eps);
【習題7.265】編寫函式,將陣列s所存字串中下標和ASCII碼均為偶數的字元,依次存入陣列t中,並構成一個新串。例如,若s中的字串值為ABCD123456,則t中的串值應為246。
要求實現的函式原型為:
void func(char s[], char t[]);
【習題7.275】假定字串s中可能含有字元'*'。請編寫函式,若字串s的尾部連續的'*'多於n個,則刪除多餘的'*'。例如,若s="*****A*BCDE**F*******"且n=4,則呼叫函式後,字串s="****A*BCDE**F****";若n≥7,則字串s中的內容不變。注意:函式中不得呼叫C語言提供的字串函式。
要求實現的函式原型為:
void func(char s[], int n);
【習題7.315】編寫函式,求出1到n之間(含n)能被7或11整除的所有整數並依次存入陣列a中,函式值為這些數的個數。例如,若n=15,則依次存入陣列a中的數為7、11和14,函式值為3。
要求實現的函式原型為:
int func(int n, int a[]);
【習題7.317】編寫函式,求出1到n之間(含n)都能被c和d整除的所有整數並依次存入陣列a中,函式值為這些數的個數。例如,若n=20,c=2,d=3,則依次存入陣列a中的數為6、12和18,函式值為3。
要求實現的函式原型為:
int func(int n, int c, int d, int a[]);
【習題7.325】假設陣列a存放了n個人的年齡。編寫函式,用陣列c統計各年齡段的人數,其中c[0]為0至9歲年齡段的人數,c[1]為10至19歲年齡段的人數,c[2]為20至29歲年齡段的人數,其餘依此類推,c[10]為100歲(含100)以上年齡的人數。
要求實現的函式原型為:
void func(int n, int a[], int c[]);
【習題7.335】假設字元陣列a中存放了按由小到大連續存放的字元構成的字串(後跟一個'\0'作為結束符)。編寫函式,刪去字串中所有重複的字元(各自只保留一個),並使得保留的字元仍構成一個字串(連續存放,'\0'作為結束符)。函式返回a中保留的字串長度。例如,若a中的字串值為:AAABBCDFFFHHHKLMMM,則刪除重複字元之後,函式返回值為9,a中的字串值為:ABCDFHKLM
要求實現的函式原型為:
int func(char a[]);
【習題7.345】假設字元陣列s中存放了一行字串,含有由小寫字母組成的若干單詞,單詞之間由若干個空格隔開(串的開頭沒有空格)。編寫函式,統計一行字串中單詞的個數,並作為函式值返回。
要求實現的函式原型為:
int func(char s[]);
【習題7.355】假定字串s中可能含有字元'*'。請編寫函式,將字串s中前導'*'全部移到字串的尾部。例如,若s的串值為***A*BC*DEF*G**,移動後,串值應為A*BC*DEF*G*****。注意:不得呼叫C語言提供的字串函式。
要求實現的函式原型為:
int func(char s[]);
【習題7.513】編寫函式,計算並返回陣列a中頭n個元素的乘積。
要求實現的函式原型為:
long func(int a[], int n);
【習題7.523】編寫函式,計算並返回陣列a中頭n個元素的平方和。
要求實現的函式原型為:
long func(int a[], int n);
【習題7.533】假設某班選舉班長,k位候選人的號碼分別為1至k,n張選票已存入陣列v(每個元素值在1至k之間)。編寫函式,用陣列c統計各位候選人的得票(c[i]為i號候選人的得票數)。
要求實現的函式原型為:
void func(int v[], int n, int k, int c[]);
【習題7.535】假設某班選舉班長,k位候選人的號碼分別為1至k,n張選票已存入陣列v(每個元素值在1至k之間)。編寫函式,用陣列c統計各位候選人的得票(c[i]為i號候選人的得票數),並返回得票最高的人的號碼。
要求實現的函式原型為:
int func(int v[], int n, int k, int c[]);
【習題7.563】編寫函式,把長整數n的各位數字從低位到高位依次儲存在陣列d中,並返回n的位數。例如,若n=2579,則n的位數為4,d[0..3]=9,7,5,2。
要求實現的函式原型為:
int func(long n, int d[]);
【習題7.563】編寫函式,把長整數n的各位數字從高位到低位依次儲存在陣列d中,並返回n的位數。例如,若n=2579,則n的位數為4,d[0..3]=2,5,7,9。
要求實現的函式原型為:
int func(long n, int d[]);
【習題7.655】編寫函式,用陣列num統計字串s中各母音字母(即:A、E、I、O、U)的個數。注意:不分大、小寫。例如,若s="THIs is a book",則num[0..4]={1,0,2,2,0}。
要求實現的函式原型為:
void func(char *s, int *num);
/* 功能:用陣列num統計符串s中母音字母出現的個數 */
【習題7.675】假設在陣列s中存放了n位學生的成績。編寫函式,用陣列p統計各分數段的人數,其中p[0]為不足60分的人數,p[1]為60至69分的人數,p[2]為70至79分的人數,p[3]為80至89分的人數,p[4]為90至100分的人數。
要求實現的函式原型為:
void func(int s[], int n, int p[]);
【習題7.685】編寫函式,從小到大依次求出能整除m的各整數,並存放在陣列d中,這些除數的個數由n返回。例如,若m=20,則有6個數能整除它,依次是1,2,4,5,10,20。
要求實現的函式原型為:
void func(int m, int d[], int *n);
【習題7.755】通訊時經常用到加密技術,把訊息加密後再傳輸。編寫一個用於加密訊息的函式,把字串str中的小寫字母改成“(其ASCII碼 + key字串中每個字元ASCII碼平方)除以128的餘數”所對應的字元,其它的字元不變,其中str稱為訊息原文,key稱為金鑰。
請思考:如何解密恢復原文,這種加密方法能準確地恢復原文嗎?
要求實現的函式原型為:
void func(char *str,char *key);
/* 功能:用key作為金鑰對字串str進行加密處理 */
第8章 善於利用指標(陣列、指標和字串)(例題0—習題29)
【習題8.011】請編寫一個函式func(char s[], char t[], int n),由陣列s中長度為n的字元序列構造其逆序列,並儲存在陣列t中。例如,由給定字元序列s=“are”求得逆序列t=“era”;由s=“time”求得t=“emit”。
要求實現函式:
void func(char s[], char t[], int n);
/* 陣列s的前n個元素存放給定的字元序列,
陣列t的前n個元素存放s的逆序列。
注意:陣列的下標從0開始。
*/
【習題8.012】請編寫一個函式func(char*s, char *t),由字串s構造其逆串t。
例如,由給定串s=“are”求得逆串t=“era”;由s=“time”求得t=“emit”。
要求實現函式:
void func(char *s, char *t);
/* s是給定字串的起始地址,
t是新字串的起始地址
*/
【習題8.015】對長度為n的字串s1,除首、尾字元外,將其餘字元按ASCII碼降序排列,組合成一個新的字串s2。
要求實現函式:
void func(char *s1, char *s2, int n);
/* s1為字串的起始地址,
s2為新字串的起始地址,
n是字串的長度。
要求:s1串不能發生改變,
s2串存放新的字串。
*/
【習題8.016】對字串s1,除首、尾字元外,將其餘字元按ASCII碼降序排列,組合成一個新的字串s2。
要求實現函式:
void func(char *s1, char *s2);
/* s1為字串的起始地址,
s2為新字串的起始地址,
注意:字串尾字元之後跟隨著一個結束符‘\0’,
即ASCII碼為0的字元,結束符不屬於字串。
要求:s1串不能發生改變,
s2串存放新的字串。
*/
【習題8.018】以字串s第m(>=0)個字元開始的所有字元,按升序的次序構成字串t。
要求實現函式:
void substr(char *s, int m, char *t);
/* s為字串的起始地址,
m>=0,
t為新字串的起始地址,
注意:字串尾字元之後跟隨著一個結束符‘\0’,
即ASCII碼為0的字元,結束符不屬於字串。
要求:s串不能發生改變,
t串存放新的字串。
*/
【習題8.020】在字串s中查詢字元c,如果找到,返回字元c首次出現在字串s中的位置指標;否則,返回空指標NULL。
要求實現函式:
char *match(char *s, char c);
/* s為字串的起始地址,
c為要查詢的字元,
返回值為字元c在字串s中首次出現的位置指標,
若c未在s中出現,則返回空指標NULL。
*/
【習題8.033】編寫函式,計算年份year中第yearday天相應的月和日。例如,呼叫函式month_day(2000,61,&m,&d)之後,m=3,d=1,即2000年的第61天是3月1日。
要求實現函式:
int month_day(int year, int yearday, int *pmonth, int *pday)
/* year是年,
yearday是天數,
若year和yearday合理,
則*pmonth和*pday是計算得出的月和日,函式返回1;
否則,函式返回0。
*/
【習題8.044】請編寫一個函式func,通過略去非數字字元,將字串s轉換為一個整數(不得呼叫C語言提供的將字串轉換為整數的函式)。
要求實現函式:
long func(char *s);
/* s是一個數字字串的地址,
函式返回值為由s含有的數字字元轉換得到的數(包含正負數情況)
*/
【習題8.105】請編寫一個函式findmax(int s[], int n),返回陣列s中n(>0)個整數中的最大值。注意:要求在函式中採用指標(而不是下標)來處理陣列元素。
要求實現函式:
int findmax(int s[], int n);
/* 返回s中n(>0)個整數的最大值。
注意:要求在函式中採用指標(而不是下標)來處理陣列元素。
*/
【習題8.124】請編寫一個函式min3adj(int s[], int n),陣列s中有n(>0)個整數,返回在s中相鄰三個數的和中的最小值。
要求實現函式:
int min3adj(int s[], int n);
/* 陣列s含n(>0)個整數,
返回在s中相鄰三個數的和中的最小值。
*/
【習題8.132】編寫函式,通過指標引數sum將x和y的和賦給相應實際引數。例如,若x=134、y=378,則sum的實參變數被賦值512。
要求實現的函式原型為:
void func(int x, int y, int *sum);
【習題8.136】編寫函式,返回指標引數x和y所指向的變數的值之和。
要求實現的函式原型為:
int func(int *x, int *y);
【習題8.138】編寫函式,比較指標引數x和y分別指向的變數,若前者的值較大,則交換兩者的值,並返回1;否則無須交換,返回0。
要求實現的函式原型為:
int func(int *x, int *y);
【習題8.143】假設指標a指向某陣列中的一個元素。編寫函式,在從元素*a開始的n個元素範圍內,向後查詢給定值x,一旦找到值等於x的元素,則返回該元素的序號;若找不到,則返回0。例如,假定a指向的10個元素依次為5,6,3,0,-4,8,9,-6,8,-7,若x=5,則返回1;若x=8,則返回6;若y=4,則返回0。
要求實現的函式原型為:
int func(int n, int *a, int x);
【習題8.146】假設指標a指向某陣列中的一個元素。編寫函式,對從元素*a開始的n個元素,統計並返回值為x的元素個數(若不存在這樣的元素,則返回0)。
要求實現的函式原型為:
int func(int n, int *a, int x);
【習題8.203】編寫函式,返回指標引數s所指向的字串的長度。例如,若該串為"I am a teacher.",則函式返回值是15。注意:字串結束符是'\0',不計入長度。不允許呼叫庫函式strlen()。
要求實現的函式原型為:
int func(char *s);
【習題8.212】編寫函式,在指標引數s所指向的字串中順序查詢由c指定的字元。一旦找到,則返回該字元在串中的序號(串的首個字元的序號為1),否則返回0。例如,若該串為"I am a student.",c='t',則函式返回值為9。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
int func(char *s, char c);
【習題8.215】編寫函式,在指標引數s所指向的字串中統計並返回由c指定的字元的個數。例如,若該串為"I am a student.",c='t',則函式返回值為2。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
int func(char *s, char c);
【習題8.222】編寫函式,複製指標引數s指向的字串到由指標引數t已經指向的儲存區域。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
void func(char *s, char *t);
【習題8.225】編寫函式,由指標引數s指向的字串頭n個字元構造一個字串,並儲存到到由指標引數t已經指向的儲存區域。例如,若s指向的字串為"I am a student.",n=4,則t指向的串為"I am"。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
void func(char *s, int n, char *t);
【習題8.228】編寫函式,由指標引數s指向的字串後n個字元構造一個字串,並儲存到到由指標引數t已經指向的儲存區域。例如,若s指向的字串為"I am a student.",n=8,則t指向的串為"student."。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
void func(char *s, int n, char *t);
【習題8.231】編寫函式,由指標引數s指向的字串中第i個字元開始的n個字元構造一個字串,並儲存到到由指標引數t已經指向的儲存區域。例如,若s指向的串為"I am a student.",i=8,n=7,則t指向的串為"student"。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
void func(char *s, int i, int n, char *t);
【習題8.234】編寫函式,通過將s字串中所有小寫字母轉換成大寫字母,構造一個字串並儲存在t已經指向的儲存區域,但原來的s串不改變。例如,若s字串為"I am a student.",則構造的t串為"I AM A STUDENT.”。
要求實現的函式原型為:
void func(char *s, char *t);
【習題8.237】編寫函式,通過將s字串中所有大寫字母轉換成小寫字母,構造一個字串並儲存在t已經指向的儲存區域,但原來的s串不改變。例如,若s字串為"I Am a Student.",則構造的t串為"i am a student.”。
要求實現的函式原型為:
void func(char *s, char *t);
【習題8.243】編寫函式,在字串s中順序查詢字串t,若找到,則返回其出現的位置,否則返回0。例如,設s="I am a student.",若t="stu",則返回值是8;若t="an",則返回值是0。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
int func(char *s, char *t);
【習題8.246】假設字串中每個連續字母序列稱為“單詞”。編寫函式,在字串s中順序獲取每個單詞,依次存入w指示的二維陣列,並返回單詞個數。例如,若有s="I am a student",則w={"I","am","a","student"}。注意:字串結束符是'\0',不允許呼叫字串庫函式。
要求實現的函式原型為:
int func(char *s, char (*w)[10]);
【習題8.282】編寫函式,查詢並返回p指示的二維陣列中的元素最大值。例如,二維陣列的元素值依次為{{45,38,-6,78},{34,48,70,4},{-9,0,4,20}},則函式返回值為78。
要求實現的函式原型為:
int func(int (*p)[4], int n);
/* 求二維陣列中的最大值 */
【習題8.285】編寫函式,依次對p指示的二維陣列的每一行元素值求和,並存入陣列sum中。例如,若二維陣列的元素值依次為{{45,38,-6,78},{34,48,70,4},{-9,0,4,20}},則sum[0..2]={155,156,15}。
要求實現的函式原型為:
void func(int (*p)[4], int n, int *sum);
/* 求二維陣列中各行元素值的和 */
【習題8.288】編寫函式,依次對p指示的二維陣列的每一列元素值求平均值,並存入陣列avg中。例如,若二維陣列的元素值依次為{{45,38,-6,78},{34,48,70,4},{-9,0,4,20}},則avg[0..2]={23.33,28.67,34.00}。
要求實現的函式原型為:
void func(int (*p)[4], int n, float *avg);
/* 求二維陣列中各列元素值的平均值 */
第9章 使用者自己建立資料型別(結構體和連結串列)(例題0—習題14)
【習題9.023】結構體型別定義如下:
struct date{int year; int month; int day;}; //定義日期結構體型別
struct student
{ char name[10]; //人名
struct date birth; //出生日期
};
結構體陣列s儲存了n個人的名字和出生日期。寫一函式,求這n個人中年齡最大(即出生日期最小)者的姓名。
要求實現下列函式:
char *oldest(struct student s[], int n);
【習題9.025】結構體型別定義如下:
struct date{int year; int month; int day;}; //定義日期結構體型別
struct student
{ char id[10]; //學號
char name[20]; //姓名
struct date birth; //出生日期
};
結構體陣列s儲存了n個人的學號、名字和出生日期。寫一函式,以結構體的形式返回這n個人中年齡最大(即出生日期最小)者的資訊。
要求實現下列函式:
struct student oldest(struct student s[], int n);
【習題9.027】結構體型別定義如下:
struct student
{ char id[10]; //學號
char name[10]; //姓名
int score[5]; //各門課成績
};
結構體陣列s儲存了n個學生的學號、名字和各門課成績。編寫函式,返回這n個人中第i門課成績最高者的學號。
要求實現下列函式:
char *best(struct student s[], int n, int i);
【習題9.029】結構體型別定義如下:
struct student
{ char id[10]; //學號
char name[10]; //姓名
int score[5]; //各門課成績
};
結構體陣列s儲存了n個學生的學號、名字及其5門課成績。編寫函式,返回這n個人中5門課成績總分最高者的學號。
要求實現下列函式:
char *best(struct student s[], int n);
【習題9.033】日期和連結串列結點的結構體型別定義如下:
struct date{int year; int month; int day;}; //日期結構體型別
struct studentNode //連結串列結點的結構體型別
{ char name[10]; //人名
struct date birth; //出生日期
struct studentNode *next
};
結構體連結串列L儲存了n個人的名字和出生日期。寫一函式,求這n個人中年齡最大(即出生日期最小)者的名字。
要求實現下列函式:
char *oldest(struct studentNode *L);
/* 若L是空表,則返回空指標null
否則返回表中年齡最大者的名字
*/
【習題9.053】結構體型別定義如下:
struct person
{ int id; //員工號
char name[10]; //姓名
int age; //年齡
char sex; //性別
};
結構體陣列personnel[n]儲存了n位員工的資訊。寫一函式,返回年齡在a及以上的員工數。
要求實現下列函式:
int count(struct person personnel[], int n, int a);
【習題9.055】結構體型別定義如下:
struct person
{ int id; //員工號
char name[10]; //姓名
int age; //年齡
char sex; //性別
};
結構體陣列personnel[n]儲存了n位員工的資訊。寫一函式,返回年齡在a及以上的x性別的員工數。
要求實現下列函式:
int count(struct person personnel[], int n, int a, char x);
【習題9.063】結構體型別定義如下:
struct course
{ int cID; //課程號,取值0~99
char name[10]; //課程名
float credit; //學分,取值0~5
int semester; //學期,取值1~8
};
結構體陣列c儲存了n門課程的資訊。寫一函式,求學期s的總學分。
要求實現下列函式:
float creditSum(struct course c[], int n, int s);
【習題9.073】課程連結串列結點的結構體型別定義如下:
struct courseNode //課程連結串列結點的結構體型別
{ int cID; //課程號,取值0~99
char name[10]; //課程名
float credit; //學分,取值0~5
int semester; //學期,取值1~8
struct courseNode *next;
};
結構體連結串列Lc儲存了各學期多門課程的資訊。寫一函式,求學期s的總學分。
要求實現下列函式:
float creditSum(struct courseNode *Lc, int s);
/* 若Lc是空表,則返回0;
否則返回學期s的總學分
*/
【習題9.133】日期和結構體型別定義如下:
struct date{int year; int month; int day;}; //日期結構體型別
struct student //結構體型別
{ char name[10]; //人名
struct date birth; //出生日期
};
結構體陣列s儲存了n個人的名字和出生日期。寫一函式,由陣列s中n個人
的資訊及其順序構造相應的連結串列。連結串列的結點的結構體型別定義如下:
struct studentNode //結構體型別
{ char name[10]; //人名
struct date birth; //出生日期
struct studentNode *next
};
要求實現下列函式:
struct studentNode *CreateLinkList(struct student s[], int n);
【習題9.173】課程連結串列結點的結構體型別定義如下:
struct courseNode //課程連結串列結點的結構體型別
{ int cID; //課程號,取值0~99
char name[10]; //課程名
float credit; //學分,取值0~5
int semester; //學期,取值1~8
struct courseNode *next;
};
結構體連結串列Lc儲存了多門課程的資訊。寫一函式,將課程號為c的課程的學分修改為t。
要求實現下列函式:
struct courseNode *creditChange(struct courseNode *Lc, int c, float t);
/* 若課程c不存在,則修改不成功,返回null;
否則修改該課程的學分為t,返回指向該課程結點的指標。
*/
【習題9.183】課程連結串列結點的結構體型別定義如下:
struct courseNode //課程連結串列結點的結構體型別
{ int cID; //課程號,取值0~99
char name[10]; //課程名
float credit; //學分,取值0~5
int semester; //學期,取值1~8
struct courseNode *next;
};
結構體連結串列Lc儲存了多門課程的資訊。寫一函式,將課程號為c的課程結點刪除。
要求實現下列函式:
struct courseNode *deleteCourse(struct courseNode **Lc, int c);
/* 若在連結串列Lc中課程c不存在,則刪除不成功,返回null;
否則從連結串列Lc中刪除該課程結點,並返回指向該課程結點的指標。
*/
【習題9.302】單向連結串列的結點型別定義如下:
struct node{
char ch;
struct node *next;
};
編寫函式,對單向連結串列L實現就地逆置,即將所有結點的指標反向,原鏈頭當作鏈尾,原鏈尾當作鏈頭,並返回逆置後連結串列的頭指標。
實現下列函式:
struct node *inverse(struct node *L);
/* 對單向連結串列L實現就地逆置,並返回逆置後連結串列的頭指標。*/
【習題9.352】單向連結串列的結點型別定義如下:
struct node{
char ch;
struct node *next;
};
編寫函式,對單向連結串列L實現排序,即按結點的ch值,從小到大重構連結串列L,並返回排序後的連結串列的頭指標。
實現下列函式:
struct node *sorting(struct node *L);
/* 對單向連結串列L實現從小到大排序,並返回重構後的連結串列的頭指標。*/
相關文章
- 【作業系統】程式與執行緒作業系統執行緒
- 作業系統-執行緒和程式的區別作業系統執行緒
- 作業系統_程式和執行緒的區別作業系統執行緒
- 作業系統——深入理解程式和執行緒作業系統執行緒
- 程式設計作業——系統管理程式設計
- 視覺化程式碼跟蹤除錯與STM32應用設計視覺化除錯
- Matlab學習-視覺化和程式設計Matlab視覺化程式設計
- VC++視覺化程式設計第一個程式設計例項出錯C++視覺化程式設計
- 作業系統中的程式與執行緒作業系統執行緒
- 微信小程式的下一步:支援NPM、小程式雲、視覺化程式設計、支援分包微信小程式NPM視覺化程式設計
- 作業系統複習(程式、執行緒、死鎖)作業系統執行緒
- 作業系統的程式/執行緒同步問題作業系統執行緒
- Linux作業系統之Shell程式設計Linux作業系統程式設計
- 作業系統實驗(一)-Shell程式設計作業系統程式設計
- 作業系統精髓設計原理 程式排程作業系統
- 作業系統實驗1 Shell程式設計作業系統程式設計
- 【作業系統】程式的描述與控制[執行緒](4)作業系統執行緒
- 無需作業系統直接執行 Python 程式碼作業系統Python
- 零程式設計的資料視覺化大屏系統,果斷收藏!程式設計視覺化
- 程式碼執行除錯框除錯
- 理解作業系統之程式和執行緒作業系統執行緒
- 女人的作業系統和程式設計師的職責薦作業系統程式設計師
- 程式設計思想之多執行緒與多程式(1):以作業系統的角度述說執行緒與程式程式設計執行緒作業系統
- Python系統程式設計之執行緒Python程式設計執行緒
- (Python程式設計 | 系統程式設計 | 並行系統工具 | 程式退出)Python程式設計並行
- 作業系統知識回顧(2)--程式與執行緒作業系統執行緒
- 作業系統-執行緒作業系統執行緒
- gdb除錯正在執行的程式除錯
- 視覺化程式設計工具Blockly 1.0簡介視覺化程式設計BloC
- 程式碼變更風險視覺化系統建設與實踐視覺化
- java程式在windows系統作為服務程式執行JavaWindows
- 【作業系統】1.程序和執行緒作業系統執行緒
- 【linux】系統程式設計-5-執行緒Linux程式設計執行緒
- Linux系統程式設計(27)——執行緒控制Linux程式設計執行緒
- Objective-C 2.0 執行時系統程式設計Object程式設計
- Shell程式設計-建立和執行程式設計
- 自學程式設計方法論:怎麼學作業系統?程式設計作業系統
- 『作業系統』 程式的描述與控制 Part 1 前驅圖與程式執行作業系統