//
// main.m
// C語言考試題庫
//
// Created by MRBean on 15/5/20.
// Copyright (c) 2015年 MRBean. All rights reserved.
//
#import
/** 5 , 12題
* 判斷一個數是否是質數
*
* @param x 要判斷的數
*
* @return 返回0代表不是質數,1代表質數
*/
int isZhiShu(int x)
{
int count = 0;
for (int i=1; i<=x; i++) {
if (x%i==0) {
count++;
}
}
if (count==2) {
return 1;
}
return 0;
}
//=============================================================
/**
* 6.
* 寫出一個計算三角形面積的函數
*/
typedef struct SanJiaoXing
{
double a;//三角形的一條邊長度
double b;
double c;
}SanJiaoXing;//定義一個結構體變量,變量類型是 SanJiaoXing
double mianJi(SanJiaoXing s)//第6題計算三角形的面積
{
double area = 0;//三角形的面積
if (s.a +s.b >s.c && s.a +s.c >s.b && s.b +s.c >s.a )//能構成三角形的條件是任意兩邊之和大於第三邊
{
double r = (s.a + s.b + s.c)/2;
area = sqrt(r*(r-s.a)*(r-s.b)*(r-s.c));//使用海倫公式來計算面積
printf("三角形的面積是 %g",area);
return area;
}
else
{
printf("不能構成三角形!");
return area;
}
}
//===============================================
/**
* 7.判斷圓是否重疊
*
*/
//定義一個圓結構體
typedef struct Circle
{
double x;//圓心的x坐標
double y;//圓心的y坐標
double r;//圓的半徑
}Circle;
int chongDie(Circle a,Circle b)
{
double distance = sqrt(pow(a.x-b.x, 2)+pow(a.y-b.y, 2));//圓心之間的距離
double radiusSum = a.r+b.r;
if(distance
{
printf("兩個圓之間重疊!\n");
return 1;//重疊
}
else {
printf("兩個圓不重疊!\n");
return 0;//不重疊
}
}
//====================================
/**
* 8.字符串加密
*
*/
char *JiaMi(char str[])
{
for (int i=0; str[i]; i++) {
if (str[i]=='z') {
str[i]='a';
}
else if (str[i]=='Z')
{
str[i]='Z';
}
else if ((str[i]>='A' && str[i]<='Y') || (str[i]>='a'&&str[i]<='y'))
{
str[i]++;
}
}
printf("加密之後的字符串是 %s",str);
return str;
}
//===============================================
/**
* 11.定義一個3個頂點(使用結構體),判斷該3個點是否可以構成三角形,如果可以構成三角形,計算三角形的面積(海倫公式);否則打印”不能構成三角形”.
*
*/
//定義就一個點結構體類型
typedef struct
{
double x;
double y;
}MPoint;
//根據三角形的三個頂點計算其面積
double mianJi2(MPoint a,MPoint b,MPoint c)
{
double len1 = sqrt(pow(a.x-b.x, 2)+pow(a.y-b.y, 2));//ab之間的距離
double len2 = sqrt(pow(a.x-c.x, 2)+pow(a.y-c.y, 2));//ac之間的距離
double len3 = sqrt(pow(c.x-b.x, 2)+pow(c.y-b.y, 2));//cb之間的距離
double area = 0;//三角形的面積
if (len1+len2>len3 && len1+len3>len2 && len2+len3>len1)
{
double r = (len1 + len2 +len3)/2;
area = sqrt(r*(r-len1)*(r-len2)*(r-len3));
printf("三角形的面積是%g",area);
return area;
}
else
{
printf("這三個點不能構成三角形!");
return area;
}
}
//=================================================
int main(int argc, const char * argv[]) {
//==========================================
/**
* 1.輸入兩個正整數m,n。輸出其最大公約數和最小公倍數
* 使用輾轉相除法求兩個數a,b的最大公約數c
*/
// int m;
// int n;
// printf("請輸入兩個數:\n");
// scanf("%d%d",&m,&n);
// int temp = m*n;//暫存m*n乘積,以便來計算最小公倍數
// int c = m%n;
// while (c!=0) {
// m = n;//除數作為被除數
// n = c;//余數作為除數
// c = m%n;
// }
// printf("最大公約數:%d,最小公倍數%d\n",n,temp/n);
// ==============================================
/**
* 2,輸入一行字符串,分別統計大寫字母和小寫字母的個數
*/
// char str[1000];
// int count1 = 0;//小寫個數個數
// int count2 = 0;//大寫
// printf("請輸入一個字符串\n");
// gets(str);
// for (int i=0; str[i]!='\0'; i++) {
// if (str[i]>='a' && str[i]<='z') {
// count1++;
// }
// else if (str[i]>='A' && str[i]<='Z') {
// count2++;
// }
// }
// printf("大寫字母的個數是 %d,小寫字母的個數是%d",count1,count2);
//================================================
/**
* 3,輸入兩個正整數,a和n 程序輸出 a+aa+aaa+...(a...a)(n個a)的值
*/
// printf("請輸入兩個整數\n");
// int a;
// int n;
// int fac = 0;//形式如 a,aa,aaa...的表達式
// int sum = 0;//計算和
// scanf("%d%d",&a,&n);
// for (int i=0; i
// {
// fac = fac*10+a;// aa = a*10+a,後一個等於前一個數*10+a
// sum +=fac;
//
// }
// printf("a+aa+aaa.... = %d\n",sum);
//=======================================================
/**
* 4,輸入一個正整數n,求 1!+2!+...n!的值(n!表示n的階乘)
*/
// int sum = 0;//記錄階乘之和
// int fac = 1;//記錄 一個數的階乘
// int n;//個數限制
// printf("請輸入一個不大於10的整數\n");
// scanf("%d",&n);
// for (int i=1; i<=n; i++) {
// fac *=i;
// sum +=fac;
// }
//
// printf("1!+2!+...+n! = %d",sum);
//==================================================
/**
* 5,寫一個判斷質數的函數,在主函數中輸入一個整數,輸出是否為質數的信息
*/
// int n;
// printf("請輸入一個整數");
// scanf("%d",&n);
// if (isZhiShu(n)==1) {
// printf("是質數!\n");
// }
// else
// {
// printf("不是質數!");
// }
//==================================================
/**
* 6,定義一個結構體包含三角形三邊長度,寫一個函數,輸入這個結構體變量,返回此三角形面積(注意三角形是否有效問題)
*/
// SanJiaoXing s ;
// printf("請輸入三角形的三邊\n");
// scanf("%lf%lf%lf",&s.a,&s.b,&s.c);
// mianJi(s);//計算三角形的面積
//
//=================================================================
/**
* 7,定義一個結構體包含圓心和半徑,寫一個函數,輸入兩個結構體變量,返回兩個圓是否有重疊部分
*/
// Circle a;//第一個圓
// Circle b;//第二個圓
// printf("請輸入第一個圓的圓心和半徑\n");
// scanf("%lf%lf%lf",&a.x,&a.y,&a.r);
// printf("請輸入第二個圓的圓心和半徑\n");
// scanf("%lf%lf%lf",&b.x,&b.y,&b.r);
// chongDie(a, b);
//================================================================
/**
* 8,寫一個函數,將字符串加密,加密規則為,a->b z->a 以此類推。
*/
// char s[1000];
// gets(s);
// JiaMi(s);
//================================================================
/**
* 9,用戶輸入10個數,返回最大和最小值
*/
// int a[10];
// int max = 0;
// int min = 0;
// printf("輸入10個數\n");
// for (int i=0; i<10; i++)
// {
// scanf("%d",&a[i]);
// if(i==0)
// {
// max = a[0];
// min = a[0];
// }
//
// if (max
// {
// max=a[i];
// }
//
// if (min>a[i])
// {
// min =a[i];
// }
//
// }
// printf("最大值為%d\n最小值為%d\n",max,min);
//
// printf("請輸入十個數\n");
// int a[10];
// for (int i=0; i<10; i++) {
// scanf("%d",&a[i]);
// }
// int max = a[0];//最大值
// int min = a[0];//最小值
// for (int i=1; i<10; i++) {
// if (max
// max = a[i];
// }
// if (min>a[i]) {
// min = a[i];
// }
// }
//
// printf("最大值是 %d,最小值是 %d",max,min);
//
//===================================================================
/**
*
10,下列代碼有和問題,請指出
int * p;
{
int a;//a出括號後會被釋放
p = &a;
}
*p = 3;// 問題是: 野指針異常
*/
//===================================================================
/**
* 11.定義一個3個頂點(使用結構體),判斷該3個點是否可以構成三角形,如果可以構成三角形,計算三角形的面積(海倫公式);否則打印”不能構成三角形”.
*/
// MPoint a;//三角形的頂點
// MPoint b;
// MPoint c;
// printf("請依次輸入3個點!\n");
// scanf("%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y);
// mianJi2(a, b, c);
//===================================================================
/**
* 12.打印100個質數
*/
// int count = 0;//已經打印的質數的個數
// for (int i=1; count<=100; i++)//循環條件是在 count<=100也就是沒有找到100個質數就循環下去
// {
// if (isZhiShu(i)==1) {//遇到一個質數
// printf("%d ",i);
// count++;
// }
//
// }
//===================================================================
/**
* 13.用戶輸入10個數,計算平均值
*/
// double a[10];//用來保存10個數
// double avg;//平均值
// double sum = 0.0;
// printf("請輸入十個數\n");
// for (int i=0; i<10; i++)
// {
// scanf("%lf",&a[i]);
// sum+=a[i];
// }
//
// avg = sum/10;
// printf("平均值是 %g",avg);
//==================================================
/**
* 14.計算 1-2+3-4+5-6+...100的結果
*/
// int sum = 0;
// for ( int i=1; i<=100; i++)
// {
// if (i%2==0)
// {
// sum-=i;
// }
// else
// {
// sum+=i;
// }
// }
//
// printf("和是 %d",sum);
//=======================================================
/**
* 15.輸入正整數n 程序輸出 1/2+2/3+...n/n+1的值
*/
// int sum = 0;
// int n;
// printf("請輸入一個正整數!\n");
// scanf("%d",&n);
// for (int i=1; i<=n; i++)
// {
// sum+=i/(i+1);
// }
// printf("計算之和是 %d",sum);
//===================================================================
return 0;
}