作法:
#include<stdlib.h> /*巨集指令(macro)、前處理器指令(preprocessor directives)→以#(pound sign、number sign)+指令→Ex.#include、#define、#ifdef、#ifndef、#endif、...;<stdlib.h>→數值與字串轉換、記憶體配置、亂數與其他有用函數標頭檔*/
#include<stdio.h> /*前置處理器將標準輸入/輸出標頭檔(standard input/output header, <stdio.h>)引入程式*/
int main()
{
int x ; /*int是宣告x為整數(integer)*/
while(scanf("%d", &x) !=EOF) /*%d是十進位值(decimal)、&x是把輸入值儲存至x的位置*/
{
x = x + 2 * 3 / 4;
printf("%d\n", x); /*\n是跳逸字元,代表換行(newline)*/
}
return 0;
}
#include<stdio.h> /*前置處理器將標準輸入/輸出標頭檔(standard input/output header, <stdio.h>)引入程式*/
int main()
{
int x ; /*int是宣告x為整數(integer)*/
while(scanf("%d", &x) !=EOF) /*%d是十進位值(decimal)、&x是把輸入值儲存至x的位置*/
{
x = x + 2 * 3 / 4;
printf("%d\n", x); /*\n是跳逸字元,代表換行(newline)*/
}
return 0;
}
<補充>
%d用法延伸
1.%2d→同樣指十進位數,但唯一差異在於給該數兩個空格(若輸入的數字只有一個時,空格會在左邊,Ex.空格數字~指數字向右對齊)
2.%-2d→意思同上,但若輸入的數字只有一個時,空格會在右邊,Ex.數字空格~指數字向左對齊
%f用法概述
1.%f指以小數點表示的浮點數,
Ex.
#include<stdlib.h>
#include<stdio.h>
int main()
{
float x;
while(scanf("%f",&x)!=EOF)
{
printf("%f\n", x);
}
return 0;
}
2.%.2f指小數點後只輸出2位數
Ex.
#include<stdlib.h>
#include<stdio.h>
int main()
{
float x ;
while(scanf("%f", &x) !=EOF)
{
printf("%.2f\n", x);
}
return 0;
}
---------------------------------------------------------------------------------------------
題目2:輸入一數 將其分為y個50、z個10、u個5、t個1(以最少總個數)
作法:
#include <stdio.h>
#include <stdlib.h>
int y,z,u,t; /*變數型態第一個變數名稱 第二個變數名稱,中間以逗號隔開*/
int main ()
{
int x = 0;
int A[4]; /*A[4]:陣列(array)*/
A[0] = 50;
A[1] = 10;
A[2] = 5;
A[3] = 1;
while(scanf("%d",&x)!=EOF){ /* EOF:end of file 檔案的結尾 */
y = x / A[0];
x = x % A[0]; /* %取餘數:Ex.3 % 2 → 1 */
z = x / A[1];
x = x % A[1];
u = x / A[2];
x = x % A[2];
t = x / A[3];
printf("%d個50元\n",y);
printf("%d個10元\n",z);
printf("%d個5元\n",u);
printf("%d個1元\n",t);
}
return 0;
}
---------------------------------------------------------------------------------------------#include <stdlib.h>
int y,z,u,t; /*變數型態第一個變數名稱 第二個變數名稱,中間以逗號隔開*/
int main ()
{
int x = 0;
int A[4]; /*A[4]:陣列(array)*/
A[0] = 50;
A[1] = 10;
A[2] = 5;
A[3] = 1;
while(scanf("%d",&x)!=EOF){ /* EOF:end of file 檔案的結尾 */
y = x / A[0];
x = x % A[0]; /* %取餘數:Ex.3 % 2 → 1 */
z = x / A[1];
x = x % A[1];
u = x / A[2];
x = x % A[2];
t = x / A[3];
printf("%d個50元\n",y);
printf("%d個10元\n",z);
printf("%d個5元\n",u);
printf("%d個1元\n",t);
}
return 0;
}
題目3: 輸入五數找出五者之MAX & min
作法:
#include <stdio.h>
#include <stdlib.h>
int main (){
int x = 0, y = 0, z = 0, t = 0, u = 0;
while(scanf("%d%d%d%d%d", &x, &y, &z, &t, &u)!=EOF){
if(x >= y){
if(x >= z){
if(x >= t){
if(x >= u){
printf("MAX%d\n", x);
}
else{
printf("MAX%d\n", u);
}
}
else{
if(t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
else{
if(z >= t){
if(z >= u){
printf("MAX%d\n", z);
}
}
else{
if(t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
}
else{
if(y >= z){
if(y >= t){
if(y >= u){
printf("MAX%d\n", y);
}
else{
printf("MAX%d\n", u);
}
}
else{
if (t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
else{
if(z >= t){
if(z >= u){
printf("MAX%d\n", z);
}
else{
printf("MAX%d\n", u);
}
}
else{
if(t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
}
if(x <= y){
if(x <= z){
if(x<= t){
if(x <= u){
printf("min%d\n", x);
}
else{
printf("min%d\n", u);
}
}
else{
if(t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
else{
if(z <= t){
if(z <= u){
printf("min%d\n", z);
}
}
else{
if(t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
}
else{
if(y <= z){
if(y <= t){
if(y <= u){
printf("min%d\n", y);
}
else{
printf("min%d\n", u);
}
}
else{
if (t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
else{
if(z <= t){
if(z <= u){
printf("Min%d\n", z);
}
else{
printf("min%d\n", u);
}
}
else{
if(t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
}
}
return 0;
}
---------------------------------------------------------------------------------------------#include <stdlib.h>
int main (){
int x = 0, y = 0, z = 0, t = 0, u = 0;
while(scanf("%d%d%d%d%d", &x, &y, &z, &t, &u)!=EOF){
if(x >= y){
if(x >= z){
if(x >= t){
if(x >= u){
printf("MAX%d\n", x);
}
else{
printf("MAX%d\n", u);
}
}
else{
if(t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
else{
if(z >= t){
if(z >= u){
printf("MAX%d\n", z);
}
}
else{
if(t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
}
else{
if(y >= z){
if(y >= t){
if(y >= u){
printf("MAX%d\n", y);
}
else{
printf("MAX%d\n", u);
}
}
else{
if (t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
else{
if(z >= t){
if(z >= u){
printf("MAX%d\n", z);
}
else{
printf("MAX%d\n", u);
}
}
else{
if(t >= u){
printf("MAX%d\n", t);
}
else{
printf("MAX%d\n", u);
}
}
}
}
if(x <= y){
if(x <= z){
if(x<= t){
if(x <= u){
printf("min%d\n", x);
}
else{
printf("min%d\n", u);
}
}
else{
if(t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
else{
if(z <= t){
if(z <= u){
printf("min%d\n", z);
}
}
else{
if(t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
}
else{
if(y <= z){
if(y <= t){
if(y <= u){
printf("min%d\n", y);
}
else{
printf("min%d\n", u);
}
}
else{
if (t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
else{
if(z <= t){
if(z <= u){
printf("Min%d\n", z);
}
else{
printf("min%d\n", u);
}
}
else{
if(t <= u){
printf("min%d\n", t);
}
else{
printf("min%d\n", u);
}
}
}
}
}
return 0;
}
題目4:重複輸入數字(利用do while迴圈) 當奇數時結束(用"!"反向敘述之結果)
作法1:
#include <stdio.h>
#include <stdlib.h>
int main(){
int x = 0;
do{
scanf("%d", &x);
}while(!(x % 2)); /*當while括號內回傳非0的值時,會繼續重複"do{}while();"之大括號內的動作,直到回傳值為0止*/
system("pause");
}
作法2:#include <stdlib.h>
int main(){
int x = 0;
do{
scanf("%d", &x);
}while(!(x % 2)); /*當while括號內回傳非0的值時,會繼續重複"do{}while();"之大括號內的動作,直到回傳值為0止*/
system("pause");
}
<說明>
由於取餘數%於電腦運算較耗時(∵此%於電腦中還需做除法、減法等運算) 可改用位元操作"!(x&1)" (對x之第一個位元看看是否為1,若是則結束該迴圈)
#include <stdio.h>
#include <stdlib.h>
int main(){
int x = 0;
do{
scanf("%d", &x);
}while(!(x & 1)); /*x & 1→位元操作,回傳第一個位元的值;!()→反向敘述,將()內結果0變1、1變0;&→取變數位置*/
system("pause");
}
---------------------------------------------------------------------------------------------由於取餘數%於電腦運算較耗時(∵此%於電腦中還需做除法、減法等運算) 可改用位元操作"!(x&1)" (對x之第一個位元看看是否為1,若是則結束該迴圈)
#include <stdio.h>
#include <stdlib.h>
int main(){
int x = 0;
do{
scanf("%d", &x);
}while(!(x & 1)); /*x & 1→位元操作,回傳第一個位元的值;!()→反向敘述,將()內結果0變1、1變0;&→取變數位置*/
system("pause");
}
題目5:輸入字元"xxx",輸出字元"hello, xxx"
題源:a001~http://zerojudge.tw/
作法:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char h[9999]; /*char 字元宣告(c語言中沒有字串的變數型態(c++中有string),故以字元陣列形式來儲存字串)*/
while(scanf("%s",&h)!=EOF){ /*%s 字串;h本身為該字元陣列位置,故可以不加&*/
printf("hello, %s\n",h);
}
return 0;
}
<補充>#include <stdlib.h>
int main()
{
char h[9999]; /*char 字元宣告(c語言中沒有字串的變數型態(c++中有string),故以字元陣列形式來儲存字串)*/
while(scanf("%s",
printf("hello, %s\n",h);
}
return 0;
}
上面宣告了一個字串h,長度為9999字元,事實上每個字串後面都有一個隱藏的字元"\0"。
例:一字串"test",實際上共用了5個字元(Bytes)。
---------------------------------------------------------------------------------------------
題目6:輸入一數 將其數值一個個加起來求得總和
<測資>輸入1234567→輸出1+2+3+4+5+6+7=28
作法1:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n ,x ,u ;
while(scanf("%d",&n) != EOF){
for(u = 0,x = 0;n>0;u = u + x){ /*for(每次迴圈運行前之初始值;每次迴圈運行前之判斷式;每次迴圈運行後之指令)*/
if(n>=10){
printf("%d+",x = n % 10);
}
else{
printf("%d",x = n % 10);
}
n = n / 10;
}
printf("=%d\n",u);
}
}
作法2:#include<stdlib.h>
int main(){
int n ,x ,u ;
while(scanf("%d",&n) != EOF){
for(u = 0,x = 0;n>0;u = u + x){ /*for(每次迴圈運行前之初始值;每次迴圈運行前之判斷式;每次迴圈運行後之指令)*/
if(n>=10){
printf("%d+",x = n % 10);
}
else{
printf("%d",x = n % 10);
}
n = n / 10;
}
printf("=%d\n",u);
}
}
#include<stdio.h>
#include<stdlib.h>
main(){
int n ;
while(scanf("%d",&n) !=EOF){
int m = n ,k = 1;
while(m >= 10){
k *= 10;
m /= 10;
}
int sum = 0 ;
while(n > 0){
int d = n / k;
sum += d;
printf("%d", d);
n %= k;
if(n > 0) printf("+");
k /= 10;
}
printf("=%d\n", sum);
}
}
---------------------------------------------------------------------------------------------#include<stdlib.h>
main(){
int n ;
while(scanf("%d",&n) !=EOF){
int m = n ,k = 1;
while(m >= 10){
k *= 10;
m /= 10;
}
int sum = 0 ;
while(n > 0){
int d = n / k;
sum += d;
printf("%d", d);
n %= k;
if(n > 0) printf("+");
k /= 10;
}
printf("=%d\n", sum);
}
}
題目7:找質數
作法1:
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,IsPrime(int);
while(scanf("%d",&n) !=EOF){
if(IsPrime(n)){printf("質數\n");}
else{printf("非質數\n");}
}
}
int IsPrime(int n){
if(n<2)return 0;
for(int i=2;i<n;i++)
if(n % i == 0)return 0;
return 1;
}
作法2:#include<stdlib.h>
int main(){
int n,IsPrime(int);
while(scanf("%d",&n) !=EOF){
if(IsPrime(n)){printf("質數\n");}
else{printf("非質數\n");}
}
}
int IsPrime(int n){
if(n<2)return 0;
for(int i=2;i<n;i++)
if(n % i == 0)return 0;
return 1;
}
#include<stdio.h>
#include<stdlib.h>
int main(){
int n,IsPrime(int);
while(scanf("%d",&n) !=EOF){
if(IsPrime(n)){printf("質數\n");}
else{printf("非質數\n");}
}
}
int IsPrime(int n){
if(n<2)return 0;
for(int i=2;i*i<=n;i++) /*利用矛盾證明法增加程式運算效率 */
if(n % i == 0)return 0;
return 1;
}
<補充>矛盾證明法(找質數)~觀念:線性代數之矛盾法(歸謬證法)、反證法#include<stdlib.h>
int main(){
int n,IsPrime(int);
while(scanf("%d",&n) !=EOF){
if(IsPrime(n)){printf("質數\n");}
else{printf("非質數\n");}
}
}
int IsPrime(int n){
if(n<2)return 0;
for(int i=2;i*i<=n;i++) /*利用矛盾證明法增加程式運算效率 */
if(n % i == 0)return 0;
return 1;
}
If n=ab,a<=b
Assuming that a>n開根號
Then, n=ab>=aa>n causes contrary.
Therefore, a<=n開根號
---------------------------------------------------------------------------------------------
題目8:a、b兩數四則運算(加、減、乘、取餘數、除)(p.s.除法要顯示小數);算BMI值(用浮點數、到小數點第二位)
作法:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a,b;
float c,d;
printf("請輸入兩個整數數字\n");
scanf("%d %d",&a,&b);
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a+b=%d\n",a+b);
printf("a-b=%d\n",a-b);
printf("a*b=%d\n",a*b);
printf("a%b=%d\n",a%b);
printf("a/b=%f\n\n\n",(float)a/b);
printf("請輸入身高(公尺)\n");
scanf("%f",&c);
printf("請輸入體重(公斤)\n");
scanf("%f",&d);
printf("BMI=%.2f\n",d/(c*c));
system("pause");
return 0;
}
---------------------------------------------------------------------------------------------#include<stdlib.h>
int main()
{
int a,b;
float c,d;
printf("請輸入兩個整數數字\n");
scanf("%d %d",&a,&b);
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a+b=%d\n",a+b);
printf("a-b=%d\n",a-b);
printf("a*b=%d\n",a*b);
printf("a%b=%d\n",a%b);
printf("a/b=%f\n\n\n",(float)a/b);
printf("請輸入身高(公尺)\n");
scanf("%f",&c);
printf("請輸入體重(公斤)\n");
scanf("%f",&d);
printf("BMI=%.2f\n",d/(c*c));
system("pause");
return 0;
}
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
沒有留言:
張貼留言