1.编程从键盘任意输入两个时间(例如4时55分和1时25分),计算并输出这两个时间之间的间隔。要求不输出时间差的负号。
#include<stdio.h>
int main()
{
int hour1,minute1,hour2,minute2,hour3,minute3,time,time1,time2;
printf("Input time one(hour, minute):");
scanf("%d,%d",&hour1,&minute1);
printf("Input time two(hour, minute):");
scanf("%d,%d",&hour2,&minute2); time1=hour1*+minute1;
time2=hour2*+minute2;
if(time1>time2)
time=time1-time2;
else
time=time2-time1;
hour3=time/;
minute3=time%; printf("%d hour %d minute\n",hour3,minute3);
return ;
}
2.
设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:
按复利方式计息的本利之和计算公式为:deposit = capital * (1 + rate) n
按普通计息方式计算本利之和的公式为:deposit = capital * (1 + rate * n)
已知银行整存整取不同期限存款的年息利率分别为:
存期1年,利率为 0.0225
存期2年,利率为 0.0243
存期3年,利率为 0.0270
存期5年,利率为 0.0288
存期8年,利率为 0.0300
若输入其他年份,则输出"Error year!"
#include<stdio.h>
#include<math.h>
int main()
{
int flag=;
int year;
double capital,rate,deposit;
char interest;
printf("Input capital, year:");
scanf("%lf,%d,&capital",&capital,&year);
switch(year)
{
case :rate=0.0225;
break;
case :rate=0.0243;
break;
case :rate=0.0270;
break;
case :rate=0.0288;
break;
case :rate=0.0300;
break;
default:flag=; }
printf("Compound interest (Y/N)?");
scanf(" %c",&interest);
if((interest=='y'||interest=='Y')&&flag)
{
deposit=capital*pow(+rate,year);
printf("rate = %.4f, deposit = %.4f\n",rate,deposit);
}
else if((interest=='n'||interest=='N')&&flag)
{
deposit=capital*(+rate*year);
printf("rate = %.4f, deposit = %.4f\n",rate,deposit);
}
else
{
printf("Error year!\n");
} return ;
}
3.
美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这=10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。
#include <stdio.h>
#include <stdlib.h>
#include <math.h> int tenBit(int n,int *a); int main()
{
for(int x=;x<=;++x)
{
int a[]={,,,,,,,,,};
int d = tenBit(x*x*x,a)+tenBit(x*x*x*x,a);
if(d==){
printf("age=%d\n",x);
break;
}
}
return ;
} int tenBit(int n,int *a){
int cnt =;
while(n){
for(int i=;i<;++i){
if(n%==a[i]){
a[i]=-;
cnt++;
}
}
n/=;
}
return cnt;
}
4.
化简分数的最简分数(寻找分子分母的最大公约数)
#include<stdio.h>
int Gcd(int a,int b);
int main()
{ int a;
int b;
printf("Input m,n:");
scanf("%d,%d",&a,&b); if (a<||a>||b<||b>)
{
printf("Input error!\n");
}
else
printf("%d/%d\n",a/Gcd(a,b),b/Gcd(a,b));
getchar();
getchar();
return ;
} int Gcd(int a,int b)
{
int max=;
int i;
int n = a < b ? a : b;
for (i = ; i <= n; ++i)
{
if (a % i == && b % i == )
{
if(max < i)
{
max = i;
}
}
} return max;
}
最简分式化简
5.
从键盘任意输入一个整数n,编程计算并输出1~n之间的所有素数之和。
函数原型:int IsPrime(int x);
函数功能:判断x是否是素数,若函数返回0,则表示不是素数,若返回1,则代表是素数
#include<stdio.h>
int IsPrime(int x);
int main()
{
int x,i;
int sum=;
printf("Input n:");
scanf("%d",&x);
if(x<)
{
printf("sum=%d\n",sum);
}
else
{
for(i=;i<=x;i++)
{
if(!IsPrime(i))
{
sum+=i;
}
}
printf("sum=%d\n",sum);
} getchar();
getchar();
return ;
} int IsPrime(int x)
{
int i;
for (i=;i<x;i++)
{
if(x%i==)
{
return ;
break;
} }
return ; }
素数和
6.
已知一个集合A,对A中任意两个不同的元素求和,若求得的和仍在A内,则称其为好数对。例如,集合A={1 2 3 4},1+2=3,1+3=4,则1,2和1,3 是两个好数对。编写程序求给定集合中好数对的个数。
#include<stdio.h> #define SIZE 1000
int Good(int a[], int m,int n); int main()
{
int i;
int a[SIZE];
int n;
int m=;
scanf("%d",&n);
for (i=;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("%d",Good(a,m,n));
return ; } int Good(int a[], int m,int n)
{
int i,j,k; for(i=;i<n-;++i)
{
for (j=i+;j<n;j++)
{
for(k=;k<n;k++)
{
if(a[i]+a[j]==a[k])
m++;
}
}
}
return m;
}
好对数
7.
猴子吃桃问题,反向递归
法一:
#include<stdio.h>
int Monkey(int n, int x);
int main()
{
int n,x=;
printf("Input days n:");
scanf("%d",&n);
printf("x=%d\n",Monkey(n,x)); } int Monkey(int n, int x)
{
if(n==)
{
return x;
}
else
{
return Monkey((n-),*(x+));
}
}
法二:
#include <stdio.h>
int getPeachNumber(n)
{
int num; //定义所剩桃子数
if(n==)
{
return ; //递归结束条件
}
else
{
num =(getPeachNumber(n+)+)*;//这里是不应该用递归呢?
printf("第%d天所剩桃子%d个\n", n, num); //天数,所剩桃子个数
}
return num;
}
int main()
{
int num = getPeachNumber();
printf("猴子第一天摘了:%d个桃子。\n", num);
return ;
}
8.
据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置? 能否借鉴筛法求出剩下的最后一个人的位置?
#include <stdio.h>
int main()
{
int a[]={};
int bread;
int cnt=;int i=;
for (bread=; bread>; ++i,i%=)
{
if(a[i]==)
{
cnt++;
}
if (cnt==)
{
bread--;
cnt=;
a[i]=-;//改变已经分到的状态 }
} for(i=;i<;i++)
{
if (a[i]==)
printf("The result is %d: ",i+);
} return ;
}
鲁智深吃馒头
9.
Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。例如,输入为:abcdef↙c↙输出为:abdef
#include <stdio.h>
#include <string.h>
void Squeeze(char *s, char c);
int main()
{
char a[], c, *s;
s = a;
gets(a);
scanf("%c",&c);
Squeeze(s, c);
printf("%s\n", s);
return ;
} void Squeeze(char *s, char c)
{
int i, j;
for (i = j = ; s[i] != '\0'; i++)
{
if (__________)
{
__________;
j++;
}
}
_____________; /* 在字符串t2的末尾添加字符串结束标志 */
}
code
10.
从键盘输入一串字符(假设字符数少于8个),以回车表示输入结束,编程将其中的数字部分转换为整型数并以整型的形式输出。
函数原型为 int Myatoi(char str[]);其中,形参数组str[]对应用户输入的字符串,函数返回值为转换后的整型数。
(str[i]-'0'); //将字符数字转化为相应的数字
#include<stdio.h>
#include<string.h>
#define LENGTH 8
int Myatoi(char str[]); int main()
{
char str[LENGTH+];
printf("Input a string:");
scanf("%7s",str);
printf("%d\n",Myatoi(str)); return ;
} int Myatoi(char str[])
{
int i;
int result=;
for(i=;str[i]!='\0';i++)
{
if(str[i]>=''&&str[i]<='')
{
result=result*+(str[i]-''); //将字符数字转化为相应的数字
}
}
return result;
}
11.编程计算n(n<=500)以内的10个最大素数及其和,分别输出这最大的10个素数及其和。n的值要求从键盘输入。要求10个素数按从大到小的顺序输出。
#include<stdio.h>
#include<math.h>
int Isprime(int n);
int main()
{
int i,n,cnt=;
int a[]={};
int sum=;
printf("Input n(n<=500):");
scanf("%d",&n); for (i=n;i>=;--i)
{ if(Isprime(i))
{
a[cnt]=Isprime(i);
sum+=a[cnt];
printf("%6d",a[cnt]);
if(cnt==)
break;
cnt++;//严格注意位置
}
}
printf("\nsum=%d\n",sum);
getchar();
getchar(); return ;
} int Isprime(int n)
{
int i,flag=;
for (i=;i<=sqrt(n);i++)
{
if(n%i==)
{
flag=;
break;
}
}
if(flag==)
{
return n;
}
else
return ; }
12.
题目内容:请输入星期几的第一个字母(不区分大小写)来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母(小写),否则输出“data error”。
#include<stdio.h>
int main()
{
char i,j;
printf("please input the first letter of someday:\n");
scanf("%c",&i);
switch(i)
{
case 'M':
case 'm':
printf("monday\n");
break;
case 'w':
case 'W':
printf("wednesday\n");
break;
case 'f':
case 'F':
printf("friday\n");
break;
case 't':
case 'T':
printf("please input second letter:\n");
scanf(" %c",&j);
if (j=='u')//||j=='U')
{
printf("tuesday\n");
break;
}
else if (j=='h')//||j=='H')
{
printf("thursday\n");
break;
}
else printf("data error\n"); break;
case 's':
case 'S':
printf("please input second letter:\n");
scanf(" %c",&j);
if (j=='a')//||j=='A')
{
printf("saturday\n");break;
}
if (j=='u')//||j=='U')
{
printf("sunday\n");
break;
}
else printf("data error\n"); break;
default :
printf("data error\n"); break;
}
return ;
}
13.奖学金发放
题目内容:
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,每项奖学金获取的条件分别如下:
1) 院士奖学金:期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生每人均可获得8000元;
2) 五四奖学金:期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生每人均可获得4000元;
3) 成绩优秀奖:期末平均成绩高于90分(>90)的学生每人均可获得2000元;
4) 西部奖学金:期末平均成绩高于85分(>85)的西部省份学生每人均可获得1000元;
5) 班级贡献奖:班级评议成绩高于80分(>80)的学生*每人均可获得850元;
只要符合上述条件就可获得相应的奖项,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生*,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
#include<stdio.h>
typedef struct winners
{
char name[];
int finalScore;
int classScore;
char work;
char west;
int paper;
int scholarship;
}WIN; void Addup(WIN stu[],int n);
int FindMax(WIN student[],int n); int main()
{
int n;
WIN stu[];
printf("Input n:");
scanf("%d",&n);
Addup(stu,n);
FindMax(stu,n);
printf("%s get the highest scholarship %d\n",stu[FindMax(stu,n)].name,stu[FindMax(stu,n)].scholarship);
getchar();
getchar();
return ;
} void Addup(WIN stu[],int n)
{
int i;
for (i=;i<n;++i)
{
stu[i].scholarship=;
printf("Input name:");
scanf("%s",stu[i].name);
printf("Input final score:");
scanf("%d",&stu[i].finalScore);
printf("Input class score:");
scanf("%d",&stu[i].classScore);
printf("Class cadre or not?(Y/N):");
scanf(" %c",&stu[i].work);
printf("Students from the West or not?(Y/N):");
scanf(" %c",&stu[i].west);
printf("Input the number of published papers:");
scanf("%d",&stu[i].paper);
if(stu[i].finalScore>&&stu[i].paper>)
{
stu[i].scholarship+=;
}
if(stu[i].finalScore>&&stu[i].classScore>)
{
stu[i].scholarship+=;
}
if(stu[i].finalScore>)
{
stu[i].scholarship+=;
}
if(stu[i].finalScore>&&stu[i].west=='Y')
{
stu[i].scholarship+=;
}
if(stu[i].classScore>&&stu[i].work=='Y')
{
stu[i].scholarship+=;
}
printf( "name:%s,scholarship:%d\n",stu[i].name,stu[i].scholarship); } } int FindMax(WIN student[],int n)
{
int i,k=;
int max=student[k].scholarship;
for (i=;i<n;i++)
{
if(student[i].scholarship>max)
{
max=student[i].scholarship;
k=i;
}
}
return k; }
14.评选最牛群主
现在要评选最牛群主,已知有3名最牛群主的候选人(分别是tom,jack和rose),有不超过1000人参与投票,最后要通过投票评选出一名最牛群主,从键盘输入每位参与投票的人的投票结果,即其投票的候选人的名字,请你编程统计并输出每位候选人的得票数,以及得票数最多的候选人的名字。候选人的名字中间不允许出现空格,并且必须小写。若候选人名字输入错误,则按废票处理。
#include<stdio.h>
#include<string.h>
typedef struct
{
char name[];
int m;
}Vote; int main()
{
Vote a[];
int j;
for (j=;j<;j++)
{
a[j].m=;
}
char *pName[]={"tom","jack","rose"};
int i,n;
char str[];
printf("Input the number of electorates:");
scanf("%d",&n);
for (i=;i<n;i++)
{
printf("Input vote %d:",i+);
scanf("%s",str);
if(strcmp(str,pName[])==)
{
(a[].m)++;
}
if(strcmp(str,pName[])==)
{
a[].m++;
}
if(strcmp(str,pName[])==)
{
a[].m++;
} }
printf("Election results:\n");
for (i=;i<;i++)
{
printf("%s:%d\n",pName[i],a[i].m);
} int k=;
int max=a[k].m;
for (i=;i<;i++)
{
if(max<a[i].m)
{
max=a[i].m;
k=i;
}
}
printf("%s wins\n",pName[k]); getchar();
getchar();
return ;
}