电子开发 | 基础入门 | 电路原理图 | 梯形图实例 | PLC基础   《如果喜欢本站,请按 Ctrl+D 手动收藏!感谢您的支持》一起学习一起进步,电子开发王欢迎您!.

电子开发网

电子开发网电子设计 | 电子开发网Rss 2.0 会员中心 会员注册

★电路公式手册,最新版《电子电路公式计算器》,电路公式查询手册 电路公式计算器【电子从业人员必备手册】
☆十天学会单片机实例100 c语言 chm格式。资料内容详细,覆盖例子多,内容广【电子从业人员必备手册】
搜索: 您现在的位置: 电子开发网 >> 编程学习 >> C语言 >> 正文

谭浩强C语言程序设计(1-3章代码学习)

作者:佚名    文章来源:本站原创    点击数:385    更新时间:2024/3/30

谭浩强C语言程序设计书籍所包含的代码示例加注释说明如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
/*笔记记录者:xy;学习教材 谭浩强C语言程序设计*/
/*时间:2022年11月15日14:40:36*/
/*使用本代码测试将 #if 0 ------> #if 1 即可*/
/*代码未必全部理解正确,欢迎萌新大佬对其修正*/
#include <stdio.h> //输入输出头文件
/*--------------------(第一章 C语言教程)--------------------*/
#if 1
/*例1.1,p14*/
int main(void)
{
 printf("hello world!\n");
 return 0;
}
#endif
#if 0
/*例1.2,p15*/
#include <math.h>
int main(void)
{
 double x,s;
 printf("请输入任意一个整数:");
 scanf("%lf",&x);
 s = sin(x);
 printf("%lf",s);
 return 0;
}
#endif
#if 0
/*比较两个数的大小*/
//#include "math.h"
int max(int a,int b);//函数声明
int main(void)//主函数
{
 int x,y,z;
 //int max(int a,int b);/*可有可无,无影响*/
 printf("Input two number:\n");
 scanf("%d%d",&x,&y);
 z=max(x,y);//----------------调用比较函数max---------------
 printf("maxnum = %d\n",z);
}
int max(int a,int b)//自定义比较函数
{
 if(a>b)
  return a;
 else
   return b;
}
#endif
/*--------------------(第二章 程序的灵魂——算法)--------------------*/
#if 0
/*数据结构+算法=程序*/
/*
算法分类:
 1)数值运算算法:求解数值.
 2)非数值运算算法:事务管理领域.
*/
/*例2.1 求1*2*3*4*5,p32*/
#if 0
int main()
{
 int i,s = 1;
 for(i = 1;i <= 5;i++){
  s = s*i;
 }
 printf("s = %d\n",s);
}
#else
/*例2.1.1 求1*3*5*7*9*11*/
int main()
{
 int n,m;
 printf("输入相乘的个数m:");
 scanf("%d",&m);
 int i = 1,s = 1;
 for(n = 1;n <= m;n++){
  s = s*i;
  i = i+2;
 }
 printf("输出m(%d)个数相乘1*3*5*...*%d*%d的值:",m,i-2,i);
 printf("s = %d\n",s);
}
#endif
#endif
#if 0
/*例2.2,输出50(或m)个学生中,分数在80分以上的,p33*/
int main()
{
    int m,i = 0;
    int n[50] = {0};//学号(输入的学号不能以0开头如:001,在十进制中以0开头不合法,0无法输出出来,第三章会有介绍)
    int g[50] = {0};//分数
 printf("一共需要录入成绩的人数有m:");
 scanf("%d",&m);
    for(i=1;i<=m;i++)//循环输入50个人的成绩
    {
        printf("请输入第%d个学生的学号和成绩\n",i);
        scanf("%d%d",&n[i-1],&g[i-1]);
    }
    printf("\n\n 成绩大于80的学生的学号和成绩为\n\n");
    for(i=1;i<=m;i++)//有几人则循环几次
    {
        if(g[i-1]>=80)
        {
            printf("学号:%d   成绩:%d\n",n[i-1],g[i-1]);
        }
    }
    return 0;
}
#endif
#if 0
/*例2.3,判断2000——2500年中的闰年,并输出,p33*/
/*在此基础上修改判断任意时间段中的闰年*/
#if 0
int main(void)
{
 int i;
 for(i=2000;i<=2500;i++){
  if(i%4==0&&i%100!=0){
   printf("%d是闰年\n",i);
  }
  else if(i%100==0&&i%400==0){
   printf("%d是闰年\n",i);
  }
 }
 return 0;
}
#else
int main(void)
{
 int i,m,n;
 printf("输入任意两段年限,判断是否为闰年:");
 scanf("%d%d",&m,&n);
 for(i=m;i<=n;i++){
  if(i%4==0&&i%100!=0){
   printf("%d是闰年\n",i);
  }
  else if(i%100==0&&i%400==0){
   printf("%d是闰年\n",i);
  }
 }
 return 0;
}
#endif
#endif
#if 0
/*例2.4,求1-1/2+1/3-1/4+....+1/99-1/100,p34*/
int main(void)
{
 int i;
 double a = 1.0,s = 1.0;
 for(i=2;i<=100;i++){
  a = (-1) * a;
  s = s + a/i;
 }
 printf("输出1-1/2+1/3-1/4+....+1/99-1/100的值s = %f",s);
 return 0;
}
#endif
#if 0
/*例2.5,对于一个大于或等于3的正整数,判断它是不是一个素数,p34*/
int main(void)
{
 int i;//要判断的数字
 int m;//用于辅助判断
 int k;//k用作除数
 printf("输入一个大于或等于3的正整数i:");
 scanf("%d",&i);
 for(k=2;k<=i;k++){  //k用作除数,用于判断是否为素数
  m=i%k;
  if(m==0) break;
 }
 if(k>=i){
  printf("%d是素数\n",i);
 }else{
  printf("%d不是素数\n",i);
 }
 return 0;
}
#endif
/*--------------------(第三章 数据类型、运算符与表达式)--------------------*/
/************************************************************************
3.1数据类型分类:
 (1)基本数据类型:
   1)整型:
     1.基本型:int(2 byte(字节))
     2.短整型:short int或short(2 byte)
     3.长整型:long int或long(4 byte)
     4.无符号型:unsigned
       *无符号基本型:unsigned int
       *无符号短整型:unsigned short int
       *无符号长整型:unsigned long int
       **无符号型数据,所占空间不变,正数最大范围变为原来的2倍,但无法表示负数(p48)**
   2)字符型:char(1 byte)
   3)实型(浮点型)
     1.单精度型:float(4 byte)
     2.双精度型:double(8 byte)
   4)枚举类型
 (2)构造数据类型
   1)数组类型
   2)结构体类型
   3)共用体(联合)类型
 (3)指针类型
 (4)空类型
***************************************************************************/
#if 0
/*例3.1,符号常量的使用,p45*/
#define PRICE 30 //宏定义全局变量
int main(void)
{
 int num,total;
 num = 10;
 total = num*PRICE;
 printf("total = %d\n",total);
 return 0;
}
#endif
#if 0
/*例3.2,整型变量的定义与使用,p49*/
int main(void)
{
 int a,b,c,d; //a,b,c,d为整型变量
 unsigned u;  //u为无符号整型变量
 a = 12;b = -24;u = 10;//对各个变量赋值
 c = a + u;
 d = b + u;
 printf("a+u = %d,b+u = %d\n",c,d);
 return 0;
}
#endif
#if 0
/*例3.3整型数据的溢出,p49*/
#if 0
int main(void)
{ /*在我的编译器中定义int被默认为了long int(4 byte),正常情况下应为基本类型int(2 byte)*/
 int a,b;
 a = 2147483647;//在此处为long int(4 byte) 数值范围-2147483648~2147483647,查看p62
 b = a + 1;
 printf("%d,%d\n",a,b);
 return 0;
}
#else
int main(void)
{
 short int a,b;
 a = 32767;//此处为short int (2 byte)数值范围-32768~32767,查看p62
 b = a + 1;
 printf("%d,%d\n",a,b);
 return 0;
}
#endif
#endif
#if 0
/*例3.4,类型转换,p50*/
int main(void)
{
 long x,y;
 int a,b,c,d;
 x = 5,y = 6;
 a = 7,b = 8;
 c = x + a;
 d = y + b;
 printf("c=x+a= %d,d=y+b= %d\n",c,d);
 return 0;
}
#endif
#if 0
/*eg3.5,c允许浮点型使用后缀,p51*/
int main(void)
{
 printf("%f\n",356.);
 printf("%f\n",356);
 printf("%f\n",356f);
 return 0;
}
#endif
#if 0
/*eg3.6,实行数据的舍入误差,p51*/
int main(void)
{
 float a,b;
 a = 123456.789e5;
 b = a + 20;
 printf("%f\n",a);
 printf("%f\n",b);
}
#endif
#if 0
/*eg3.7,实行数据的舍入误差,p52*/
int main(void)
{
 float a;//单精度有效位为7位,所以小数点后2位以后无效
 double b;//双精度有效位16位,但C规定小数后最多保留六位,其余部分四舍五入
 a=33333.33333;
 b=33333.33333333333333;
 printf("%f\n%f\n",a,b);
 return 0;
}
#endif
#if 0
/*****************************************************************************
转义字符:
 1)\n 回车换行   2)\t 横向跳到下一制表位置
 3)\b 退格       4)\r 回车
 5)\f 走纸换页   6)\\ 反斜线符"\"
 7)\' 单引号符   8)\" 双引号符
 9)\a 鸣铃    10)\add 1~3位八进制所代表的字符
 11)\xhh 1~2位十六进制所代表的字符
******************************************************************************/
/*eg3.8,转义字符的使用,p53*/
int main(void)
{
 int a,b,c;
 a = 5;b = 6;c = 7;
 printf("  ab  c\tde\rf\n");
 printf("hijk\tL\bM\n");
 return 0;
}
#endif
#if 0
/*eg3.9,向字符变量赋以整数,p54*/
int main(void)
{
 char a,b;
 a = 120;
 b = 121;
 printf("%c,%c\n",a,b);//输出字符型数据
 printf("%d,%d\n",a,b);//输出整型数据
 return 0;
}
#endif
#if 0
/*eg3.10,字母大小写转换,p54*/
int main(void)
{
 char a,b;
 a = 'a';
 b = 'b';
 a = a - 32;//字母大小写的ASSCII码相差32
 b = b - 32;
 printf("%c,%c\n%d,%d\n",a,b,a,b);//输出转换字符,和相应的ASCII码值
 return 0;
}
#endif
#if 0
/*eg3.11,变量赋初值操作,p55*/
int main(void)
{
 int a = 3,b,c = 5;
 b = a + c;
 printf("a=%d,b=%d,c=%d\n",a,b,c);
 return 0;
}
#endif
#if 0
/*
数据类型自动转换规则:
 char,short——>int——>unsigned——>long——>double
 将char转为int用atoi()进行转换(该函数包含在stdlib.h头文件中)
*/
/*eg3.12,数据类型转换,p56*/
#include <stdlib.h>  //目的调用atoi函数进行数据转换
int main(void)
{
 char PI[8] = "3.14159";
 int s,r = 5;
 s = r*r*atoi(PI);
 printf("s=%d\n",s);
 return 0;
}
#endif
#if 0
/*eg3.13,强制类型转换,p57*/
int main(void)
{
 float f = 5.75;
 printf("(int)f=%d,f=%f\n",(int)f,f);//将float强制转换为int
 return 0;
}
#endif
#if 0
/*eg3.14,基本的算术运算符,p58*/
int main(void)
{
 printf("\n\n%d,%d\n",20/7,-20/7);
 printf("%f,%f\n",20.0/7,-20.0/7);
 return 0;
}
#endif
#if 0
/*eg3.15,%取余运算符的使用,p58*/
int main(void)
{ /*100除以3取余数*/
 printf("%d\n",100%3);//本例输出 100 除以 3 所得的余数 1。
 return 0;
}
#endif
#if 0
/*eg3.16,自增自减运算符操作,p59*/
int main(void)
{
 int i = 8;
 printf("%d\n",++i);//9,++i先自加,后运算
 //printf("%d\n",i);//9
 printf("%d\n",--i);//8,--i先自减,后运算
 //printf("%d\n",i);//8
 printf("%d\n",i++);//8,i++先运算,后自加
 //printf("%d\n",i);//9
 printf("%d\n",i--);//9,i--先运算,后自减
 //printf("%d\n",i);//8
 printf("%d\n",-i++);//-8,
 //printf("%d\n",i);//9
 printf("%d\n",-i--);//-9
 //printf("%d\n",i);//8
 return 0;
}
#endif
#if 0
/*eg3.17,自加运算分析,p60*/
/*可运行出结果,会有报错,解决报错需将p,q分行写即可*/
#if 1
int main(void)
{ /*报错(Multiple unsequenced modifications to 'i'clang(-Wunsequenced))但可运行*/
 int i = 5,j = 5,p,q;
 p = (i++) + (i++) + (i++);//5+6+7 = 18
 q = (++j) + (++j) + (++j);//6+7+8 = 21
 printf("p=%d,q=%d,i=%d,j=%d\n",p,q,i,j);//18,21,7,8
 return 0;
}
#else
int main(void)
{ /*解决报错*/
 int i = 5,j = 5,p,q;
 p = i++;//5
 p = p + (i++);//5+6 = 11
 p = p + (i++);//11+7 =18
 q = ++j;//6
 q = q + (++j);//6+7 = 13
 q = q + (++j);//13+8 = 21
 printf("p=%d,q=%d,i=%d,j=%d\n",p,q,i,j);//18,21,7,8
 return 0;
}
#endif
#endif
#if 0
/*eg3.19,逗号运算符的使用,p62*/
int main(void)
{
 int a = 2,b = 4,c = 6,x,y;
 y = (x=a+b),c=(b+c);
 printf("y=%d,x=%d,c=%d",y,x,c);//6,6,10
 return 0;
}
#endif
Tags:C语言,谭浩强,程序代码  
责任编辑:admin
  • 上一篇文章:
  • 下一篇文章: 没有了
  • 请文明参与讨论,禁止漫骂攻击。 昵称:注册  登录
    [ 查看全部 ] 网友评论
        没有任何评论
    关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 在线帮助 - 文章列表
    返回顶部
    刷新页面
    下到页底
    晶体管查询