1、什么是控制结构?在C语言中有哪几种控制结构?
答:控制结构是指用来控制程序执行流程的语句;在C语言中有三种控制结构:顺序结构、选择结构和循环结构。
2、if-else语句的一般形式是什么?如何使用if-else语句实现多分支选择?
答:if-else语句的一般形式是:
if (条件表达式)
语句1;
else
语句2;
如果条件表达式为真,执行语句1;否则执行语句2。
可以使用多个if-else语句嵌套实现多分支选择,例如:
if (条件表达式1)
语句1;
else if (条件表达式2)
语句2;
else if (条件表达式3)
语句3;
...
else
语句n;
3、switch-case语句的一般形式是什么?switch-case语句与if-else语句有什么区别和联系?
答:switch-case语句的一般形式是:
switch (整型表达式)
{
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
...
case 常量n:
语句n;
break;
default:
语句d;
}
根据整型表达式的值,匹配相应的常量,执行对应的分支,并跳出switch-case结构。如果没有匹配到任何常量,执行default分支(如果有)。switch-case与if-else的区别和联系如下:
A、switch-case只能用于整型表达式,而if-else可以用于任何类型的表达式。
B、switch-case只能进行相等性判断,而if-else可以进行任何关系判断。
C、switch-case更适合处理多个离散值的情况,而if-else更适合处理连续区间或复杂逻辑的情况。
D、switch-case可以通过break和default来控制分支跳转和缺省处理,而if-else需要通过嵌套和布尔运算符来实现类似功能。
4、什么是循环结构?在C语言中有哪几种循环结构?
答:循环结构是指重复执行一段代码直到满足某个条件为止;在C语言中有三种循环结构:while循环、do-while循环和for循环。
5、while循环的一般形式是什么?while循环的执行过程是怎样的?
答:while循环的一般形式是:
while (条件表达式)
{
循环体; // 可以包含多条或零条语句
}
while循环的执行过程是:先判断条件表达式是否为真,如果为真,则执行循环体,并返回判断条件表达式;如果为假,则跳出循环。
6、do-while循环的一般形式是什么?do-while循环与while循环有什么区别和联系?
答:do-while循环的一般形式是:
do
{
循环体; // 可以包含多条或零条语句
} while (条件表达式);
do-while循环与while循环的区别和联系如下:
A、do-while循环先执行一次循环体,再判断条件表达式是否为真;而while循环先判断条件表达式是否为真,再决定是否执行循环体。
B、do-while循环至少会执行一次循环体;而while循环可能一次都不会执行(当第一次就判断为假时)。
7、for循环的一般形式是什么?for循环的执行过程是怎样的?
答:for循环的一般形式是:
for (初始化; 条件; 更新)
{
循环体; // 可以包含多条或零条语句
}
for循环的执行过程是:先执行初始化语句,然后判断条件表达式是否为真,如果为真,则执行循环体,并执行更新语句,再返回判断条件表达式;如果为假,则跳出循环。
8、如何使用break和continue语句控制循环的流程?
答:break和continue语句可以用来控制循环的流程,具体如下:
A、break语句可以用来强制结束当前循环,跳出循环结构。
B、continue语句可以用来跳过当前循环的剩余部分,直接进入下一次循环。
9、以下代码段会输出什么结果?
int a = 10;
switch (a)
{
case 10:
printf("A");
case 11:
printf("B");
break;
case 12:
printf("C");
default:
printf("D");
}
答:以上代码段会输出ABD;因为switch-case结构中没有break语句,所以匹配到case 10后会继续执行后面的分支,直到遇到break或者结束为止。
10、以下代码段会输出什么结果?
int i = 1;
do
{
i++;
if (i % 2 == 0)
continue;
printf("%d ", i);
} while (i < 10);
答:以下代码段会输出3 5 7 9;因为do-while循环中有continue语句,所以当i为偶数时会跳过printf语句,只有当i为奇数时才会输出i的值。
11、如何使用嵌套if-else语句实现以下功能:输入一个成绩,如果大于等于90分,输出“A”;如果大于等于80分且小于90分,输出“B”;如果大于等于60分且小于80分,输出“C”;如果小于60分,输出“D”。
答:使用嵌套if-else语句实现以下功能的一种可能的代码如下:
#include <stdio.h>
int main()
{
int score;
printf("请输入一个成绩:");
scanf("%d", &score);
if (score >= 90)
printf("A\n");
else if (score >= 80)
printf("B\n");
else if (score >= 60)
printf("C\n");
else
printf("D\n");
return 0;
}
12、如何使用嵌套switch-case语句实现以下功能:输入两个整数a和b以及一个运算符op(+、-、*、/),根据运算符计算a和b的结果并输出。
答:使用嵌套switch-case语句实现代码如下:
#include <stdio.h>
int main()
{
int a, b, result;
char op;
printf("请输入两个整数和一个运算符(+、-、*、/):");
scanf("%d%d %c", &a, &b, &op);
switch (op)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
switch (b)
{
case 0:
printf("除数不能为0!\n");
return -1; // 异常退出
default:
result = a / b; // 整除
break;
}
break;
default:
printf("无效的运算符!\n");
return -1; // 异常退出
}
printf("%d %c %d = %d\n", a, op, b, result);
return 0;
}
13、如何使用嵌套for循环打印以下图形?
*
**
***
****
*****
答:使用嵌套for循环打印图形代码如下:
#include <stdio.h>
int main()
{
for (int i = 1; i <= 5; i++) // 外层控制行数
{
for (int j = 1; j <= i; j++) // 内层控制每行打印多少个*
{
printf("*");
}
printf("\n"); // 换行
}
return 0;
}
14、如何使用嵌套while循环打印以下图形?
*****
****
***
**
*
答:使用嵌套while循环打印以图形代码如下:
#include <stdio.h>
int main()
{
int i = 5; // 外层控制行数
while (i > 0)
{
int j = i; // 内层控制每行打印多少个*
while (j > 0)
{
printf("*");
j--;
}
printf("\n"); // 换行
i--;
}
return 0;
}
15、如何使用嵌套do-while循环打印以下图形?
*
***
*****
*******
*****
***
*
答:使用嵌套do-while循环打印图形代码如下:
#include <stdio.h>
int main()
{
int i = 1; // 外层控制行数
int flag = 1; // 标志变量,用来判断是增加还是减少*
do
{
int j = 5 - i; // 内层控制每行打印多少个空格
do
{
printf(" ");
j--;
} while (j > 0);
j = 2 * i - 1; // 内层控制每行打印多少个*
do
{
printf("*");
j--;
} while (j > 0);
printf("\n"); // 换行
if (i == 4) // 当i达到4时,改变标志变量的值,使得i开始减少
flag = -1;
i += flag; // 根据标志变量更新i的值
} while (i > 0); // 当i为0时,结束循环
return 0;
}
16、写一个程序,输入一个正整数n,判断n是否为素数(只能被1和自身整除的数)。
代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf("%d", &n); // 输入n的值
int flag = 1; // 标志变量,用来表示n是否为素数,初始为1
if (n == 1) // 如果n为1,特殊处理
flag = 0;
else
{
for (int i = 2; i <= sqrt(n); i++) // 循环从2到sqrt(n),检查是否有因子
{
if (n % i == 0) // 如果有因子,说明不是素数,改变标志变量并跳出循环
{
flag = 0;
break;
}
}
}
if (flag == 1) // 根据标志变量输出结果
printf("%d是素数\n", n);
else
printf("%d不是素数\n", n);
return 0;
}
17、写一个程序,输入一个正整数n,输出斐波那契数列(每项为前两项之和)的前n项。
代码如下:
#include <stdio.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf("%d", &n); // 输入n的值
int a = 1; // 存储第一项
int b = 1; // 存储第二项
int c; // 存储第三项及以后的项
for (int i = 1; i <= n; i++) // 循环输出前n项
{
if (i == 1 || i == 2) // 如果是第一或第二项,直接输出a或b的值
printf("%d ", a);
else
{
c = a + b; // 计算第三及以后的项为前两项之和
printf("%d ", c);
a = b; // 更新a和b的值,使得它们分别指向前两项
b = c;
}
}
printf("\n"); // 换行
return 0;
}
18、写一个程序,输入两个正整数m和n(m < n),求出m到n之间所有素数之和。
代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int m, n;
printf("请输入两个正整数(用空格隔开):");
scanf("%d %d", &m, &n); // 输入m和n的值
int sum = 0; // 存储素数之和,初始为0
for (int i = m; i <= n; i++) // 循环从m到n,检查每个数是否为素数
{
int flag = 1; // 标志变量,用来表示i是否为素数,初始为1
if (i == 1) // 如果i为1,特殊处理
flag = 0;
else
{
for (int j = 2; j <= sqrt(i); j++) // 循环从2到sqrt(i),检查是否有因子
{
if (i % j == 0) // 如果有因子,说明不是素数,改变标志变量并跳出循环
{
flag = 0;
break;
}
}
}
if (flag == 1) // 如果i是素数,累加到sum中
sum += i;
}
printf("%d到%d之间所有素数之和为%d\n", m, n, sum); // 输出结果
return 0;
}
19、写一个程序,输入三个整数a、b、c,按照从小到大的顺序输出它们。
代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
// 输入三个整数a、b、c
int a, b, c;
printf("请输入第一个整数: ");
scanf("%d", &a);
printf("请输入第二个整数: ");
scanf("%d", &b);
printf("请输入第三个整数: ");
scanf("%d", &c);
// 比较a和b,如果a大于b,则交换它们的值
if (a > b) {
int temp = a;
a = b;
b = temp;
}
// 比较b和c,如果b大于c,则交换它们的值
if (b > c) {
int temp = b;
b = c;
c = temp;
}
// 再次比较a和b,如果a大于b,则交换它们的值
if (a > b) {
int temp = a;
a = b;
b = temp;
}
// 输出结果
printf("从小到大的顺序是: %d %d %d\n", a, b, c);
return 0;
}
20、写一个程序,输入一个字符串s(不含空格),判断s是否为回文串(正反读都相同)。
代码如下:
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
// 输入一个字符串s(不含空格)
char s[100];
printf("请输入一个字符串: ");
scanf("%s", s);
// 获取字符串的长度
int len = strlen(s);
// 定义一个标志变量,初始为1
int flag = 1;
// 遍历字符串的前半部分,与后半部分对应的字符比较
for (int i = 0; i < len / 2; i++) {
// 如果发现不相等的字符,将标志变量设为0,并跳出循环
if (s[i] != s[len - 1 - i]) {
flag = 0;
break;
}
}
// 根据标志变量输出结果
if (flag == 1) {
printf("这是一个回文串\n");
} else {
printf("这不是一个回文串\n");
}
return 0;
}