C语言教程-C程序

C程序是面试中经常被问到的问题。这些程序可以问从基础,数组,字符串,指针,链表,文件处理等。让我们看看c程序的列表。
1) 费波纳契数列
不使用递归:
#include <stdio.h>
void printFibonacci(int n) {
int a = 0, b = 1, nextTerm;
for (int i = 1; i <= n; i++) {
printf("%d ", a);
nextTerm = a + b;
a = b;
b = nextTerm;
}
}
int main() {
int n;
printf("请输入项数: ");
scanf("%d", &n);
printFibonacci(n);
return 0;
}
使用递归:
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1)
return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
void printFibonacci(int n) {
for (int i = 0; i < n; i++) {
printf("%d ", fibonacci(i));
}
}
int main() {
int n;
printf("请输入项数: ");
scanf("%d", &n);
printFibonacci(n);
return 0;
}
2) 质数
#include <stdio.h>
int isPrime(int num) {
if (num <= 1)
return 0;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return 0;
}
return 1;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (isPrime(num))
printf("%d 是质数\n", num);
else
printf("%d 不是质数\n", num);
return 0;
}
3) 回文数
#include <stdio.h>
int isPalindrome(int num) {
int reverse = 0, temp = num;
while (temp != 0) {
reverse = reverse * 10 + temp % 10;
temp /= 10;
}
return reverse == num;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (isPalindrome(num))
printf("%d 是回文数\n", num);
else
printf("%d 不是回文数\n", num);
return 0;
}
4) 阶乘
#include <stdio.h>
int factorial(int n) {
if (n == 0)
return 1;
else
return n * factorial(n - 1);
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
printf("阶乘结果为: %d\n", factorial(num));
return 0;
}
5) 阿姆斯特朗数
#include <stdio.h>
#include <math.h>
int isArmstrong(int num) {
int sum = 0, temp = num, digits = 0;
while (temp != 0) {
temp /= 10;
digits++;
}
temp = num;
while (temp != 0) {
int digit = temp % 10;
sum += pow(digit, digits);
temp /= 10;
}
return sum == num;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (isArmstrong(num))
printf("%d 是阿姆斯特朗数\n", num);
else
printf("%d 不是阿姆斯特朗数\n", num);
return 0;
}
6) 数字之和
#include <stdio.h>
int sumOfDigits(int num) {
int sum = 0;
while (num != 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
printf("数字之和为: %d\n", sumOfDigits(num));
return 0;
}
7) 数字反转
#include <stdio.h>
int reverseNumber(int num) {
int reversed = 0;
while (num != 0) {
reversed = reversed * 10 + num % 10;
num /= 10;
}
return reversed;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
printf("反转后的数字为: %d\n", reverseNumber(num));
return 0;
}
8) 不使用第三个变量交换两个数
#include <stdio.h>
int main() {
int a, b;
printf("请输入两个整数: ");
scanf("%d %d", &a, &b);
printf("交换前: a = %d, b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后: a = %d, b = %d\n", a, b);
return 0;
}
9) 不使用分号打印 "hello"
#include <stdio.h>
int main() {
if (printf("hello")) {}
return 0;
}
10) 使用汇编代码实现两个数相加
#include <stdio.h>
int main() {
int a, b, sum;
printf("请输入两个整数: ");
scanf("%d %d", &a, &b);
asm volatile("addl %1, %0" : "=r"(sum) : "r"(a), "0"(b));
printf("两个数相加结果为: %d\n", sum);
return 0;
}
11) 不使用 main() 函数打印 "Hello"
#define decode(s,t,u,m,p,e,d) m##s##u##t
#define begin decode(a,n,i,m,a,t,e)
#include <stdio.h>
begin() {
printf("Hello\n");
return 0;
}
12) 矩阵乘法
#include <stdio.h>
void matrixMultiplication(int A[][3], int B[][3], int C[][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
C[i][j] = 0;
for (int k = 0; k < 3; k++) {
C[i][j] += A[i][k] * B[k][j];
}
}
}
}
void displayMatrix(int matrix[][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int A[3][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
int B[3][3] = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}};
int C[3][3];
printf("第一个矩阵元素:\n");
displayMatrix(A);
printf("第二个矩阵元素:\n");
displayMatrix(B);
matrixMultiplication(A, B, C);
printf("两个矩阵的乘积:\n");
displayMatrix(C);
return 0;
}
13) 十进制转二进制
#include <stdio.h>
void decimalToBinary(int num) {
if (num == 0)
return;
decimalToBinary(num / 2);
printf("%d", num % 2);
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf("%d", &num);
printf("二进制表示为: ");
decimalToBinary(num);
printf("\n");
return 0;
}
14) 字母三角形
#include <stdio.h>
int main() {
int n, k = 0;
printf("请输入行数: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++, k = 0) {
for (int space = 1; space <= n - i; space++) {
printf(" ");
}
while (k != 2 * i - 1) {
printf("%c", 64 + i + k);
k++;
}
printf("\n");
}
return 0;
}
15) 数字三角形
#include <stdio.h>
int main() {
int i, j, space, rows;
printf("请输入范围: ");
scanf("%d", &rows);
for (i = 1; i <= rows; i++) {
for (space = 1; space <= rows - i; space++)
printf(" ");
for (j = 1; j <= i; j++)
printf("%d", j);
for (j = i - 1; j >= 1; j--)
printf("%d", j);
printf("\n");
}
return 0;
}
16) 费波纳契三角形
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1)
return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n;
printf("请输入范围: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
printf("%d ", fibonacci(j));
}
printf("\n");
}
return 0;
}
17) 数字转为字符
#include <stdio.h>
void printInWords(int num) {
char* words[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
if (num == 0) {
printf("%s ", words[0]);
return;
}
int digit = num % 10;
printInWords(num / 10);
printf("%s ", words[digit]);
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
printf("数字转为字符: ");
printInWords(num);
printf("\n");
return 0;
}