C语言第1次上机讲诉.docx
- 文档编号:5705778
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:14
- 大小:94KB
C语言第1次上机讲诉.docx
《C语言第1次上机讲诉.docx》由会员分享,可在线阅读,更多相关《C语言第1次上机讲诉.docx(14页珍藏版)》请在冰豆网上搜索。
C语言第1次上机讲诉
C语言程序设计实验报告
班级日期
学生姓名学号
第1次上机
实验1表达式与标准输入输出
1.1实验目的
(1)熟练掌握各种运算符的运算功能,操作数的类型,运算结果的类型及运算过程中的类型转换,重点是C语言特有的运算符,例如位运算符,问号运算符,逗号运算符等;熟记运算符的优先级和结核性。
(2)掌握getchar,putchar,scanf和printf函数的用法。
(3)掌握简单C程序(顺序结构程序)的编写方法。
1.2实验任务
编写并上机调试运行能实现以下功能的程序。
(1)编写一个程序,输入字符c,如果c是大写字母,则将c转换成对应的小写,否则c的值不变,最后输出c。
(2)编写一个程序,输入无符号短整数x,m,n(0≤m≤15,1≤n≤16-m),取出x从第m位开始向左的n位(m从右至左编号为0~15),并使其向左端(第15位)靠齐。
(3)IP地址通常是4个用句点分隔的小整数(即点分十进制),如32.55.1.102。
这些地址在机器中用无符号长整形表示。
编写一个程序,以机器存储的形式读入一个互联网IP地址,对其译码,然后用常见的句点分隔的4部分的形式输出。
例如,
整形676879571二进制表示就是:
00101000010110000101110011010011,按照8位一组可表示为:
408892211,由于CPU处理数据的差异,它的顺序是颠倒的,所有最终格式为211.92.88.40。
1.3实验步骤及结果
(要求给出源程序和程序运行结果。
另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验中出现的问题)
(1)分析:
输入字符,判断是否为大写字母,转换时只需对字符C作C-‘A’+’a’处理。
#include
voidmain(void)
{
charc;
printf("Inputc:
\n");
scanf("%c",&c);
if(c>'A'&&c<'Z'){
c=c-'A'+'a';
printf("%c",c);
}
else
printf("%c",c);
}
问题:
当if句后面缺{}时
(2)分析:
欲使其向左端靠齐,需要使无关项为零,可以先向左移再引入逻辑尺,也可以先移到最右端再移到最左端。
这里用后者,对X作X》》M《《(15—N+1)处理。
#include
voidmain()
{
unsignedshortintx,m,n;
printf("Inputx,m,n:
\n");
scanf("%hu%hu%hu",&x,&m,&n);
x=x>>m<<(15-n+1);
printf("%hu\n",x);
}
问题:
当缺少分号时
(3)分析:
把长整型数8位一组表示出来,需要先分别把这8位数移到最右端,再分别转换成十进制数字。
这里还需注意四组数的顺序。
#include
main()
{
unsignedlongx,a,b,c,d;
printf("Inputx:
\n");
scanf("%ul",&x);
a=(x&0xff000000)>>24;
b=(x&0x00ff0000)>>16;
c=(x&0x0000ff00)>>8;
d=(x&0x000000ff);
printf("%d.%d.%d.%d",d,c,b,a);
}
问题:
当printf("%d.%d.%d.%d",a,b,c,d);时结果顺序颠倒
实验2流程控制实验
2.1实验目的
(1)掌握复合语句、if语句、switch语句的使用,熟练掌握for、while、do-while三种基本的循环语句的使用,掌握重复循环技术,了解转移语句与标号语句。
(2)熟练运用for、while、do-while语句来编写程序。
(3)练习转移语句与标号语句的使用。
(3)使用集成开发环境中的调试功能:
单步执行,设置断点,观察变量值。
2.2实验任务
编写并上机调试运行能实现以下功能的程序。
(1)假设工资税金按以下方法计算:
x<1000元,不收取税金;1000≤x<2000,收取5%的税金;2000≤x<3000,收取10%的税金;3000≤x<4000,收取15%的税金;4000≤x<5000,收取20%的税金;x>5000,收取25%的税金。
编写一个程序,输入工资金额,输出应收取税金额度,要求分别用if语句和switch语句来实现。
(2)编写一个程序,将输入的一行字符复制到输出,复制过程中将一个以上的空格字符用一个空格代替。
(3)编写一个程序,打印如下的杨辉三角形。
1/*第0行*/
11/*第1行*/
121/*第2行*/
1331
14641
15101051
1615201561
172135352171
18285670562881
193684126126843691
每个数据值可以由组合
计算(表示第i行第j列位置的值),而
的计算如下:
(i=0,1,2,…)
(j=0,1,2,3,…,i)
说明:
本程序中为了打印出金字塔效果,要注意空格的数目。
一位数之间是3个空格,两位数之间有2个空格,3位数之间只有一个空格,程序编制过程中要注意区分。
(4)编写一个程序,将用户输入的任意正整数逆转,例如,输入1234,输出4321。
在此基础上添加代码找出5000以内的所有回文数,要求一屏显示20行每行5个回文数,用户输入ESC键退出,其它键继续显示。
2.3实验步骤及结果
(要求给出源程序和程序运行结果。
另外,根据实验内容,记录编辑、编译、链接、调试程序的操作过程和实验中出现的问题)
(1)
i>分析:
if句需要列出所有表达式,除按要求的范围分别输出外,还需考虑X《0的情况。
注意if语句的格式和输出数据的形式。
#include
intmain()
{
floatx;
printf("inputthesalary:
\n");
scanf("%f",&x);
if(x<0)printf("wrong\n");
elseif(x>=0&&x<1000)printf("0\n");
elseif(x<2000)printf("%f\n",x*0.05);
elseif(x<3000)printf("%f\n",x*0.1);
elseif(x<4000)printf("%f\n",x*0.15);
elseif(x<5000)printf("%f\n",x*0.2);
else
printf("%f\n",x*0.25);
return0;
}
问题:
当if句后面多加了分号时
ii>分析:
switch语句重在定义case为(int)(x/1000.0),就列举了0,1,2,3,4和default几种情况,注意switch的格式。
#include
intmain()
{
floatx;intCase=0;
printf("inputthesalary:
\n");
scanf("%f",&x);
Case=(int)(x/1000.0);
switch(Case)
{
case0:
printf("0\n");break;
case1:
printf("%f\n",x*0.05);break;
case2:
printf("%f\n",x*0.1);break;
case3:
printf("%f\n",x*0.15);break;
case4:
printf("%f\n",x*0.2);break;
default:
printf("%f\n",x*0.25);
}
return0;
}
问题:
当未定义case为int类型时
(2)分析:
引入while语句循环处理字符,引入switch语句处理空格。
注意这两种语句的格式。
#include
#defineCOPY0
#defineSTART1
voidmain(void)
{
charc;
intstate;
state=COPY;
printf("Inputcharsendwithctrl+z:
\n");
while((c=getchar())!
=EOF)
switch(state){
caseCOPY:
if(c=='')state=START;
elseputchar(c);
break;
caseSTART:
if(c=='')state=START;
else{
printf("");
putchar(c);
state=COPY;
}
}
}
问题:
当if(c=='')时
(3)分析:
用a[i][j]表示i行j列的数有a[i][j]=a[i-1][j]+a[i-1][j-1]这个关系式,用for语句处理循环和空格问题,用域宽说明解决数字间隔宽度问题。
#include
#defineM10
voidmain()
{
inta[M][M],i,j;
intm,k=33,t;
charb[100];
for(t=0;t<100;t++)
b[t]=32;
for(i=0;i for(m=k;m>=0;m--) printf("%c",b[m]); for(j=0;j<=i;j++) { if(i==j||j==0) a[i][j]=1; else a[i][j]=a[i-1][j]+a[i-1][j-1]; printf("%4d",a[i][j]); if(i==j) printf("\n"); } k=k-2; } } 问题: 当没考虑空格时 。 。 。 。 。 (4) i>分析: 把数字连续除以10就可以从余数得到反方向的数字,引入do-while语句循环处理。 #include main() { intx,digit; printf("Inputx: \n"); scanf("%d",&x); do { digit=x%10; printf("%d",digit); x/=10; }while(x! =0); printf("\n"); } 说明: 参照课本设计 ii>分析: 由于5000较小,可直接判断是否为回文数引入if句。 用while句处理逐个循环直到考虑了所有数。 并用if句处理换行和固定行问题。 #include main() { inti=0,j=0,line=0; charm; while(i<=5000){ i++; if(((i>=10&&i<100)&&((i/10+i%10*10)==i))||((i>=100&&i<1000)&&((i/100+(i/10)%10*10+i%10*100)==i))||((i>=1000&&i<5000)&&((i/1000+(i/100)%10*10+(i/10)%10*100+i%10*1000)==i))) { printf("%d\t",i); j++; if(j%5==0){ printf("\n"); line++; if(line==20){ scanf("%c",&m); line=0; } } } } printf("\n"); } 问题: 当没有设计好if中表达式时 实验心得与体会 经过本次实验,我不但熟悉了c语言语法,而且明白了程序设计不单单需要对代码熟练,更重要的是要有好的设计思路,其中算法非常重要。 一个好的设计思路不仅能处理一些实用的问题,还能节约设计程序所用的时间和运行程序所花的时间。 所以我应该尝试多设计一些简捷实用的程序,尽量多想一些简单可行的方法。 总之,本次实验锻炼了我c语言上机动手能力。 选做题 一个世纪的100个年号均为合数的世纪称谓合数世纪。 编程序找出最早的合数世纪。 例如16719世纪(1671801~1671899)和26379世纪(2637801~2637899)都是合数世纪。 分析: 引入for语句处理逐个循环,从2世纪开始排除,直到找到合数世纪才停止。 #include #include main() { inti,j,k,m,n; for(i=2;;i++) { n=0; for(k=i*100+1;k { for(j=2;j { m=k%j; if(m==0) break; } n+=m; if(n>0) break; } if(n==0) break; } printf("%d\n",i+1); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机
![提示](https://static.bdocx.com/images/bang_tan.gif)