经典C语言编程实例_第1页
经典C语言编程实例_第2页
经典C语言编程实例_第3页
经典C语言编程实例_第4页
经典C语言编程实例_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

经典C语言编程实例一、基础语法类(入门必练)实例1:HelloWorld(最基础入门)功能:打印"HelloWorld!",熟悉C语言基本结构(头文件、主函数、输出语句)。c

#include<stdio.h>//引入标准输入输出头文件

intmain(){//主函数,程序入口

printf("HelloWorld!\n");//输出语句,\n表示换行

return0;//主函数返回值,代表程序正常结束

}说明:每个C语言程序都必须有且仅有一个main()函数,printf()是stdio.h中的库函数,用于输出内容。实例2:求两个整数的和、差、积、商功能:接收用户输入的两个整数,计算并输出它们的加减乘除结果,熟悉输入语句、变量定义及算术运算。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;

}说明:scanf()用于接收用户输入,%d是整型数据的格式符;除数不能为0,需用if语句判断,避免程序崩溃。实例3:判断一个数是否为偶数功能:接收用户输入的整数,判断其是否为偶数,熟悉if-else条件判断语句。c

#include<stdio.h>

intmain(){

intnum;

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

scanf("%d",&num);

//偶数判断:能被2整除(余数为0)

if(num%2==0){

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

}else{

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

}

return0;

}说明:%是取余运算符,num%2==0表示num能被2整除,满足条件则为偶数,否则为奇数。二、循环结构类(核心重点)实例4:用for循环打印1-100的所有整数功能:使用for循环遍历1到100,熟悉for循环的语法(初始化、循环条件、循环更新)。c

#include<stdio.h>

intmain(){

inti;//循环变量

//for循环三要素:初始化i=1;循环条件i<=100;循环更新i++(i自增1)

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

printf("%d",i);//打印每个数,用空格分隔

}

printf("\n");//换行,使输出更整洁

return0;

}说明:for循环适合已知循环次数的场景,三要素可灵活调整,如打印100-1的数,可改为for(i=100;i>=1;i--)。实例5:用while循环求1-100的累加和功能:计算1+2+3+...+100的和,熟悉while循环的语法(循环条件、循环体)。c

#include<stdio.h>

intmain(){

inti=1;//初始化循环变量

intsum=0;//初始化累加和,初始值为0

//while循环:只要i<=100,就执行循环体

while(i<=100){

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

i++;//循环变量更新,避免死循环

}

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

return0;

}说明:while循环适合未知循环次数、仅知道循环条件的场景;必须确保循环变量有更新,否则会陷入死循环。实例6:用do-while循环实现猜数字游戏(简单版)功能:程序随机生成一个1-100的整数,用户反复猜,直到猜对为止,熟悉do-while循环(先执行后判断)。c

#include<stdio.h>

#include<stdlib.h>//包含rand()函数(生成随机数)

#include<time.h>//包含time()函数(设置随机数种子)

intmain(){

intguess;//存储用户猜的数字

intsecret;//存储随机生成的秘密数字

//设置随机数种子,使每次运行生成的随机数不同

srand((unsignedint)time(NULL));

secret=rand()%100+1;//生成1-100的随机数(rand()%100生成0-99,加1得1-100)

//do-while循环:先执行一次猜数操作,再判断是否猜对

do{

printf("请猜一个1-100之间的数字:");

scanf("%d",&guess);

//提示猜大或猜小

if(guess>secret){

printf("猜大了!再试试~\n");

}elseif(guess<secret){

printf("猜小了!再试试~\n");

}else{

printf("恭喜你,猜对了!\n");

}

}while(guess!=secret);//只要没猜对,就继续循环

return0;

}说明:do-while循环至少执行一次循环体,适合需要“先执行、后判断”的场景;rand()函数需配合srand()设置种子,否则每次生成的随机数相同。三、数组类(常用数据结构)实例7:定义一个数组,求数组元素的最大值和最小值功能:定义一个整型数组,遍历数组元素,找出最大值和最小值,熟悉数组的定义、遍历及数组下标使用。c

#include<stdio.h>

intmain(){

//定义一个整型数组,初始化6个元素

intarr[]={12,45,7,34,89,23};

intlen=sizeof(arr)/sizeof(arr[0]);//计算数组长度(总字节数/单个元素字节数)

intmax=arr[0];//初始化最大值为数组第一个元素

intmin=arr[0];//初始化最小值为数组第一个元素

inti;

//遍历数组(从第二个元素开始,下标从1开始)

for(i=1;i<len;i++){

if(arr[i]>max){

max=arr[i];//更新最大值

}

if(arr[i]<min){

min=arr[i];//更新最小值

}

}

printf("数组元素:");

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

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

}

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

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

return0;

}说明:数组下标从0开始,sizeof(arr)可获取数组总字节数,sizeof(arr[0])获取单个元素字节数,两者相除得到数组长度;遍历数组时,循环变量从0到len-1。实例8:数组逆序(将数组元素反转)功能:将一个数组的元素顺序反转(如[1,2,3,4,5]变为[5,4,3,2,1]),熟悉数组遍历和元素交换。c

#include<stdio.h>

intmain(){

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

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

inti,temp;//temp用于临时存储交换的元素

intleft=0;//左指针,指向数组第一个元素

intright=len-1;//右指针,指向数组最后一个元素

//左右指针向中间靠拢,交换对应位置的元素

while(left<right){

//交换arr[left]和arr[right]

temp=arr[left];

arr[left]=arr[right];

arr[right]=temp;

left++;//左指针右移

right--;//右指针左移

}

//打印逆序后的数组

printf("逆序后的数组:");

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

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

}

printf("\n");

return0;

}说明:采用“双指针”思路,左指针从开头、右指针从结尾,依次交换元素,直到两指针相遇,效率更高;交换两个变量必须借助临时变量。四、函数类(模块化编程)实例9:定义一个函数,判断一个数是否为素数功能:将素数判断逻辑封装为函数,主函数调用该函数,熟悉函数的定义、声明和调用。c

#include<stdio.h>

#include<math.h>//包含sqrt()函数(求平方根)

//函数声明:判断num是否为素数,返回1(是)或0(否)

intisPrime(intnum);

intmain(){

intnum;

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

scanf("%d",&num);

//调用isPrime函数,接收返回值

if(isPrime(num)){

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

}else{

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

}

return0;

}

//函数定义:实现素数判断逻辑

intisPrime(intnum){

inti;

//边界判断:小于2的数不是素数

if(num<2){

return0;

}

//优化:只需判断到sqrt(num),减少循环次数

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

if(num%i==0){//能被其他数整除,不是素数

return0;

}

}

return1;//不能被任何数整除,是素数

}说明:函数需先声明(或定义在主函数之前),再调用;素数是大于1、只能被1和自身整除的数,判断到sqrt(num)可优化效率。实例10:用函数实现斐波那契数列(前n项)功能:定义函数计算斐波那契数列的第n项,主函数调用该函数,打印前n项,熟悉函数递归或迭代实现。c

#include<stdio.h>

//函数声明:迭代实现,返回斐波那契数列第n项

intfibonacci(intn);

intmain(){

intn,i;

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

scanf("%d",&n);

if(n<=0){

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

return1;//返回非0值,表示程序异常结束

}

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

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

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

}

printf("\n");

return0;

}

//函数定义:迭代实现(效率高于递归,避免重复计算)

intfibonacci(intn){

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

return1;//前两项都是1

}

inta=1,b=1,c;//a存储第n-2项,b存储第n-1项,c存储第n项

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

c=a+b;//第n项=第n-2项+第n-1项

a=b;//更新a为第n-1项

b=c;//更新b为第n项

}

returnc;

}说明:斐波那契数列规律为1,1,2,3,5,8...(前两项为1,从第三项开始,每一项等于前两项之和);迭代实现比递归效率高,避免递归导致的栈溢出。五、指针类(C语言灵魂)实例11:用指针访问数组元素功能:通过指针遍历数组,修改数组元素,熟悉指针与数组的关系(数组名本质是数组首元素的地址)。c

#include<stdio.h>

intmain(){

intarr[]={10,20,30,40,50};

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

int*p=arr;//指针p指向数组首元素(等价于p=&arr[0])

inti;

//用指针遍历数组,打印元素

printf("数组元素(指针访问):");

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

printf("%d",*(p+i));//*(p+i)等价于arr[i],p+i指向第i个元素

}

printf("\n");

//用指针修改数组元素(将所有元素加5)

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

*(p+i)+=5;

}

//再次打印修改后的数组

printf("修改后的数组:");

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

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

}

printf("\n");

return0;

}说明:数组名arr是常量指针,不能修改;指针p是变量指针,可以通过p++、p--移动指针,访问不同元素;*(p+i)与arr[i]完全等价。实例12:用指针作为函数参数,修改实参的值功能:定义函数,通过指针参数修改主函数中变量的值,熟悉指针作为函数参数的用法(传地址)。c

#include<stdio.h>

//函数声明:通过指针修改a和b的值(交换两个数)

voidswap(int*x,int*y);

intmain(){

inta=10,b=20;

printf("交换前:a=%d,b=%d\n",a,b);

//调用swap函数,传入a和b的地址(&a、&b)

swap(&a,&b);

printf("交换后:a=%d,b=%d\n",a,b);

return0;

}

//函数定义:x和y是指针变量,接收实参的地址

voidswap(int*x,int*y){

inttemp;

temp=*x;//*x表示访问x指向的变量(即主函数中的a)

*x=*y;//将y指向的变量(b)的值赋给x指向的变量(a)

*y=temp;//将temp的值(原来的a)赋给y指向的变量(b)

}说明:C语言函数参数传递默认是“值传递”,无法修改实参的值;通过传递指针(地址),在函数中通过解引用(*x)操作,可直接修改实参的值。六、综合实例(巩固应用)实例13:学生成绩管理系统(简单版)功能:实现学生成绩的录入、打印、求平均分,综合运用数组、函数、循环、条件判断。c

#include<stdio.h>

#defineN5//定义学生人数为5(可修改)

//函数声明

voidinputScore(intscore[],intn);//录入成绩

voidprintScore(intscore[],intn);//打印成绩

floataverageScore(intscore[],intn);//求平均分

intmain(){

intscore[N];//存储N个学生的成绩

floatavg;

//录入成绩

inputScore(score,N);

//打印成绩

printScore(score,N);

//求平均分

avg=averageScor

温馨提示

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

评论

0/150

提交评论