难过!!!今天又是作业写不出来的一天!终于开始看指针了,一直拖着,要挤出时间赶紧把指针看完。
今天写的一些题目,查阅资料后做出来的,要多复习复习!
1.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#include <stdio.h>
int main()
{
int i,j,k;
int num=0;/*三为数个数计数器*/
for(i = 1;i <= 4;i++)
{
for(j = 1;j <= 4;j++)
{
for(k = 1;k <= 4;k++)/*三为数的每一位都可以是1~4其中一个*/
{
if(i != j && i != k && j != k)/*三个数不能重复*/
{
printf(" %3d",100*i+10*j+k);
num++;
}
}
}
}
putchar('\n');
printf("有%d个这样的数\n",num);
return 0;
}
2.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h>
#include<math.h>
int main()
{
int i;
int x,y;/*存放i+100和i+268开根厚的值*/
for(i = 0;i < 100000;i++)
{
x = sqrt(i + 100);
y = sqrt(i + 268);
/*i是整型,如果x和y的平方刚好是i+100,i+268,说明x,y也是整数*/
if((x * x == i + 100) && (y * y == i + 268) )
{
printf("%d\n",i);
}
}
return 0;
}
3.将一个正整数分解质因数。例如:输入90,打印出90=233*5。
#include <stdio.h>
int main()
{
int n;
int i;
printf("请输入一个整数:");
scanf("%d",&n);
printf("%d=",n);
for(i = 2;n >= 2 && n < 100000;)
{
if(n % i == 0)
{
printf("%d",i);
n = n / i;
if(n != 1)
{
putchar('*');
}
}
else
{
i++;
}
}
putchar('\n');
return 0;
}
4.输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>
int main()
{
int m,n;
int mul;
int max,min;
int tmp=0;
printf("请输入两个数:");
scanf("%d%d",&m,&n);
min = (m<n) ? m : n;/*比较两数的大小*/
max = (m>n) ? m : n;
mul = m * n;
if(max % min == 0)/*max正好是min的倍数*/
{
printf("最大公因数是:%d最小公倍数是:%d\n",min,max);
}
while(max % min != 0)/*举例 24和18 24%18=6 18%6=0 取余数直到为0
此时最大公因式是6 最小公倍数是24*18/6*/
{
tmp = min;
min = max % min;
max = tmp;
printf("最大公因数是:%d最小公倍数是:%d\n",min,mul / min);
}
return 0;
}
5.写一个函数,将字符串转换成带符号整型数据,注意判断字符串长度
如:“-123134” -123134 , “123134” 123134
#include <stdio.h>
int change(char *str)
{
int i = 1;
int num = 0;
while(*str != '\0')
{
if(*str == '-')
{
i = -1;
}
if(*str >= '0' && *str <= '9')
{
num = num * 10 +(*str - '0');
}
str++;
}
return num*i;
}
int main()
{
char str[128];
printf("输入字符串:");
fgets(str,128,stdin);
printf("转换之后:%d\n",change(str));
return 0;
}
6.输入一行字符,分别统计出其中英文字母、空格、数字的个数。
#include <stdio.h>
void count(const char *str)
{
int word_cnt = 0;
int num_cnt = 0;
int space_cnt = 0;
while(*str != '\0')
{
if((*str >='a' && *str <= 'z')|| (*str >= 'A' && *str <= 'Z'))
{
word_cnt++;
}
else if(*str >='0' && *str <='9')
{
num_cnt++;
}
else if(*str == ' ')
{
space_cnt++;
}
str++;
}
printf("字母:%d数字:%d空格:%d\n",word_cnt,num_cnt++,space_cnt++);
}
int main()
{
char a[100];
printf("请输入一行字符串:");
fgets(a,100,stdin);
count(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 i,j;
int a[20][20]={0};
int num = 1;
int n;
printf("输入一个数:");
scanf("%d",&n);
int m = n;
for(i = 0;i <= n;i++)
{
j = i;
while(j < m - i)
{
a[i][j++] = num++;
}
int tmp = i + 1;
j = m - 2 - i;
while(j >= i)
{
a[tmp++][j--] = num++;
}
j = i;
tmp = m - 2 - i;
while(tmp > i)
{
a[tmp--][j] = num++;
}
m = m - 1;
}
int k;
for(i = 0;i < n;i++)
{
for(k = 0;k < n - i;k++)
{
printf("%4d",a[i][k]);
}
putchar('\n');
}
return 0;
}
- 输入年份、和这一年的第N天,最后算出这一天是这一年的几月几日。(区分闰年)
#include <stdio.h>
#define N 12
int main()
{
int date[2][12] = {{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
int year,month,day;
int x,t;
int i;
printf("输入年份和天数:");
scanf("%d%d",&year,&x);
t = x;/*下面的循环中x的值发生改变,先用一个变量存一下x的值最后输出*/
if((year % 4 == 0 && year % 100 !=0)||(year % 400 == 0))/*判断闰年*/
{
for(i = 0;i < N;i++)
{
x = x - date[1][i];/*x依次减去每个月的月份,直到满足if条件*/
if(x > 0 && x < 32)
{
break;
}
}
}
else
{
for(i = 0;i < N;i++)
{
x = x - date[0][i];
if(x > 0 && x < 32)
{
break;
}
}
}
month = i + 1 + 1;/*i从0开始所以多加一个1*/
day = x;
printf("%d年的第%d天是%d年%d月%d日",year,t,year,month,day);
return 0;
}
9.取十个1-100的随机整数,然后倒序打印出来。(通过指针,而不是数组下标)
#include <stdio.h>
#include<time.h>
#include<stdlib.h>
int random_100(void)
{
int a;
srand((unsigned)time(NULL));
a = rand() % 100 + 1;
return a;
}
int main()
{
int *p;
int *min;
int tmp;
int num[10];
int i;
int j;
for(i=0;i<10;i++)
{
num[i] = random_100();
sleep(1);
}
for(i=0;i<9;i++)
{
p = num;
p++;
min = num;
for(j = 0;j < 9 - i;j++)
{
if((*min)<(*p))
{
tmp = *min;
*min = *p;
*p = tmp;
}
p++;
min++;
}
}
p = num;
for(i = 0;i < 10;i++)
{
printf("result is : %d\n",*p);
p++;
}
return 0;
}
10.通过随机函数获取到26个小写英文字母,存储到数组里并小写字母顺序打印出来。
#include <stdio.h>
#include<time.h>
#define N 26
int main()
{
srand(time(0));
int i,j,t;
char str[N];
for(i = 0;i < N;i++)/*随机生成26个字母*/
{
str[i] = rand() % N + 'a';
}
for(i = 0;i < N;i++)
{
printf("%4c",str[i]);/*因为输出单个字符,用%c*/
}
putchar('\n');
for(i = 0;i < N - 1;i++)/*冒泡排序法*/
{
for(j = 0;j < N - i - 1;j++)
{
if(str[j] > str[j + 1])
{
t = str[j];
str[j] = str[j + 1];
str[j + 1] = t;
}
}
}
printf("result is :");/*放在循环外面就不会打印26次*/
for(i = 0;i < N;i++)
{
printf("%4c",str[i]);
}
putchar('\n');
return 0;
}