C语言程序设计第四版-课本习题(第六章-循环控制结构)
题目一:试编写一个程序,从键盘输入n,然后计算并输出n!
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int num=1;
for(int i=1;i<=n;i++){
num=num*i;
}
cout<<num;
return 0;
}
题目二:从键盘输入n,然后计算并输出1-n之间所有数的阶乘值
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int num=1;
for(int i=1;i<=n;i++){
num=num*i;
cout<<num<<" ";
}
return 0;
}
题目三:从键盘输入n,然后计算并输出1!+2!+3!+……+n!
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int num=1,sum=0;
for(int i=1;i<=n;i++){
num=num*i;
sum=sum+num;
}
cout<<sum;
return 0;
}
题目四:编程设计一个简单的猜数游戏:先由计算机“想”一个数请用户猜,如果用户猜对了,则计算机给出提示“Right”,否则提示“Wrong”,并告诉用户所猜的数是大还是小
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=rand();
int num;
cin>>num;
if(num==n){
cout<<"Right";
}
else if(num>n){
cout<<"Wrong,所猜的数更小";
}
else{
cout<<"Wrong,所猜的数更大";
}
return 0;
}
题目五:编程设计一个简单的猜数游戏:先由计算机“想”一个数请用户猜,如果用户猜对了,则计算机给出提示“Right”,否则提示“Wrong”,并告诉用户所猜的数是大还是小每次猜数知道用户猜对为止,并且记录用户猜数的次数,反映猜的水平
#include<bits/stdc++.h>
using namespace std;
int main(){
std::srand(std::time(0));//设置随机数种子为当前时间
int n=rand()%100+1;//一个1到100之间的随机数
int num,sum=0;
while(1){
cin>>num;
if(num==n){
cout<<"Right"<<endl;
break;
}
else if(num>n){
cout<<"Wrong,所猜的数更小"<<endl;
sum++;
}
else{
cout<<"Wrong,所猜的数更大"<<endl;
sum++;
}
}
cout<<sum<<endl;
return 0;
}
题目六:编程设计一个简单的猜数游戏:先由计算机“想”一个数请用户猜,如果用户猜对了,则计算机给出提示“Right”,否则提示“Wrong”,并告诉用户所猜的数是大还是小每次猜数知道用户猜对为止,最多猜十次,不管猜不猜对,都结束
#include<bits/stdc++.h>
using namespace std;
int main(){
std::srand(std::time(0));//设置随机数种子为当前时间
int n=rand()%100+1;//一个1到100之间的随机数
int num,sum=0;
int flag=1;
while(1){
cin>>num;
if(num==n){
flag=0;
cout<<"Right"<<endl;
break;
}
else if(num>n){
cout<<"Wrong,所猜的数更小"<<endl;
}
else{
cout<<"Wrong,所猜的数更大"<<endl;
}
sum++;
if(sum==10){
break;
}
}
if(sum==10)
cout<<"十次结束了"<<endl;
return 0;
}
题目七:编程设计一个简单的猜数游戏:先由计算机“想”一个数请用户猜,如果用户猜对了,则计算机给出提示“Right”,否则提示“Wrong”,并告诉用户所猜的数是大还是小每次猜数知道用户猜对为止,最多猜十次,不管猜不猜对,都结束,每次询问用户是否继续猜数
#include<bits/stdc++.h>
using namespace std;
int main(){
std::srand(std::time(0));//设置随机数种子为当前时间
int n=rand()%100+1;//一个1到100之间的随机数
int num,sum=0;
int flag=1;
while(1){
cin>>num;
if(num==n){
flag=0;
cout<<"Right"<<endl;
break;
}
else if(num>n){
cout<<"Wrong,所猜的数更小"<<endl;
}
else{
cout<<"Wrong,所猜的数更大"<<endl;
}
sum++;
if(sum==10){
break;
}
cout<<"请问是否继续猜数"<<endl;
char con;
cin>>con;
if(con=='N')
break;
}
cout<<"共猜了"<<sum<<"次"<<endl;
return 0;
}
题目八:读入五个正整数并且显示它们。当读入的数据为负数时,程序立即停止
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
for(int i=1;i<=5;i++){
cin>>n;
if(n<0) break;
cout<<n<<endl;
}
return 0;
}
题目九:读入五个正整数,输入为正数时,显示它们,当读入的数据为负数时,不显示,进入下一轮循环
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
for(int i=1;i<=5;i++){
cin>>n;
if(n<0) continue;
cout<<n<<endl;
}
return 0;
}
题目十:韩信点兵问题。韩信有一支兵,他想知道有多少人,便让士兵排队报数。按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;按从1至11报数,最末一个士兵报的数为10;计算韩信有多少士兵
#include<bits/stdc++.h>
using namespace std;
bool f5(int n){
int k=0;
for(int i=1;i<=n;i++){
k++;
if(k==6) k=1;
}
if(k==1) return true;
return false;
}
bool f6(int n){
int k=0;
for(int i=1;i<=n;i++){
k++;
if(k==7) k=1;
}
if(k==5) return true;
return false;
}
bool f7(int n){
int k=0;
for(int i=1;i<=n;i++){
k++;
if(k==8) k=1;
}
if(k==4) return true;
return false;
}
bool f11(int n){
int k=0;
for(int i=1;i<=n;i++){
k++;
if(k==12) k=1;
}
if(k==10) return true;
return false;
}
int main(){
for(int i=1;i<10000;i++){
if(f5(i) && f6(i) && f7(i) && f11(i)){
cout<<i<<endl;
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=1;i<10000;i++){
if(i%5==1 && i%6==5 && i%7==4 && i%11==10){
cout<<i<<endl;
}
}
return 0;
}
题目十一:编程计算自然数的立方和,知道立方和>=1000000时为止,统计并输出实际累加的项数
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
int i,t;
for(i=1;;i++){
t=i*i*i;
sum=sum+t;
if(sum>=1000000) break;
}
cout<<i;
return 0;
}
题目十二:计算1+3+5……+101
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
for(int i=1;i<=101;i=i+2){
sum=sum+i;
}
cout<<sum;
return 0;
}
题目十三:计算1*2*3+3*4*5+……+99*100*101
#include<bits/stdc++.h>
using namespace std;
int main(){
long i;
long sum=0,t;
for(i=1;i<=99;i=i+2){
t=i*(i+1)*(i+2);
sum=sum+t;
}
cout<<sum;
return 0;
}
题目十四:计算a+aa+aaa+……+aaaa…a(n个a)
#include<bits/stdc++.h>
using namespace std;
int main(){
long a,n;
cin>>a>>n;
long t=0,sum=0;
for(long i=1;i<=n;i++){
t=a+t*10;
sum=sum+t;
}
cout<<sum;
return 0;
}
题目十五:有一条长阶梯,若每步跨两阶,最后剩下一阶;若每步跨三阶,则最后剩下两阶;若每步跨五阶,最后剩下四阶;若每步跨六阶,则最后剩下五阶;若每步跨七阶,正好一节不剩,计算一共多少阶
#include<stdio.h>
int main(){
int x=1,find=0;
while(!find){
if(x%2==1 && x%3==2 && x%5==4 && x%6==5 &&x%7==0){
printf("x=%d\n",x);
find=1;
}
x++;
}
return 0;
}
题目十六:编程计算并输出1到n之间所有数的平方和立方。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cout<<i*i<<" "<<i*i*i<<endl;
}
return 0;
}
题目十七:某人在外国留学,不熟悉当地天气预报中的华氏温度值,请编程按每隔10度输出0-300度之间的华氏温度到摄氏温度的对照表 ,已知华氏和摄氏度的转换公式为C=5/9*(F-32),其中,c表示摄氏温度,F表示华氏温度
#include<bits/stdc++.h>
using namespace std;
int main(){
float F;
for(int C=0;C<=300;C=C+10){
F=float(C)*5/9+32;
cout<<C<<" - "<<std::fixed<<std::setprecision(3)<<F<<endl;
}
return 0;
}
题目十八:假设今年的工业产值100万,产值增长率从键盘输入,请编程计算工业产值过多少年后可实现翻一番
#include<bits/stdc++.h>
using namespace std;
int main(){
float num=1000000;
float rate;
int i;
cin>>rate;
for(i=1;;i++){
num=num*rate+num;
if(num>=2000000){
break;
}
}
cout<<i;
return 0;
}
题目十九:利用π/4=1-1/3+1/5+… ,编程计算π的近似值,直到最后一项的绝对值小于10^(-4),输出π的值并计算累加的次数
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,flag=1;
float sum=0,temp;
for(i=1;i<=10000;i=i+2){
temp=1/float(i);
sum=sum+temp*flag;
flag=-flag;
}
cout<<sum*4<<endl<<i<<endl;
return 0;
}
题目二十:利用e=1+1/1!+1/2!+1/3!+…+1/n!, 编程计算e的近似值,直到最后一项的绝对值小于10^(-5)为止 ,输出e的值并计算累加的次数
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
float temp,sum=1,t=1;
for(i=1;;i++){
t=t*i;
temp=1/float(t);
sum=sum+temp;
if(fabs(temp)<0.00001){
break;
}
}
cout<<sum<<endl<<i+1;
return 0;
}
题目二十一:水仙花数是指各位数字的立方和等于该数本身的三位数。例如:153是水仙花数,因为153=1^3+3^3+5^3,请编程计算出所有的水仙花数。
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
for(i=100;i<1000;i++){
int bai=i/100;
int shi=i/10%10;
int ge=i%10;
if(i==((bai*bai*bai)+(shi*shi*shi)+(ge*ge*ge))){
cout<<i<<" ";
}
}
return 0;
}
题目二十二:已知不等式:1!+2!+3!+…+m!<n,请编程对用户指定的n计算并输出满足该不等式的m的整数解。
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
int t=1,i,n;
cin>>n;
for(i=1;;i++){
t=t*i;
sum=sum+t;
if(sum>=n){
break;
}
}
cout<<i;
return 0;
}
题目二十三:输入一些正数,编程计算并输出这些正数的和,输入负数或零时表示输入数据结束
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
while(1){
cin>>n;
if(n<=0) break;
sum=sum+n;
}
cout<<sum;
return 0;
}
题目二十四:输入一些正数,编程计算并输出这些正数的和,输入负数不累加,输入零时表示输入数据结束
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,sum=0;
while(1){
cin>>n;
if(n==0) break;
else if(n<0) continue;
sum=sum+n;
}
cout<<sum;
return 0;
}
题目二十五:男人、女人和小孩总计三十人,在一家饭店吃饭,共花了五十先令,每个男人各花三先令,每个女人各花2先令,每个小孩各花一先令,请用穷举法编程计算男人、女人和小孩各多少人
#include<bits/stdc++.h>
using namespace std;
int main(){
int num;
for(int i=0;i<=30;i++){
for(int j=0;j<=30-i;j++){
if((i*3+j*2+(30-i-j))==50){
cout<<i<<" "<<j<<" "<<30-i-j<<endl;
}
}
}
return 0;
}
题目二十六:鸡兔同笼。共有98个头,386只脚,请用穷举法编程计算鸡兔各有多少只
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=0;i<=98;i++){
if((i*2+(98-i)*4)==386){
cout<<"鸡有"<<i<<"只,"<<"兔有"<<98-i<<"只"<<endl;
}
}
return 0;
}
题目二十七:公鸡每只5元,母鸡每只3元,小鸡3只一元,请用穷举法编程计算,
若用100元买一百只鸡,则公鸡、母鸡、小鸡多少
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=0;i<20;i++){
for(int j=0;j<34;j++){
if(5*i+3*j+(100-i-j)/3==100){
cout<<i<<" "<<j<<" "<<100-i-j<<endl;
}
}
}
return 0;
}
题目二十八:用100元人民币兑换10元,5元,1元的纸币(每一种都要有)共五十张,
请用穷举法编程计算共有几种兑换方案,每种兑换方案各兑换多少张纸币
#include<bits/stdc++.h>
using namespace std;
int main(){
int sum=0;
for(int i=1;i<9;i++){
for(int j=1;j<19;j++){
if(10*i+5*j+(50-i-j)==100){
cout<<i<<" "<<j<<" "<<50-i-j<<endl;
sum++;
}
}
}
cout<<sum;
return 0;
}
题目二十九:按照以下格式输出乘法表:
#include<bits/stdc++.h>
using namespace std;
int main(){
for(int i=1;i<=9;i++){
cout<<left<<setw(3)<<i<<" ";
}
cout<<endl;
for(int i=1;i<=9;i++){
cout<<left<<setw(3)<<'-'<<" ";
}
cout<<endl;
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
cout<<left<<setw(3)<<i*j<<' ';
}
cout<<endl;
}
return 0;
}
题目三十:有一天,一个百万富翁遇到一个陌生人,陌生人找他谈了一笔生意,陌生人对百万富翁说“我每天给你十万元,而你第一天给我一分钱,第二天给我两分钱,第三天给我4分钱,……
你每天给我的钱是前一天的两倍,直到满30天”,编程计算这个月陌生人给百万富翁多少钱,百万富翁给陌生人多少钱?
#include<bits/stdc++.h>
using namespace std;
int main(){
// int num;
double temp=0.1,sum=0;
for(int i=1;i<=30;i++){
sum=sum+temp;
cout<<sum<<endl;
temp=temp*2;
}
cout<<100000*30<<" "<<sum;
return 0;
}
题目三十一:一辆卡车违反了交通规则,撞人后逃逸。现场有三人目击该事件,但是没有记住车号,只记住车号的一些特征,甲说:车号的前两位数字是相同的,乙说:车号的后两位数字是相同的,但是与前两位不同,丙是位数学家,他说:4位的车号正好是一个整数的平方。请根据以上线索找出车号
#include<bits/stdc++.h>
using namespace std;
int main(){
int num;
for(int i=0;i<=9;i++){
for(int j=0;j<=9;j++){
if(i!=j){
num=i*1000+i*100+j*10+j;
for(int k=1;k<=sqrt(num);k++){
if(k*k==num){
cout<<num<<endl;
break;
}
}
}
}
}
return 0;
}