c语言必背100例(c语言精彩编程200例)
今天给各位分享c语言必背100例的知识,其中也会对c语言精彩编程200例进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
c语言必背代码有哪些
1、/*古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
兔子的规律为数列1,1,2,3,5,8,13,21....*/
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{ printf("%12ld%12ld",f1,f2);
if(i%2==0) printf("
");/*控制输出,每行四个*/
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
}
2、/*判断101-200之间有多少个素数,并输出所有素数及素数的个数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。*/
#include"math.h"
main()
{
intm,i,k,h=0,leap=1;
printf("
");
for(m=101;m<=200;m++)
{k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap)/*内循环结束后,leap依然为1,则m是素数*/
{printf("%-4d",m);h++;
if(h%10==0)
printf("
");
}
leap=1;
}
printf("
Thetotal is%d",h);
}
3、/*一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
找出1000以内的所有完数。*/
main()
{
static int k[10];
inti,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i<j;i++)
{if((j%i)==0)
{ n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{printf("%d is a wanshu:",j);
for(i=0;i<n;i++)
printf("%d,",k[i]);
printf("%d
",k[n]);
}
}
}
4、/*下面程序的功能是将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出,
请在空白处完善程序。*/
main()
{ int a[4][4],b[4][4],i,j;/*a存放原始数组数据,b存放旋转后数组数据*/
printf("input 16 numbers:");
/*输入一组数据存放到数组a中,然后旋转存放到b数组中*/
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{ scanf("%d",&a[i][j]);
b[3-j][i]=a[i][j];
}
printf("arrayb:
");
for(i=0;i<4;i++)
{ for(j=0;j<4;j++)
printf("%6d",b[i][j]);
printf("
");
}
}
5、/*编程打印直角杨辉三角形*/
main()
{int i,j,a[6][6];
for(i=0;i<=5;i++)
{a[i][i]=1;a[i][0]=1;}
for(i=2;i<=5;i++)
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];
for(i=0;i<=5;i++)
{for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("
");}
}
6、/*通过键盘输入3名学生4门课程的成绩,
分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车
其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。*/
#include<stdio.h>
#include<stdlib.h>
main()
{ float a[4][5],sum1,sum2;
inti,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
{sum1=0;
for(j=0;j<4;j++)
sum1+=a[i][j];
a[i][4]=sum1/4;
}
for(j=0;j<5;j++)
{ sum2=0;
for(i=0;i<3;i++)
sum2+=a[i][j];
a[3][j]=sum2/3;
}
for(i=0;i<4;i++)
{ for(j=0;j<5;j++)
printf("%6.2f",a[i][j]);
printf("
");
}
}
C语言必须知道的300个问题的目录
第1章初识C语言 1
问题1 C语言是如何发展起来的? 2
问题2什么是ANSI标准? 2
问题3 C语言编写程序的优点有哪些? 3
问题4如何规避C语言的不足之处? 4
问题5 C语言的应用领域有哪些? 5
问题6什么是C99标准?与C89标准
相比,C99标准有哪些
新特性? 6
问题7 C语言是C++的子集吗? 10
问题8 C语言程序的开发过程是
怎样的? 11
问题9什么是编译程序和解释程序? 12
问题10 ANSI C的编译限制有哪些? 13
第2章一个简单的C程序 14
问题11 C语言的入口函数是什么? 15
问题12 C语言程序由哪些部分组成? 16
问题13如何在Turbo C 2.0中输入一个
程序? 16
问题14如何在Visual C++ 6.0中运行
一个C程序? 18
问题15如何在Visual C++ 2008中运行
一个C程序? 22
问题16如何提高程序的可读性? 26
问题17什么是关键字?C语言的关键
字有哪些? 27
问题18什么是标识符?使用标识符的
注意事项是什么? 29
问题19 void关键字都有哪些用途? 30
问题20什么是匈牙利命名约定?它是否
是好的约定? 31
第3章算法入门 33
问题21为什么说算法是程序设计的
灵魂? 34
问题22算法的特性有哪些? 34
问题23如何评价一个算法的好坏? 35
问题24算法的表示方法都有哪些? 36
问题25算法的基本结构是什么? 40
问题26算法有哪几类? 42
问题27算法的效率度量方法有哪些? 42
问题28什么是算法的时间复杂度? 43
问题29什么是算法的空间复杂度? 44
问题30什么是分治法算法思想? 45
第4章常用数据类型 46
问题31声明变量和定义变量的区别
是什么? 47
问题32在开发时如何决定使用哪种
数据类型? 48
问题33什么是常量?如何区分常量
和变量? 48
问题34各种数据类型所占的内存是
多少? 49
问题35字符与字符串的差别有
哪些? 50
问题36变量是否必须初始化? 51
问题37为什么会发生数据溢出?如何
避免数据溢出? 52
问题38局部变量和全局变量能否
重名? 53
问题39全局变量可不可以定义在可被
多个.C文件包含的头文件中?
为什么? 53
问题40如何引用一个已经定义过的
外部变量? 54
问题41全局变量和局部变量的存储
方式有什么区别? 55
问题42整型常量的存储形式是
怎样的? 55
问题43整型常量的表示形式有
哪几种? 56
问题44使用了没定义的变量会有什么
现象? 56
问题45 static关键字有什么作用? 57
问题46 const关键字有什么作用? 59
问题47 const与#define相比有何
优点? 60
问题48 sizeof不是函数吗? 61
问题49 float类型数如何与0值
比较? 63
问题50静态变量与自动变量的区别
有哪些? 64
第5章运算符与表达式 66
问题51运算符的优先级和结合性是
怎样的? 67
问题52如何区分“,”是运算符还是
分隔符? 68
问题53 C语言如何解释x=a+=b+c? 69
问题54 x=x+1,x+=1,x++,哪个效率
最高? 70
问题55什么是运算符的目?怎样进行
区分? 70
问题56使用“++”和“--”运算符需要
注意些什么? 71
问题57如何理解i+++j? 71
问题58赋值表达式中什么是左值和右值?数组名作为左右值时又具有怎样的意义? 72
问题59如何确定条件表达式的结果的
数据类型? 73
问题60“%”运算符是否可以对小数
进行运算? 74
问题61“/”运算符得到的结果一定为
整数吗? 75
问题62在进行多种数据类型混合运算
的时候,数据类型自动转换有
哪些规则? 76
问题63 C语言中有哪些简化的运算
表达式? 77
问题64使用逻辑表达式需要注意哪
几点问题? 77
问题65 i++*i++这样的表达式为什么
不能得到预期的结果? 78
问题66 a[i]=i++;这样的代码正确吗? 79
问题67编写表达式时需要注意
什么? 79
问题68如何理解c=a,b;? 80
问题69为无符号类型变量赋值时,数据
类型应怎样转换? 81
问题70 C语言表达式的求值顺序总是
按照运算符的结合性保证
“自左至右”或者“自右
至左”吗? 81
第6章输入/输出函数 83
问题71函数printf()的基本格式
是什么? 84
问题72如何认识printf()函数的格式
字符? 85
问题73函数printf()的标志有几种?
如何使用? 91
问题74如何控制输出最小宽度? 91
问题75如何控制输出精度? 92
问题76如何控制输出长度? 93
问题77如何动态设置输出宽度和
精度? 94
问题78 printf()函数的返回值是
什么? 95
问题79如何理解输出列表? 96
问题80函数scanf()的基本格式是
什么? 96
问题81 scanf()函数的格式字符是
什么? 97
问题82使用scanf()函数应注意的问题
是什么? 100
问题83 scanf()函数的返回值是
什么? 101
问题84如何使用getchar()函数? 102
问题85 getch()函数如何使用? 104
问题86如何应用gets()函数? 104
问题87如何应用putch()函数? 105
问题88 puts()函数该如何应用? 106
问题89如何控制多数值的输入? 107
问题90如何输入字符数组? 108
第7章选择、分支结构程序设计 110
问题91 5>4>3为什么不成立——谈谈
关系表达式的值 111
问题92=和==如何区分? 112
问题93什么叫逻辑短路? 113
问题94 if语句的基本形式有哪些?
如何应用? 114
问题95浮点数的相等比较是否可以
用==? 116
问题96关系运算符和数学不等号有
什么区别? 117
问题97 if语句后面一定不能写
分号吗? 118
问题98这个程序为什么多执行了好多
语句? 119
问题99不用关系表达式和逻辑表达式
做条件 120
问题100怎样理解复合语句中的
变量? 122
问题101如何进行if语句的嵌套? 123
问题102条件运算符“?:”怎样
应用? 124
问题103 switch语句的基本格式是
什么? 125
问题104 if语句与switch语句的优缺
点是什么? 127
问题105 switch语句中的default关键字
是否必须? 128
问题106 break关键字在switch语句中
应注意什么? 128
问题107如何正确判断if和else的
匹配? 130
问题108 switch和case后的表达式值的
类型是否可以是浮点型? 132
问题109区段划分型条件有什么
技巧? 133
问题110 default必须写在所有case
之后吗? 134
第8章循环结构 136
问题111循环结构的基本概念是
什么? 137
问题112 while语句的基本格式是
什么? 138
问题113 while循环应注意什么
问题? 139
问题114 for循环语句的基本格式
是什么? 140
问题115 for语句的三个表达式都是
必须的吗? 142
问题116 do…while语句的基本格式
是什么? 144
问题117分号在循环体中的作用? 146
问题118 while与do…while的
区别? 148
问题119什么是循环嵌套? 149
问题120循环嵌套的结构是
怎样的? 151
问题121如何正确使用循环嵌套? 153
问题122死循环是怎样产生的? 154
问题123怎样提高循环语句的
效率? 156
问题124 continue语句的基本作用
是什么? 158
问题125 break语句的基本作用是
什么? 159
问题126 goto语句的基本格式是什么?
如何使用? 161
问题127 goto语句的缺陷是什么? 163
问题128如何选择循环语句? 165
问题129如何判定循环结束和提前
结束? 165
问题130如何避免循环中的初值错误
问题? 167
第9章数组 170
问题131什么是数组?其存储有何
特点? 171
问题132数组的维数该如何理解? 171
问题133一维数组是怎样定义的? 172
问题134如何引用一维数组元素? 173
问题135如何初始化一维数组? 174
问题136如何设计数组的排序
算法? 175
问题137如何定义二维数组? 176
问题138如何引用二维数组元素? 178
问题139如何初始化二维数组? 179
问题140如何定义字符数组? 180
问题141如何初始化字符数组? 180
问题142如何引用字符数组? 181
问题143如何进行字符数组的
复制? 182
问题144如何进行字符数组的
连接? 183
问题145如何进行字符串的比较? 185
问题146如何测定字符串的长度? 187
问题147如何进行字符串大小写的
相互转换? 188
问题148如何计算字符串中有多少个
单词? 190
问题149 gets()函数和scanf()函数在输入
字符串时有何区别? 191
问题150 puts()函数和printf()函数在输出
字符串时有何区别? 192
问题151数组与指针的区别是什么? 193
问题152为什么作为函数形参的数组和
指针可以互换? 195
问题153为什么数组名作参数传递给子
函数时,子函数可以改变主
函数中数组的值? 196
问题154 C语言中有动态数组吗? 197
问题155如何实现动态二维数组? 199
问题156 strcpy()函数可以复制字符串的
一部分吗? 201
问题157字符串和字符数组有什么
区别? 202
问题158‘\0’和“\0”有什么区别? 203
问题159字符数组占用内存
怎样算? 204
问题160用字符数组和指针两种方式
定义的字符串有什么
不同? 204
第10章函数编程基础 206
问题161什么是函数?如何分类? 207
问题162如何定义无参函数? 209
问题163如何定义有参函数? 210
问题164什么是空函数?作用是
什么? 210
问题165什么是形参和实参?如何
使用? 211
问题166如何从函数返回? 213
问题167函数返回值你了解多少? 214
问题168如何进行函数的一般
调用? 215
问题169函数调用的基本方式有几种?
各是什么? 216
问题170函数调用应具备哪些
条件? 216
问题171如何进行函数的嵌套
调用? 218
问题172什么是递归调用?如何
实现? 219
问题173函数如何将数组元素作为
实参? 222
问题174如何将数组名作为函数
参数? 224
问题175如何将多维数组名作为函数
参数? 227
问题176什么是局部变量? 228
问题177什么是全局变量?如何
应用? 229
问题178存储方式有哪几种?分别
是什么? 232
问题179如何使用auto关键字? 233
问题180什么是静态变量?如何
实现? 236
问题181什么是寄存器变量?如何
实现? 238
问题182如何声明外部变量? 239
问题183如何调用编译后的函数? 240
问题184如何限定外部变量的使用
范围? 241
问题185如何使用函数调用实现对字
符串的统计? 242
问题186 main()函数有什么作用? 243
问题187什么是内部函数? 243
问题188什么是外部函数?
怎么用? 244
问题189 static()函数与普通函数有什么
区别? 245
问题190形参和实参有什么区别? 246
第11章指针解析 248
问题191什么是指针?什么是指针
变量? 249
问题192如何创建指针? 250
问题193如何初始化指针? 251
问题194如何使用指针? 252
问题195函数中如何传递指针? 254
问题196指针、数组和地址之间的关系
是什么? 255
问题197如何进行指针运算? 256
问题198如何使用指针操作数组? 258
问题199如何用指针表示多维
数组? 260
问题200如何使用指针操作多维
数组? 261
问题201如何用指针为函数传递
数组? 263
问题202如何用指针表示字符串? 264
问题203如何使用字符串指针作为函数
参数? 265
问题204字符数组和字符指针的区别
是什么? 266
问题205什么是指针数组? 267
问题206如何使用指针数组处理
字符串? 268
问题207如何将指针数组作为函数的
参数? 269
问题208什么是指向指针的指针? 270
问题209二级指针如何应用于一维
数组? 271
问题210如何实现二级指针对二维数组
的操作? 272
问题211二级指针如何操作字符串数组
(指针数组)? 273
问题212如何理解返回指针的
函数? 275
问题213什么是指向函数的指针? 277
问题214如何用const控制指针? 278
问题215什么是“野指针”? 279
问题216 main()函数的指针数组形参
是怎么回事? 279
问题217 void指针就是空指针吗?它
有什么作用? 281
问题218指针是一种特殊的变量,只能
用来保存地址。这句话
对吗? 282
问题219字符指针、浮点数指针以及
函数指针这三种类型的变量
哪个占用的内存最大?
为什么? 282
问题220一个32位的机器,该机器的
指针是多少位? 283
第12章常用数据结构 284
问题221空结构体所占的内存是
多少? 285
问题222在C语言中,一个结构体可以
包含指向自己的指针吗? 286
问题223 struct person{...};person a;
为什么编译出错? 287
问题224怎样从/向数据文件读/写
结构? 289
问题225枚举与#define宏的区别有
哪些? 290
问题226如何看待枚举类型,枚举类型
的优点是什么? 291
问题227关键字typedef的功能是
什么? 292
问题228类型定义是否允许嵌套? 294
问题229 typedef与#define宏的相似之处
与不同之处是什么? 295
问题230什么是散列法? 296
问题231大小端模式对union类型数据
有什么影响? 297
问题232如何为联合体变量赋
初值? 298
问题233如何证明联合体变量的所有成员是共享一个内存单元的? 300
问题234堆和栈的区别是什么? 301
问题235举例说明,什么是静态链表?
什么是动态链表? 302
问题236单向链表、双向链表和循环链
表有什么区别? 304
问题237如何在链表中的指定位置插入
结点? 305
问题238如何删除链表中指定位置的
结点? 306
问题239如何创建一个动态链表? 308
问题240指向结构体数组的指针如何
应用? 310
第13章位运算操作符 312
问题241什么是位运算?位运算符包括
哪些? 313
问题242移位运算中如何补位? 314
问题243移位运算符与加减运算符的
优先级哪个较高? 315
问题244什么是循环移位? 316
问题245什么是位段?其优点是
什么? 317
问题246如何正确使用位段? 318
问题247数据在计算机中的存储单位有
哪些?有几种存储形式? 320
第14章存储管理 322
问题248与内存息息相关的重要概念
有哪些? 323
问题249指针指向不合法引起了哪些
内存问题? 324
问题250内存分配与释放引起的常见
问题有哪些? 325
问题251什么是内存越界?什么是内存
泄露?二者是如何产生的? 326
问题252 C语言提供了哪些动态内存
分配函数? 327
问题253 malloc()函数与calloc()函数有
什么区别? 328
问题254内存耗尽怎么办? 328
问题255动态内存会被自动释
放吗? 330
问题256高位优先与低位优先的不同
之处是什么? 330
问题257 free()和delete()怎样处理
指针? 331
问题258怎样利用好敏感的内存
资源? 333
第15章预处理和函数类型 335
问题259在头文件中#if、_STDC_等字符
起什么作用? 336
问题260如何书写多条语句宏? 337
问题261预处理中#和##运算符是什么
意思? 338
问题262一个头文件可以包含另一个头
文件吗? 339
问题263#include<>和#include“”有什么
区别? 340
问题264什么是无参宏定义? 341
问题265什么是带参宏定义? 342
问题266怎样写参数个数可变
的宏? 343
问题267#pragma预处理的作用
是什么? 345
问题268条件编译的表达形式有
哪些? 346
问题269如何应用内部函数? 347
问题270如何应用外部函数? 348
第16章文件的读写操作 351
问题271各个读写操作的区别是
什么? 352
问题272 C语言文件有哪几类? 354
问题273怎样写数据文件,使之可以在
不同字大小、字节顺序或浮点
格式的机器上读入? 355
问题274能否使用fflush()函数清除多余
的输入? 356
问题275 fopen()函数打开文件失败的
原因是什么? 357
问题276为什么打开文件后要及时
关闭? 358
问题277文件的打开方式有哪些? 358
问题278如何正确使用putchar()函数和getchar()函数? 360
问题279 getchar()函数、getch()函数和getche()函数的区别是
什么? 361
问题280使用printf()函数和scanf()函数
需要注意什么? 362
问题281 printf()函数有哪些参数? 363
问题282 scanf()函数的格式控制包括
哪些? 364
问题283 printf()函数和scanf()函数格式
符的修饰符“*”有什么
作用? 366
问题284 fscanf()函数、fprintf()函数与scanf()函数和printf()函数有什么
不同? 367
问题285如何判断文件的结束? 368
第17章图形图像处理 371
问题286为什么在使用图形函数时要
首先初始化图形模式? 372
问题287怎样初始化图形模式? 372
问题288初始化时提示“BGI Error: Graphics not initialized
(use'initgraph')”怎么办? 374
问题289怎样利用C语言建立独立的
图形运行程序? 375
问题290 TC中有几个画线函数?怎么
使用? 376
问题291 TC中有几个画矩形函数?怎么
使用? 377
问题292 TC中有几个画圆函数?怎么
使用? 379
问题293如何使用C语言填充封闭
图形? 380
问题294 TC中有几个和光标有关的
函数?怎样使用? 382
问题295如何在图形模式下输出
文本? 383
问题296背景色、线条颜色和填充颜色
有什么区别?何时使用? 386
问题297怎样记住那么多的颜色? 387
问题298线条样式和填充样式都有
哪些?怎样设置? 388
问题299怎样复制图形? 392
问题300怎样在C语言中制作
动画? 394
二级C语言
******这里有一些资料希望对你有帮助《包括基础知识和例题》:
一.基础知识
C语言总复习C六月,
总体上必须清楚的:
1)程序结构是三种:顺序结构,循环结构(三个循环结构),选择结构(if和 switch)
2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.
4)bit是位是指为0或者1。 byte是指字节,一个字节=八个位.
5)一定要记住二进制如何划成十进制。
概念常考到的:
1、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。
2、每个C语言程序中main函数是有且只有一个。
3、在函数中不可以再定义函数。
4、算法的是一定要有输出的,他可以没有输入。
5、break可用于循环结构和switch语句。
6、逗号运算符的级别最低。
第一章
1)合法的用户标识符考查:
合法的要求是由字母,数字,下划线组成。有其它元素就错了。
并且第一个必须为字母或则是下划线。第一个为数字就错了。
关键字不可以作为用户标识符号。main define scanf printf都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。
2)实型数据的合法形式:
2.333e-1就是合法的,且数据是2.333×10-1。
考试口诀:e前e后必有数,e后必为整数。.
3)字符数据的合法形式::
'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。
'0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。
4)整型一般是两个字节,字符型是一个字节,双精度一般是4个字节:
考试时候一般会说,在16位编译系统,或者是32位系统。碰到这种情况,不要去管,一样做题。掌握整型一般是两个字节,字符型是一个字节,双精度一般是4个字节就可以了。
5)转义字符的考查:
在程序中 int a= 0x6d,是把一个十六进制的数给变量a注意这里的0x必须存在。
在程序中 int a= 06d,是一个八进制的形式。
在转义字符中,’\x6d’才是合法的,0不能写,并且x是小写。
‘\141’是合法的, 0是不能写的。
‘\108’是非法的,因为不可以出现8。
6)算术运算符号的优先级别:
同级别的有的是从左到右,有的是从右到左。
7)强制类型转换:
一定是(int)a不是 int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b的区别。前是把a+b转型,后是把a转型再加b。
8)表达式的考查:
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
自加、自减表达式:假设a=5,++a(是为6), a++(为5);
运行的机理:++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这
个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,
再放到变量a中。进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
逗号表达式:优先级别最低;表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
9)位运算的考查:
会有一到二题考试题目。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。
例1:char a= 6, b;
b= a<<2;这种题目的计算是先要把a的十进制6化成二进制,再做位运算。
例2:一定要记住,
例3:在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。
10)018的数值是非法的,八进制是没有8的,逢8进1。
11)%符号两边要求是整数。不是整数就错了。
12)三种取整丢小数的情况:
1、int a=1.6;
2、(int)a;
3、
第二章
1)printf函数的格式考查:
%d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。
%ld对应 long int;%lf对应double。
2)scanf函数的格式考察:
注意该函数的第二个部分是&a这样的地址,不是a;
Scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。
3)putchar,getchar函数的考查:
char a= getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。
putchar(‘y’)把字符y输出到屏幕中。
4)如何实现两个变量x,y中数值的互换(要求背下来)
不可以把 x=y,y=x;要用中间变量 t=x;x=y;y=t。
5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)
这个有推广的意义,注意 x=(int)x这样是把小数部分去掉。
第三章
特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。
1)关系表达式:
表达式的数值只能为1(表示为真),或0(表示假)
当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1;
2)逻辑表达式:
只能为1(表示为真),或0(表示假)
a)共有&&||!三种逻辑运算符号。
b)!>&&>||优先的级别。
c)注意短路现象。考试比较喜欢考到。
d)要表示 x是比0大,比10小的方法。0<x<10是不可以的(一定记住)。是先计算0<x得到的结果为1或则0;再用0,或1与10比较得到的总是真(为1)。所以一定要用(0<x)&&(x<10)表示比0大比10小。
3)if语句
else是与最接近的if且没有else的相组合的。
4)条件表达式:
表达式1?表达式2:表达式3
注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。
考试口诀:真前假后。
5)switch语句:
a)一定要注意有break和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。
b)switch只可以和break一起用,不可以和continue用。
第四章
1)三种循环结构:
a)for(); while(); do- while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错)
2) break和 continue的差别
记忆方法:
break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。
continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
3)嵌套循环
就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。
4) while((c=getchar())!=’\n’)和 while(c=getchar()!=’\n’)的差别
先看a= 3!= 2和(a=3)!=2的区别:
(!=号的级别高于=号所以第一个先计算 3!=2)第一个a的数值是得到的1;第二个a的数值是3。
考试注意点:括号在这里的重要性。
第五章
函数:是具有一定功能的一个程序块;
1)函数的参数,返回数值(示意图):
main()
{
int a= 5,b=6,c;
c=add(a,b);
printf(“%d”,c);
}
调用函数
a,b是实参
整个函数得到一个数值就是
Add函数的返回数值。
int add( int x, int y)
{
int z;
z=x+y;
return z;
}
被调用函数
x,y是形式参数
函数返回数值是整型
z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。
程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。当得到了返回数值后,再顺序的往下执行
2)一定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。(考试的重点)
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化。
3)函数声明的考查:
一定要有:函数名,函数的返回类型,函数的参数类型。
不一定要有:形参的名称。
第六章
指针变量的本质是用来放地址,而一般的变量是放数值的。
int*p中*p和p的差别:
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
*p++和(*p)++的之间的差别:改错题目中很重要
*p++是地址会变化。
(*p)++是数值会要变化。
三名主义:(考试的重点)
数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)
函数名:表示该函数的入口地址。
字符串常量名:表示第一个字符的地址。
第七章
1一维数组的重要概念:
对a[10]这个数组的讨论。
1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。
对a[3][3]的讨论。
1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。
2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。
3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。
4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。
5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。
二维数组做题目的技巧:
如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。
步骤一:把他们写成:第一列第二列第三列
a[0]à 1 2 3->第一行
a[1]à 4 5 6—>第二行
a[2]à 7 8 9->第三行
步骤二:这样作题目间很简单:
*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。
*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。
一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。
数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写
int a[]={1,2}合法。 int a[][4]={2,3,4}合法。但int a[4][]={2,3,4}非法。
二维数组中的行指针
int a[1][2];
其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p[2]指针
a[0],a[1]现在就是一个列指针。a[0]+1跳一个数组元素。搭配*p[2]指针数组使用
还有记住脱衣服法则:
a[2]变成*(a+2) a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)
这个思想很重要!
二.100道例题
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
掉不满足条件的排列。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
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);
}
getch();
}
==============================================================
【程序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.程序源代码:
#include"stdio.h"
#include"conio.h"
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);
getch();
}
==============================================================
【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:
2.程序源代码:
#include"math.h"
#include"stdio.h"
#include"conio.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);
}
getch();
}
==============================================================
【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
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);
getch();
}
==============================================================
【程序5】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
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);
getch();
}
==============================================================
【程序6】
题目:用*号输出字母C的图案。
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
printf("Hello C-world!\n");
printf("****\n");
printf("*\n");
printf("*\n");
printf("****\n");
getch();
}
==============================================================
【程序7】
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
1.程序分析:字符共有256个。不同字符,图形不一样。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
char a=176,b=219;
printf("%c%c%c%c%c\n",b,a,a,a,b);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",a,a,b,a,a);
printf("%c%c%c%c%c\n",a,b,a,b,a);
printf("%c%c%c%c%c\n",b,a,a,a,b);
getch();
}
==============================================================
【程序8】
题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
int i,j,result;
printf("\n");
for(i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
getch();
}
==============================================================
【程序9】
题目:要求输出国际象棋棋盘。
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
int i,j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
if((i+j)%2==0)
printf("%c%c",219,219);
else
printf("");
printf("\n");
}
getch();
}
==============================================================
【程序10】
题目:打印楼梯,同时在楼梯上方打印两个笑脸。
1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
int i,j;
printf("\1\1\n");/*输出两个笑脸*/
for(i=1;i<11;i++)
{
for(j=1;j<=i;j++)
printf("%c%c",219,219);
printf("\n");
}
getch();
}
.:.:经典c程序100例==11--20:.:.
经典c程序100例==11--20
【程序11】
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1.程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++)
{
printf("%12ld%12ld",f1,f2);
if(i%2==0) printf("\n");/*控制输出,每行四个*/
f1=f1+f2;/*前两个月加起来赋值给第三个月*/
f2=f1+f2;/*前两个月加起来赋值给第三个月*/
}
getch();
}
==============================================================
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
#include"math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{
leap=0;
break;
}
if(leap)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is%d",h);
getch();
}
==============================================================
【程序13】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
2.程序源代码:
#include"stdio.h"
#include"conio.h"
main()
{
int i,j,k,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
printf("%-5d",n);
}
getch();
}
==============================================================
【程序14】
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2.程序源代码:
/* zheng int is divided yinshu*/
#include"stdio.h"
#include"conio.h"
main()
{
int n,i;
printf("\nplease input a number:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
while(n!=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else
break;
}
printf("%d",n);
getch();
}
==============================================================
**************************由于字数限制,未能提供完。
关于c语言必背100例的内容到此结束,希望对大家有所帮助。