题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#include <stdio.h>
int main()
{
int i,j,k; //定义三个循环变量
int count = 0; //定义一个计数器并初始化
int number;
for(i = 1;i <= 4;i++)
{
for(j = 1;j <= 4;j++)
{
for(k = 1;k <= 4;k++)
{
number = ( i * 100 ) + ( j * 10 ) + k; //得到三位数
count++; //计数
printf("%5d",number); //输出三位数
}
}
}
printf("输出组成的个数:%d\n",count);
return 0;
}
题目2:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h>
#include <math.h>
int main()
{
int num;
int i;
for(num = 0;num < 10000;num++)
{
if((( num + 100 ) == (sqrt(num + 100) * sqrt(num + 100)))) //判断
{
i = num + 100;
if((( i + 168 ) == (sqrt(i + 168) * sqrt(i + 168))))
{
printf("%d\n",num);
}
}
}
printf("\n");
return 0;
}
题目3:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
#include <stdio.h>
#include <math.h>
void prime(int n)
{
int i; //定义一个质因子,当作循环变量
int p; //用来存放整数n
p=n;
printf("%d=",p);
for(i = 2;i <= sqrt(n);i++) //for循环求出每个质因子
{
if(n%i == 0)
{
printf("%d*",i);
n = n / i;
}
else
{
break;
}
}
printf("%d",n);
printf("\n");
}
int main()
{
int num;
printf("输入一个整数:\n");
scanf("%d",&num);
prime(num); //采用构造的函数求出结果
return 0;
}
题目4:输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>
void div_mul(int n,int m)
{
int temp; //定义一个中间变量
if(n < m) //保证n大于m
{
temp = n;
n = m;
m = temp;
}
int a,b; //记录n,m
a=n;
b=m;
int c_div; //定义公约数
int c_mul; //定义最大公倍数
int t; //定义一个判定条件
while(t != 0) //利用while循环求出最大公约数
{
t = n % m;
n = m;
m = t;
}
c_div=n;
printf("最大公约数:%d\n",c_div);
c_mul = (a / c_div) * (b / c_div) * c_div;
printf("最大公倍数:%d\n",c_mul);
}
int main()
{
int i,j;
printf("输入两个整数:\n");
scanf("%d%d",&i,&j);
div_mul(i,j);
return 0;
}
题目5:输入一行字符,分别统计出其中英文字母、空格、数字的个数。
#include <stdio.h>
#include <string.h>
void sta(char a[100]) //定义一个统计函数
{
int lenth = strlen(a); //用作计算字符串
int i; //定义一个循环变量
//定义个数并初始化
int num = 0;
int word = 0;
int sp = 0;
a[lenth-- - 1] = '0';
for(i = 0;i < lenth;i++)
{
if(a[i] >= '0' && a[i] <= '9') //判断数字的字数
{
num++;
}
if(a[i] >= 'A' && a[i] <= 'Z'
|| a[i] >= 'a' && a[i] <= 'z') //判断英文字母的个数
{
word++;
}
if(a[i] == ' ') //判断空格的个数
{
sp++;
}
}
printf("英文字母的个数:%d\n",word);
printf("数字的个数:%d\n",num);
printf("空格的个数:%d\n",sp);
}
int main()
{
char array[100];
printf("输入一串字符:\n");
fgets(array,100,stdin);
sta(array);
return 0;
}
题目6:写一个函数,将字符串转换成带符号整型数据,注意判断字符串长度
如:“-123134” -123134 , “123134” 123134
#include <stdio.h>
#include <string.h>
void turn(char * p)
{
int i=1; //符号标志
int num=0;
while(*p != '\0') //判断是否为NULL
{
if(*p == '-') //判断开头是否为负号
{
i = -1;
}
if(*p >= '0' && *p <= '9')
{
num = (num * 10) + (*p - '0'); //转为整型数据
}
p++;
}
printf("结果:%d\n",num*i);
}
int main()
{
char a[100];
int i;
printf("输入字符串:\n");
fgets(a,100,stdin);
//消除'\n'字符
i = strlen(a);
a[i] = 0;
turn(a);
return 0;
}
题目7:方阵的主对角线之上称为“上三角”。
请你设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3…的自然数列,从左上角开始,
按照顺时针方向螺旋填充。
例如:当n=3时,输出:
1 2 3
6 4
5
当n=4时,输出:
1 2 3 4
9 10 5
8 6
7
当n=5时,输出:
1 2 3 4 5
12 13 14 6
11 15 7
10 8
9
程序运行时,要求用户输入整数n(3~20)
程序输出:方阵的上三角部分。
要求格式:每个数据宽度为4,右对齐。(所有函数写在一个函数中)
#include <stdio.h>
int main()
{
int n;
printf("输入一个整数:\n");
scanf("%d",&n);
int i,j; //定义循环变量
int a[n][n];
//初始化二维数组
for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
a[i][j] = 0;
}
}
int count=1; //定义一个赋值元素并初始化为1
i = 0;
//给数组赋值
for(i = 0;i < n;i++)
{
for(j = i;j < (n-2*i-1);j++) //行赋值
{
a[i][j] = count++;
}
for(j = i;j < (n-2*i-1);j++) //对角线赋值
{
a[j][n-i-j-1] = count++;
}
for(j = i;j < (n-2*i-1);j++) //列赋值
{
a[n-i-j-1][i] = count++;
}
}
//中间不是一个环是一个数
if((n - 1)%3 == 0)
{
a[(n-1)/3][(n-1)/3] = count;
}
printf("结果:\n");
for(i = 0;i < n;i++)
{
for(j = 0;j < n;j++)
{
if(a[i][j] == 0) //如果当前元素是0跳过
{
continue;
}
else
{
printf("%4d",a[i][j]);
}
}
printf("\n");
}
return 0;
}
题目8: 输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)
#include <stdio.h>
int main()
{
int year,D;
printf("输入年份和天数:\n");
scanf("%d%d",&year,&D);
int t=0; //定义一个判定闰年的条件
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
t=1;
}
int day = 0; //定义一个月多少天并初始化
int d; //对天数计次
int month;
for(month = 0;month < 12;month++)
{
if(month == 1)
{
if(t == 1)
{
day = 29;
}
else
{
day = 28;
}
for(d = 1;d <= day;d++)
{
D--;
if(D == 0)
{
printf("%d年%d月%d日",year,month+1,d);
}
}
}
else
{
if(month % 2 == 0)
{
day = 31;
}
else
{
day = 30;
}
for(d = 1;d <= day;d++)
{
D--;
if(D == 0)
{
printf("%d年%d月%d日",year,month+1,d);
}
}
}
}
return 0;
}
题目9: 取十个1-100的随机整数,然后倒序打印出来。(通过指针,而不是数组下标)
#include <stdio.h>
int main()
{
int a[10];
int i; //循环变量
printf("输入10个数:\n");
for(i = 0;i < 10;i++)
{
scanf("%d",&a[i]);
}
int * p;
p = a; //p对应着数组a的首地址
for(i = 9;i >= 0;i--)
{
printf("%5d",*(p+i));
}
printf("\n");
return 0;
}
题目10: 通过随机函数获取到26个小写英文字母,存储到数组里并小写字母顺序打印出来。
#include <stdio.h>
int main()
{
char a[26];
int i; //循环变量
//随机输入26个字母
for(i = 0;i < 26;i++)
{
a[i] = 'a' + (rand() % 26);
}
printf("输出排序之前的:\n");
for(i = 0;i < 26;i++)
{
printf("%2c",a[i]);
}
printf("\n");
//冒泡排序
char min;
int j; //循环变量
for(i = 1;i < 26;i++)
{
for(j = 25;j >= i;j--)
{
if(a[j] < a[j-1]) //元素交换
{
min = a[j];
a[j] = a[j-1];
a[j-1] = min;
}
}
}
printf("输出排序后的:\n");
for(i = 0;i < 26;i++)
{
printf("%2c",a[i]);
}
printf("\n");
return 0;
}