C经典程序代码大全_第1页
C经典程序代码大全_第2页
C经典程序代码大全_第3页
C经典程序代码大全_第4页
C经典程序代码大全_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C经典程序代码大全本文整理C语言经典程序代码,按「基础入门→核心算法→实用工具→进阶应用」分类,所有代码均经过验证可直接运行,注释清晰,兼顾新手学习与实际开发参考,涵盖笔试高频、日常实用场景。一、基础入门类(新手必练)1.1第一个C程序(HelloWorld)最基础的C程序,用于熟悉C语言的基本结构(头文件、主函数、输出语句)。c

#include<stdio.h>

//主函数:程序入口

intmain(){

//输出HelloWorld,\n表示换行

printf("HelloWorld!\n");

return0;//程序正常结束,返回0

}1.2求两个整数的和、差、积、商熟悉变量定义、输入输出函数(scanf/printf),掌握基本算术运算。c

#include<stdio.h>

intmain(){

inta,b;

//提示用户输入两个整数

printf("请输入两个整数(用空格分隔):");

scanf("%d%d",&a,&b);//读取用户输入,&表示取变量地址

//计算并输出结果

printf("和:%d+%d=%d\n",a,b,a+b);

printf("差:%d-%d=%d\n",a,b,a-b);

printf("积:%d*%d=%d\n",a,b,a*b);

//处理除数为0的情况,避免程序异常

if(b!=0){

printf("商:%d/%d=%d\n",a,b,a/b);

}else{

printf("错误:除数不能为0!\n");

}

return0;

}1.3判断奇偶数熟悉if-else条件判断语句,掌握取余运算(%)的应用。c

#include<stdio.h>

intmain(){

intnum;

printf("请输入一个整数:");

scanf("%d",&num);

//取余为0则是偶数,否则是奇数

if(num%2==0){

printf("%d是偶数\n",num);

}else{

printf("%d是奇数\n",num);

}

return0;

}1.4求1~100的累加和熟悉for循环、while循环的使用,两种方式实现,对比学习。方式1:for循环(推荐,结构清晰)c

#include<stdio.h>

intmain(){

intsum=0;//用于存储累加和,初始化为0

//i从1循环到100,每次加1

for(inti=1;i<=100;i++){

sum+=i;//等价于sum=sum+i

}

printf("1~100的累加和为:%d\n",sum);

return0;

}方式2:while循环c

#include<stdio.h>

intmain(){

intsum=0,i=1;

while(i<=100){//循环条件:i不大于100

sum+=i;

i++;//循环变量自增,避免死循环

}

printf("1~100的累加和为:%d\n",sum);

return0;

}1.5求n的阶乘(n!)熟悉循环与乘法运算,处理边界情况(0!=1,1!=1)。c

#include<stdio.h>

intmain(){

intn,factorial=1;

printf("请输入一个非负整数:");

scanf("%d",&n);

//处理边界:n为0或1时,阶乘为1

if(n<0){

printf("错误:负数没有阶乘!\n");

}else{

for(inti=1;i<=n;i++){

factorial*=i;//等价于factorial=factorial*i

}

printf("%d!=%d\n",n,factorial);

}

return0;

}二、核心算法类(笔试高频)2.1冒泡排序(升序/降序)最基础的排序算法,通过相邻元素对比交换,将最大/最小元素逐步“冒泡”到数组末尾,时间复杂度O(n²)。c

#include<stdio.h>

//冒泡排序函数:arr为数组,n为数组长度,asc=1升序,asc=0降序

voidbubbleSort(intarr[],intn,intasc){

for(inti=0;i<n-1;i++){//外层循环:控制排序轮次

intflag=0;//标记是否发生交换,优化算法(无交换则提前退出)

for(intj=0;j<n-1-i;j++){//内层循环:对比相邻元素

if(asc==1){

//升序:前一个元素大于后一个,交换

if(arr[j]>arr[j+1]){

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

flag=1;

}

}else{

//降序:前一个元素小于后一个,交换

if(arr[j]<arr[j+1]){

inttemp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

flag=1;

}

}

}

if(flag==0)break;//无交换,说明数组已有序,退出循环

}

}

intmain(){

intarr[]={3,1,4,1,5,9,2,6};

intn=sizeof(arr)/sizeof(arr[0]);//计算数组长度

//升序排序

bubbleSort(arr,n,1);

printf("升序排序后:");

for(inti=0;i<n;i++){

printf("%d",arr[i]);

}

printf("\n");

//降序排序

bubbleSort(arr,n,0);

printf("降序排序后:");

for(inti=0;i<n;i++){

printf("%d",arr[i]);

}

printf("\n");

return0;

}2.2二分查找(折半查找)高效查找算法,仅适用于有序数组,时间复杂度O(log₂n),核心是“折半缩小查找范围”。c

#include<stdio.h>

//二分查找函数:返回目标值的下标,未找到返回-1

intbinarySearch(intarr[],intn,inttarget){

intleft=0;//左边界

intright=n-1;//右边界

while(left<=right){

intmid=(left+right)/2;//中间下标(避免溢出可写left+(right-left)/2)

if(arr[mid]==target){

returnmid;//找到目标,返回下标

}elseif(arr[mid]<target){

left=mid+1;//目标在右半部分,左边界右移

}else{

right=mid-1;//目标在左半部分,右边界左移

}

}

return-1;//未找到目标

}

intmain(){

intarr[]={1,3,4,6,7,9,12,15};//必须是有序数组

intn=sizeof(arr)/sizeof(arr[0]);

inttarget;

printf("请输入要查找的数字:");

scanf("%d",&target);

intindex=binarySearch(arr,n,target);

if(index!=-1){

printf("找到目标值%d,下标为:%d\n",target,index);

}else{

printf("未找到目标值%d\n",target);

}

return0;

}2.3斐波那契数列(前n项)经典递归/迭代问题,数列规律:1,1,2,3,5,8...(从第3项起,每一项等于前两项之和),推荐用迭代(避免递归栈溢出)。方式1:迭代实现(高效,推荐)c

#include<stdio.h>

intmain(){

intn;

printf("请输入斐波那契数列的项数:");

scanf("%d",&n);

if(n<=0){

printf("请输入正整数!\n");

return1;

}

inta=1,b=1,c;

printf("斐波那契数列前%d项:",n);

for(inti=1;i<=n;i++){

if(i==1||i==2){

printf("%d",1);//前两项都是1

}else{

c=a+b;//从第3项起,等于前两项之和

printf("%d",c);

a=b;//更新a为前一项

b=c;//更新b为当前项

}

}

printf("\n");

return0;

}方式2:递归实现(简洁但低效,n较大时卡顿)c

#include<stdio.h>

//递归函数:返回第n项斐波那契数

intfib(intn){

if(n==1||n==2){

return1;//递归终止条件

}

returnfib(n-1)+fib(n-2);//递归调用

}

intmain(){

intn;

printf("请输入斐波那契数列的项数:");

scanf("%d",&n);

if(n<=0){

printf("请输入正整数!\n");

return1;

}

printf("斐波那契数列前%d项:",n);

for(inti=1;i<=n;i++){

printf("%d",fib(i));

}

printf("\n");

return0;

}2.4判断素数(质数)素数:大于1的正整数,除了1和它本身,不能被其他正整数整除,优化:只需判断到√n(减少循环次数)。c

#include<stdio.h>

#include<math.h>//用于sqrt()函数

//判断素数函数:是素数返回1,否则返回0

intisPrime(intnum){

if(num<=1){

return0;//1及以下不是素数

}

//优化:只需判断到sqrt(num),因为超过sqrt(num)的因子会和前面的因子重复

for(inti=2;i<=sqrt(num);i++){

if(num%i==0){

return0;//能被整除,不是素数

}

}

return1;//是素数

}

intmain(){

intnum;

printf("请输入一个正整数:");

scanf("%d",&num);

if(isPrime(num)){

printf("%d是素数\n",num);

}else{

printf("%d不是素数\n",num);

}

//拓展:输出1~100的所有素数

printf("1~100的所有素数:");

for(inti=2;i<=100;i++){

if(isPrime(i)){

printf("%d",i);

}

}

printf("\n");

return0;

}三、实用工具类(日常开发常用)3.1字符串反转熟悉字符串操作(strlen()函数),通过双指针交换字符实现反转。c

#include<stdio.h>

#include<string.h>//用于strlen()函数

//字符串反转函数:直接修改原字符串

voidreverseStr(charstr[]){

intleft=0;

intright=strlen(str)-1;//字符串长度-1,获取最后一个字符下标

while(left<right){

//交换左右指针指向的字符

chartemp=str[left];

str[left]=str[right];

str[right]=temp;

left++;

right--;

}

}

intmain(){

charstr[100];

printf("请输入一个字符串:");

gets(str);//读取字符串(包含空格,scanf()不支持空格)

reverseStr(str);

printf("反转后的字符串:%s\n",str);

return0;

}3.2统计字符串中字符出现次数统计指定字符(或所有字符)在字符串中的出现次数,熟悉字符遍历与计数。c

#include<stdio.h>

#include<string.h>

//统计指定字符出现次数

intcountChar(charstr[],chartarget){

intcount=0;

intlen=strlen(str);

for(inti=0;i<len;i++){

if(str[i]==target){

count++;

}

}

returncount;

}

intmain(){

charstr[100],target;

printf("请输入一个字符串:");

gets(str);

printf("请输入要统计的字符:");

scanf("%c",&target);

intnum=countChar(str,target);

printf("字符'%c'在字符串中出现了%d次\n",target,num);

return0;

}3.3求数组的最大值、最小值、平均值遍历数组,依次计算最大值、最小值、累加和,再求平均值(注意浮点数精度)。c

#include<stdio.h>

intmain(){

intarr[]={12,34,5,67,23,9,45};

intn=sizeof(arr)/sizeof(arr[0]);

intmax=arr[0],min=arr[0],sum=0;

floatavg;

//遍历数组,更新最大值、最小值、累加和

for(inti=0;i<n;i++){

sum+=arr[i];

if(arr[i]>max){

max=arr[i];

}

if(arr[i]<min){

min=arr[i];

}

}

avg=(float)sum/n;//强制转换为浮点数,避免整数除法

printf("数组最大值:%d\n",max);

printf("数组最小值:%d\n",min);

printf("数组累加和:%d\n",sum);

printf("数组平均值:%.2f\n",avg);//保留2位小数

return0;

}3.4进制转换(十进制→二进制/八进制/十六进制)通过“除基取余”法实现进制转换,核心是反复除以目标进制,保存余数,最后反转余数。c

#include<stdio.h>

//十进制转二进制(递归实现)

voiddecToBin(intnum){

if(num>1){

decToBin(num/2);//递归除以2

}

printf("%d",num%2);//输出余数(倒序输出,即二进制)

}

//十进制转八进制

voiddecToOct(intnum){

if(num>7){

decToOct(num/8);

}

printf("%d",num%8);

}

//十进制转十六进制(处理0~15,字母A~F)

voiddecToHex(intnum){

if(num>15){

decToHex(num/16);

}

intremainder=num%16;

//余数0~9输出数字,10~15输出A~F

printf("%c",remainder<10?remainder+'0':remainder-10+'A');

}

intmain(){

intnum;

printf("请输入一个十进制整数:");

scanf("%d",&num);

printf("二进制:");

decToBin(num);

printf("\n");

printf("八进制:");

decToOct(num);

printf("\n");

printf("十六进制:");

decToHex(num);

printf("\n");

return0;

}四、进阶应用类(综合练习)4.1矩阵转置(二维数组)将矩阵的行和列互换,熟悉二维数组的遍历与赋值。c

#include<stdio.h>

#defineROW3//矩阵行数

#defineCOL3//矩阵列数

//矩阵转置函数:src为原矩阵,dest为转置后矩阵

voidtransposeMatrix(intsrc[ROW][COL],intdest[COL][ROW]){

for(inti=0;i<ROW;i++){

for(intj=0;j<COL;j++){

dest[j][i]=src[i][j];//行变列,列变行

}

}

}

//打印矩阵函数

voidprintMatrix(intmatrix[ROW][COL]){

for(inti=0;i<ROW;i++){

for(intj=0;j<COL;j++){

printf("%d\t",matrix[i][j]);

}

printf("\n");

}

}

intmain(){

intsrc[ROW][COL]={{1,2,3},{4,5,6},{7,8,9}};

intdest[COL][ROW];//转置后矩阵(行数=原列数,列数=原行数)

printf("原矩阵:\n");

printMatrix(src);

transposeMatrix(src,dest);

printf("转置后矩阵:\n");

//注意:转置后矩阵是3行3列,可直接调用printMatrix

printMatrix(dest);

return0;

}4.2学生成绩管理系统(简易版)综合运用数组、循环、条件判断、函数,实现成绩录入、查询、统计、排序功能。c

#include<stdio.h>

#defineN5//学生人数(可修改)

//录入学生成绩

voidinputScore(intscores[],charnames[][20]){

for(inti=0;i<N;i++){

printf("请输入第%d个学生的姓名和成绩(用空格分隔):",i+1);

scanf("%s%d",names[i],&scores[i]);

}

}

//打印所有学生成绩

voidprintScore(intscores[],charnames[][20]){

printf("\n所有学生成绩:\n");

printf("姓名\t成绩\n");

for(inti=0;i<N;i++){

printf("%s\t%d\n",names[i],scores[i]);

}

}

//统计成绩(平均分、最高分、最低分)

voidstatScore(intscores[]){

intmax=scores[0],min=scores[0],sum=0;

floatavg;

for(inti=0;i<N;i++){

sum+=scores[i];

if(scores[i]>max)max=scores[i];

if(scores[i]<min)min=scores[i];

}

avg=(float)sum/N;

printf("\n成绩统计:\n");

printf("平均分:%.2f\n",avg);

printf("最高分:%d\n",max);

printf("最低分:%d\n",min);

}

//按成绩降序排序(姓名同步排序)

voidsortScore(intscores[],charnames[][20]){

for(inti=0;i<N-1;i++){

for(intj=0;j<N-1-i;j++){

if(scores[j]<scores[j+1]){

//交换成绩

inttempScore=scores[j];

scores[j]=scores[j+1];

scores[j+1]=tempScore;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论