【萌新的c语言学习练习 1】
练习
题目 1 100内取奇数
void test()
{
static a = 1;
if (a % 2 == 1)
printf("值为:%d\n", a);
a++;
}
int main()
{
int i=1 ;
while (i < 101)
{
test();
i++;
}
return 0;
}
优化做法
int main()
{
int i = 1;
while (i <= 100)
{
if (i % 2 == 1)
printf("%d\n", i);
i++;
}
return 0;
}
题目2 n的阶乘练习
int main()
{
int i = 0;
int n = 0;
int sum = 1;
scanf( "%d", & n);//scanf里面不需要写中文
for (i = 1; i <= n ; i++)
{
sum = i * sum;
}
printf("结果是:%d\n", sum);
return 0;
}
1!+2!+…
int main()
{
int i = 0;
int n = 0;
int sum = 1;
int z = 0;
//int y = 0;
//for(z=0;z<10;)
scanf( "%d", & n);//scanf里面不需要写中文
for (i = 1; i <= n ; i++)
{
sum = i * sum;
z = sum + z;
}
printf("结果是:%d\n", sum);
printf("结果是:%d\n", z);
return 0;
}
题目3 二分法查找数
//二分查找算法
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//先列举出一个想要操作的数组
int k = 17; //设置想要找到的数字
int left = 0;//左下标等于0
int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
int right = sz - 1;//右下标
上述操作设置左右下表
while (left<=right)
{
int mid = (left + right) / 2;
int是整型相对来说这个是较低的数字,此处确定中间量
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else {
printf("zhaodao下表是%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到\n");
}
return 0;
}
题目4 汇聚效果welcome
//一个汇聚效果的welcome
//###########
//W#########!
//we#######!!
//wel########
//welc#######
//welco######
//如此该怎么办
int main()
{
char arr1[] = "welcome to QD !!!!!" ;
char arr2[] = "###################" ;
int left = 0;
int sz= sizeof(arr1) / sizeof(arr1[0]);
int right = sz - 2;//为什么减2字符串的记忆点
///char ac="abc" 为a b c \0 所以要减2
//或者可以简单的表示成int right=strlen(arr1)-1 ;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
left++;
right--;
printf("结果是:%s\n", arr2);
}
return 0;
}
题目5 三次密码实验
int main()
{
int a = 0;
char arr[] = { 0 };
for (a = 0; a < 3; a++)
{
printf("输入密码:");
scanf("%s", arr);
if (strcmp(arr, "123456")==0)//等号不能用来比较两个字符串一样,应该用库函数
//strcmp 函数
{
printf("恭喜你解锁成功");
break;
}
else
{
printf("恭喜你解锁shibai");
}
}
if (a == 3)
{
printf("爆炸\n");
}
return 0;
}
提示!!!!!!!!!!!
scanf后面如果跟字符串的话不一定需要加&,但是跟int a=0 ;这种一定要加上&取地址符号
题目6 辗转相除法求最大公约数
辗转相除法求最大公约数
int main()
{
int m = 24;
int n = 18;
int r = 0;
while (m % n)
{
r = m % n;
m = n;
n = r;
}
printf("%d", n);
return 0;
}
题目7 判断是否素数
//判断是否是素数
///试除法,产生2到i-1个数
int main()
{
int i = 0;
for (i = 100; i < 200; i++)
{
int j = 0;
for (j = 2; j < i ; j++)
{
if (i%j == 0)
{
break;
}
}
if (j == i)
{
printf("%d\n", i);
}
}
return 0;
}
/举个例子,16=2x8=4x4,一个数等于a乘b,a与b必然有一个数小于等于开方数
//所以上面可以优化到开方数
///还有注意点偶数也不可能是素数,所以我们可以从101开始,i+=2每次加2
题目八 计算
///题目计算1/1-1/2+1/3..........=1/100 的结果
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for (i = 1; i <= 100; i++)
{
sum = sum +flag* (1.0 / i);
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
题目九 找最大值
///找到最大值
int main()
{
int i = 0;
int arr[] = { 1,2,3,4,5,6,7,8,11,10 };
int max = arr[0];
int n = sizeof(arr) / sizeof(arr[0]); //数量
for (i = 0; i < n; i++)
{
if (max <= arr[i])
{
max = arr[i];
}
}
printf("最大值是:%d", max);
return 0;
}
题目十 输出乘法口诀表
在屏幕上输出一个乘法口诀表
int main()
{
int i = 0;
int sum = 0;
for (i = 1; i < 10; i++)
{
int j = 0;
for (j = 1; j < 10; j++)
{
sum = i * j;
printf("%d*%d=%d\n",i,j, sum);
}
}
return 0;
}
自己写的乘法口诀表
//可以优化一下
优化
int main()
{
int i = 0;
for (i = 1; i < 10; i++)
{
int j = 1;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d", i, j, i * j);
}
//为什么用%-2d就是调整间距用的为了对齐好看
printf("\n");
}
return 0;
}
.