1 判斷一個整型數據有幾位v2.0(4分)
題目內容:
從鍵盤輸入一個整型數據(int型),編寫程序判斷該整數共有幾位,並輸出包含各個數字的個數。例如,從鍵盤輸入整數16644,該整數共有5位,其中有1個1,2個6,2個4。
int main(){
int n,m,count = 0,i;
int a[10]={0};
printf("Please enter the number:\n");
scanf("%d",&n);
m = n>0?n:-n;
while(m!=0)
{
a[m%10]++;
m = m/10;
count++;
}
printf("%d: %d bits\n",n,count);
for(i = 0;i <10;i++)
{
if(a[i]!=0)printf("%d: %d\n",i,a[i]);
}
return 0;
}
2 獎金計算(6分)
題目內容:
企業發放的獎金根據利潤提成。利潤低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時,高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤i,求應發放獎金總數?
int main(){
long int profit,bonus;
scanf("%ld",&profit);
if(profit > 0 && profit <= 100000){
bonus = profit * 0.1;
} else if(profit < 200000){
bonus = (profit - 100000) * 0.075 + (100000 * 0.1);
} else if(profit < 400000){
bonus = (profit - 200000) * 0.05 + (200000 - 100000) * 0.075 + (100000 * 0.1);
} else if(profit < 600000){
bonus = (profit - 400000) * 0.03 + (400000 - 200000) * 0.05 + (200000 - 100000) * 0.075 + (100000 * 0.1);
} else if(profit < 1000000){
bonus = (profit - 600000) * 0.015 + (600000 - 400000) * 0.03 + (400000 - 200000) * 0.05 + (200000 - 100000) * 0.075 + (100000 * 0.1);
} else{
bonus = (profit - 1000000) * 0.01 + (1000000 - 600000) * 0.015 + (600000 - 400000) * 0.03 + (400000 - 200000) * 0.05 + (200000 - 100000) * 0.075 + (100000 * 0.1);
}
printf("bonus=%ld\n",bonus);
return 0;
}
3 程序修改—1(4分)
題目內容:
修改下面這個程序使其快速計算1+2+3……+n的值,n從鍵盤輸入。並按照下面給出的運行示例檢查程序。
#include <stdio.h>
int main()
{
int i, j, sum = 0, n=100;
for (i=1,j=n; i<=j; i++,j--)
{
sum = sum + i + j;
}
printf("sum = %d", sum);
return 0;
}
思路:源程序多加了一次中間數,減掉就行
#include <stdio.h>
int main()
{
int i, j, n ,sum = 0;
scanf(" %d",&n);
for (i=1,j=n; i<=j; i++,j--)
{
sum = sum + i + j;
if(i==j){
//減j減i都行
sum=sum-i;
}
}
printf("sum = %d", sum);
return 0;
}
重寫實現功能也行
int main()
{
int sum = 0, n;
scanf("%d",&n);
for (int i = 1; i <= n; ++i) {
sum += i;
}
printf("sum = %d", sum);
return 0;
}
4 程序修改—2(4分)
題目內容:
修改下面這個用do-while語句實現的程序,改用while語句實現,並對比其優缺點。
#include <stdio.h>
int main()
{
int sum = 0, m;
do{
printf("Input m:\n");
scanf("%d", &m);
sum = sum + m;
printf("sum = %d\n", sum);
}while (m != 0);
return 0;
}
修改后
int main()
{
int sum = 0, m = 1;
while (m != 0){
printf("Input m:\n");
scanf("%d", &m);
//等於0要立即退出,不然會出現結果錯誤
if(m == 0) break;
sum = sum + m;
printf("sum = %d\n", sum);
}
return 0;
}
5 程序改錯-1(4分)
題目內容:
我國古代的《張丘建算經》中有這樣一道著名的百雞問題:“雞翁一,值錢五;雞母一,值錢三;雞雛三,值錢一。百錢買百雞,問雞翁、母、雛各幾何?”其意為:公雞每只5元,母雞每只3元,小雞3只1元。用100元買100只雞,問公雞、母雞和小雞各能買多少只?目前程序運行結果有誤,請問為什么會比正確答案多出三個解?不僅要找出錯誤和修正錯誤,還要求利用以前學過的知識分析錯誤的原因。
#include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
if (5*x + 3*y + z/3 == 100)
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
修改后
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; y<=33; y++)
{
z = 100 - x - y;
//整數修改成浮點數,原因是整數類型除法會舍棄小數部分
if (5*x + 3*y + z/3.0 == 100)
{
printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
}
return 0;
}
6 程序改錯-2(5分)
題目內容:
從鍵盤任意輸入一個正整數,編程判斷它是否是素數,若是素數,輸出“Yes!”,否則輸出“No!”。已知負數、0和1都不是素數。請找出下面程序的錯誤並改正之,同時按照給出的運行示例檢查修改后的程序。
#include <stdio.h>
#include <math.h>
int main()
{
int n, i;
printf("Input n:\n");
scanf("%d", &n);
for (i=2; i<=sqrt(n); i++)
{
if (n % i = 0)
{
printf("No!\n");
}
}
printf("Yes!\n");
return 0;
}
修改后
int main()
{
int n, i,flag;
printf("Input n:\n");
scanf("%d", &n);
if(n <= 1){
printf("No!\n");
} else {
for (i=2; i<=sqrt(n);i++) {
if (n % i == 0) {
flag = 0;
} else {
flag = 1;
}
}
if(flag == 1){
printf("Yes!\n");
} else{
printf("No!\n");
}
}
return 0;
}
7 程序改錯-3(4分)
題目內容:
從鍵盤任意輸入兩個符號各異的整數,直到輸入的兩個整數滿足要求為止,然后打印這兩個數。請通過測試找出下面這個程序存在的問題(不止一個問題哦),並改正。同時用下面給出的運行結果示例檢查修改后的程序。
#include <stdio.h>
int main()
{
int x1, x2;
do{
printf("Input x1, x2:");
scanf("%d,%d", &x1, &x2);
}while (x1 * x2 > 0);
printf("x1=%d,x2=%d\n", x1, x2);
return 0;
}
修改后
int main()
{
int x1, x2,n,flag = 0;
do{
printf("Input x1, x2:\n");
n = scanf("%d,%d", &x1, &x2);
if(n == 2){
if(x1 * x2 >= 0){
flag = 1;
} else{
flag = 0;
}
} else{
while(getchar() != '\n');
flag = 1;
}
}while (flag);
printf("x1=%d,x2=%d\n", x1, x2);
return 0;
}
8 猴子吃桃程序_擴展1(4分)
題目內容:
猴子第一天摘了若干個桃子,吃了一半,不過癮,又多吃了1個。第二天早上將剩余的桃子又吃掉一半,並且又多吃了1個。此后每天都是吃掉前一天剩下的一半零一個。到第n天再想吃時,發現只剩下1個桃子,問第一天它摘了多少桃子?為了加強交互性,由用戶輸入不同的天數n進行遞推,即假設第n天的桃子數為1。
int main(){
int day,peach=1;
printf("Input days:\n");
scanf("%d",&day);
for (int i = 1; i < day; ++i) {
peach = 2 * (peach + 1);
}
printf("x=%d\n",peach);
return 0;
}
9 猴子吃桃程序_擴展2(4分)
題目內容:
猴子第一天摘了若干個桃子,吃了一半,不過癮,又多吃了1個。第二天早上將剩余的桃子又吃掉一半,並且又多吃了1個。此后每天都是吃掉前一天剩下的一半零一個。到第n天再想吃時,發現只剩下1個桃子,問第一天它摘了多少桃子?為了加強交互性,由用戶輸入不同的天數n進行遞推,即假設第n天的桃子數為1。同時還要增加對用戶輸入數據的合法性驗證(如:不允許輸入的天數是0和負數)
int main(){
int day,peach=1,n;
do{
printf("Input days:\n");
n = scanf("%d",&day);
if(n == 1 && day > 0) {
for (int i = 1; i < day; ++i) {
peach = 2 * (peach + 1);
}
printf("x=%d\n", peach);
} else{
getchar();
}
}while (n == 0 || day <= 0);
return 0;
}
10 6位密碼輸入檢測(4分)
題目內容:
從鍵盤輸入6位僅由數字0~9組成的密碼。用戶每輸入一個密碼並按回車鍵后,程序給出判斷:如果是數字,則原樣輸出該數字,並提示用戶目前已經輸入了幾位密碼,同時繼續輸入下一位密碼;否則,程序提示"error",並讓用戶繼續輸入下一位密碼。直到用戶輸入的密碼全部是數字為止。
int main(){
char c;
int count = 0;
printf("Input your password:\n");
while (1){
if(count == 6) break;
scanf(" %c",&c);
if(c >= '0' && c <= '9'){
printf("%c, you have enter %d-bits number\n",c,count + 1);
count++;
} else{
printf("error\n");
}
}
return 0;
}
11 判斷一個整型數據有幾位v1.0(4分)
題目內容:
從鍵盤輸入一個整型數據(int型),編寫程序判斷該整數共有幾位。例如,從鍵盤輸入整數16644,該整數共有5位。
int main() {
int x,temp,count = 0;
printf("Please enter the number:\n");
scanf("%d", &x);
temp = fabs(x);
while (1){
temp = temp /10;
count ++;
if(temp == 0){
break;
}
}
printf("%d: %d bits\n", x, count);
}
12 檢測輸入數據中奇數和偶數的個數(4分)
題目內容:
從鍵盤輸入一系列正整數,輸入-1表示輸入結束(-1本身不是輸入的數據)。編寫程序判斷輸入數據中奇數和偶數的個數。如果用戶輸入的第一個數據就是-1,則程序輸出"over!"。否則。用戶每輸入一個數據,輸出該數據是奇數還是偶數,直到用戶輸入-1為止,分別統計用戶輸入數據中奇數和偶數的個數。
int main(){
int num,odd_total = 0,even_total = 0;
printf("Please enter the number:\n");
while(1) {
scanf("%d", &num);
if (num == -1) {
if(odd_total == 0 && even_total == 0){
printf("over!\n");
}
printf("The total number of odd is %d\n",odd_total);
printf("The total number of even is %d\n",even_total);
break;
} else if(num % 2 == 0){
even_total++;
printf("%d:even\n",num);
} else{
odd_total++;
printf("%d:odd\n",num);
}
}
return 0;
}
13 計算球的反彈高度(4分)
題目內容:
一個球從100米高度自由落下,每次落地后反跳回原高度的一半,再落下並反彈......,求它在第5次和第10次落地時,分別共經過了多少米?第5次和第10次反彈分別是多高?要求計算結果保留到小數點后3位。用戶從鍵盤輸入想要計算的第n次(n<=15)。程序中所有浮點數的數據類型均為float。
int main(){
int n;
float m = 100,sum = 0;
printf("Input:\n");
scanf("%d",&n);
if(n > 0 && n <=15){
for (int i = 1; i <= n; ++i) {
sum = sum + m;
m = m / 2;
}
printf("%d times:\n",n);
printf("%.3f\n",sum * 2 - 100);
printf("%.3f\n",m);
}
}