C语言程序实例
- 格式:docx
- 大小:1.76 MB
- 文档页数:18
1.3 课后习题1.3.1 项目练习一.练习目的1.进行简单程序的编写;2.进一步熟悉C语言的编程环境;3.进一步巩固C语言程序的建立、编译、执行过程。
二.练习内容1.编程输出一行汉字“我坚信:我一定能学好C语言!”。
#include "stdio.h"main(){printf("我坚信:我一定能学好C语言!");getchar();}2.用自然语言描述、画N-S图、画传统流程图三种方法来描述求1+2+3+…n和值的算法。
自然语言描述:先输入n 的值定义一个变量i,定义一个变量sum,用于存放每次累计的和值I 从0开始,累加到sum中累加到n的值,结束输出sum的值N-S图传统流程图:开始sum=0i=0输入n的值i=i+1sum=sum*ii<=n是输出sum的值结束1.3.2 练习题一.选择题1.下列有关C语言的说法正确的是( C )。
(A)机器语言(B)只适合于编写应用软件(C)高级语言(D)只适合于编写系统软件2.下列说法中,不属于良好程序设计风格要求的是( C )。
(A)程序中要有必要的注释(B)程序应简单、可读性好(C)程序的效率第一,清晰第二(D)输入数据前要有提示信息3.用C语言编写的代码是( A )。
(A)经过编译解释才能执行(B)可以立即执行(C)是一个源程序(D)经过编译立刻执行4.下列语句说法正确的是( C )。
(A)语句必须从第一行开始书写(B)一个语句只能写在同一行上(C)一个语句可以书写在多行上(D)一个语句不得多于80个字符5.一个程序总是从( B )位置开始执行。
(A)第一个函数(B)main()(C)程序的第一行(D)第一条执行语句6.下面对C语言的特点,说法不正确的是( B )。
(A)C语言是一种结构化模块化的程序设计语言(B)C语言程序的可移植性较差(C)C语言兼有高级语言和低级语言的双重特点(D)C语言既可以用来编写应用程序,又可以用来编写系统软件7.下列不是C语言特点的是( D )。
空格分隔输出c语言摘要:1.C 语言简介2.C 语言的特点3.C 语言的空格分隔输出4.实例:空格分隔输出C 语言程序正文:【C 语言简介】C 语言是一种广泛使用的计算机编程语言,由Dennis Ritchie 在20 世纪70 年代早期在贝尔实验室开发。
C 语言的设计目标是为了简化UNIX 操作系统的开发过程,因此它具有底层访问功能和高度可移植性。
C 语言的语法和语义相对简单,使其成为学习编程的理想选择。
【C 语言的特点】C 语言具有以下特点:1.简单和紧凑:C 语言的语法和语义相对简单,容易学习和理解。
2.高效性:C 语言程序运行速度快,占用系统资源少。
3.可移植性:C 语言程序可以在不同的硬件平台和操作系统上运行,只需少量或不需要修改。
4.低级访问:C 语言允许程序员直接访问计算机硬件,如内存和处理器,这对于编写系统级软件非常有用。
【C 语言的空格分隔输出】在C 语言中,我们可以使用printf 函数将数据输出到屏幕。
printf 函数的用法非常灵活,可以输出各种类型的数据,如整数、浮点数、字符串等。
本节将介绍如何使用printf 函数实现空格分隔输出。
【实例:空格分隔输出C 语言程序】下面是一个简单的C 语言程序,它将输出三个整数,并用空格分隔:```c#include <stdio.h>int main() {int num1 = 10;int num2 = 20;int num3 = 30;printf("%d %d %d", num1, num2, num3);return 0;}```在这个例子中,我们定义了三个整数变量num1、num2 和num3,并将它们的值分别设置为10、20 和30。
然后,我们使用printf 函数将它们输出到屏幕,用空格分隔。
注意,我们使用了%d作为格式控制符,表示输出整数。
而在printf 函数中,我们用三个%d分别对应三个整数变量,并在它们之间添加空格。
倒三角C语言程序一、什么是倒三角C语言程序?倒三角C语言程序是一种以倒三角形状输出特定字符或图案的C语言程序。
通过使用循环和条件语句,我们可以利用少量的代码实现复杂的输出效果,从而展现出一些有趣的图案。
二、实现倒三角C语言程序的基本原理要实现倒三角C语言程序,我们需要使用嵌套循环和条件语句。
首先,我们需要确定三角形的行数,然后使用两个循环控制语句来控制行数和列数。
在每个位置,我们根据条件语句来决定是否输出特定字符或图案,从而形成倒三角形状。
具体来说,以下是实现倒三角C语言程序的基本原理:1.输入三角形的行数n。
2.外层循环控制行数,从第一行到第n行。
3.内层循环控制每行的列数,从第一列到第i列(其中i为当前的行数)。
4.在每个位置,根据条件语句判断是否输出特定字符或图案。
通过这种方式,我们可以灵活地控制输出的形状和特定字符或图案的样式,从而实现各种有趣的效果。
三、实例演示:输出倒三角形下面我们通过一个实例来演示如何用C语言程序输出一个倒三角形。
#include <stdio.h>int main() {int n, i, j;printf("请输入三角形的行数:");scanf("%d", &n);for(i = n; i >= 1; i--) {for(j = 1; j <= n - i; j++) {printf(" ");}for(j = 1; j <= i; j++) {printf("*");}printf("\n");}return 0;}在上述代码中,我们首先通过scanf函数获取用户输入的行数n,然后使用两个嵌套的循环来实现倒三角形的输出。
外层循环控制行数,内层循环控制列数。
在每个位置,我们使用条件语句判断是否输出”*“字符。
最后,通过换行符\n进行换行。
c编程实例C语言是一门非常基础的编程语言,在许多计算机科学课程和项目中都会使用。
学习C语言可以让我们掌握编程的基本概念和技巧,从而更好地进行编程工作。
在本文中,我们将探讨一些C编程实例,让我们一步步了解C编程的基础知识和编程技巧。
1. Hello World程序Hello World程序是每个编程语言学习者的必修课程。
在C语言中,我们可以使用下面的代码来打印“Hello World”到控制台:#include<stdio.h>int main(){printf("Hello World!");return 0;}这个程序很简单,但它展示了C语言的基本语法。
首先我们用#include语句包含了“stdio.h”头文件,这是一个流输入输出库。
接下来我们定义了一个名为main的函数,这是C语言中程序的入口点。
函数的返回类型是int,意味着该函数将返回一个整数。
在函数内部,我们使用printf函数打印“Hello World”到控制台。
注意,在字符串后面加上感叹号,否则程序将只打印“Hello World”。
最后我们使用return语句表示程序将以0值退出。
这是规定编程实践中的惯例。
2. 计算平均值下面我们来编写一个程序,它可以计算任意一组数字的平均值。
#include<stdio.h>int main(){int n,i;float sum=0,num;printf("Enter the total number of elements: ");scanf("%d",&n);printf("Enter %d elements: ",n);for(i=0;i<n;i++){scanf("%f",&num);sum+=num;}printf("Average = %.2f",sum/n);return 0;}在程序的开始,我们定义了3个变量:n,i和sum。
51单片机汇编语言及C语言经典实例汇编语言是一种用来编写计算机指令的低级语言,它与机器语言十分接近,可以直接控制计算机硬件。
而C语言是一种高级程序设计语言,它具有结构化编程和模块化设计的特点。
本文将介绍51单片机汇编语言和C语言的经典实例,并进行详细解析。
一、LED指示灯的闪烁我们首先来看一个经典的51单片机汇编语言的实例——LED指示灯的闪烁。
我们可以通过控制单片机的IO口来实现LED的闪烁效果。
以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV P1, #0; 将 P1 置为0,熄灭LEDLJMP $ ; 无限循环```以上代码使用了51单片机的MOV指令和LJMP指令。
MOV指令用来将一个立即数(这里是0)存储到寄存器P1中,控制对应的I/O口输出低电平,从而熄灭LED。
而LJMP指令则是无条件跳转指令,将程序跳转到当前地址处,实现了无限循环的效果。
对应的C语言代码如下:```c#include <reg51.h>void main() {P1 = 0; // 将 P1 置为0,熄灭LEDwhile(1); // 无限循环}```以上代码使用了reg51.h头文件,该头文件提供了对51单片机内部寄存器和外设的访问。
通过将P1赋值为0,控制IO口输出低电平,实现了熄灭LED的效果。
while(1)是一个无限循环,使得程序一直停留在这个循环中。
二、数码管的动态显示接下来我们介绍51单片机汇编语言和C语言实现数码管动态显示的经典实例。
数码管动态显示是通过控制多个IO口的高低电平来控制数码管显示不同的数字。
以下是汇编语言的代码:```assemblyORG 0 ; 程序起始地址MOV A, #0FH ; 设置数码管全亮,A存储数码管控制位MOV P2, A ; 将 A 的值存储到 P2,控制数码管的数码控制位DELAY: ; 延时循环MOV R7, #0FFH ; 设置延时计数值LOOP1: ; 内层循环MOV R6, #0FFH ; 设置延时计数值LOOP2: ; 内部延时循环DJNZ R6, LOOP2 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ R7, LOOP1 ; 延时计数减1并判断是否为0,不为0则继续循环DJNZ A, DELAY ; A减1并判断是否为0,不为0则继续循环JMP DELAY ; 无限循环,实现动态显示```以上代码中,我们通过MOV指令来将一个立即数(0x0F)存储到寄存器A中,控制数码管显示0-9的数字。
【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: main() { long int i; int bonus1,bonus2,bonus4,bonus6,bonus10,bonus; scanf("%ld",&i); bonus1=100000*0.1;bonus2=bonus1+100000*0.75; bonus4=bonus2+200000*0.5; bonus6=bonus4+200000*0.3; bonus10=bonus6+400000*0.15; if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01; printf("bonus=%d",bonus); } ----------------------------------------------------------------------------- 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码: file:///C|/Documents and Settings/Administrator/桌面/C语言代码实例.txt(第 1/23 页)2011-5-1 12:30:17 file:///C|/Documents and Settings/Administrator/桌面/C语言代码实例.txt #include "math.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x为加上100后开方后的结果*/ y=sqrt(i+268); /*y为再加上168后开方后的结果*/ if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/ printf("\n%ld\n",i); } } ----------------------------------------------------------------------------- 【程序4】 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。 2.程序源代码: main() { int day,month,year,sum,leap; printf("\nplease input year,month,day\n"); scanf("%d,%d,%d",&year,&month,&day); switch(month)/*先计算某月以前月份的总天数*/ { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; default:printf("data error");break; } sum=sum+day; /*再加上某天的天数*/ if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/ leap=1; else leap=0; if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sum++; printf("It is the %dth day.",sum);} #include int main() { int year,month,date,leap,days=0; scanf("%d%d%d",&year,&month,&date); leap=(year%4==0&&year%100!=0||year%400==0); switch(month) { case 12:days+=30; case 11:days+=31; case 10:days+=30; case 9:days+=31; file:///C|/Documents and Settings/Administrator/桌面/C语言代码实例.txt(第 2/23 页)2011-5-1 12:30:17 file:///C|/Documents and Settings/Administrator/桌面/C语言代码实例.txt case 8:days+=31; case 7:days+=30; case 6:days+=31; case 5:days+=30; case 4:days+=31; case 3:days+=28+leap; case 2:days+=31; case 1:days+=date;break; } printf("%4d年%2d月%2d日是这一年的第%d天。\n",year,month,date,days); return 0; } ----------------------------------------------------------------------------- 【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, 然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 2.程序源代码: main() { int x,y,z,t; scanf("%d%d%d",&x,&y,&z); if (x>y) {t=x;x=y;y=t;} /*交换x,y的值*/ if(x>z) {t=z;z=x;x=t;}/*交换x,z的值*/ if(y>z) {t=y;y=z;z=t;}/*交换z,y的值*/ printf("small to big: %d %d %d\n",x,y,z); } ----------------------------------------------------------------------------- 【程序6】 题目:用*号输出字母C的图案。 1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。 2.程序源代码: #include "stdio.h" main() { printf("Hello C-world!\n"); printf(" ****\n"); printf(" *\n"); printf(" * \n"); printf(" ****\n"); } ----------------------------------------------------------------------------- 【程序7】 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个。不同字符,图形不一样。 2.程序源代码: #include "stdio.h" main()
51单片机汇编语言及C语言经典实例实验及课程设计一、闪烁灯如图1 所示为一简单单片机系统原理图:在P1.0 端口上接一个发光二极管L1,使L1 在不停地一亮一灭,一亮一灭的时间间隔为0.2 秒。
延时程序的设计方法,作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1 所示的石英晶体为12MHz,因此,1 个机器周期为 1 微秒,机器周期微秒如图 1 所示,当P1.0 端口输出高电平,即P1.0=1 时,根据发光二极管的单向导电性可知,这时发光二极管L1 熄灭;当P1.0 端口输出低电平,即P1.0=0 时,发光二极管L1 亮;我们可以使用SETB P1.0 指令使P1.0端口输出高电平,使用CLR P1.0 指令使P1.0 端口输出低电平。
C 语言源程序#include <AT89X51.H>sbit L1=P1^0;void delay02s(void) //延时0.2 秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}汇编源程序ORG 0START: CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP START DELAY: MOV R5,#20 ;延时子程序,延时0.2 秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND图2 程序设计流程图图1 单片机原理图二、多路开关状态指示如图 3 所示,AT89S51 单片机的 P1.0-P1.3 接四个发光二极管 L1-L4,P1.4-P1.7 接了四个开关 K1-K4,编程将开关的状态反映到发光二极管上。
1.勾股定理 #include int main() { int m,n; int side1,side2,hypotenuse; printf("请输入m和n的值,要求m大于n\n"); scanf("%d %d",&m,&n); side1=m*m-n*n; side2=2*m*n; hypotenuse=m*m+n*n; printf("side1=%d side2=%d hypotenuse=%d",side1,side2,hypotenuse);
}
2.爱因斯坦数学题 #include int main() { int m,i;; for(i=0;i>=0;i++) if(i%7==0&&(i-5)%6==0&&(i-4)%5==0&&(i-3)%2==0&&(i-1)%2==0) break; printf("%d",i); return 0; } 3.冰箱温度 #include int main() { int m,n; double T,t; printf("请输入断电后的时间m和n,其中m表示小时n表示分钟:\n"); scanf("%d %d",&m,&n); t=m+n/60.0; T=4*t*t/(t+2)-20; printf("T=%.2lf",T); return 0; } 4.厄拉多赛筛选素数 #include int sushu(int n) { int j,k; for(j=2;j{ k=n%j; if(k==0) break; } if(j==n) return 1; else return 0; } int main() { int N,i,o;
scanf("%d",&N); for(i=2;iif(sushu(i)) printf("%d ",i); return 0;
}
5.分段函数 #include #include int main() { int m; double y; scanf("%d",&m); if( m<0||m>=50) { printf("wrong data");return 0;} if(m>=0&&m<10) y=cos(m+3.14/6); if(m>=10&&m<30) y=sqrt(4.1+5*m*m); if(m>=30&&m<50) y=1.75*(m-3.0)+45; printf("%lf",y); return 0; }
6.分鱼问题 #include int main() { int i,j,k; for(i=20;i>=0;i++) { for(j=i,k=0;k<5;k++) if((j-1)%5==0) j=j-1-(j-1)/5; else break; if(k==5) { printf("%d",i);break;} } return 0; }
7.阶乘 #include int main() { int m,i,n; scanf("%d",&m); n=m; for(i=1;i<=m;i++,m--) { n=n*(m-1);
} printf("%d",n); return 0;
} 8.可逆序数 #include int yunsuan(int m); int main() { int i,a,b,c,d,t; for(i=1000;i<10000;i++){ t=i; a=t%10; t=t/10; b=t%10; t=t/10; c=t%10; d=t/10; if(yunsuan(i)&&yunsuan(a*1000+b*100+c*10+d)){ printf("%d \n",i); } } return 0; } int yunsuan(int m) { int i,k,n;
for(i=2;i<=m;i++) { k=m%i; if(k==0&&i{ return (0); break;
}} if(i==m+1) return (1);
}
9.冒泡排序 #include #include int rank(int a[],int n); int main() { int k[1000]; int i; for(i=0;i<1000;i++) k[i]=rand(); rank(k,1000); for(i=0;i<1000;i++) printf("%d ",k[i]); return 0; } int rank(int a[],int n) { int i,j,temp; for(i=0;ifor(j=i+1;j{ if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } return 0; }
10.素数排序 #include int main() { int m,i,k,n; scanf("%d",&m); for(i=2;i<=m;i++) { k=m%i; if(k==0&&i{ printf("no"); break;
}} if(i==m+1) printf("yes"); return 0; } 11.素数排序 #include int rank(int a[],int n) { int i,j,temp; for(i=0;ifor(j=i+1;j{ if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } }
return 0; } int panduan(int a[],int n,int r[],int m) {
int i,j,o,k; o=0; for(i=0;i{ for(j=2;j{ k=a[i]%j; if(k==0)break; } if(a[i]==j) { r[o]=a[i]; o++; } }
return o ; }
int main() { int n,i,m,c; int a[1000]; int r[1000]; scanf("%d",&n); for(i=0;iscanf("%d",&a[i]); c=panduan(a,n,r,n); rank(r,c); for(i=0;iprintf(" %d ",r[i]); return 0; }
12.算术平方根 #include void yunsuan(double m); int main() { double m; scanf("%lf",&m); yunsuan(m); return 0; } void yunsuan(double m){ double lg=1.0;int i; double ng,t; for(i=1;i<1000;lg=ng,i++){ ng=(1.0/2)*(lg+m/lg);t=lg; } printf("%lf ",ng);
}
13.算术求解 #include int main() { int i,a,b,c,d,t; for(i=1000;i<10000;i++){ t=i; a=t%10; t=t/10; b=t%10; t=t/10; c=t%10; d=t/10; if(a*1000+b*100+c*10+d==i*9){ printf("%d %d %d %d \n",d,c,b,a); } } return 0; }