# C HOW TO PROGRAM 期中上機來看這
::: warning
請先閱讀免責聲明
1.本文章都是我自己用手打出來的程式碼僅供大家參考,請自行驗證程式是否沒有問題,若期中考因為本文章被扣分請自行負責
2.若程式有bug或非當屆題目請ig私訊我[@lyuchan0831](https://www.instagram.com/lyuchan0831/)
:::
::: info
by 學長的上機小補帖,歡迎多加利用
一起來拯救城市吧!!!!!
你知道程設被當要怎樣嗎?
送各位一支影片[點我看影片](https://www.youtube.com/watch?v=5t22_TR-6v4&ab_channel=JustinWu/)
大家可以多多利用[線上編譯器](https://www.programiz.com/c-programming/online-compiler/)記得scanf_s要改成scanf黑
還有system("pause");記得刪掉
:::
:::danger
[toc]
:::
## 第一題(用*畫畫)
``` c=
/*請寫一個一般形式(general form)的程式完成以下圖形,
亦即當使用者輸入 5 時,即顯示 5 列圖形在螢幕上
若是輸入 3 時,則顯示 3 列圖形在螢幕上
(下圖即是輸入 3 所顯示之圖形)
*
**
***
*/
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int i, j, k;
printf("%s", "please enter the number\n");
scanf_s("%d", &k);
for (i = 1; i <= k; i++)
{
for (j = 1; j <= i; j++)
printf("%s", "*");
puts("");
}
system("pause");
}
```
---
## 第二題(-10 10比大小)
```c=
/*
* 當使用者輸入兩個在 - 10 與 10 之間的數字時,
* 顯示這兩個數字的最大值於螢幕上,
* 若這兩個數字不全在 - 10 與 10 之間的話,
* 則顯示這兩個數字的最小值在螢幕上
*/
#include<stdio.h>
#include<stdlib.h>
void main(void)
{
int h,j,k,l;
printf("%s", "enter the number\n");
scanf_s("%d%d", &k,&l);
{
if ((k > -10) && (k < 10) && (l > -10) && (l < 10))
{
if (k > l)
printf("%d", k);
if (l > k)
printf("%d", l);
}
else
{
if (k > l)
printf("%d", l);
if (l > k)
printf("%d", k);
}
}
system("pause");
}
```
---
## 第三題(四位數個別加法)
``` c=
/*
* 讓使用者輸入四位數的整數
* 計算此整數之個別數字的總和並顯示於螢幕上
* 例如,使用者輸入 5312,則在螢幕上會顯示 11。
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n, a, b, c, d;
printf("%s\n", "please enter the number");
scanf_s("%d", &n);
a = n / 1000;
b = n % 1000 / 100;
c = n % 100 / 10;
d = n % 10;
printf("%d", a + b + c + d);
system("pause");
}
```
---
## 第四題(輸入之整數的所有質因數)
```c=
/*
尋找使用者輸入的所有質因數
ex:輸入12結果為12=2*2*3
*/
#include<stdio.h>
#include<stdlib.h>
void main() {
int in;
scanf_s("%d", &in);
printf("%d=", in);
while (in >= 2){
for (int i = 2; i <= in; i++) {
if (in != i) {
if (in % i == 0) {
in /= i;
printf("%d * ", i);
break;
}
}
else {
printf("%d", in);
in /= i;
}
}
}
}
```
---
## 第五題(求不包含此數的最大因數)
```c=
/*
使用者輸入的數字中
不包含此數字的最大因數在螢幕上
例如當使用者輸入 12 時,最大的因數是 6
若輸入的值是 81,則最大的因數是 27
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,j;
printf("輸入一個整數:");
scanf_s("%d", &n);
j = n - 1;
printf("其最大因數為:", j);
for (; n >= j; j--)
{
if (n % j == 0)
{
printf("%d", j);
return 0;
}
}
}
```
---
## 第六題(從 1 到整數的所有 7 倍數和)
```c=
/*
使用者輸入一個整數 N
請撰寫一個程式計算從 1 到 N 的所有 7 倍數和
並將計算結果顯示在螢幕上
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, j, n=0;
printf("輸入一個整數:");
scanf_s("%d", &i);
j = 7;
printf("從 1 到整數的所有 7 倍數和 = ", i);
for (j = 0; i >= j; j++)
{
if (j % 7 == 0)
{
n += j;
}
}
printf("%d", n);
system("pause");
}
```
---
## 第七題(印出1~整數的所有質數)
:::info
簡單解
:::
```c=
/*
使用者輸入一個整數 N,請撰寫一個程式顯示從 1 到 N 的所有質數在螢幕上
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, j, a;
printf("請輸入一個整數:");
scanf_s("%d", &a);
for (i = 0; i <= a ;i++) {
int counter = 0;
for (j = 1; j <= i; j++) {
if (i % j == 0) {
counter++;
}
}
if (counter == 2) {
printf("%d ", i);
}
}
}
```
::: danger
困難解
:::
```c=
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, j,n;
printf("請輸入一個整數:");
scanf_s("%d", &n);
for (i = 2; i <= n; i++) {
for (j = 2; j <= i / 2; j++)
if (i % j == 0)
break;
if (j > i / 2)
printf("%d ", i);
}
}
```
---
## 第八題(輸入一個整數N )
```c=
/*使用者輸入一個整數 N
請撰寫一個程式顯示從 1 開始的 N 個值數列在螢幕上
例如 N 為 5,則顯示 1 -3 9 -27 81
若 N 為 8,則顯示 1 -3 9 -27 81 -243 729 -2187
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n,j=1;
printf("請輸入一個整數:");
scanf_s("%d", &n);
for (int i = 0; n > i; i++ ) {
printf("%d ", j);
j*= -3;
}
}
```
---
## 第九題(判斷三角形是否成立)
```c=
/*
請撰寫一個程式讓使用者輸入三個正整數
並判斷這三個正整數是否可以成為三角形的三邊長。
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, j;
printf("請輸入三角形的三個邊:");
scanf_s("%d%d%d", &n, &i, &j);
if (n + i > j && n + j > i && i + j > n) {
puts("成立");
}
else {
puts("不成立");
}
}
```
---
## 第十題(判斷是否為直角三角形)
```c=
/*
請撰寫一個程式讓使用者輸入三個正整數
並判斷這三個正整數是否可以成為直角三角形的三邊長。
*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, i, j;
printf("請輸入三角形的三個邊:");
scanf_s("%d%d%d", &n, &i, &j);
if (n*n+i*i==j*j||i*i+j*j==n*n||n*n+j*j==i*i) {
puts("成立");
}
else {
puts("不成立");
}
}
```
---
## 第十一題(判斷是否為質數)
```c=
/*請撰寫一個程式以判斷使用者所輸入的整數是否為質數?*/
#include <stdio.h>
#include <stdlib.h>
int main() {
int i,j;
printf("請輸入一個數值:");
scanf_s("%d", &i);
int counter = 0;
for (j = 1; j <= i; j++) {
if (i % j == 0) {
counter++;
}
}
if (counter == 2) {
puts("成立");
}
else {
puts("不成立");
}
}
```
---
## 第十二題(判斷五位數有幾個5)
:::info
簡單解
:::
```c=
/*
請撰寫一個程式以判斷使用者輸入的 5 位數中
有幾個位數的值為 5
例如使用輸入 53415,則顯示 2 個
又例如使用者輸入 31839 則顯示 0 個
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, a, b, c, d, e, i;
printf("%s\n", "please enter the number");
scanf_s("%d", &i);
a = (i / 10000) % 10;
b = (i / 1000) % 10;
c = (i / 100) % 10;
d = (i / 10) % 10;
e = i % 10;
int f = 0;
{
if (a == 5)
{
f = f + 1;
}
if (b == 5)
{
f = f + 1;
}
if (c == 5)
{
f = f + 1;
}
if (d == 5)
{
f = f + 1;
}
if (e == 5)
{
f = f + 1;
}
}
printf("%d\n", f);
system("pause");
}
```
::: danger
困難解
:::
```c=
/*
* 請撰寫一個程式以判斷使用者輸入的 5 位數中
* 有幾個位數的值為 5
* 例如使用輸入 53415,則顯示 2 個
* 又例如使用者輸入 31839 則顯示 0 個
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i, o = 0;
printf("請輸入一個五位數:");
scanf_s("%d", &i);
while (i != 0) {
if (i % 10 == 5) o++;
i /= 10;
}
printf("%d\n", o);
}
```
---
## 第十三題(輸入五位數判斷不同值)
```c=
/*
請撰寫一個程式以判斷使用者輸入的 5 位數中
共有幾個不同位數的值
例如使用者輸入 53415,則有 4 個不同值
又例如使用者輸入 31833 則有 3 個不同值
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, a, b, c, d, e, i;
printf("%s\n", "please enter the number");
scanf_s("%d", &i);
a = (i / 10000) % 10;
b = (i / 1000) % 10;
c = (i / 100) % 10;
d = (i / 10) % 10;
e = i % 10;
int f = 0;
{
if (a != b)
{
f = f + 1;
}
if (b != c)
{
f = f + 1;
}
if (c != d)
{
f = f + 1;
}
if (d != e)
{
f = f + 1;
}
if (e != a)
{
f = f + 1;
}
if ((a == b) && (b == c) && (c == d) && (d == e) && (e == a))
{
f = f + 1;
}
}
printf("%d", f);
system("pause");
}
```
---
## 第十四題(輸出加減乘除)
```c=
/*
* 請撰寫一個程式讓使用者輸入兩個整數
* 並顯示這兩個整數的加法、減法、乘法、除法以及取餘數的結果於螢幕上。
* if(真的不會這題){
* while(1){
* 重修c_how_to_program;
* }
* }
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x, y;
printf("%s\n", "please enter the number");
scanf_s("%d%d", &x, &y);
printf("加法:%d\n", x + y);
printf("減法:%d\n", x - y);
printf("乘法:%d\n", x * y);
printf("除法:%d\n", x / y);
printf("餘數:%d\n", x % y);
}
```
---
## 第十五題(持續更新中)
```c=
/*
請撰寫一個程式讓使用者輸入三個整數
並顯示這三個整數的最大值、最小值以及最大值與最小值間的差值
(即計算最大值 - 最小值)的結果於螢幕上
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, b, c, x;
int d = 0;
int f = 0;
printf("%s\n", "please enter the number");
scanf_s("%d%d%d", &a, &b, &c);
if (a > b && a > c) {
printf("%s%d\n", "最大值:", a);
d = a;
}
if (b > a && b > c) {
printf("%s%d\n","最大值:", b);
d = b;
}
if (c > b && c > a) {
printf("%s%d\n","最大值:", c);
d = c;
}
if (a < b && a < c) {
printf("%s%d\n","最小值:", a);
f = a;
}
if (b < a && b < c) {
printf("%s%d\n", "最小值:", b);
f = b;
}
if (c < b && c < a) {
printf("%s%d\n", "最小值:", c);
f = c;
}
x = d - f;
printf("%s%d", "最大值-最小值:", x);
}
```
---
## 第十六題(輸入 5 位數,並反向顯示且空格三格)
```c=
/*請撰寫一個程式讓使用者輸入一個 5 位數
* 並反向顯示這 5 位數且每個位數間均需相隔 3 個空格
* 例如使用者輸入 42139,則螢幕上顯示 9 3 1 2 4
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int f;
printf("%s\n", "please enter the number");
scanf_s("%d", &f);
printf("%d%s%d%s%d%s%d%s%d%s", f % 10, " ", (f / 10) % 10, " ", (f / 100) % 10, " ", (f / 1000) % 10, " ", (f / 10000));
system("pause");
}
```
---
## 第十七題(寫一個程式以計算數學式)
```c=
/*
請撰寫一個程式以計算數學式
並將計算結果顯示在螢幕上
其中的 x 以及 y 值由使用者輸入。
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int x, y;
printf("%s\n", "please enter the number");
scanf_s("%d%d", &x, &y);
printf("%d", (x + y) * (x + x * y + y));
}
```
## 第十八題(找共同質因數)
```c=
/*
請撰寫一個程式以判斷使用者輸入的兩個整數間都有的質因數並顯示在螢幕上
例如使用者輸入 15 以及 39 兩個整數
則此兩個整數都有的質因數是 3
又例如使用者輸入 42 以及 180
則此兩個整數都有的質因數是 2 以及 3
* */
#include <stdio.h>
int main() {
int a, b;
printf("請輸入兩個整數:");
scanf_s("%d %d", &a, &b);
printf("%d 和 %d 的共同質因數是:", a, b);
int c = 2;
while (c <= a && c <= b) {
if (a % c == 0 && b % c == 0) {
printf("%d ", c);
a /= c;
b /= c;
}
else {
c++;
}
}
printf("\n");
return 0;
}
```