函数部分习题

 

目录

1.找最大公约数

2.打印100到200之间的素数

3.编写代码实现,模拟用户登录情景,并且只能登录三次

4.实现猜数游戏

5.简单的字符串逆序

6.打印菱形

7.水仙花数

8.打印x图案

9.公务员面试

10.有序序列插入一个数 

1.找最大公约数

#include <stdio.h>
int main()
{
    int m = 0;
    int n = 0;
    int ret;
    scanf("%d %d",&m,&n);
    if(m>n)
       ret = n;
    else
       ret = m;
    while(1)
    {
    	if(m%ret == 0&&n%ret == 0)
    	{
    		break;
		}
		ret--;
	}
	printf("%d\n",ret);
	return 0;
 } 
#include <stdio.h>//辗转相除法

int main()
{
    int m = 0;
    int n = 0;
    int ret = 0;
    scanf("%d %d",&m,&n);
     while(ret=m%n)
     {
     	m = n;
     	n = ret;
     	
	 }
	 printf("%d\n",n);
	return 0;
 } 

2.打印100到200之间的素数

#include <stdio.h>
int main()
{
     int y =0;
     for(y = 100;y<=200;y++)
     {
     	int n = 0;
     	int flag = 1;//假设y是素数
		for(n=2;n<y;n++)
		{
			if(y%n==0)
			{
				flag = 0;//y不是素数
				break; 
			}
		}
		if(flag==1)
		  printf("%d ",y); 
	 }
	 return 0;
#include <stdio.h>
#include <math.h>
int main()
{
     int y =0;
     for(y = 100;y<=200;y++)
     {
     	int n = 0;
     	int flag = 1; 
		for(n=2;n<=sqrt(y);n++)
		{
			if(y%n==0)
			{
				flag = 0; 
				break; 
			}
		}
		if(flag==1)
		  printf("%d ",y); 
	 }
	 return 0;
}

3.编写代码实现,模拟用户登录情景,并且只能登录三次

只允许输入三次密码,如果密码正确则提示登陆成功,如果输入三次错误,则退出程序

#include <stdio.h>
#include <string.h>
int main ()
{
	int i = 0;
	//假设密码是字符串"123456" 
	char password[20]="";
	for(i=0;i<3;i++)
	{
		printf("请输入密码:");
		scanf("%s",password);//password不取地址的原因是password是数组名,本来就是地址
		if(strcmp(password,"123456")==0)//比较两个字符串是否相等不能使用等号,要用strcmp函数 
        {
        	 printf("登录成功\n");
        	 break;
		}	
		else
		{
			printf("密码错误\n");
		}
	}
	if(i==3)
	{
		printf("三次密码均错误退出程序\n");
	}
	return 0;
}

4.实现猜数游戏

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
    printf("**********************\n");
    printf("****** 1,play ********\n");
    printf("****** 0.exit ********\n");
    printf("**********************\n");
}

//RAND_MAX--函数可以返回随机数的最大值 
void game()
{
    int random_num = rand()%100+1;
    int input = 0;
    while (1)
    {
        printf("请输入数字>:");
        scanf("%d",&input);
        if(input > random_num)
        {
            printf("猜大了\n"); 
        }
        else if(input < random_num)
        {
            printf("猜小了\n");
        }
        else
        {
            printf("恭喜你,猜对了\n");
            break;
        }
    }

}

    int main ()
    {
        int input = 0;
        srand((unsigned)time(NULL));
        do
        {
            menu();
            printf("请选择>:");
            scanf("%d",&input);
            switch(input)
            {
                case 1:
                    game();
                    break;
                case 0:
                    break;
                default:
                    printf("选择错误,请重新输入!\n");
                    break; 
            }
        }while(input);
        return 0;
    }

5.字符串逆序

#include <stdio.h>
#include <string.h>
#include <assert.h>
void reverse(char* str)
{   
    assert(str);
    int len = strlen(str);
    char* left = str;
    char* right = str + len - 1;
    
    while (left<right)
    {
        char tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}

int main()
{
    char arr[] = "abcdefg";//常量字符串不能改动
    reverse(arr);
    printf("%s\n",arr);
    
    return 0;
}

使用递归方法

void reverse_string(char*arr)
{   
    int len = strlen(arr);
	char tmp = *arr;
	*arr = *(arr +len - 1);
	*(arr + len - 1) = '\0';
	
	if(my_strlen(arr+1)>1)
    	reverse_string(arr+1);
	
	*(arr + len - 1) = tmp;
}

6.打印菱形

#include <stdio.h>
int main ()
{
    int line = 7;
    int i = 0;
    for(i=0;i<line;i++)
    {
        //打印一行
        //先打印空格,再打印*
        int j = 0;
        for(j =0;j<line-1-i;j++)
        {
            printf(" ");
        }
        for(j = 0;j<2*i+1;j++)
        {
            printf("*");
        }
        printf("\n");
     }
     for(i = 0;i<line -1;i++)
     {
         int j = 0;
         for(j = 0;j<=i;j++)
         {
             printf(" ");
         }    
         for(j = 0;j<2*(line-i-1)-1;j++)
         {
             printf("*");
         }
         printf("\n");
     }    
            
    return 0;
}

7.水仙花数

#include <stdio.h>
#include <math.h>
int main ()
{   
    int i = 0 ;
    int sum;
    //计算i的位数 计算i的每一位的3次方之和 判断是否是为水仙花数
    for(i = 0;i<=1000;i++)
  {
    int n = i;
    int tmp = i;
    while (i/10);
    {
        n++;
        tmp = tmp/10;
    }
    while (tmp)
    {
        sum += pow(tmp % 10, n);
        tmp = tmp/10;
    }
    if(sum = i)
        printf("%d",sum);
  }
  return 0;
}
        

8.打印x图案

多组输入:一个整数,表示输出的行数,也表示组成X的反斜线和正斜线的长度

打印每行的输入,输出用*组成的X形图案

#include <stdio.h>
int main()
{
	int n = 0;
	while (scanf("%d", &n) != EOF)
	{
		int i = 0;
		for (i = 0; i < n; i++)
		{
			int j = 0;
			for (j = 0; j < n; j++)
			{
				if (i == j)
					printf("*");
				else if (i + j == n - 1)
					printf("*");
				else
					printf(" ");

			}
			printf("\n");
		}
	}
	return 0;

}
 

9.公务员面试

输入若干组成绩,每组7个数(百分制),去掉一个最高分和最低分,输出每组的平均成绩

#include <stdio.h>
int main()
{
	int sum = 0;
	int score = 0;
	int i = 0;
	int max = 0;
	int min = 100;

	for (i = 0; i < 7; i++)
	{
		scanf("%d", &score);
		sum += score;
		if (score > max)
			max = score;
		if (score < min)
			min = score;
	}
	printf("%.2f\n,(sum-max-min)/5.0");
	return 0;
}
 

10.有序序列插入一个数 

有一个从小到大排序的数组,将一个新输入的数插入到序列中,保证插入新数后,排序仍然是升序

 

 #include <stdio.h>
int main()
{   
	int arr[51] = { 0 };
	//输入
	//插入数据
	int n = 0;
	int i = 0;
	scanf("%d", &n);
	//n个数的输入
	for (i = 0; i < n; i++)
	{
		scanf("%d",&arr[i]);
	}
	//输入要插入的数据
	int m =0;
	scanf("%d",&m);
	
	for (i = n-1; i >= 0; i--)
    {
		if (arr[i] >= m)
			arr[i+1] = arr[i];
		else
		{
			arr[i + 1] = m;
			break;
		}
	}
	//当插入的数据小于所有的数据时 
	if(i<=0) 
	   arr[0] = m;
	   
	for (i = 0; i < n + 1; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值