题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,j,k,t = 0;
int sum = 0;
for(i = 1;i <= 4;i++ )
{
for(j = 1;j <= 4;j++)
{
for(k = 0;k <= 4;k++)
{
if(i != j && i != k && j != k)
{
sum = i*100 + j*10 + k;
t++;
printf("%4d\t",sum);
}
}
}
printf("\n");
}
printf("%d\n",t);
return 0;
}
结果:
题目2:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
float a = 0.0,b = 0.0;
do{
i++;
a = sqrt(i + 100);
b = sqrt(i + 268);
}while(a * a != (i+100) || b * b != (i + 268));
printf("%d\n",i);
return 0;
}
结果:
题目3:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,j,n,k;
printf("请输入一个整数n:");
scanf("%d",&n);
k = n;
for(i = 2;i < n;i++)
{
if(n % i == 0)
{
printf("%d * ",i);
n = n / i;
}
}
if(n != k)
{
printf("%d\n",n);
}
return 0;
}
结果:
题目4:输入两个正整数m和n,求其最大公约数和最小公倍数。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void Maxynum(int n,int m)
{
int i,t = 0;
if(n > m)
{
for(i = 1;i <= m;i++)
{
if(n % i == 0 && m % i == 0)
{
t = i;
}
}
printf("最大公约数为:%d\n",t);
}
else
{
for(i = 1;i <= n;i++ )
{
if(n % i == 0 && m % i == 0)
{
t = i;
}
}
printf("最大公约数为:%d\n",t);
}
}
void Maxbnum(int n,int m)
{
int i;
if(n > m)
{
for(i = n;i <= n * m;i++)
{
if(i % n == 0 && i % m == 0)
{
printf("最小公倍数为:%d\n",i);
break;
}
}
}
else
{
for(i = m;i <= n * m;i++)
{
if(i % n == 0 && i % m == 0)
{
printf("最小公倍数为:%d\n",i);
break;
}
}
}
}
int main()
{
int n,m;
printf("请输入两个正整数n,m:");
scanf("%d%d",&n,&m);
Maxynum(n,m);
Maxbnum(n,m);
return 0;
}
结果:
题目5:输入一行字符,分别统计出其中英文字母、空格、数字的个数。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void Num(char str[])
{
int i = 0,t = 0;
while(str[i] != '\0')
{
if(str[i] >= '0' && str[i] <= '9')
{
t++;
}
i++;
}
printf("数字的个数为:%d\n",t);
}
void Word(char str[])
{
int i = 0,t = 0;
while(str[i] != '\0')
{
if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <=
'Z'))
{
t++;
}
i++;
}
printf("英文字母的个数为:%d\n",t);
}
void Kong(char str[])
{
int i = 0,t = 0;
while(str[i] != '\0')
{
if(str[i] == ' ')
{
t++;
}
i++;
}
printf("空格的个数为:%d\n",t);
}
int main()
{
char str[100];
gets(str);
Num(str);
Kong(str);
Word(str);
return 0;
}
结果:
题目6:写一个函数,将字符串转换成带符号整型数据,注意判断字符串长度
如:“-123134” -123134 , “123134” 123134
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
char str[100];
int num[100];
int i = 0,t = 0,flag;
long sum = 0;
printf("请输入一串字符:");
gets(str);
while(str[i] != '\0')
{
if(str[i] == '-')
{
flag = 1;
i = i+1;
}
if(str[i] >= '0' && str[i] <= '9')
{
num[t++] = str[i] - '0';
}
i++;
}
for(i = 0;i < t;i++)
{
sum = sum*10 + num[i];
}
if(flag == 1)
{
sum = -sum;
}
printf("%ld\n",sum);
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,右对齐。(所有函数写在一个函数中)
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int i,id,n,n1,n2;
int d = 1;
int a[20][20];
int p,q,m,k;
printf("当n=");
scanf("%d",&n);
for(i = 0,k = n - 1;i < n;k-=2,i++)
{
if(i == k)
{
a[i][i] = d;
break;
}
for(p = i;p < k;p++)
{
a[i][p] = d++;
}
for(p = i,q = k;p < k;p++,q--)
{
a[p][q] = d++;
}
for(p = k;p > i;p--)
{
a[p][i] = d++;
}
}
for(p = 0;p < n;p++)
{
for(q = 0;q < n-p;q++)
{
printf("%4d",a[p][q]);
}
printf("\n");
}
return 0;
}
结果:
题目8: 输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int Year(int year)
{
if((year%4 == 0 && year%100 != 0) || year%400 == 0)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int year,day,flag,i;
int sum = 0;
printf("请输入年和第N天:");
scanf("%d%d",&year,&day);
flag = Year(year);
if(flag == 1)
{
int a[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
for(i = 0;i < 12;i++)
{
sum = sum + a[i];
if(day <= sum)
{
printf("%d月%d日\n",i+1,a[i] - (sum - day));
break;
}
}
}
else
{
int b[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
for(i = 0;i < 12;i++)
{
sum = sum + b[i];
if(day <= sum)
{
printf("%d月%d日\n",i+1,b[i] - (sum - day));
break;
}
}
}
return 0;
}
题目9: 取十个1-100的随机整数,然后倒序打印出来。(通过指针,而不是数组下标)
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Sort(int a[])
{
int i,temp;
int *q = 0;
int *p = 0;
p = &a[9];
q = p+10;
printf("倒序为:");
for(i = 0;i < 10;i++)
{
printf("%4d",*(p--));
}
printf("\n");
}
int main()
{
int a[10];
int i;
srand(time(NULL));
for(i = 0;i < 10;i++)
{
a[i] = rand() % 100 + 1;
}
printf("随即十个整数(1-100):");
for(i = 0;i < 10;i++)
{
printf("%4d",a[i]);
}
printf("\n");
Sort(a);
return 0;
}
结果:
题目10: 通过随机函数获取到26个小写英文字母,存储到数组里并小写字母顺序打印出来。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Sort(char str[])
{
int i,j,k;
char temp;
for(i = 0;i < 25;i++)
{
k = i;
for(j = i + 1;j < 26;j++)
{
if(str[k] > str[j])
{
k = j;
}
}
if(k != i)
{
temp = str[k];
str[k] = str[i];
str[i] = temp;
}
}
printf("以小写字母的数序打印为:");
for(i = 0;i < 26;i++)
{
printf("%2c",str[i]);
}
printf("\n");
}
int main()
{
char str[26];
int i,n = 0;
srand(time(NULL));
for(i = 0;i < 26;i++)
{
n = rand() % 26;
str[i] = n + 'a';
}
printf("随机获取26个小写字母为:");
for(i = 0;i < 26;i++)
{
printf("%2c",str[i]);
}
printf("\n");
Sort(str);
return 0;
}
结果:
编程训练2
1、从一个字符数组中读出相应的整数、实数
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <math.h>
int main()
{
char str[100];
int num[100];
int i = 0,k = 0;
int t = 0;
int flag1,flag2;
double sum = 0.0;
printf("请输入一串含有数字的字符串:");
gets(str);
while(str[i] != '\0')
{
if(str[i] >= '0' && str[i] <= '9' && str[i] != '.')
{
num[t++] = str[i] - '0';
}
if(str[i] == '.' && str[i+1] >= '0' && str[i+1] <= '9')
{
flag1 = 1;
k = t;
while(str[i+1] >= '0' && str[i+1] <= '9')
{
num[k++] = str[i+1] - '0';
i++;
}
break;
}
if(str[i] == '-' && str[i+1] >= '0' && str[i+1] <= '9')
{
flag2 = 1;
}
i++;
}
if(flag2 == 1)
{
if(flag1 == 1)
{
for(i = 0;i < k;i++)
{
sum = sum * 10 + num[i];
}
sum = sum * pow(10,t-k);
printf("%lf\n",-sum);
}
else
{
for(i = 0;i < t;i++)
{
sum = sum * 10 + num[i];
}
printf("%.0lf\n",-sum);
}
}
else
{
if(flag1 == 1)
{
for(i = 0;i < k;i++)
{
sum = sum * 10 + num[i];
}
sum = sum * pow(10,t-k);
printf("%lf\n",sum);
}
else
{
for(i = 0;i < t;i++)
{
sum = sum * 10 + num[i];
}
printf("%.0lf\n",sum);
}
}
return 0;
}
结果:
2、将整数转换为相应的一个字符数组。
分析:从个位提取数字,组合字符
符号位的处理 12345=>“12345”
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int num;
char str[100];
int i,j = 0,k;
printf("请输入一个整数:");
scanf("%d",&num);
if(num >= 0)
{
while(num)
{
k = num % 10;
num = num /10;
str[j++] = k + '0';
}
printf("数字字符串为:");
for(i = j - 1;i >= 0;i--)
{
printf("%c",str[i]);
}
printf("\n");
}
else
{
num = abs(num);
while(num)
{
k = num % 10;
num = num / 10;
str[j++] = k + '0';
}
str[j] = '-';
printf("数字字符串为:");
for(i = j;i >= 0;i--)
{
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}
结果:
3、字符串数组的冒泡排序,从小到大
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void Sort(char str[])
{
int i,j,k,n = 0;
char temp;
while(str[n] != '\0')
{
n++;
}
for(i = 0;i < n - 1;i++)
{
k = i;
for(j = i + 1;j < n;j++)
{
if(str[k] > str[j])
{
k = j;
}
}
if(k != i)
{
temp = str[k];
str[k] = str[i];
str[i] = temp;
}
}
printf("排序后:");
puts(str);
}
int main()
{
char str[100];
printf("请输入一串字符:");
gets(str);
Sort(str);
return 0;
}
结果:
4、查找介于n1与n2(0<n1<n2<32768)之间所有满足下列条件的整数:
(1)该数的十进制表示中有且仅有两个相同的数字位;
(2)该数是素数。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void fun(int n1,int n2)
{
int i,j,k,n,m1;
int num,num1;
int p[16];
int m = 0,q1 = 1,q2 = 1;
for(i = n1;i < n2;i++)
{
for(j = 2;j < i;j++)
{
if(i % j == 0)
{
break;
}
}
if(i == j)
{
num = i;
num1 = num;
m=0;
q1 = 1;
while(num)
{
n = num % 10;
num = num / 10;
p[m++] = n;
}
for(k = 0;k < m;k++)
{
for(m1 = k + 1;m1 < m;m1++)
{
if(p[k] == p[m1])
{
q1++;
}
}
}
if(q1 == 2)
{
printf("%d\n",i);
}
}
}
}
int main()
{
int n1,n2;
printf("请输入n1,n2(0<n1<n2<32768):");
scanf("%d%d",&n1,&n2);
fun(n1,n2);
return 0;
}
结果:
5、编写函数void change(char *a,char b,charc)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字符串中过长的剩余字符接在c指向数组的尾部。
例如,当a指向的字符串为"abcdefg",b指向的字符串为"1324"时,c指向的数组中字符串应为"a4b2c3d1efg"。
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
void fun(char b[])
{
int i = 0,j = 0;
int n = 0;
char p[100];
while(b[j] != '\0')
{
p[j] = b[j];
j++;
}
for(i = j - 1;i >= 0;i--)
{
b[n++] = p[i];
}
printf("逆序后的b:");
for(i = 0;i < n;i++)
{
printf("%c",b[i]);
}
printf("\n");
}
void func(char a[],char b[],char c[])
{
int i = 0,j = 0,k;
while(a[i] != '\0')
{
i++;
}
while(b[j] != '\0')
{
j++;
}
if(i >= j)
{
for(k = 0;k < (i + j);k++)
{
c[2*k] = a[k];
c[2*k+1] = b[k];
if(b[k + 1] == '\0' && a[k + 1] != '\0' && a[k] != '\0')
{
c[2*k+2] = a[k + 1];
}
}
k = 0;
while(c[k] != '\0')
{
printf("%c",c[k]);
k++;
}
printf("\n");
}
else
{
for(k = 0;k < (i + j);k++)
{
c[2 * k] = a[k];
c[2 * k+1] = b[k];
if(a[k] == '\0' && b[k] != '\0')
{
c[2 * k] = b[k];
c[2*k+1] = b[k+1];
}
}
k = 0;
while(c[k] != '\0')
{
printf("%c",c[k]);
k++;
}
printf("\n");
}
}
int main()
{
char a[100];
char b[100];
char c[100];
printf("请输入两个字符串:\n");
gets(a);
gets(b);
fun(b);
func(a,b,c);
return 0;
}
结果:
6、对N行N列二维数组的每一行排序,偶数行(0当作偶数)由小到大排序,奇数行由大到小排序
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
int main()
{
int a[5][5];
int i,j,k,n;
int temp;
printf("请输入一些数:");
for(i = 0;i < 5;i++)
{
for(j = 0;j < 5;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i = 0;i < 5;i++)
{
if(i % 2 == 0)
{
for(n = 0;n < 4;n++)
{
k = n;
for(j = n + 1;j < 5;j++)
{
if(a[i][k] > a[i][j])
{
k = j;
}
}
if(k != n)
{
temp = a[i][k];
a[i][k] = a[i][n];
a[i][n] = temp;
}
}
}
else
{
for(n = 0;n < 4;n++)
{
k = n;
for(j = n + 1;j < 5;j++)
{
if(a[i][k] < a[i][j])
{
k = j;
}
}
if(k != n)
{
temp = a[i][k];
a[i][k] = a[i][n];
a[i][n] = temp;
}
}
}
}
for(i = 0;i < 5;i++)
{
for(j = 0;j < 5;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
结果:
8、合并两个字符集合为一个新集合,每个字符串在新集合中仅出现一次,函数返回新集合中字符串。
如:
s1集合{“while”,”for”,”switch”,”if”,”continue”}
s2集合{“for”,”case”,”do”,”else”,”char”,”switch”}
运行结果:
while for switch if break continue case do else char
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <string.h>
void fun(char str[][10],char ptr[][10])
{
int i = 0,j = 0,k,m,t = 0;
char *qtr[5];
char *ctr[5];
char *mtr[10];
int m1,flag = 0;
for(k = 0;k < 5;k++)
{
if(str[k] != str[k + 1])
{
qtr[k] = str[k];
}
else
{
qtr[k - 1] = str[k];
k++;
}
}
for(k = 0;k < 5;k++)
{
if(ptr[k] != ptr[k + 1])
{
ctr[k] = ptr[k];
}
else
{
ctr[k - 1] = ptr[k];
k++;
}
}
for(k = 0;k < 5;k++)
{
mtr[t++] = qtr[k];
}
for(m = 0;m < 5;m++)
{
flag = 0;
for(m1 = 0;m1 < t;m1++)
{
if(*mtr[m1] == *ctr[m])
{
flag = 1;
}
}
if(flag != 1)
{
mtr[t++] = ctr[m];
}
else
{
continue;
}
}
for(i = 0;i < t;i++)
{
printf("%5s",mtr[i]);
}
printf("\n");
}
int main()
{
char str[5][10];
char ptr[5][10];
int i;
printf("请输入第一个字符串:");
for(i = 0;i < 5;i++)
{
gets(str[i]);
}
printf("请输入第二个字符串:");
for(i = 0;i < 5;i++)
{
gets(ptr[i]);
}
printf("\n");
fun(str,ptr);
return 0;
}
结果:
9、找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,
例如,p=5,Mp=25-1=31,5和31都是素数,因此31是默森尼数;而Mp=211-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <math.h>
int main()
{
int i,j,k;
i = 1;
j = 0;
k = 0;
long sum = 0;
while(k <= 7)
{
sum = pow(2,i) - 1;
for(j = 2;j < sum;j++)
{
if(i % j == 0)
{
break;
}
}
if(i == j)
{
for(j = 2;j < sum;j++)
{
if(sum % j == 0)
{
break;
}
}
if(j == sum)
{
k++;
printf("%ld\n",sum);
}
}
i++;
}
return 0;
}
结果:
10、对一个二维数组中的数据排序,方法如下:
将整个数组中值最小的元素所在行调整为数组第一行,
将除第一行外的行中最小元素所在行调整为第2行,
将除第1,2行外的行中最小值元素所在行调整为第3行,以此类推
/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
#include <stdio.h>
#include <time.h>
int main()
{
int a[5][5];
int b[5];
int i,j,m;
int temp;
int k = 0;
srand( time(NULL));
for(i = 0;i < 5;i++)
{
for(j = 0;j < 5;j++)
{
a[i][j] = rand() % 100;
printf("%4d",a[i][j]);
}
printf("\n");
}
printf("\n\n");
for(i = 0;i < 5;i++)
{
b[i] = a[i][0];
for(j = 0;j < 5;j++)
{
if(b[i] > a[i][j])
{
b[i] = a[i][j];
}
}
}
for(i = 0;i < 4;i++)
{
k = i;
for(j = i + 1;j < 5;j++)
{
if(b[k] > b[j])
{
k = j;
}
}
if(k != i)
{
temp = b[k];
b[k] = b[i];
b[i] = temp;
for(m = 0;m < 5;m++)
{
temp = a[i][m];
a[i][m] = a[k][m];
a[k][m] = temp;
}
}
}
for(i = 0;i < 5;i++)
{
for(j = 0;j < 5;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
return 0;
}
结果: