C语言是一种通用的编程语言,广泛应用于系统编程、嵌入式系统以及各种高性能应用程序的开发。它的设计理念和语法结构为许多现代编程语言奠定了基础。本文将深入探讨 C 语言的基本概念、关键特性、进阶技术及其实际应用,以帮助读者全面掌握这一经典编程语言。
C 语言由 Dennis Ritchie 于 1972 年在贝尔实验室开发。它是从 B 语言和 BCPL 语言派生而来的,目的是为 Unix 操作系统提供一种高效、灵活的编程工具。C 语言的特点包括:
指针是 C 语言的强大功能之一,它允许程序员直接操作内存。指针变量存储另一个变量的内存地址。
c
int a = 10;
int *p = &a;
printf("Address of a: %p\n", (void *)p);
printf("Value of a: %d\n", *p);
结构体是一种用户定义的数据类型,它可以组合不同类型的数据。结构体用于表示具有不同属性的数据对象。
定义了一个 Person 结构体,它包含姓名和年龄两个字段。
c
typedef struct {
char name[50];
int age;
} Person;
int main() {
Person p1 = {"Alice", 30};
printf("Name: %s, Age: %d\n", p1.name, p1.age);
return 0;
}
C 语言提供了 malloc、calloc、realloc 和 free 函数来动态分配和释放内存。
c
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i * 10;
}
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
在这段代码中,malloc 函数分配了一个整型数组的内存,free 函数用于释放这块内存。
C 语言提供了标准库函数来进行文件操作,包括 fopen、fread、fwrite 和 fclose。
c
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Failed to open file\n");
return 1;
}
fprintf(file, "Hello, File!\n");
fclose(file);
return 0;
fopen 函数以写模式打开文件,fprintf 函数将字符串写入文件,最后 fclose 关闭文件。
👁🗨👁🗨1.
问题:
读入全班30个学生的C语言成绩,求全班平均成绩,并统计高于平均分 的学生人数。
分析:
读入全班30个学生的成绩也就是要用一个for循环来输入学生的成绩。学生成绩可以是小数,所以用 float 类型。30个学生的成绩可以用一个float类型的数组来存储,求全班的平均成绩即把所有的人的成绩加在一起,除以学生的数量即可。要想统计高于平均分的学生个数,就要用一个循环来比较一下学生的成绩,同时设一个变量(计数器),只要该成绩大于平均成绩就让计数器进行加一操作。
代码如下:
#include <stdio.h>
int main()
{
float score[30], aver, sum = 0;
int i;
int count = 0; //计数器
for ( i = 0; i < 30; i++)
{
scanf("%f", &score[i]);
sum += score[i];
}
aver = sum / 30;
for (i = 0; i < 30; i++)
{
if (score[i] > aver)
count++;
}
printf("aver=%f\n", aver);
printf("count=%d\n", count);
return 0;
}
👁🗨👁🗨 2.
问题:
输入10个整数,按每行4个数输出这些整数,最后输出这批整数的最大值。
分析:
首先想到的就是,利用创建一个数组来存放这10个数,要求每行输出4 个数,即当数组下标%4时==0;打印一个换行就行。要想输出最大值,即用一个for循环,创建一个新变量max,先假设 a[0]=max; 当循环进行后,如果下一个数比max大,就把这个数赋值给max,然后利用for循环一直比下去,如果下一个数没有max大,就不用操作,继续进行循环即可。直到循环结束,最大值也就知道了,就是max。
代码如下:
#include <stdio.h>
int main()
{
int score[10];
int i;
int max = 0;
for ( i = 0; i < 10; i++)
scanf_s("%d", &score[i]);
for (i = 0; i < 10; i++)
{
if (i % 4 == 0&&i!=0)
printf("\n");
printf("%d ", score[i]);
}
max = score[0];
for (i = 1; i < 10; i++)
if (max < score[i])
max = score[i];
printf("\n");
printf("%d",max);
return 0;
}
👁🗨👁🗨3.
问题:
写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。
分析:
首先要明确什么是素数 除了1和它本身以外,不能被其他正整数整除的数叫素数。如:2,3,5,7,11,13,17…… 所以就是说,你输入的这个数 i,用输入的这个数i %利用一个for循环,从2开始到输入的这个数 i-1,如果其中有一次==0的话即可判断是素数,如果到循环结束时还没有一次能够整除的,即可认定没有素数。
代码实现:
#include <stdio.h>
#include <string.h>
int is_Prime(int a)
{
int i;
if(a==1)
return 1;
if (a == 2)
return 0;
for (i = 2; i < a; i++)
{
if (a % i == 0)
return 1;
else
return 0;
}
}
int main()
{
int a;
scanf_s("%d", &a);
if (is_Prime(a) == 0)
printf("输入的该数是素数");
if(is_Prime(a)==1)
printf("输入的该数不是素数");
return 0;
}
👁🗨👁🗨4 以下程序段的输出结果是( ) A: 12 B: 13 C: 16 D: 以上都不对
👁🗨👁🗨5 若有以下程序,则运行后的输出结果是( ) 示例: 输入:2012 12 31 输入:1982 3 4 输出:366 输出:63
#include<stdio.h>
int main()
{
char s[] = "\\123456\123456\t";
printf("%d\n", strlen(s));
return 0;
}
#include <stdio.h>
#define N 2
#define M N + 1
#define NUM (M + 1) * M / 2
int main()
{
printf("%d\n", NUM);
return 0;
}