欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言期末考试复习2

程序员文章站 2022-07-16 13:23:36
...

字符输入用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;
}