位置: 郭怡勝 >
程式語言
正修科技大學-機械工程系-40404113-郭怡勝同學的課程網頁-程式語言
レ(゚∀゚)ヘ ゚∀゚)ノレ(゚∀゚)ヘヘ( ゚∀゚)ノ!!
整理作業編號:
--------------------------------------------------------------------------------------------------------------------------------------------
>106/09/12作業(猜數字1) >作業-1(活動心得)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/09/19作業(猜數字2) >作業-1(整理歷程檔)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/09/20作業(猜數字3)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/09/26作業(身高體重) >作業-1(心得)
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
>106/10/17作業(C語言借書) >作業-1(求1+1/2+1/3....+1/n)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/10/24作業(是否因倍數) >作業-1(是否奇偶數) >作業-2(是否及格)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/11/07作業(報名MOC) >作業-1(算出總合.平均.是否及格) >作業-2(是否為2或3倍數)
>作業-5(找出最大值(進階))
--------------------------------------------------------------------------------------------------------------------------------------------
>106/11/14作業(找出最大最小及平均) >作業-1(浮點數求平均) >作業-2(1-1補顯示字)
>作業-13(1+1/2+1/3+1/4+.....+1/n > m 時 n?)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/11/21作業(樂透彩)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/11/28作業(隨機產生=9之數) >作業-1(求正整數迴圈及連乘積)
>作業-2(s=1+1/2+1/3+...+1/n)
>作業-3(9*9乘法表)
>作業-4(求正數及負數和)
>作業-5(隨機分數判測)
>作業-6(分辨分數階層)
>作業-7(n*n乘法表)
>作業-8(產生範圍n數求大於60之平均)
--------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------
>106/12/12作業(擲骰子)
--------------------------------------------------------------------------------------------------------------------------------------------
>106/12/19作業(期末教學評量) >作業-1(身分證檢查(待修正))
>作業-2(身分證檢查(完整版))
--------------------------------------------------------------------------------------------------------------------------------------------
>106/12/26作業(排序法) >作業-1(排序法輸入版)
>作業-2(模擬次數排序後尋找數值)
>107/01/02作業(隨機產生n數排序找尋)
隨機產生n數排序找尋
/*
隨機產生n個(1-20000)的0-30000相異整數
比較排序前後以so%%
1.線性找尋(未排序)
2.線性找尋(排序)
2.二分找尋 某一整數的次數
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[30001],left,right,middle,no;
int i, j, t,N,flag,x,key,found=0,nn;
long tk;
unsigned seed;
seed = (unsigned)time(NULL);
srand(seed);
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入模擬數目(<=20000):");
scanf("%d",&N);
for(i=0; i<N; i++)
{
while(1)
{
flag=1;
x = rand() % 30001;
for(j=0;j<=i-1;j++)
{
if( x == a[j])
{
flag=0;
break;
}
}
if(flag == 1)
{
a[i]=x;
break;
}
}
}
printf("\n原陣列:\n");
for (i=0; i<N; i++) printf("%6d",a[i]);
printf("\n未排序(線性找尋):\n");
printf("\n\n請輸入要找的值:");
scanf("%d",&key);
for(i=0;i<N;i++)
{
if(key == a[i])
{
found=1;
break;
}
}
if(found == 1)
printf("\n找了 %3d 次,找到了\n",i+1);
else
printf("\n找了 %3d 次,找不到\n",i);
printf("\n排序後(線性找尋):\n");
printf("\n");
for (i=0; i<N-1; i++)
for (j=i+1; j<N; j++)
if (a[i]>a[j])
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
printf("\n\n排序後\n");
for (i=0; i<N; i++) printf("%6d",a[i]);
printf("\n");
for(i=0;i<N;i++)
{
if(key == a[i])
{
found=1;
break;
}
}
if(found == 1)
printf("\n找了 %3d 次,找到了\n",i+1);
else
printf("\n找了 %3d 次,找不到\n",i);
printf("\n二分找尋:\n");
printf("\n");
for (i=0; i<=N; i++)
{
for (j=0; j<=N-i; j++)
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
left=0;
right=N;
while (left <= right)
{
middle=(left+right)/2;
no++;
if (key < a[middle])
right=middle-1;
else if (key > a[middle])
left=middle+1;
else if (key==a[middle])
break;
}
if (key==a[middle])
printf("\n找了 %d 次, %d 在第 %d 個位置找到\n",no, key,middle-1);
else
printf("\n找了 %d 次, %d 找不到\n",no, key);
return 0;
}
模擬次數排序後尋找數值
/*
隨機產生n個(1-100)的0-100相異整數%%
比較排序前後找尋某一整數的次數%%
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a[101];
int i, j, t,N,flag,x,key,found=0,nn;
long tk;
unsigned seed;
seed = (unsigned)time(NULL);
srand(seed);
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入模擬數目(<=100):");
scanf("%d",&N);
for(i=0; i<N; i++)
{
while(1)
{
flag=1;
x = rand() % 101;
for(j=0;j<=i-1;j++)
{
if( x == a[j])
{
flag=0;
break;
}
}
if(flag == 1)
{
a[i]=x;
break;
}
}
}
printf("\n原陣列:\n");
for (i=0; i<N; i++) printf("%3d",a[i]);
printf("\n\n請輸入要找的值:");
scanf("%d",&key);
for(i=0;i<N;i++)
{
if(key == a[i])
{
found=1;
break;
}
}
if(found == 1)
printf("找了 %3d 次,找到了",i+1);
else
printf("找了 %3d 次,找不到",i);
for (i=0; i<N-1; i++)
{
for (j=i+1; j<N; j++)
{
if (a[i]>a[j])
{
t = a[j];
a[j] = a[i];
a[i] = t;
}
}
/* printf("\n第 %d 回排序後最小值為 :", i+1);
printf("%3d ",a[i]);
printf(" 新陣列為: ", i+1);
for(j=i+1; j<N; j++)
printf("%d ",a[j]);
*/
}
printf("\n\n排序後\n");
for (i=0; i<N; i++) printf("%5d",a[i]);
printf("\n");
found=0;
for(i=0;i<N;i++)
{
if(key == a[i])
{
found=1;
nn=i+1;
break;
}
if(key < a[i])
{
found = 2;
nn=i+1;
break;
}
}
if(found == 1)
printf("找了 %3d 次,找到了",nn);
else
if(found == 2)
printf("找了 %3d 次,找不到",nn);
else
printf("找了 %3d 次,找不到",N);
return 0;
}
排序法輸入版
#include <stdio.h>
#include <stdlib.h>
#define M 600
int main()
{
int a[M]={20,13,11,16,3,2};
int i, j, t,N;
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入資料數目 : ");
scanf("%d",&N);
for(i=0;i<N;i++)
{
printf("第 %d 筆 :",i+1);
scanf("%d",&a[i]);
}
printf("\n原陣列:\n");
for (i=0; i<N; i++) printf("%5d",a[i]);
for (i=0; i<N-1; i++)
{
for (j=0; j<N-i-1; j++)
{
if (a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
printf("\n第 %d 回排序後 :", i);
for (j=0; j<N-i; j++) printf("%4d",a[j]);
}
printf("\n氣泡法排序後\n");
for (i=0; i<N; i++) printf("%5d",a[i]);
printf("\n");
system("pause");
return 0;
}
排序法
#include <stdio.h>
#define N 6
int main()
{
int a[N]={13,56,87,31,6,23};
int i, j, t;
printf("正修科大 40404113 郭怡勝\n");
printf("\n原陣列:\n");
for (i=0; i<N; i++) printf("%5d",a[i]);
for (i=0; i<N-1; i++)
{
for (j=0; j<N-i-1; j++)
{
if (a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
printf("\n第 %d 回排序後 :", i);
for (j=0; j<N-i; j++) printf("%4d",a[j]);
}
printf("\n氣泡法排序後\n");
for (i=0; i<N; i++) printf("%5d",a[i]);
printf("\n");
return 0;
}
身分證檢查(完整版)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[11]="A201411163";
char id[27]="ABCDEFGHJKLMNPQRSTUVXYWZIO";
int i, k, n=strlen(s), sum=0;
char checkDigit;
printf("請輸入身分證號碼 :");
scanf("%s",&s);
for (i=n-2; i>=1; i--)
sum=sum+(s[i]-'0')*(n-1-i);
for(i=1;i<=strlen(id);i++)
{
if(id[i-1] == s[0] )
{
k= 10 + i - 1;
break;
}
}
sum=sum+(k%10)*9+(k/10)*1;
sum = sum % 10;
if (sum == 0)
sum = 0;
else
sum = 10 - sum;
checkDigit=sum+'0';
printf("身份證號碼= \"%s\"\n", s);
if (checkDigit==s[n-1])
printf(" check digit OK!\n");
else
printf("身份證最後一碼=%c\n正確碼應為 %c\n",s[n-1],checkDigit);
system("pause");
return 0;
}
身分證檢查(待修正)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[11]="V121520514";
int i, k, n=strlen(s), sum=0;
char checkDigit;
for (i=n-2; i>=1; i--)
sum=sum+(s[i]-'0')*(n-1-i);
k=s[0]-'A'+10;
sum=sum+(k%10)*9+(k/10)*1;
sum=10-sum%10;
checkDigit=sum+'0';
printf("身份證號碼= \"%s\"\n", s);
if (checkDigit==s[n-1])
printf(" check digit OK!\n");
else
printf("身份證最後一碼=%c\n正確碼應為 %c\n",s[n-1],checkDigit);
return 0;
}
擲骰子
/*******************
隨機產生n次骰子
****************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, a, x[6],n;
float r = 0;
unsigned seed;
seed = (unsigned)time(NULL);
srand(seed);
for(i=1;i<=6;i++)
x[i]=0;
printf("正修科大 40404113 郭怡勝\n");
printf("丟擲次數: ");
scanf("%d",&n);
for (i=1; i<=n; i++)
{
a = rand() % 6 + 1;
x[a] = x[a]+1;
}
for(i=1;i<=6;i++)
{
r = r + (float)x[i]/n;
printf("x[%d] = %d %f %f \n", i,x[i],(float)x[i]/n,r);
}
system("pause");
return 0;
}
6-2延伸(隨機產生1000000次任意二介於0-9整數a,b)
/*******************
隨機產生1000000次任意二介於0-9整數a,b,
若 a+b=9 則印出a,b,及a+b
****************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i, a, b,x[18];
unsigned seed;
seed = (unsigned)time(NULL);
srand(seed);
for(i=0;i<=18;i++)
x[i]=0;
printf("正修科大 40404113 郭怡勝\n");
for (i=1; i<=1000000; i++)
{
a = rand() % 10;
b = rand() % 10;
x[a+b] = x[a+b]+1;
}
for(i=0;i<=18;i++)
printf("x[%d] = %d %f \n", i,x[i],(float)x[i]/1000000);
system("pause");
}
5-5(求 1+1/2+1/3+1/4+.....+1/n > m 時 n?)
/*問題
求 1+1/2+1/3+1/4+.....+1/n > m 時 n?
(例如輸入 m=10 n=?)
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float sum=1;
int m,n=1;
printf("正修科大 40404113 郭怡勝 \n");
printf("請輸入m之值=>");
scanf("%d",&m);
printf(" n => 1+1/2+1/3+1/4+.....+1/n = ?\n");
printf("\n %d => 1+1/2+1/3+1/4+.....+1/n = %f \n",n,sum);
while( sum <= m )
{
n++;
sum = sum + 1.0 / n;
printf(" %d => 1+1/2+1/3+1/4+.....+1/n = %f \n",n,sum);
}
{
if( sum <= m);
printf("\n當 m => %d 時,n = %d",m,n);
}
return 0;
}
6-3(產生範圍n數求大於60之平均)
/*******************
隨機產生n個介於[30,99]的正整數x
若 x >= 60 則
(1)印出 x
(2)印出大於等於60的個數及其平均值
****************/
#include <stdio.h>
#include <stdlib.h>
#include <Time.h>
int main(void)
{
int i, a, b,n,no=0,x;
unsigned seed;
seed = (unsigned)time(NULL); // 取得時間序列
srand(seed); // 以時間序列當亂數種子
float avg,sum;
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入正整數n=");
scanf("%d",&n);
for (i=1; i<=n ; i++)
{
x = rand() % (70)+30;
if ( x >= 60)
{
sum = sum + x;
no++;
printf("%d ", x);
}
}
avg = sum/no;
printf("\n大於等於60的個數有 %d 個",no);
printf("\n平均=%f",avg);
return 0;
}
6-7(n*n乘法表)
/***************
印出 n*n 乘法表
**************/
#include <stdio.h>
int main(void)
{
int i, j, k, n;
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入一個n值 :");
scanf("%d",&n);
for (i=1; i<=n; i++)
{
for (j=1; j<=n; j++)
{
k=i*j;
printf("%d*%d=%2d ", i,j,k);
}
printf("\n");
}
return 0;
}
7-3(分辨分數階層)
/***********
switch
**********/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i=0, a;
srand(time(NULL));
printf("正修科大 40404113 郭怡勝\n");
a = rand()% 101;
switch (a/10)
{
case 10 : printf("%d 是 優等",a); break;
case 9 : printf("%d 是 甲等",a); break;
case 8 : printf("%d 是 乙等",a); break;
case 7 : printf("%d 是 丙等",a); break;
case 6 : printf("%d 是 丁等",a); break;
default : printf ("%d 是 不及格的",a); break;
}
return 0;
}
7-2(隨機分數判測)
/***********
continue
break
**********/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i=0, a;
srand(time(NULL));
printf("正修科大 40404113 郭怡勝\n");
while(1)
{
a = rand()% 101;
i++;
if (a < 60 && a > 6)
continue;
else
if(a >= 60)
{
printf("%d a=%d ",i, a);
printf(" 是及格的\n");
}
else
{
printf("%d a=%d ",i, a);
printf(" 呵呵 你分數好低 呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵呵\n");
break;
}
}
return 0;
}
7-1(求正數及負數和)
/************
重覆輸入整數直至輸入0時停止
印出正整數之和、 負整數之和
**************/
#include <stdio.h>
int main(void)
{
int a, sump=0, sumn=0;
printf("正修科大 40404113 郭怡勝\n");
do
{
printf("請輸入一個整數a : ");
scanf("%d", &a);
if (a>0)
sump=sump+a;
else
sumn=sumn+a;
} while (a!=0);
printf("正數總和= %d\n", sump);
printf("負數總和= %d\n", sumn);
return 0;
}
6-6(9*9乘法表)
/***************
印出 9*9 乘法表
**************/
#include <stdio.h>
int main(void)
{
int i, j, k;
printf("正修科大 40404113 郭怡勝\n");
for (i=1; i<=9; i++)
{
for (j=1; j<=9; j++)
{
k=i*j;
printf("%d*%d=%2d ", i,j,k);
}
printf("\n");
}
return 0;
}
6-5(s=1+1/2+1/3+...+1/n)
/**************
從鍵盤輸入一正整數 n
求 s=1+1/2+1/3+...+1/n
**********/
#include <stdio.h>
int main(void)
{
int i, n;
float s;
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入一個正整數n : ");
scanf("%d", &n);
s=0.0;
for (i=1; i<=n; i++)
{
s=s+1.0/i;
printf("迴圈變數i值= %d ",i);
printf("累積s值= %10.6f\n", s);
}
return 0;
}
6-4(求正整數迴圈及連乘積)
/************** hw06_32.c
從鍵盤輸入一正整數 n
求 f = n * (n-1) * (n-2) *...*3*2*1
**************/
#include <stdio.h>
int main(void)
{
int i, n, f;
printf("正修科大 40404113 郭怡勝\n");
printf("請輸入一個正整數n : ");
scanf("%d", &n);
f=1;
for (i=n; i>1; i--)
{
f=f*i;
printf("迴圈變數i值= %d ",i);
printf("連乘積f值= %d\n", f);
}
return 0;
}
6-2(隨機產生=9之數)
/*******************
隨機產生21次任意二整數a,b,
若 a+b=9 則印出a,b,及a+b
****************/
#include <stdio.h>
#include <stdlib.h>
#include <Time.h>
int main(void)
{
int i, a, b;
unsigned seed;
seed = (unsigned)time(NULL); // 取得時間序列
srand(seed); // 以時間序列當亂數種子
printf("正修科大 40404113 郭怡勝\n");
for (i=0; i<=20; i++)
{
a = rand() % 10;
b = rand() % 10;
if (a+b == 9)
printf("a=%d b=%d a+b=%d\n", a,b,a+b);
}
return 0;
}
樂透彩
/*
隨機產生7個整數[1-10]
****************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int a, b,c,d,e,f,g,i ;
int a1[10],x[10];
a1[1]=100;
a1[2]=200;
a1[3]=400;
a1[4]=800;
a1[5]=1600;
a1[6]=10000;
a1[7]=300000;
unsigned seed;
seed = (unsigned)time(NULL); // 取得時間序列
srand(seed); // 以時間序列當亂數種子
printf("正修科大 40404113 郭怡勝\n");
a = rand() % 10 + 1 ;
do
{
b = rand() % 10 + 1 ;
c = rand() % 10 + 1 ;
d = rand() % 10 + 1 ;
e = rand() % 10 + 1 ;
f = rand() % 10 + 1 ;
g = rand() % 10 + 1 ;
// printf("電腦產生 %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g);
}while ( b%2 ==0 || c%2 ==0 || d%2 ==0 || e%2 ==0 || f%2 ==0 || g%2 ==0 ) ;
printf("\n\n");
printf("電腦產生 %7d %7d %7d %7d %7d %7d %7d\n",a,b,c,d,e,f,g);
for(i=1;i<=7;i++)
x[i]= rand() % 7 +1;
printf("對應獎金 %7d %7d %7d %7d %7d %7d %7d\n",a1[x[1]],a1[x[2]],a1[x[3]],a1[x[4]],a1[x[5]],a1[x[6]],a1[x[7]]);
if (a%2==0)
printf("\n恭喜您! 中了%d個鈺晟的微笑!\n",a1[x[1]]);
else
printf("\n可惜你沒得到鈺晟的微笑...\n");
system("pause");
}