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)的定義如下:
請編寫程式計算該函式對任一輸入整數的值。
輸入格式:
輸入在一行中給出整數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;
}