C语言期末考试复习2
字符输入用a=getchar();
字符串输入用 gets(a) (char a[100]????
字符输出用putchar(a) (char a;)
字符串输出用 puts(a) (char a[100]????
1.整数反序输出
#include<stdio.h>
int main(){
int a;
scanf("%d",&a);
int b=a/1000;
int c=a%1000 /100;
int d=a%1000 %100 /10;
int e=a%1000 %100 %10;
int f=e*1000+d*100+c*10+b;
printf("重新组合后:%d",f);
return 0;
}
这个是怎么求一个数上的每一位
int b=a/1000; //这个是千位
int c=a%1000 /100; //这个是百位
int d=a%1000 %100 /10; //这个是十位
int e=a%1000 %100 %10; //个位
int f=e*1000+d*100+c*10+b;
2.求出分数序列的前N项和
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前n项之和,n<=30。
#include<stdio.h>
int main(){
float a=1.0,b=2.0,c;
int i,n;
double s=0;
scanf("%d",&n);
for(i=1;i<=n;i++){
s=(b/a)+s;
c=a; //赋值
a=b; //
b=c+b;
}
printf("n=%d,sum=%f",n,s);
return 0;
}
3.求s=a+aa+aaa+aaaa+aa…a的值
本关任务:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
#include <stdio.h>
int main()
{
int x,y,cnt,e,sum=0;
scanf("%d,%d",&y,&x);
e=x;
for(cnt=1;cnt<=y;cnt++){ //通过for循环来表示aaa
sum +=e;
e=e*10+x;
}
printf("%d",sum);
return 0;
}
4.switch
switch 可以用 if else 转化,懒得写switch就用if else
输入x,求分段函数y的值。
−10<=x<10 y=sin(x+3.0)
10<=x<20 y=cos(x+8.0)
20<=x<100 y=ln(x∗4)
如果x不在定义域内,输出No define!,否则输出y,并保留5位小数。
#include<stdio.h>
#include<math.h>
int main()
{
int x,flag;
double y;
scanf("%d",&x);
flag=(x<-10)?1:(x<10)?2:(x<20)?3:(x<100)?4:5;
switch(flag){
case 1:printf("No define!");break;
case 2:y=sin(x+3.0);printf("%.5f",y);break;
case 3:y=cos(x+8.0);printf("%.5f",y);break;
case 4:y=log(x*4);printf("%.5f",y);break;
default: printf("No define!");break;
}
return 0;
}
输入x,求分段函数:
x∈[0,10)时,y=cos(x+3.0);
x∈[10,20)时,y=cos^2(x+7.5);
x∈[20,30)时,y=cos^4(x+4.0)。
如果x不在定义域内,输出“No define”,否则输出y,并保留5位小数。
#include<math.h>
int main(){
double x,y;
int tag;
scanf("%lf",&x);
tag=(int)floor(x/10);
switch(tag){
case 0:y=cos(x+3.0);
break;
case 1:
y=cos(x+7.5);
y*=y;
break;
case 2:
y=cos(x+4.0);
y*=y;
y*=y;
break;
default:
y=1000.0;
break;
}
if(y<100.0)
printf("%.5f",y);
else
printf("No define\n");
return 0;
}
5.判断日期是否合法
判断闰年
闰年简介:
满足以下任意一个条件即为闰年:
能整除4且不能整除100
能整除400
#include<stdio.h>
int main(){
int y;
scanf("%d",&y);
if(y%400==0||y%100!=0&&y%4==0)
printf("%d年是闰年。",y);
else printf("%d年不是闰年。",y);
return 0;
}
本关任务:编写一个能判断输入的日期是否合法的小程序。如果合法,则按照年月日的输出此日期,比如1998年6月26日。;否则提示用户:您输入的日期有误,请重新输入!
#include <stdio.h>
int main() {
int year;
int month;
int day; // 定义年月日,便于后续获取,使用
scanf("%d,%d,%d", &year,&month,&day);//按照格式输入 的年月日
if(month<=12&&day<=31){//判断月份和日期是否正确存在
if(month==4||month==6||month==9||month==11){//判断月份,30天的月判断
if(day<=30){
printf("%d年%d月%d日。",year,month,day);
}else{
printf("您输入的日期有误,请重新输入!");
}
}else if(month==2){//判断二月的情况
if( ((0 == year%4)&&(0 != year%100)) ||(0 == year %400) ){//如果是闰年
if(day<=29){
printf("%d年%d月%d日。",year,month,day);
}else{
printf("您输入的日期有误,请重新输入!");
}
}else{//如果不是闰年
if(day<=28){
printf("%d年%d月%d日。",year,month,day);
}else{
printf("您输入的日期有误,请重新输入!");
}
}
}else{//由于剩下的都是31天,可以直接判定存在
printf("%d年%d月%d日。",year,month,day);
}
}else{//如果日期不存在
printf("您输入的日期有误,请重新输入!");
}
}
6.数学函数
#include<stdio.h>
#include<math.h>
int main(){
float a;
float sina;
float cosa;
float fabsla;
float sqrta;
scanf("%f",&a);
sina=sinl(a);
cosa=cosl(a);
fabsla=fabsl(a);
sqrta=sqrt(fabsla);
printf("sin(a)=%f\n",sina);
printf("cos(a)=%f\n",cosa);
printf("sqrt(a)=%f\n",sqrta);
return 0;
}
7.删除字符串中的指定字符
就看到要删除的字符时,就把它后面的全部往前面挪一个位置,后面把前面的覆盖了,然后,让最后一项为0, i 再减一就好了。
#include<stdio.h>
int main(){
char a[100],b;
int i,c;
gets(a);
scanf("%c",&b);
for(i=0;a[i]!='\0';i++){
if(a[i]==b){
for(c=i;a[c]!='\0';c++){
a[c]=a[c+1];
}
a[99]=0;
i--;
}
}
puts(a);
return 0;
}
8.回文串
strlen是获取字符串的长度;
strcmp(a,b)是比较两个字符串相不相等,相等就等于0;
strcpy是复制字符串;
strcat是连接字符串;
#include<stdio.h>
int main(){
char a[100],b[100],t;
int i,n;
gets(a);
n=strlen(a);
for(i=0;i<n;i++){
t=a[n-i-1];
b[i]=t;
}
if(strcmp(a,b)==0)
printf("yes");
else
printf("no");
return 0;
}
9.杨辉三角
#include <stdio.h>
long Tri(int r, int c)
{
return (c == 1 || c == r) ? 1 : Tri( r - 1, c - 1 ) + Tri( r - 1, c );
}
int main()
{
int i, j, n;
scanf("%d", &n);
for( i = 1; i <= n; i++)
{
for( j = 1; j < i; j++)
printf("%d ", Tri(i, j));
printf("%d", Tri(i, i));
printf("\n");
}
return 0;
}
10.进制转换
#include <stdio.h>
#include <string.h>
void prin( int m, int r){
int i=0,a[100],n=0,t;
if(m<0){
t=m;
m=-m;
}
while(m!=0){
a[i++]=m%r;
m=m/r;
n++;
}
if(t<0){
printf("-");
}
for(i=n-1;i>=0;i--){
if(a[i]>=0&&a[i]<=9)
printf("%d",a[i]);
else
printf("%c",a[i]+'A'-10);
}
}
int main()
{
int m,r;
scanf("%d %d",&m,&r);
prin( m, r);
return 0;
}
10.约瑟夫环
#include<stdio.h>
#define MAXSIZE 1000
void Init(int a[],int n);
int Josephus(int a[],int n,int m);
int main(){
int a[MAXSIZE];
int n,m,last;
scanf("%d%d",&n,&m);
if(n<0||n>MAXSIZE||m<0){
return 0;
}
Init(a,n);
last=Josephus(a,n,m);
printf("最后一个出列的是%d",last);
return 0;
}
void Init(int a[],int n){
int i;
for(i=0;i<=n;++i)
a[i]=1;
}
int Josephus(int a[],int n,int m){
int i,cnt,tally;
tally=n;
i=cnt=0;
while(tally>1){
if(a[i]==1){
cnt++;
if(cnt==m){
cnt=0;
tally--;
a[i]=0;
}
}
i=(i+1)%n;
}
i=0;
while(a[i]==0){
i++;
}
return i+1;
}
11.素数筛选法求素数
#include<stdio.h>
#include<math.h>
int I(int n)
{
int i;
for( i=2; i< n; i++){
if(n%i == 0)
break;
}
if(i>= n)
return 1;
else
return 0;
}
int main()
{
int i,N, j = 1;
printf("请输入N的值:\n");
scanf("%d",&N);
int a[N] ;
for(i=2;i<=N;++i)
if( I(i) )
a[j++] = i;
for( i = 1; i <j; i++ )
{
if(i%5==0&&i!=0){
printf("%d\n",a[i]);
}
else
printf("%d ",a[i]);
}
return 0;
}