C语言循环程序的一些初级编程题目

简介: C语言循环程序的一些初级编程题目

写循环时,小心避免死循环,循环能够处理有规律的数据,while循环、do while 循环、 for循环。

1.计算n的阶乘

#include<stdio.h>
void main() {
  int n, sum = 1,i;
  printf("please input n of value:");
  scanf("%d", &n);
  for (i = 1;i <= n;i++) {
    sum *= i;
  }
  printf("%d的阶乘为%d",n,sum);
}

2.求1到100之间的奇数之和、偶数之和

#include<stdio.h>
void main() {
  int even = 0, odd = 0;
  int i;
  for (i = 1;i <= 100;i++) {
    if (i % 2 == 0) {
      even +=  i;
    }
    else {
      odd += i;
    }
  }
  printf("奇数之和为%d,偶数之和为%d", odd, even);
}

3.输入一行字符,统计其中的英文字母、数字、空格和其他字符个数

#include<stdio.h>
void main() {
  int count = 1;
  printf("please input string:");
  char c;
  c = getchar();
  while ((c = getchar()) != '\n') {
    count++;
  }
  printf("输入的字符个数为:%d", count);
}

4.用循环语句编写求的程序

#include<math.h>
#include<stdio.h>
void main() {
  int i, sum = 0;
  for (i = 0;i <= 10;i++) {
    sum += pow(2, i);
  }
  printf("2^0+……+2^10 = %d", sum);
}

5.求

#include<stdio.h>
void main() {
  //sum = 1省略了1!
  int i, j, sum = 1, value = 1;
  for (i = 2;i < 10;i++) {
    for (j = 1;j <= i;j++) {
      value *= j;
    }
    sum += value;
    value = 1;
  }
  printf("值为:%d", sum);
}

#include<stdio.h>
void main() {
  int count = 1;
  float sum = 0;
  float i = 2, j = 1,tmp = 0;
  while (1) {
    if (count == 20) {
      break;
    }
    count++;
    sum += i / j;
    tmp = i;
    i += j;
    j = tmp;
  }
  printf("第20个数的分子为:%0.1f,分母为:%0.1f\n", i, j);
  printf("sum值为:%0.2f", sum);
}

7. 任意一个数,打印出它们中的最大数、最小数。测试数据:

①1.-12.20,30,-5,-23,33,125,200,-100

②0,10,3,1,5,6,-10,90,9,-4

③3 12,13,14,15,10,- 10,-11,-12,-9,9

#include<stdio.h>
void main() {//用冒泡排序解决问题
  int a[10], s;
  printf("请输入10个整数:\n");
  for (s = 0;s < 10;s++) {
    scanf("%d", &a[s]);
  }
  int i, j, arrIntLength = sizeof(a) / sizeof(a[0]);
  //lastExchangeIndex记录最后一次交换的位置
  int lastExchangeIndex = 0;
  //sortBorder无序数列的边界,每次比较只需要比到这里为止
  //作用:减少一趟中的次数
  int sortBorder =  arrIntLength - 1;
  for (i = 0;i < arrIntLength - 1;i++) {
    int isSorted = 1;//有序标记,每一轮的初始都是true也就是1
    for (j = 0;j < sortBorder;j++) {
      if (a[j + 1] < a[j]) {
        isSorted = 0;
        int t = a[j];
        a[j] = a[j + 1];
        a[j + 1] = t;
        lastExchangeIndex = j;
      }
    }
    sortBorder = lastExchangeIndex;
    //作用:减少总趟数
    if (isSorted) {
      break;
    }
  }
  printf("最小值为:%d,最大值为:%d", a[0], a[9]);
}

#include<stdio.h>
void main() {
  int x;
  printf("please input x of int:");
  scanf("%d", &x);
  int j;
  for (j = 2;j <= x / 2;j++) {
    if (x % j == 0) {
      printf("该%d不是素数!", x);
      break;
    }
  }
  if (x == 1) {
    printf("1不是素数!");
  }
  //例如x=13,x/2 == 6 ,j == 7
  //例如x=2,x/2 == 1,j == 2
  else if (x != 1 && j > x / 2){
    printf("该数%d为素数", x);
  }
}

#include<stdio.h>
void main() {
  int j, i, sum = 2;
  int isTrue = 1;
  printf("%d\n", sum);
  for (i = 3;i <= 100;i++) {
    isTrue = 1;
    for (j = 2;j < i;j++) {
      if (i % j == 0) {
        isTrue = 0;
        break;
      }
    }
    if (isTrue) {
      printf("%d\n", i);
    }
  }
}

#include<stdio.h>
void main() {
  int j, i, sum = 1;//1不是素数
  int isTrue = 0;
  for (i = 3;i <= 100;i++) {
    isTrue = 0;
    for (j = 2;j < i;j++) {
      if (i % j == 0) {
        isTrue = 1;
        break;
      }
    }
    if (isTrue) {
      sum += i;
    }
  }
  printf("1-100之间所有非素数的和:%d", sum);
}

11. 输入两个正整数 m和 n,求其最大公约数和最小公倍数。

提示:求 m,n的最大公约数:首先将m除以 n(m>n)得余数 R,再用余数R 去除原来的除数,得新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。求 m和 n的最小公倍数:m和n的积除以 m和 n的最大公约数。

测试数据:m=12,n=24   ; m=100,n=300

#include<stdio.h>
void main() {
  //greatest为最大公约数,Least为最小公倍数
  int m, n, r, greatest, least;
  printf("please input n and m:");
  scanf("%d,%d", &n, &m);
  r = m % n;
  while (1) {
    r %= n;
    if (r == 0) {
      greatest = n;
      break;
    }
  }
  least = m * n / greatest;
  printf("%d和%d的最大公约数是:%d\n", m, n, greatest);
  printf("%d和%d的最小公倍数是:%d", m, n, least);
}

12 .打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1^3+5^3+3^3(要求分别用一重循环和三重循环实现)

一重循环
#include<stdio.h>
#include<math.h>
//一重循环:那么就一个数转为位
void main() {
  //a,b,c分别代表了百位,十位和个位
  int a, b, c, i, count = 0;
  for (i = 100; i <= 999;i++) {
    a = i / 100;
    b = i / 10 % 10;
    c = i % 10;
    if ((pow(a, 3) + pow(b, 3) + pow(c, 3)) == i) {
      count++;
      printf("第%d朵水仙花为:%d\n", count, i);
    }
  }
}
三重循环
#include<stdio.h>
#include<math.h>
//三重循环:那么就从位往一个数去组合
void main() {
  int a, b, c, count = 0, value = 0;
  for (a = 1;a <= 9;a++) {
    for (b = 0;b <= 9;b++) {
      for (c = 0;c <= 9;c++) {
        value = a * 100 + b * 10 + c;
        if ((pow(a, 3) + pow(b, 3) + pow(c, 3)) == value) {
          count++;
          printf("第%d朵水仙花为:%d\n", count,value);
        }
      }
    }
  }
}
相关文章
|
6天前
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
182 88
|
7天前
|
C语言
【C语言基础考研向】08判断语句与循环语句
本文介绍了C语言中的关键编程概念:首先解析了关系表达式与逻辑表达式的优先级及计算过程;接着详细说明了`if-else`语句的使用方法及其多分支和嵌套应用;然后讲解了`while`循环与`for`循环的语法和注意事项;最后介绍了`continue`和`break`语句在控制循环中的作用和示例代码。
|
12天前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
27 10
|
10天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
16天前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
16天前
|
Linux C语言
C语言 多进程编程(四)定时器信号和子进程退出信号
本文详细介绍了Linux系统中的定时器信号及其相关函数。首先,文章解释了`SIGALRM`信号的作用及应用场景,包括计时器、超时重试和定时任务等。接着介绍了`alarm()`函数,展示了如何设置定时器以及其局限性。随后探讨了`setitimer()`函数,比较了它与`alarm()`的不同之处,包括定时器类型、精度和支持的定时器数量等方面。最后,文章讲解了子进程退出时如何利用`SIGCHLD`信号,提供了示例代码展示如何处理子进程退出信号,避免僵尸进程问题。
|
16天前
|
消息中间件 Unix Linux
C语言 多进程编程(五)消息队列
本文介绍了Linux系统中多进程通信之消息队列的使用方法。首先通过`ftok()`函数生成消息队列的唯一ID,然后使用`msgget()`创建消息队列,并通过`msgctl()`进行操作,如删除队列。接着,通过`msgsnd()`函数发送消息到消息队列,使用`msgrcv()`函数从队列中接收消息。文章提供了详细的函数原型、参数说明及示例代码,帮助读者理解和应用消息队列进行进程间通信。
|
16天前
|
缓存 Linux C语言
C语言 多进程编程(六)共享内存
本文介绍了Linux系统下的多进程通信机制——共享内存的使用方法。首先详细讲解了如何通过`shmget()`函数创建共享内存,并提供了示例代码。接着介绍了如何利用`shmctl()`函数删除共享内存。随后,文章解释了共享内存映射的概念及其实现方法,包括使用`shmat()`函数进行映射以及使用`shmdt()`函数解除映射,并给出了相应的示例代码。最后,展示了如何在共享内存中读写数据的具体操作流程。
|
16天前
|
消息中间件 Unix Linux
C语言 多进程编程(二)管道
本文详细介绍了Linux下的进程间通信(IPC),重点讨论了管道通信机制。首先,文章概述了进程间通信的基本概念及重要性,并列举了几种常见的IPC方式。接着深入探讨了管道通信,包括无名管道(匿名管道)和有名管道(命名管道)。无名管道主要用于父子进程间的单向通信,有名管道则可用于任意进程间的通信。文中提供了丰富的示例代码,展示了如何使用`pipe()`和`mkfifo()`函数创建管道,并通过实例演示了如何利用管道进行进程间的消息传递。此外,还分析了管道的特点、优缺点以及如何通过`errno`判断管道是否存在,帮助读者更好地理解和应用管道通信技术。
|
16天前
|
Linux C语言
C语言 多进程编程(七)信号量
本文档详细介绍了进程间通信中的信号量机制。首先解释了资源竞争、临界资源和临界区的概念,并重点阐述了信号量如何解决这些问题。信号量作为一种协调共享资源访问的机制,包括互斥和同步两方面。文档还详细描述了无名信号量的初始化、等待、释放及销毁等操作,并提供了相应的 C 语言示例代码。此外,还介绍了如何创建信号量集合、初始化信号量以及信号量的操作方法。最后,通过实际示例展示了信号量在进程互斥和同步中的应用,包括如何使用信号量避免资源竞争,并实现了父子进程间的同步输出。附带的 `sem.h` 和 `sem.c` 文件提供了信号量操作的具体实现。