经过这半年对C语言的学习,已经对C语言有了初步的了解。对这学期的学习进行总结。
第一章学习了数据类型。
1.常用数据包括常量与变量。
常量包括整形常量、实型常量、字符型常量、字符串常量。
变量需要进行定义,:
类型关键字 变量名
关键字是C语言预先规定的、具有规定意义的单词。
2.数据类型:
包括基本类型:整型、实行(浮点型)、字符型、枚举类型
构造类型、数组、结构体、共用体。
同时还有:指针类型、无类型。
3.计算变量或数据类型所占空间的大小
用sizeof()
例:
#include
main()
{
printf("Data type Number of bytes\n");
printf("char %d\n",sizeof(char));
}
结果:
Data type Number of bytes
char 1
4.
常见错误:
1:变量未定义就使用
2:忽视了变量大小写,使得定义的变量和使用的变量不同名
3:在可执行语句之后定义变量
4:在定义变量时,用于初始化的常量类型与定义的变量类型不一致
5:在定义变量时,对多个变量进行连续赋值
第二章 简单的算术运算和表达式
1.使用乘法时使用'*',除法时使用'/',并且使用除法使除数不能为零。
2.在C语言中,一个特殊的运算为取余运算
例:12%5==2
3.增1和减1
m=n++ - m=n;n=n+1;
m=++n - n=n+1;m=n;
4.宏常量及其替换
#define pi 3.1415926
之后 pi 就代表了这个数,pi 就可以参与有关这个数的运算。
5.const常量
定义在主函数内
int main()
{
const double pi=3.1415926;
.
.
}
6.强制转换类型和自动类型转换
float f=3.6;
int n=256;
double dw2.5;
n=f;
f=n;
d=f;
结果:n=3 f=3.000000 d=3.0000000
第三章:输入与输出
1.字符的输入与输出
getchar();输入
putchar();输出
2.
%d 输出带符号的十进制整数
%u 以无符号的十进制整数输出
%c 输出一个字符
%s 输出一个字符串
%% 输出%
3.输入:
scanf("%d%c%d",&data1,&op,&data2);
注:
1:输入时忘记加入'&'
2:输出时没有键入对应的格式转换符
3:用scanf()输入实型数据时在格式控制字符串中规定了精度。
第四章 选择控制结构
1.
判断一个数能否同时被3和5整除
总时间限制: 1000ms 内存限制: 65536kB
描述
判断一个数n 能否同时被3和5整除
输入
输入一行,包含一个整数n。( -1,000,000 < n < 1,000,000)
输出
输出一行,如果能同时被3和5整除输出YES,否则输出NO
样例输入
15
样例输出
YES
源代码:
include
#include
using namespace std;
int main()
{
int a;
cin>>a;
if((a%3==0)&&(a%5==0))
cout<<"YES";
else
cout<<"NO";
return 0;
}
2.计算邮资
总时间限制: 1000ms 内存限制: 65536kB
描述
根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。
输入
输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。
输出
输出一行,包含一个整数,表示邮费。
样例输入
1200 y
样例输出
17
源代码:
#include
#include
using namespace std;
int main()
{
int we,mo;
char op;
cin>>we>>op;
if(we<=1000)
mo=8;
else
if(we%500!=0)
mo=((we-1000)/500+1)*4+8;
else
mo=(we-1000)/500*4+8;
if(op=='y')
{mo=mo+5;
cout< else cout< return 0; } 3.简单计算器 总时间限制: 1000ms 内存限制: 65536kB 描述 一个最简单的计算器,支持+, -, *, / 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int表示的范围。 输入 输入只有一行,共有三个参数,其中第1、2个参数为整数,第3个参数为操作符(+,-,*,/)。 输出 输出只有一行,一个整数,为运算结果。然而: 1. 如果出现除数为0的情况,则输出:Divided by zero! 2. 如果出现无效的操作符(即不为 +, -, *, / 之一),则输出:Invalid operator! 样例输入 1 2 + 样例输出 3 提示 可以考虑使用if和switch结构。 源代码: #include #include using namespace std; int main() { int num1,num2; char op; cin>>num1>>num2>>op; switch(op) { case'+': cout< break; case'-': cout< break; case'*': cout< break; case'/': if(num2!=0) { cout< } else cout<<"Divided by zero!"< break; default: cout<<"Invalid operator!"< } } 第五章:循环结构 1.含k个3的数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。 例如,输入: 43833 3 满足条件,输出YES。 如果输入: 39331 3 尽管有3个3,但不能被19整除,也不满足条件,应输出NO。 输入 m 和 k 的值,中间用单个空格间隔。 输出 满足条件时输出 YES,不满足时输出 NO。 样例输入 43833 3 样例输出 YES 源代码: #include #include using namespace std; int main() { int m,k,a,b,c=3,n=0; cin>>m>>k; a=m; while(a!=0) { b=a%10; if(b-c!=0) n=n; if(b-c==0) ++n; a=a/10; } if(m%19==0&&n==k) cout<<"YES"; if(m%19!=0||n!=k) cout<<"NO"; return 0; } 2. 津津的储蓄计划 总时间限制: 1000ms 内存限制: 65536kB 描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上20%还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。 现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。 输入 包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。 输出 包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出-X,X表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。 样例输入 样例 #1: 290 230 280 200 300 170 340 50 90 80 200 60 样例 #2: 290 230 280 200 300 170 330 50 90 80 200 60 样例输出 样例 #1: -7 样例 #2: 1580 源代码: #include #include using namespace std; int main() { float m=0,s=0; int j,a; for(int i=1;i<=12;++i) { cin>>a; s=s+300-a; if(s>=100) { j=s/100; s=s-j*100; m=m+j*100; } if(s<0) { cout<<-i; return 0; } } s=s+m*1.2; cout< return 0; } 3.粘墙“三角形” 总时间限制: 1000ms 内存限制: 32767kB 描述 输入一些正整数(≤26),编程输出以这些正整数为边长的附着墙而立的字母三角形。 输入 几个正整数 输出 每个正整数对应的图案。每组图案之间空一行。 样例输入 3 7 样例输出 a a a ab aabc a a a ab a abc a abcd a abcde a abcdef aabcdefg 源代码: #include #include #include using namespace std; int b[27]; int main() { int i,j,n,q; char m='a'; n=(int)m; for(int h=1;h<27;h++) { cin>>b[h]; for(i=1;i<=b[h];i++) { for(j=1;j<=b[h]+1;j++) { if(j==1) cout<<"a"; for(q=0;q
{ if(j==b[h]+1-q&&i>=q+1) cout<<(char)(n-q-1+i); if(i==b[h]-q&&i
cout<<" "; } } cout< } cout< } return 0; } 第六章 数组 1:一维数组 1.与指定数字相同的数的个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输出一个整数序列中与指定数字相同的数的个数。 输入 输入包含三行: 第一行为N,表示整数序列的长度(N <= 100); 第二行为N个整数,整数之间以一个空格分开; 第三行包含一个整数,为指定的整数m。 输出 输出为N个数中与m相同的数的个数。 样例输入 3 2 3 2 2 样例输出 2 源代码: #include #include using namespace std; int main() { int n,m,j=0; int a[101]; cin>>n; for(int i=0;i<=n-1;i++) { cin>>a[i]; } cin>>m; for(int i=0;i<=n-1;++i) { if(a[i]==m) ++j; } cout< return 0; } 2.寻找配对数 总时间限制: 1000ms 内存限制: 65536kB 描述 在给定的n个互不相等的正整数中,寻找可以形成a*b=c的等式(a,b,c互不相等)的数目。比如在12,32,6,1,2,8,4中,只有2*4=8, 2*6=12, 4*8=32三对。 注意:给出的正整数互不相同。正整数的最大值为2^32-1,正整数的最大个数为1000. 输入 第一行输入总共的正整数数目n(n<=1000) 接下来的一行输入n个正整数,正整数之间用一个空格隔开。 输出 输出其中满足a*b=c等式的数目。 样例输入 7 8 6 3 4 10 5 2 样例输出 3 源代码: #include #include using namespace std; int main() { int n,i,j,k,m,s=0; cin>>n; int a[1001]={0}; for(i=1;i<=n;i++) cin>>a[i]; for(j=1;j<=n;j++) { for(k=j+1;k<=n;k++) { for(m=k+1;m<=n;m++) { if(a[j]*a[k]==a[m]||a[j]*a[m]==a[k]||a[m]*a[k]==a[j]) s++; } } } cout< return 0; } 3. 数组逆序重放 总时间限制: 1000ms 内存限制: 65536kB 描述 将一个数组中的值按逆序重新存放。例如,原来的顺序为8,6,5,4,1。要求改为1,4,5,6,8。 输入 输入为两行:第一行数组中元素的个数n(1 输出 输出为一行:输出逆序后数组的整数,每两个整数之间用空格分隔。 样例输入 5 8 6 5 4 1 样例输出 1 4 5 6 8 源代码: #include #include using namespace std; int main() { int n; cin>>n; int a[101]; for(int i=0;i<=n-1;i++) { cin>>a[i]; } for(int i=n-1;i>=1;i--) cout<