C语言习题1.0
C语言习题-CSDN博客
目录
C语言习题1.0
C语言习题-CSDN博客
找一个数字的连续因子
求N个分数的和
正整数A+B
函数
预处理
文件处理
操作符
找一个数字的连续因子
//找连续因子,及其个数
int main()
{
int a;
scanf("%d", &a);
int num = 0; //储存连续因子的个数
int min = 0; //储存连续因子的起始位置
int m;
//从i开始向后找连续因子
for(int i=2;i<sqrt(a);i++)
{
int t = a;
for (m = i; m < a; m++)
{
if (t % m == 0)
t /= m;
else
break;
}
if (m - i > num)
{
num = m - i;
min = i;
}
}
printf("%d\n", num);
for (int i = min; i < min + num - 1; i++)
printf("%d*", i);
printf("%d", min + num - 1);
return 0;
}
求N个分数的和
求N个分数的和,结果以整数和真分数的形式打印
//求N个分数的和
int gys(int x, int y)
{
int t = x % y;
while (t)
{
x = y;
y = t;
t = x % y;
}
return y;
}
int main()
{
int a, b;
int num;
scanf("%d", &num);//读取有几个分数
scanf("%d/%d", &a, &b);//先读取第一个分数
int fz = 0, fm = 0;
for (int i = 1; i < num; i++)
{
int c, d;
scanf("%d/%d", &c, &d); //读取第二个分数
//求两个分母的最大公因数
int gony = gys(b, d);
//求最小公倍数即分母
fm = b * d / gony;
//将分子通分
fz = a * fm / b + c * fm / d;
a = fz, b = fm;
}
//此时所有的分子和分母多完成相加了
//对分式进行化简,先找到最大公因数
int t = gys(fz, fm);
if (t)
{
fz /= t;
fm /= t;
}
if (fz % fm == 0) //能被整除
printf("%d\n", fz / fm);
else if (fz / fm == 0) //是一个真分式
printf("%d/%d\n", fz, fm);
else //是一个假分数
printf("%d %d/%d", fz / fm, fz%fm, fm);
return 0;
}
正整数A+B
//整数A+B
int main()
{
char put[500];
gets(put);
int m1 = 1; //用m1来记录数字是否有效
int m2 = 1;
int t1 = 0, t2 = 0; // 用t1和t2来保留数字
int j=0;
int num = strlen(put);
//查找第一个数字
for (int i = 0; i < num; i++)
{
if (put[i] == ' ')//如果等于空格
{
//首字符是空格则m1为0,即A为无效数字
if (i == 0)
{
m1 = 0;
}
j = i + 1; //第二个数字要从i+1开始查找
break;
}
else if (put[i] >= '0' && put[i] <= '9')
{
t1 = t1 * 10 + put[i] - '0';
}
else //其他情况就是包含无效字符,则A为无效数字
{
m1 = 0;
}
}
//查找第二个数字
for (int i = j; i < num; i++)
{
if (put[i] >= '0' && put[i] <= '9')
t2 = t2 * 10 + put[i] - '0';
else
{
m2 = 0;
break;
}
}
//打印
//先答应A
if (m1 == 0 || t1 < 1 || t1>1000)
printf("? + ");
else
printf("%d + ", t1);
//再打印B
if (m2 == 0 || t2 < 1 || t2>1000)
printf("? = ");
else
printf("%d = ", t2);
//打印结果
if ((m1 == 0 || t1 < 1 || t1>1000) || (m2 == 0 || t2 < 1 || t2>1000))
printf("?");
else
printf("%d", t1 + t2);
return 0;
}
函数
(C语言)函数-CSDN博客
1)函数的定义可以放在任意位置,函数的声明必须放在函数使用之前;
2)自定义函数具有高内聚低耦性:函数与函数之间的联系应该尽量小,函数内应尽量少的使用全局变量;
3)使用指针访问的时候,char*一次访问一个字节,short*一次访问两个字节;
4)在打印的时候,%d一次读取四个字节;%lld和%llx等整形即%f,%lf一次读取8个字节;
5)C语言中一个变量可以被多次定义,在不同函数中;
6)将14.99四舍五入为15————printf("%.0f",14.99);
预处理
预处理详解-CSDN博客
1)#define宏定义;
2)#if,#ifdef,#ifndef,#else,#elif,除此之外还有#if defined ....的用法。都属于条件编译指令。#pragme是一个比较复杂的预编译指令;
3)ifndef,define,endif是用来解决同一文件重复包含相同文件的;
4)预处理只会处理#开头的语句,编译阶段只校验语法,链接时才会找实体。
文件处理
(C语言)文件操作-CSDN博客
1)文件名可以不包含后缀名,后缀名决定了文章的打开方式;
2)realloc函数可调整动态申请空间的大小,可大可小;
操作符
(C语言)操作符(全网最全,最详细)_c语言操作符大全-CSDN博客
1)用n|(n+1)来计算一个数二进制中0的个数,n&(n-1)来计算一个数中二进制中1的个数;
2)==的优先级比=高;
3)注意是传值还是传址;
4)new和delete成对使用,malloc和free成对使用;
5)字符常量用' ',字符串用'' '';
6)12a315156,在用%3d读取12a的时候,a是无效数字,不会被读取,但是也不会被舍去,会保留下来让下一个读取指令读取;
7)[ ]的优先级比*高;
8)getchar不像scanf一样,getchar会读取回车;