循环的题
来自未知的
1.编写一个计算整数位数的程序
结果如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int x, i = 0;
scanf("%d", &x);
while (x)
{
x /= 10;
i++;
}
printf("这个数是 %d 位数\n", i);
return 0;
}
2.编写一个输出乘法口诀表的程序
结果如下:
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%2d ", j, i, i * j);
}
printf("\n");
}
return 0;
}
九九乘法表分析:
左下右下三角形
将重复的数字删掉
如果是左下,则就是11
11
21 22 (23) (24)
31 32 33 (34)
。。。
括号中的都省略
i*j都是就j<=i
来自新希望的题
#include <stdio.h>
#include <string.h>
int main(){
int i,k,a[10],p[3];
k=5;
for(i=0;i<10;i++)a[i]=1;
for(i=0;i<3;i++)p[i]=a[i*(i+1)];
for(i=0;i<3;i++)k=k+p[i]+2;
printf("%d\n",k);
return 0;
}
考点:数组,循环
分析:
第一步,初始化
第二步,三个循环
第一个循环:分别执行十次,把a数组中的所有元素均赋值为:1;
第二个循环: 分别执行三次,把p数组中的所有元素均替换为a数组的值,则就是全部替换为1;
第三个循环: 分别执行三次, 把给k赋值,k+p[i]+2=>5+1+2 …… 分别每次+3;
注意:
第二个循环中,p[i]数组赋值的是a数组中的元素,这是个数组的写法,并不是一个计算的式子,因为a的所有元素都是1,所以i*(i+1)本质上不需要进行运算。
1.求序列 2/1,3/2,5/3,8/5,13/8,21/13,… 的前 20 项之和.
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
float fz = 2.0, fm = 1.0, sum = 0, t;
int i;
for (i = 0; i < 20; i++)
{
sum += fz / fm;
t = fz;
fz = fz + fm;
fm = t;
}
printf("%.2f\n", sum);
return 0;
}
**分析:**这个序列从2/1开始,后一项的分子按前一项的分子分母的和,后一项分母是前一项的分子,以此类推。
-
利用循环来遍历20项分数,注意,此时是分数的计算,数值为float,循环的控制变量用int
-
循环体中,利用临时变量来存放a的数值,因为下列计算,要覆盖掉a原本的值,所以用t来存放,计算完后,把t的值再赋值给b,从而提供下一次循环所需要的变量。
打印一个指向右边的箭头
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int i, k, j;
for (k=1;k<=4;k++)
{
for (i = 0; i <= k - 1; i++)
{
printf(" ");
}
for (j = 0; j < 5; j++)
{
printf("*");
}
printf("\n");
}
for (k = 3; k >= 1; k--)
{
for (i = 0; i <= k - 1; i++)
{
printf(" ");
}
for (j = 0; j < 5; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
2.求sum=1+12+123+1234+12345
#include <stdio.h>
int main() {
int i, t = 0, sum = 0;
for (i = 1; i < 6; i++)
{
t = i + t * 10;
sum += t;
printf("%d + %d", i, t); //此行代码非必要
}
printf(" = %d \n",sum);
return 0;
}
- 点是否在圆上:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <math.h>
double twoPointDistance(double x1, double y1, double x2, double y2) {
double deltaX = x2 - x1;
double deltaY = y2 - y1;
return sqrt(deltaX * deltaX + deltaY * deltaY);
}//点到点的距离,欧几里得公式
int main()
{ //n代表几个点,x,y代表变量坐标,x1,y1代表圆的坐标
int n, x, y, r, i, count = 0, x1, y1,arr[30],arrIndex=0;
double tempR;
printf("请输入一共有几个点\n");
scanf("%d", &n);
printf("请输入圆的坐标以及半径\n");
scanf("%d %d %d", &x1, &y1, &r);
for (i = 0; i < n; i++)
{
printf("请输入第%d个点的坐标\n", i + 1);
scanf("%d %d", &x, &y);
tempR= twoPointDistance(x1, y1, x, y);
if (tempR <= r)
{
count++;
arr[arrIndex] = x;
arr[arrIndex + 1] = y;
arrIndex += 2;
}
}
arrIndex = 0;
printf("一共有%d个点在圆上\n", count);
printf("它们的坐标是\n");
for (i = 0; i < count; i++)
{
printf("%d %d\n", arr[arrIndex], arr[arrIndex + 1]);
arrIndex += 2;
}
return 0;
}
- 5x5二维数组赋值1-25,把主副对角线上下三角的数值,都打印出来,要求格式化输出
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a[5][5], number = 1, i, j, k, space = 4;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
a[i][j] = number++;
}
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
printf("%-3d", a[i][j]);
}
printf("\n");
}
printf("\n主对角线下三角形\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j <= i; j++)
{
printf("%-3d", a[i][j]);
}
printf("\n");
}
printf("\n副对角线上三角形\n");
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5 - i; j++)
{
printf("%-3d", a[i][j]);
}
printf("\n");
}
printf("\n副对角线下三角形\n");
for (i = 0; i < 5; i++)
{
for (k = 0; k < space; k++)
{
printf(" ");
}
space--;
for (j = 4-i; j <5; j++)
{
printf("%-3d", a[i][j]);
}
printf("\n");
}
space = 0;
printf("\n主对角线上三角形\n");
for (i = 0; i < 5; i++)
{
for (k = 0; k < space; k++)
{
printf(" ");
}
space++;
for (j = i; j < 5; j++)
{
printf("%-3d", a[i][j]);
}
printf("\n");
}
return 0;
}
真题链接
21.程序填空题(2020)
21.已知函数Fun21的部分代码如下所示,其功能是:从低位开始取出长整型变量x中奇数位上的数字,并构成一个数返回。例如,若x的值为1234567,则返回值为1357,请在空格处补充程序。
long Fun21(long x)
{
long res, base=10;
while(x>0)
{
x=x/100;
res=x%10*base+res;
}
return res;
}
完整代码:
#include <stdio.h>
long Fun21(long x)
{
long res, base=10;
res=x%10;
while(x>0)
{
x=x/100;
res=x%10*base+res;
base=base*10;
}
return res;
}
int main()
{
long n;
printf("请输入一个整数:");scanf("%d",&n);
printf("%d奇数位上的数字组成的整数为:%d\n",n,Fun21(n));
return 0;
}
100以内的素数
方法一:(自己的布尔类型)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int i, n, sum = 0,myBool;
for (n = 2; n <= 100; n++)
{
myBool = 1;
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
myBool = 0; //如果找到可以被n整除的i,则n不是素数
break;
}
}
if (myBool) {
sum += n;
}
}
printf("%d\n", sum);
return 0;
}
方法二:(最优解)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int i, n, sum = 0;
for (n = 2; n <= 100; n++) { // 遍历2到100之间的所有数
for (i = 2; i < n; i++) { // 检查n是否能被2到n-1之间的任何数整除
if (n % i == 0) {
break; // 如果n能被i整除,则跳出内部循环,n不是素数
}
}
if (i == n) { // 如果内部循环正常结束(即没有找到能整除n的i),则n是素数
sum += n; // 将n加到总和中
}
}
printf("100以内的素数和是: %d\n", sum); // 打印总和
return 0;
}
打印素数和总和
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int num, i,j=0,sum=0;
for (num = 2; num <= 100; num++)
{
for (i = 2; i < num; i++)
{
if (num % i == 0)
break;
}
if (num == i)
{
printf("%3d", num);
sum += num;
j++;
if (j % 5 == 0)
{
printf("\n");
}
}
}
printf("100以内素数总和为 %d\n", sum);
return 0;
}
方法三(函数):
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int isSu(int n)
{
int i;
for (i = 2; i < n; i++)
if (n % i == 0)
return 0;
return 1;
}
int main() {
int i, sum = 0;
for (i = 2; i <= 100; i++)
if (isSu(i))
sum += i;
printf("%d", sum);
return 0;
}
最大公约数和最小公倍数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int m, n, temp, r, c;
scanf("%d %d", &m, &n);
if (m < n)
{
temp = n;
n = m;
m = temp;
}
c = m * n;
while (n) {
r = m % n;
m = n;
n = r;
}
printf("最大公约数:%d\n", m);
printf("最小公倍数:%d\n",c / m );
return 0;
}
库课
p45 四-2 编写程序,输入数字(0<N<10),输出金字塔,如输入4,则输出以下例子

#include <stdio.h>
int main() {
int i, j, k, num = 1, N = 0;//ijk三个循环下标,num是每行的数字
scanf("%d", &N);
int space = N, cols = 1; //space控制空格打印的数量,cols控制数字的列数
if (N > 0 && N < 10)
{
for (i = 1; i <= N; i++)
{
for(k=1;k<space;k++)
{
printf(" ");
}//内层有两个同级别循环,第一个控制空格的打印,第二个控制数字的打印
for (j = 1; j <= cols; j++)
{
printf("%d ", num);
}
printf("\n");
cols++;
space--;
num++;
}
}
return 0;
}
N<10),输出金字塔,如输入4,则输出以下例子**
[外链图片转存中…(img-GrniSAkH-1741884203477)]
#include <stdio.h>
int main() {
int i, j, k, num = 1, N = 0;//ijk三个循环下标,num是每行的数字
scanf("%d", &N);
int space = N, cols = 1; //space控制空格打印的数量,cols控制数字的列数
if (N > 0 && N < 10)
{
for (i = 1; i <= N; i++)
{
for(k=1;k<space;k++)
{
printf(" ");
}//内层有两个同级别循环,第一个控制空格的打印,第二个控制数字的打印
for (j = 1; j <= cols; j++)
{
printf("%d ", num);
}
printf("\n");
cols++;
space--;
num++;
}
}
return 0;
}
3657

被折叠的 条评论
为什么被折叠?



