目录
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;
}