c語言複習

磊子9527發表於2024-04-26

3-2 奇偶分家。輸入一個正整數n,再輸入n個非負整數,統計奇數和偶數各有多少個

#include<stdio.h>
int main()
{
    int count_odd, count_even, i, n, number;
    count_odd,count_even,i,n,number;
    count_odd=0;    /*count_odd記錄奇數的個數*/
    count_even=0;   /*count_even記錄偶數的個數*/
    printf("Enter n:"); 
    scanf("%d",&n);
    printf("Enter %d numbers:",n);
    for(i=1; i<=n; i++){
        scanf("%d", &number);
        if(number%2!=0){    /*若number除以2的餘數不是0,則力奇數*/
            count_odd++;
        }else{
            count_even++;
        }
    }
    printf("Odd:%d, Even:%d\n",count_odd, count_even);
    return 0;
}

練習3-2 計算符號函式的值

對於任一整數n,符號函式sign(n)的定義如下:

image-20240303103042572
請編寫程式計算該函式對任一輸入整數的值。
輸入格式:
輸入在一行中給出整數n。
輸出格式:
在一行中按照格式“sign(n) = 函式值”輸出該整數n對應的函式值。

輸入樣例1:
10
輸出樣例1:
sign(10) = 1
輸入樣例2:
0
輸出樣例2:
sign(0) = 0
輸入樣例3:
-98
輸出樣例3:
sign(-98) = -1
#include <stdio.h>
int main(){
    int n, sign; 
    scanf("%d", &n); 
    if( n < 0 )
        sign = -1;
    else if( n == 0 )
        sign = 0;
    else 
        sign = 1;    
    printf("sign(%d) = %d", n, sign);
    return 0;
}

練習3-3 統計學生平均成績與及格人數

本題要求編寫程式,計算學生們的平均成績,並統計及格(成績不低於60分)的人數。題目保證輸入與輸出均在整型範圍內。

輸入格式:
輸入在第一行中給出非負整數N,即學生人數。第二行給出N個非負整數,即這N位學生的成績,其間以空格分隔。

輸出格式:
按照以下格式輸出:

average = 成績均值
count = 及格人數
其中平均值精確到小數點後一位。

輸入樣例:
5
77 54 92 73 60
輸出樣例:
average = 71.2
count = 4

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int N;
    int count=0,sum=0;
    double P;
    scanf("%d\n",&N);
    for (int i=0; i<N; i++)
    {
        int a;
        scanf("%d",&a);
        if(a>=60)
        {
            count ++;
        }
        sum=sum+a;
    }
    P= N==0? 0: sum*1.0/N;
    printf("average = %.1f\n",P);
    printf("count = %d",count);
}


3-10 輸入一個正整數n,再輸入n個字元,分別統計出其中空格或回車、數字字元和其他字元個數。要求使用switch語句編寫。

// 統計字元,包括空格或回車、數字字元和其他字元
#include<stdio.h>
int main(){
    int blank, digit, i, n, other;    /*定義3個變數分別存放統計結果*/
    char ch;
    blank = digit = other = 0; /*置存放統計結果的3個變數的初值為零*/
    printf("Enter n:");
    scanf("%d",&n);
    getchar();
    printf("Enter %d characters:",n);
    for(i=1; i<=n; i++){
        ch = getchar();     /*輸入1個字元*/
        switch(ch){
            case ' ':   /*語句段為空,請注意空格符的表示方式 */
            case '\n':
            blank++;
            break;
            case'0': case'1': case'2': case'3': case'4':
            case'5': case'6': case'7': case'8': case'9':
                digit++;
                break;
            default:
                other++;
                break;
        }
    }
    printf("blank=%d, digit=%d, other=%d\n", blank, digit, other);
    return 0;
}

練習4-3 求給定精度的簡單交錯序列部分和

本題要求編寫程式,計算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最後一項的絕對值不大於給定精度eps。

輸入格式:

輸入在一行中給出一個正實數eps。

輸出格式:

在一行中按照“sum = S”的格式輸出部分和的值S,精確到小數點後六位。題目保證計算結果不超過雙精度範圍。

輸入樣例1:

4E-2

輸出樣例1:

sum = 0.854457

輸入樣例2:

0.02

輸出樣例2:

sum = 0.826310
#include<stdio.h>
#include<math.h>
int main(){
	double eps,i,x=1.0,sum=1.0;
	scanf("%lf",&eps);
	for(i=1;x>eps;i++){
		x=1/(1+3*i);          // 錯誤點:寫了i+=3;導致i實際加了不止3 
		sum += (pow(-1,i))*x;
	}
	printf("sum = %.6lf",sum);
	return 0;
}

判斷素數

#include <stdio.h>
int main()
{
	int n,i;
	printf("請輸入一個數:\n");
	scanf("%d",&n);
	for(i=2;i<n;i++)
		if(n%i==0)
			break;
	if(i<n)
		printf("%d不是素數\n",n);
	else
		printf("%d是素數\n",n); 
	return 0;
} 

4-7 求e的近似值

自然常數 e 可以用級數 1+1/1!+1/2!+⋯+1/n!+⋯ 來近似計算。本題要求對給定的非負整數 n,求該級數的前 n+1 項和。

輸入格式:

輸入第一行中給出非負整數 n(≤1000)。

輸出格式:

在一行中輸出部分和的值,保留小數點後八位。

輸入樣例:

10

輸出樣例:

2.71828180
#include<stdio.h>
int main()
{
	int i, j, n;
	double m, sum;
	sum=1;
	scanf("%d", &n);
	for(i=1; i<=n; i++){
		m=1;
		for(j=1; j<=i; j++){
			m=m*j;//階乘
		}
		m=1.0/m;
		sum=sum+m;
	}
	printf("%.8f", sum);
	
	return 0;
}

5-3 使用函式判斷完全平方數。定義一個判斷完全平方數的函式 IsSquare(n),當n為完全平方數時返回 1,否則返回 0,不允許呼叫數學庫函式。

可以來用以下等差數列求和公式計算。
1+3+5+7+..+(2×m-1)=m^2=n

#include <stdio.h>
int IsSquare(int n){
    int i;
    for(i=1; n>0; i=i+2){
        n=n-i;
    }
    if(n==0){
        return 1;
    }else{
        return 0;
    }
}

5-4 最大公約數函式

#include <stdio.h>
int main()
{
    int u, v;
    scanf("%d %d", &u, &v);
    while (v != 0)
    {
        int tmp = u % v;
        u = v;
        v = tmp;
    }
    printf("%d", u);
    return 0;
}

5-6 數字金字塔

#include <stdio.h>
void pyramid(int n );
int main()
{
    int n;
    scanf("%d", &n);
    pyramid(n);
    return 0;
}
void pyramid( int n ){
    int i,j,k;
    //下面是三層for
    for(i=1;i<=n;i++){
        for( j=1;j<=n-i;j++){
            printf(" ");//輸出空格
        }
        for(k=1;k<=i;k++){//行數和數字數目相同的。
            printf("%d",i);
            printf(" ");
        }
        printf("\n");//注意換行
    }
}

7-1 輸入所有大於平均值的數

輸入格式:

輸入在第1行中給出一個正整數n(1≤n≤10),第2行輸入n個整數,其間以空格分隔。題目保證資料不超過長整型整數的範圍。

輸出格式:

輸出在第1行給出平均值,保留2位小數。在第2行輸出所有大於平均值的數,每個數的後面有一個空格;如果沒有滿足條件的數,則輸出空行。

如果輸入的n不在有效範圍內,則在一行中輸出"Invalid."。

輸入樣例1:

10
55 23 8 11 22 89 0 -1 78 186

輸出樣例1:

47.10
55 89 78 186 

輸入樣例2:

0

輸出樣例2:

Invalid.
//
// Created by hl on 2024/3/3.
//
#include<stdio.h>
int main()
{
    int i,n,count=0,sum=0;
    double ave;
    int a[10]; //括號裡面要為數!
    scanf("%d",&n);
    if(n>10||n<1) printf("Invalid.");
    else{ //這個括號不能省!!!
        for(i=0;i<n;i++){ //i從0開始!
            scanf("%d",&a[i]); //給陣列元素輸入數字
            sum=sum+a[i];
        }
        ave=1.0*sum/n;
        printf("%.2f\n",ave);
        for(i=0;i<n;i++){
            if(a[i]>ave){
                printf("%d ",a[i]);
                count++;
            }
        }
        if(count==0) printf("\n");
    }
    return 0;
}

7-10 計算天數

本題要求編寫程式計算某年某月某日是該年中的第幾天。

輸入格式:

輸入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)給出日期。注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。閏年的2月有29天。

輸出格式:

在一行輸出日期是該年中的第幾天。

輸入樣例1:

2009/03/02

輸出樣例1:

61

輸入樣例2:

2000/03/02

輸出樣例2:

62
#include<stdio.h>
int main()
{
    int y,m,d,days=0;
    scanf("%d/%d/%d",&y,&m,&d);
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(y%400==0||(y%4==0&&y%100!=0))
        a[1]=29;
    for(int i=0;i<m-1;i++)
    {
        days+=a[i];
    }
    days+=d;
    printf("%d",days);
    return 0;
}

7-11 迴文字串

//
// Created by hl on 2024/3/3.
//
#include <stdio.h>
#include <string.h>

int main()
{
    char a[100]= {0};
    int i = 0;
    int len = 0;
    gets(a);
    len = strlen(a); //計算輸入字串的長度;
    for(i = 0; i < (len / 2); i++) //只需要判斷前一半(len/2)長度就好了
    {
        if(a[i] != a[len - 1 - i]) //判斷是否為迴文數;
        {
            printf("不是迴文數\n");
            return 0;
        }
    }
    printf("是迴文數\n");
    return 0;
}

氣泡排序

#include<stdio.h>
int main(){
    int data[10];
    printf("請輸入資料:\n");
    int i,j;
    for(i = 0;i < 10;i ++){
        scanf("%d",&data[i]);	//輸入資料
    }
    for(i = 0;i < 10;i ++){  //採用雙重迴圈
        for(j = 0;j < 10 - 1 - i;j++){
            if(data[j] > data[j+1]){     //這裡預設採用升序來排列
                int temp;        //定義一個臨時值來儲存資料,以此來達到交換數值的目的
                temp = data[j];
                data[j] = data[j+1];
                data[j+1] = temp;
            }
        }
    }
    printf("排序好的陣列為:\n");
    for(i = 0;i < 10;i ++){    //用for迴圈來遍歷並輸出排序完成的陣列
        printf("%d ",data[i]);
    }
    return 0;
} 

相關文章