西北农林科技大学C语言上机实习5答案

2024-06-21

西北农林科技大学C语言上机实习5答案(精选9篇)

西北农林科技大学C语言上机实习5答案 第1篇

实习五答案

1、用指针实现排序

/* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include void main(void){

int a[10],*p = NULL;

/* 说明数组和指针 */

int i, j, temp;

for(p = a;p < a + 10;p++)

/* 指针从数组首到尾 */

{

scanf(“%d”, p);

/* 利用指针依次输入 */

}

p = a;

for(i = 0;i < 9;i++)

/* 利用指针依次比较 */

{

for(j = i + 1;j < 10;j++)

if(*(p + i)> *(p + j))

{

temp = *(p + i);

*(p + i)= *(p + j);

*(p + j)= temp;

}

}

for(p=a;p < a + 9;p++)

printf(“%d ”, *p);

printf(“%dn”, *p);}

2、用指针实现字符串排序

/*exer 5-2 将 10个长度小于20的字符串排序*/ #include #include void main(void){

char szStr[10][20],*psz[10],szTemp[20];

int i,j;

for(i = 0;i < 10;i++)

{

psz[i] = szStr[i];

/*指针数组的每个元素指向各行串*/

}

for(i = 0;i < 10;i++)

{

gets(psz[i]);

/*输入10个字符串*/

}

for(i = 0;i < 9;i++)

/*字符串排序*/

{

for(j = i + 1;j < 10;j++)

{

if(strcmp(psz[i], psz[j])> 0)

{

strcpy(szTemp, psz[i]);

strcpy(psz[i], psz[j]);

strcpy(psz[j], szTemp);

}

}

}

for(i = 0;i < 10;i++)

{

puts(psz[i]);

/*输出字符串*/

} }

3、数据倒置

/*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ #include void main(void){

int a[10], iTemp, *p, *q;

int i;

for(i = 0;i < 10;i++)

{

scanf(“%d”, a + i);

/*输入数组*/

}

p = a;

q = a + 9;

for(p = a, q = a + 9;p < q;p++, q--)

/*首尾交换*/

{

iTemp = *p;

*p = *q;

*q = iTemp;

}

for(i = 0;i < 10;i++)

{

printf(“%d ”, *(a + i));

/*输出*/

} }

4、用指针实现数据位置调整 /*exer 5-4 输入 10个整数,将最大的调到最后,最小的调到最前*/ #include

void swap(int *px, int *py);

int main(void){

int a[10], iTemp, *pMax, *pMin;

int i;

for(i = 0;i < 10;i++)

{

scanf(“%d”, a + i);/*输入数组*/

}

pMax = a;

/*最大值指针指向数组首地址*/

pMin = a;

/*最小值指针指向数组首地址*/

for(i = 1;i < 10;i++)

{

if(*(a+i)> *pMax)

pMax = a + i;

if(*(a+i)< *pMin)

pMin = a + i;

}

/*最大值是第1个元素,最小值是最后一个元素*/

if(pMax == a && pMin == a + 9)

{

swap(pMax, pMin);

}

else

{

/*最小值与第一个元素交换*/

swap(a, pMin);

/*最大值与最后一个元素交换*/

swap(a + 9, pMax);

}

for(i = 0;i < 10;i++)

{

printf(“%d ”, *(a + i));

/*输出*/

}

return 0;}

void swap(int *px, int *py){

int temp;

temp = *px;

*px = *py;

*py = temp;}

5、用指针实现查找二维数组中最大数及其位置

/*exer 5-5 找出二维数组(设3行4列)中的最大数及其位置 */ #include void main(void){

int a[3][4],(*p)[4], iCol, iRow;

int i, j;

p = a;

for(i = 0;i < 3;i++)

{

for(j = 0;j < 4;j++)

scanf(“%d”, *(p + i)+ j);

/*输入数组*/

}

iCol = 0;

/*设最大数及其位置 */

iRow = 0;

for(i = 0;i < 3;i++)

{

for(j = 0;j < 4;j++)

{

if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol))

{

iRow = i;

iCol = j;

/*修改位置*/

}

}

}

printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);}

6、用指针实现子字符串提取

/*exer 5-6 由键盘输入一串字符,从字符串下标为m开始

取出n个字符(m和n由键盘输入),形成一个新的字符串

*/ #include #include void main(void){

char szStrSour[80], szStrDest[80], *pszSour, *pszDest;

int i, m, n;

gets(szStrSour);

/* 输入字符串 */

scanf(“%d%d”, &m, &n);

/* 输入位置和长度 */

pszSour = szStrSour + m;

/* 确定起始位置 */

pszDest = szStrDest;

for(i = 0;i < n;i++)

/* 依次取n个字符 */

{

*pszDest = *pszSour;

pszDest++;

pszSour++;

}

*pszDest = ';

puts(szStrDest);}

/* 在字符串末尾追加结束标志 */

西北农林科技大学C语言上机实习5答案 第2篇

实验一: Visual C++实验环境

一、实验任务

实验一

二、实验目的

1.了解C程序结构,熟悉VC++ 6.0开发环境。

2.熟悉在VC++ 6.0开发环境中编辑、编译、连接、运行和调试C语言程序。3.通过运行简单的C语言程序,初步连接C语言源程序的特点。

三、实验环境

硬件:PC兼容机 CPU Core i5,内存4GB; 操作系统:中文版 Windows 7;

应用软件 Visual C++ 6.0程序开发环境。

四、实验准备及作业提交方法

1.提交位置

在计算机硬盘(E盘)上新建以学生“学号姓名”命名的文件夹,本次实验学生编写的程序文件先保存到上述文件夹中,待上机实验结束时,将文件夹通过校园网络提交到规定服务器位置上。2.提交内容

本次作业需提交2类文件:.c文件、上机实习报告.doc

五、实验内容(因实验内容较多,本实验报告中仅体现部分内容)

1.编写一个程序,输出以下信息:

*****************************

Welcome to the world of C!

***************************** 【源程序代码】

电子与信息工程学院上机实习报告

第1页 2.编写程序求两数之和

【源程序代码】

3. 编写程序。

【源程序代码

六、思考与实践

6.【修改后源程序代

码】 7.【源程序代码】

七、实验分析总结

C语言课程设计上机实习内容. 第3篇

一、程序设计题目: 简单的学生成绩管理程序设计

二、程序设计功能及要求:

1、原始数据输入和结果输出要求使用文件存放;

2、计算每个学生三门功课的平均分,并按平均分排列名次,若平均分相同则名次并列;结果写入文件。

3、统计全班每门课程的平均分,并计算各分数段(60以下,60~69,70~79,80~89,90以上)的学生人数;结果写入文件。

4、按格式在屏幕上打印每名学生成绩条;

5、在屏幕上打印出所有不及格学生的下列信息:学号,不及格的课程名,该不及格课程成绩;

6、(选做)在屏幕打印优等生名单(学号,三门课程成绩,平均成绩,名次),优等生必须满足下列条件:

1)平均成绩大于90分;或平均分大于85分且至少有一门功课为100分;或者平均分大于85分且至少两门课程成绩为95分以上;

2)名次在前三名

3)每门功课及格以上;

(若完成选做题,课程设计成绩将给予加分)

三、文件格式

1、原始数据文件格式(具体数据自行编写)

学号 姓名

英语

C语言 高等数学

张三

李四 ….….….2、输出数据文件(由程序自动生成)1)学生综合成绩文件。(由程序自动生成)

学号 姓名 英语 C语言 高等数学平均成绩 名次

张三 76 89 78 80.5 5 李四 ….….….3 ….2)统计结果文件。

分数段

英语

C语言

高等数学

<60

60~69

70~79

80~89

>=90 …

平均成绩

75.5 …

四、实习报告要求

1、程序分析和设计

2、流程图

3、源程序清单

4、调试过程: 测试数据及结果,出现了哪些问题,如何修改的5、程序有待改进的地方。

西北农林科技大学C语言上机实习5答案 第4篇

9月初,我们先前往了山东威海滨田印刷机械有限公司进行认识实习。此后我们又去了一家大型零件加工厂进行了参观。

通过这次的实习,我们了解到机械行业第一线的一些具体情况,了解了工业生产实施的具体过程,同时也对一些工厂的技术实施,管理方法有了一定的认识。

前往滨田印刷机械有限公司以后,我们在指导老师和工程师的带领下,分批开始了对该厂的参观。这一切对我们而言陌生有新鲜。开始,我们在一位严谨的工程师的带领下,去了零件加工厂了解了各类零件的加工。其中参观了各种自动化得机床,我们还从一部分机床中看到了上学期我们金工实习那些机床的影子。但给我最大的感触是整个车间里,国产的机床并不是很多。整个过程纪律严明,一边参观零件的加工,一边聆听了工程师给予我们的讲解了解了整个工厂的第一道程序。

此后,我们前往了三间组装车间,参观了52系列,66系列和47系列三种印刷机的组装。这次给我们介绍的是一位年轻的工程师,他详细的向我们介绍了这三种印刷机的一些知识。我们也了解了刚知道这几个型号产生的疑惑,原来,47,52和66的意思是最大用纸尺寸的长。其中47系列是单色印刷机,可用于印号码,打孔线和树脂凸版印刷。使用的集中供油系统可以有效的防止因局部遗忘加油造成的零件磨损,延长零件的精度和使用寿命,杜绝润滑油浪费,保护环境卫生。52系列性能较高,大都是以高级胶印机所具有的高耐久性、高精度的部件为基础,生产的高性能印刷机。同时也是可适合文字、线条印刷,实地印刷等各种印刷需要。另外通过添加多种备选装置,使机器升级到更高效率的印刷机。到66系列时,工程师大哥向我们介绍的较为详细,它分为两款:WEIHAI HAMADA66-NP 实现精美平版印刷及号码印刷的高品质重型印刷机和WEIHAI HAMADA66 真正高品质的重型印刷机。WEIHAI HAMADA66系列是以真正高质量印刷为目标而生产的大四开重型胶印机。这款先进的机械拥有按扭式与触摸式键盘,所需操作全部集中在3处操作盘上。独特的飞达可以实现高速给纸及高精度套印。通过计算机分析设定理想的墨辊排列方式,高档机拥有的装备随处可见。后来通关查询我了解到这两款62的相关参数如下:

WEIHAI HAMADA66-NP实现精美平版印刷及号码印刷的高品质重型印刷机最大印刷面积 640×470 mm 最大用纸尺寸 660×483 mm 最小用纸尺寸 297×210 mm 纸张厚度 0.04~0.4 mm 续纸方式 连续供纸式 湿润方式 水胶绒式 墨 辊

19根(上墨辊4根)水 辊

5根(上水辊2根)套准机构 滚轮式拉规 印刷速度

3,000~10,000张/小时 马 达

5.55Kw、(主电机3.7Kw气泵0.75Kw)机械尺寸

机尺寸 2,290(L)×1,375(W)×1,750(H)mm 重 量

重量 3,200kg

WEIHAI HAMADA66 真正高品质的重型印刷机 最大印刷面积 640×470 mm 最大用纸尺寸 660×483 mm 最小用纸尺寸 297×210 mm 纸张厚度 0.04~0.4 mm 续纸方式 连续供纸式 湿润方式 水胶绒式 墨 辊

19根(上墨辊4根)水 辊

5根(上水辊2根)套准机构 滚轮式拉规 印刷速度

10,000张/小时 马 达

5.55Kw、(主电机3.7Kw气泵0.75Kw)机械尺寸

机尺寸 2,290(L)×1,375(W)×1,750(H)mm 重 量 3,200kg 4点以后,我们结束参观,我们开始于工作人员进行了一些交流,我们有了更多的了解。4点半,我们乘车回校。

我们第二次去参观的是一家大型零件加工厂,由于威海是海边城市,所以这些零件大都是给船舶提供的。那天下午来到工厂,我们第一个印象就是很高很大,由于零件较大,所以建了几个很高很大的自动吊车,因此进厂后发现工厂很高,室内也较为空旷,通过了解我们知道,加工这些大型零件花费的人力,财力和时间都相当巨大。这次给我们进行讲解的是一位高高的工程师,为人冷静沉稳让我们不由自主跟着他的步伐聆听讲解。走到工厂的一头,我们发现了一个巨大的轴,旁边一块牌子写着;十万元的教训。原来,由于加工时的小小失误,造成螺纹的一点瑕疵,最终导致整个零件的报废。看到这个以后,大家都有着不小的感 触。此后我们又参观了他们的一些小型零件的加工。同样。4点半后我们结束参观回校。

认识实习主要是学习一些我们专业课的基础,我们学到了一些我们在课本中学习不到的东西.实习提供了一个机会,让大家接触到真实的工作环境有了实习的经验。我相信我以后毕业工作时可以更快更好的融入新的环境,完成学生向职场认识的转换。

坦白说,我以前对自己专业比较迷茫,但这次实习我了解了我们专业的大体方向,也同时提高了自己对专业的兴趣和主观能动性。

我相信自己能渐渐明确自己以后发展奋斗的目标,同时也增加了自己学好本专业的信心。

但是,通过这次实习我真正感觉到步入社会后我们要学的东西还很多,差距还是有的,如专业课知识欠缺,动手能力不足等等。我也知道这不是一天两天能学会的,不过我坚信我能做到这一点。这次实习对我将来毕业设计一定有很大的帮助,我想能够在以后的设计中体会到更对的东西。最后还是谢谢给予我的这次机会,让我真正学到了很多专业和社会知识。

老师,工程师们您们都辛苦了,真诚的感谢您们。

C语言上机实训 第5篇

一、程序填空

共1题(共计30分)第1题(30.0分)

题号:470 /*------------------------【程序填空】

--------------------------

功能:从两个数组中分别提取任意元素x[i],y[j],问|x[i]-y[j]| 的最小值是多少 ?

------------------------*/ #include #include

/***********SPACE***********/

#define min(x, y)

(【?】)

x

int min_distance(int x[], int y[], int m, int n){

int minimum = INT_MAX;

int index_x = 0, index_y = 0;

while(index_x < m && index_y < n)

/***********SPACE***********/

if(【?】)x[index_x] >= y[index_y]

{

minimum = min(minimum, x[index_x]-y[index_y]);

index_y++;

}

else

{

minimum = min(minimum, y[index_y]-x[index_x]);

/***********SPACE***********/

【?】index_x++;

}

return minimum;

}

#include void main(void){

int x[] = { 1, 3, 7, 11, 18};

int m

= sizeof(x)/sizeof(int);

int y[] = { 4, 5, 8, 13, 22};

int n

= sizeof(y)/sizeof(int);

int i, min_distance(int [], int [], int, int);

printf(“nCompute Minimum Distance Between Two Sorted Arrays”);

printf(“n====”);

printf(“nnGiven Array #1 :”);

for(i = 0;i < m;i++)

printf(“%5d”, x[i]);

printf(“nnGiven Array #2 :”);

for(i = 0;i < n;i++)

printf(“%5d”, y[i]);

printf(“nnMinimum Distance = %d”, min_distance(x, y, m, n));} 答案:

=======(答案1)======= xx?x:y

=======(答案2)======= x[index_x] >= y[index_y] =========或========= y[index_y]<=x[index_x]

=======(答案3)======= index_x++ =========或========= index_x=index_x+1 =========或========= ++index_x

二、程序改错

共1题(共计30分)第1题(30.0分)

题号:26 /*-----------------------

【程序改错】

-------------------------

功能:实现3行3列矩阵的转置,即行列互换。

-----------------------*/ #include fun(int a[3][3],int n){

int i,j,t;

for(i=0;i

for(j=0;j

/**********FOUND**********/

scanf(“%d”,&a[i][j]);

for(i=0;i

{

for(j=0;j

printf(“%4d”,a[i][j]);

printf(“n”);

}

for(i=0;i

/**********FOUND**********/

for(j=0;j

{

/**********FOUND**********/

a[i][j]=t;

a[i][j]=a[j][i];

/**********FOUND**********/

t=a[j][i];

}

for(i=0;i

{

for(j=0;j

printf(“%4d”,a[i][j]);

printf(“n”);

} } main(){

int b[3][3];

fun(b,3);} 答案:

=======(答案1)======= scanf(“%d”,&a[i][j]);=========或========= scanf(“%d”,(*(a+i)+j));

=======(答案2)======= for(j=0;jj;j++)=========或========= for(j=0;j<=i;j++)=========或========= for(j=0;i>=j;j++)=========或========= for(j=i+1;j

for(j=i;j=j;j++)=========或========= for(j=i+1;j<=n-1;j++)=========或========= for(j=i;j<=n-i;j++)

=======(答案3)======= t=a[i][j];

=======(答案4)======= a[j][i]=t;

三、程序设计

共1题(共计40分)第1题(40.0分)

题号:341 /*-----------------【程序设计】

-------------------

功能:删除所有值为y的元素。数组元素中的值和y的值由

主函数通过键盘输入。

-----------------*/

#include #include #include #define M 20 void wwjt();

void fun(int bb[],int *n,int y){

/**********Program**********/

int i,j;for(i=0;i<*n;)

{

if(bb[i]==y)

{for(j=i;j<*n;j++)

bb[j]=bb[j+1];

*n=*n-1;

}

else

i++;

}

/********** End **********/ } main(){

int aa[M],n,y,k;

printf(“nPlease enter n:”);scanf(“%d”,&n);

printf(“nEnter %d positive number:n”,n);

for(k=0;k

printf(“The original data is:n”);

for(k=0;k

printf(“nEnter a number to deletede:”);scanf(“%d”,&y);

fun(aa,&n,y);

printf(“The data after deleted %d:n”,y);

for(k=0;k

printf(“n”);

wwjt();}

void wwjt(){

FILE *IN,*OUT;

int n;

int i[10];

int o;

IN=fopen(“in.dat”,“r”);

if(IN==NULL)

{

printf(“Read FILE Error”);

}

OUT=fopen(“out.dat”,“w”);

if(OUT==NULL)

{

printf(“Write FILE Error”);

}

for(n=0;n<10;n++)

{

fscanf(IN,“%d”,&i[n]);

}

fun(i,&n,3);

for(o=0;o

{

fprintf(OUT,“%dn”,i[o]);

}

fclose(IN);

fclose(OUT);}

答案:----------------------int i,j;for(i=0;i<*n;)

{

if(bb[i]==y)

{for(j=i;j<*n;j++)

bb[j]=bb[j+1];

*n=*n-1;

}

else

i++;

}----------------------

试题1 所属语言:C语言 试卷方案:C语言上机实训 试卷总分:100分 共有题型:3种

一、程序填空

共1题(共计30分)第1题(30.0分)

题号:417 /*------------------------【程序填空】

--------------------------

功能:利用全局变量计算长方体的体积及三个面的面积。

------------------------*/ #include int s1,s2,s3;int vs(int a,int b,int c){

int v;

/***********SPACE***********/

v=【?】;

s1=a*b;

/***********SPACE***********/

s2=【?】;

s3=a*c;

return v;} main(){

int v,l,w,h;

printf(“ninput length,width and height:

/***********SPACE***********/

scanf(”%d%d%d“,【?】,&w,&h);

/***********SPACE***********/

v=【?】;

printf(”v=%d

s1=%d

s2=%d

s3=%dn“,v,s1,s2,s3);} 答案:

”);

=======(答案1)======= a*b*c =========或========= a * b * c

=======(答案2)======= b*c =========或========= b * c

=======(答案3)======= &l

=======(答案4)======= vs(l,w,h)=========或========= vs(l , w , h)

二、程序改错

共1题(共计30分)第1题(30.0分)

题号:392 /*-----------------------

【程序改错】

-------------------------

功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。例如:输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出平均成绩为77.9,最低高分为56,得最

低分的人数为1人。

-----------------------*/

#include

float Min=0;int J=0;float fun(float array[],int n){

int i;float sum=0,ave;

Min=array[0];

for(i=0;i

{

if(Min>array [i])Min=array [i];

/**********FOUND**********/

sum=+array [i];

}

/**********FOUND**********/

ave=sumn;

for(i=0;i

/**********FOUND**********/

if(array [i]=Min)J++;

return(ave);}

main(){

float a[10],ave;

int i=0;

for(i=0;i<10;i++)

scanf(“%f”,&a[i]);

ave=fun(a,10);

printf(“ave=%fn”,ave);

printf(“min=%fn”,Min);

printf(“Total:%dn”,J);}

答案:

=======(答案1)======= sum+=array[i];=========或========= sum=sum+array [i];

=======(答案2)======= ave=sum/n;

=======(答案3)======= if(array [i]==Min)J++;

三、程序设计

共1题(共计40分)第1题(40.0分)

题号:390 /*-----------------【程序设计】

-------------------

功能:编写函数求1~100中奇数的平方和。

结果为166650.000000。

-----------------*/

#include void wwjt();

float sum(int n){

/**********Program**********/

/********** End **********/ } main(){

printf(“sum=%fn”,sum(100));

wwjt();}

void wwjt(){

FILE *IN,*OUT;

int i;

float o;

IN=fopen(“in.dat”,“r”);

if(IN==NULL)

{

printf(“Read FILE Error”);

}

OUT=fopen(“out.dat”,“w”);

if(OUT==NULL)

{

printf(“Write FILE Error”);

}

for(j=0;j<5;j++)

{

fscanf(IN,“%d”,&i);

o=sum(i);

fprintf(OUT,“%fn”,o);

}

fclose(IN);

fclose(OUT);}

答案:----------------------float s=0;int i;for(i=1;i<=n;i=i+2)

s=s+i*i;return(s);----------------------

试题3 所属语言:C语言 试卷方案:C语言上机实训 试卷总分:100分 共有题型:3种

一、程序填空

共1题(共计30分)第1题(30.0分)

题号:410 /*------------------------【程序填空】

--------------------------

功能:有n个整数,使其前面各数顺序向后移m个位置,最后m个数

变成最前面的m个数

------------------------*/ #include

/***********SPACE***********/

move(【?】)int n,m,array[20];{

int *p,array_end;

/***********SPACE***********/

array_end=*(【?】);

for(p=array+n-1;p>array;p--)

/***********SPACE***********/

*p=*(【?】);

*array=array_end;

m--;

if(m>0)move(array,n,m);} main(){

int number[20],n,m,i;

printf(“the total numbers is:”);

scanf(“%d”,&n);

printf(“back m:”);

scanf(“%d”,&m);

for(i=0;i

scanf(“%d,”,&number[i]);

scanf(“%d”,&number[n-1]);

/***********SPACE***********/

move(【?】);

for(i=0;i

printf(“%d,”,number[i]);

printf(“%d”,number[n-1]);}

答案:

=======(答案1)======= array,n,m

=======(答案2)======= array+n-1 =========或========= array + n-1

=======(答案3)======= p-1

=========或========= p-1

=======(答案4)======= number,n,m

二、程序改错

共1题(共计30分)第1题(30.0分)

题号:413 /*-----------------------

【程序改错】

-------------------------

功能:读取7个数(1-50)的整数值,每读取一个值,程序打印

出该值个数的*。

-----------------------*/

#include main(){

int i,a,n=1;

/**********FOUND**********/

while(n<7)

{

do

{

scanf(“%d”,&a);

}

/**********FOUND**********/

while(a<1&&a>50);

/**********FOUND**********/

for(i=0;i<=a;i++)

printf(“*”);

printf(“n”);

n++;} } 答案:

=======(答案1)======= while(n<=7)

=========或========= while(n<8)

=======(答案2)======= while(a<1||a>50);=========或========= while(a>50||a<1);

=======(答案3)======= for(i=1;i<=a;i++)

三、程序设计

共1题(共计40分)第1题(40.0分)

题号:337 /*-----------------【程序设计】

-------------------

功能:将两个两位数的正整数a、b合并形成一个整数放在 c中。合并的方式是:将a数的十位和个位数依次放

在c数的百位和个位上,b数的十位和个位数依次放

在c数的十位和千位上。

例如:当a=45,b=12。调用该函数后,c=2415。

-----------------*/

#include void wwjt();

void fun(int a, int b, long *c)

{

/**********Program**********/

/********** End **********/ }

main()

{

int a,b;long c;

printf(“input a, b:”);

scanf(“%d%d”, &a, &b);

fun(a, b, &c);

printf(“The result is: %ldn”, c);

wwjt();

}

void wwjt()

{

FILE *rf, *wf;

int i, a,b;long c;

rf = fopen(“in.dat”, “r”);

wf = fopen(“out.dat”,“w”);

for(i = 0;i < 10;i++)

{

fscanf(rf, “%d,%d”, &a, &b);

fun(a, b, &c);

fprintf(wf, “a=%d,b=%d,c=%ldn”, a, b, c);

}

fclose(rf);

fclose(wf);

}

C语言上机指导1 第6篇

一、上机目的(1)、通过练习掌握指针的概念及应用;

(2)、通过练习了解指针作为函数参数的使用方法;

(3)、复习一位数组、二维数组和字符串的概念及应用;

二、上机内容及要求

首先在D盘根目录下新建一个文件夹,并用自己的10位学号姓名命名,将自己上机过程编写的C程序全部保存到该文件夹中。

本次上机任务

(1)在不改变元素排列顺序的基础上,从10个数中找出其中的最大值和最小值。(形参和实参均使用指针变量,参考【例8-17】)文件名保存为T1

(2)编写函数my_strcat(s1,s2),将s2所指字符串的内容连接到s1所指字符串的后面,并自动覆盖s1串末尾的’’,要求函数返回s1的地址值。(参考【例8-20】)文件名保存为T2

C 语言上机总结报告 第7篇

上机实验报告

经过了九周的上机练习,我们算是完成了阶段性的胜利,从书本上枯燥的知识,通过上机练习把他们学以致用,融会贯通;不得不说,上机对于大一不允许带电脑,算得上是对c语言巩固和提高的重要途径了,很多我们不懂得问题,通过敲一下代码就知道可不可以这样了。还有很多格式,看不懂的代码,也都能解决。另外,重要的是通过上机我也拾得了编程的乐趣,链接好的程序就像是我的Baby,一节课生好几个。这是一种莫大的成就感。原来我还可以这样。如果仅是书本上的知识,我很难保证能坚持看下去,因为要把抽象的东西阐述出来,很多时候都是很枯燥的。所以上机便是这样一个辅助的途径。下面是我这九周所积累的一些问题和经验。

1.首先就是书写的问题。到现在我还时不时忘了加分号。这么一个细微的问题有时候会报很多错。其中易犯的便是scanf中&的使用,以及&&逻辑运算符和位运算符不分,==错写=,自定义函数,声明时不加分号,do,while语句while后忘加分号,以及数组不从a[0]开始写,for循环中控制条件用<还是<=,于是就会溢出。

2.printf里格式的问题,想要在数前补0整数可以靠.num而浮点数需要前加0,对于输出无符号16进制数%x,八进制数%o和十进制%u,总是记不住,还有一个比较特别的是可以用*占位,然后在后面的参数中说明精度和宽度,用#让浮点数始终有小数,字符串的5.4s只显示4位。另一个我发现无关紧要的是printf中lf和f没什么区别,scanf却不一样。

3.scanf的另一个问题是当出现空格是,读取的字符串就不完整了,在百度后,我找到了更好的gets函数,便可以读取空格,还有scanf的一一对应特性,不过空格不算。

4.++i和i++的使用问题。很多时候并不在意这些,便会导致数据的溢出,和结果总是偏差1,所以在使用时先得想好用哪个,如int k;

while(k--)

;printf(“%d”,k)结果是-1,因为在while判断过程中还要减1。

5.Define 一个表达式时不爱每一层都加括号。导致运算时优先级使运算和目的不符。我记不下那么多的运算符的优先级,所以我解决的方法便是每个运算都加上括号。

6.总是按照自己的思维做事,像是想把一个数组复制给另一个数组就直接用=赋值了,事实证明并不可行,而是需要用for循环一个一个赋值,而字符串则用strcpy,但结构体却可以直接赋值。

7.条件语句if,while,for等加括号和在哪加括号的的问题,常常因为内容少所以不加括号经常导致错误,尤其在嵌套语句和连续多个条件语句时,总是会出错,所以以后我学会了每句话都加上大括号。并且尽量使格式工整。

8.忘记添加头文件。或者忘了头文件的名字,像是stdlib,malloc…… 这样函数就变得没有了意义。这个得靠记忆和多练。

9.函数要求的实参的格式忘记了,这时候总是会报格式不符,比如malloc.calloc.recalloc,对参数的要求的区别,qsort函数里,compare函数指针参数,compare的实际参数需要强制转换。

10.Switch用法,switch只能用于char和int,且不用break就会一直执行下去,我就会忘掉这个,还有给a加引号

11.数组的声明问题,数组是c语言里比较让人头大的问题了。其中,让我不能理解的便是为什么二维数组不能a[][]={},a[][N]={}而必须至少a[N][]={},这就让我栽过跟头,还有字符数组为什么加’’就变成字符串了,当然这都是要求,在声明时需要谨慎再谨慎。

12.指针的运用中,在参数调用和返回也时常出现格式不符,值传递改变不了实参,址传递有时候也改变不了比如返回局部变量的地址,这时就需要static静态变量延长存储时间,而extern在函数中仅是对之前的变量的声明,并不能在其中定义一个外部变量,static也只能定义一次,这类问题时常困扰着我,以为经常不知道错在哪里。另外还有一种方法也能改变指针的地址而改变实参指针的指向,那便是通过双重指针,**p 13.对于指针运用中另外很让人困惑的是二级指针的指向问题,而他们常常又和二维数组结合,例如a,&a[0],a[0],&a[0][0],a[0][0],他们乍一看都分别不出来,需要仔细的考虑,实际上a=&a[0],&*(a[0]+0)=a[0]=&a[0][0],实际上他们都是逐级递增的,例如对*(a[0]+i)就是对确定一行的列的选择,*(a+i)则是对行数的选择,常常用指针指向这一行,然后进行操作,然而经常&a,&a[0]和&a[0][0]却是相同的地址,但他们的跨度却不一样,这样常常在实验的过程中就是对数组格式的写错导致根本不知道哪出的错,也无从修改。所以还是得多理解透彻他们的含义,否则只会在写代码时犯懵。

14.指针运用的另一个问题就是,指针并不具有空间,需要进行空间的开辟,这类问题也常常出现在想要声明一个未知大小的数组,这时候就需要用malloc来开辟了,而malloc还不能放置在main函数体外,经常在scanf后放置。

15.在上机过程中我曾不理解为什么char*p=”ashjkhasljk”可以成功,而已定义的数组a,就不能a=“adfadsad”;char*p,p=”dasaf”可以,但是用scanf输入”dasaf”就不对,查阅资料我才得知,“”表达式的值就是一个地址,p=””,开辟了空间。而scanf直接把址给指针,并没有申请空间。其次程序把字符串放到了常量区,所以不容修改其值,这里的p[0]也不得修改,p开辟了一段常量空间把字符串放进去,其值也不得修改,但可以改变P的指向,所以相当于const char*p 16.关于函数,要记住函数不能嵌套定义,但可以调用。这也是我犯过的错误。

17.结构体的声明和联合还有枚举的声明经常搞混,查书才知道有两种方法来声明结构类型名,一种结构标记,一种typedef,第一种直接可以在其后写变量,另一种需要再换行再声明。还有其后}要加分号会忘,主要是还是对结构名和变量搞不清楚,比如struct student new在实验中出现引用其中的元素不知道是是应该student.new.还是new.除此,不明白Union为什么经常没有标记,直接就是变量。最后便是结构数组的初始化总是掌握的不好,可能因为用的少。

由于没有保留上机报告的原稿,所以以上是我暂时能回忆起来我所遇到的问题和我的想法。

经历了9次的实验我的收获当然不仅仅是这些问题,重要的是编程的思维,不是一上来就立马开始打代码,而是构建一个清晰的流程图就如《上机实验报告》所写,然后逐步实现,有时候有多个函数时需要先写一个大的框架,然后再完善。

另外,还有程序的调试,如果都写在函数里,则,注释部分函数然后进行调试。或者单步调试部分代码,观察值的变化。

C语言二级上机考试要点总结 第8篇

2007年9月,教育部考试中心对现有的全国计算机等级考试大纲进行了改革,二级C语言上机考试时间由60分钟增加到了90分钟,编程环境由以前的TC2.0改为VC++6.0。[2]本文根据对近几年来二级C语言上机考试中的程序设计题进行归类总结,提出相应的策略,并对考生应对2007新大纲以后的C语言上机环境给出一些建议。2 对以往考试的分析

历年的全国计算机等级考试中二级C语言上机考试程序设计题目全部出自于由南开大学出版社编写南开100题,每次考试教育部考试中心会对题库做相应的改动,增加一些新的题型或题目,考试中,考生随机抽取一套进行测试。笔者对2005年4月至2007年9月2004版新大纲以后的6次考试中的程序设计题目进行了总结,将这些题目一共分成了6大类,对每种类型的题目进行了分析。2.1 对一维数组和字符串的操作

该类型的题目在以往的机试中所占比例最大,为40%,考生应对该知识点做全面的复习和掌握。一维数组可以分为数值型和字符型,其中数值型数组的数据类型为整型和实型,字符型数组的数据类型为字符型,我们通常会把字符型数组叫做字符串,但是应该注意字符型数组与字符串之间是存在区别的,也就是’’结束标志问题。在复习该部分的时候,考生应该掌握以下两个问题:(1)对一维数组的操作

对一维数组进行操作的时候,不可避免的要访问相关的数组元素,在C语言中访问数组元素一般采取单层循环的方法进行遍历,假设数组长度为n,数组下标是在0到(n-1)之间的,考生应该牢固掌握在一维数组中求最大值、最小值,移动元素,查找特定值,存储数组元素的方法。

(2)对字符串的操作

该类问题是每次考试的重点和难点,特别是将字符串同指针结合起来以后,难度就更大了。考生在解决此类问题是应特别注意字符串的结束标志’’,它不仅仅用来作为字符串的结束标志,而且在对字符串进行操作的时候,它也是循环的结束标志。考生在复习该部分的时候,应该注意这样的几个基本问题:大小字母转换、奇偶数判别、删除或添加指定的字符和字符的移动。此外,考生应该牢固掌握指针的特性及字符串操作函数的使用和实现方法,特别是字符串连接函数与求子串函数,在以往的考试中多次要求考生自己编写,考生应对该知识点做重点掌握。2.2 数值计算

该类型的题目在历年的机试中占22%,考查的机率也非常高。该类题目一般给定一个数列计算公式,然后要求考生编写一个函数类实现求数列的前n项的值、累加和或者积。在解决该类的问题,首先要找到给定数列的变化规律,然后根据其变化规律来编写一个单层或者双层的循环来求其相应的值。在编写程序的过程中,往往还会用到一些数学函数,如:sqrt()、fabs()、pow()等,考生应该牢固掌握math.h中的一些常用数学函数的功能和使用方法。另外,还应该注意数据类型之间的区别,特别是float和int类型,不同的数据类型产生的运算结果也是不一样的。2.3 对结构体的操作

该部分对非计算机专业的学生来说是一个难点,因为结构体在《数据结构》这门课程中应用最为广泛,但考生忽视对该知识点的复习,但在以往的机试中,有17%的题目是属于该类型。考生在复习这部分的时候,首先应注意结构体成员的两种不同的引用方法:结构体变量和指向结构体的指针,也就是结构体成员运算符’.’和指向运算符’->’,在编程的过程中,往往会涉及到结构体数组,其实这类数组除了数据类型是结构体以外,其它的特性和普通数组是一样的,结构体除了定义、赋值和初始化以外,它的其它操作和普通变量也是一样的,包括在结构体数组(记录)中进行查找、删除、求最大最小值等操作,我们应该用对待普通变量的方法来解决结构体的问题,这样的话,难度就可以大幅度的降低。2.4 对二维数组的操作

该类问题在历年的机试中占16%,考生应对二维数组的数组元素的遍历方法、存储方式、矩阵转换等问题做重点掌握。在C语言中,访问二维数组的数组元素一般采用双层循环的方法实现,因为二维数组具有两个下标:行下标与列下标;二维数组可以按行或者按列转化成一维数组进行存储;对二维数组进行行列转换的时候,要将行下标和列下标进行互换。考生还应该掌握上三角矩阵、下三角矩阵的特性,在考试中,该知识点也有所涉及。2.5 数制转换

该部分在以往的机试中占11%,包括两类问题:一是整数合并,二是类型转换。在复习该部分时,考生应该注意C语言中int型、long型、float型和double型数据所占的存储空间的大小和精度,注意’%’(模)运算和’/’(除法)运算的特点,特别应该灵活的使用模运算与除法运算求数据相应位数上的数值。掌握强制类型转换的方法以及按规定的位数保留小数的方法。2.6 素数

该部分在历年的机试中占6%,考生应该牢固掌握素数的基本概念和判断素数的方法。特别需要考生注意的是整数1不是素数,所以在判断素数的时候,应该从2开始,到(n-1)结束,能够除尽的不是素数,不能除尽的是素数。判断素数问题是C语言中的一个基本算法,不仅会在程序设计中会考到,而且往往在程序填空和程序改错中也会有所涉及,因此,考生应对该知识点认真复习。3 程序设计中应注意的问题 3.1 熟悉编程环境

根据2007年9月教育部考试中心颁布的新大纲,二级C语言的编程环境由TC2.0改为VC++6.0,考生应该熟练掌握VC++6.0的使用方法,虽然VC支持鼠标操作,但是考生还是应该掌握几个常用快捷方式来提高编程效率。特别要注意在对程序进行改动以后要保存,要进行编译连接生成可执行(.exe)文件。3.2 养成良好的程序设计风格

二级C语言机试中的程序设计题,一般来说程序都比较简短,源代码一般不超过5行,在题目指定的函数内编写程序。考生在答题的时候尽量采用易于理解而且比较简单的代码来解决问题,注意不要改动函数的参数,语句的界符“{}”也应该具有层次性的缩进,必要时,使用一定的注释来帮助自己理解程序。3.3 谨慎使用指针

指针是C语言的精华,也是机试考查的重点内容,指针的使用非常灵活,在使用的指针的时候一定要注意对其进行初始化,所谓初始化也就是给指针一个初值,没有初值的指针是很危险的,除了一定得不到正确答案外,如果指针越界,容易引起死机。如果死循环带来的死机是“假死”,大部分可以用“Ctrl+Break”来恢复,但指针越界引起的死机却是真死,请考生一定要牢记。[3] 3.4 熟练掌握循环结构

循环结构的程序是程序设计中涉及最多的知识点,根据以上的分析,我们可以看出几乎每一类题目都会涉及到使用循环来解决问题,因此考生应该掌握循环结构的特征和使用方法,以达到能够熟练使用的目标。应该引起注意的是,在编制循环结构程序的时候考生应该尽量使用“for”循环和“while”循环,避免使用“do……while”循环和“goto”语句,因为“for”循环和“while”编写出来的循环程序易于理解,不容易出错。3.5 沉着应战,认真细心

二级C语言上机考试时间有限,虽然从以前的60分钟改为了90分钟,但是相对于其它语种的上机考试来说,二级C语言的上机时间还是非常紧迫的。考生在答题的过程中应该保持一个良好的心态和平静的心情,遇到问题的时候不能慌乱,最好能够在机试时带一张草稿纸和一支笔,在编程之前先画出程序的流程图来明确解题思路。在遇到程序错误时一定要根据错误代码检查相应位置,检查的过程中应该认真仔细,确保能够解决问题。4 结束语

二级C语言上机改错题技巧总结 第9篇

一、改错题之方法步骤

1.上机考试中改错题占30分,一般有两个地方有错误,题型简单

2.做改错题时先看出错的地方,分析语法错误,如果能用C语言的语法判断出错误,改之即可 3.没有语法错误即分析逻辑错误,逻辑错误可以从几个方面分析:

(1)从题目的要求中找到错误,例如:题目要求计算s=1+1/2+1/3+„+1/n,那么循环的范围就应该是for(i=0;i<=n;i++),但是考试中经常将其写为:for(i=0;i

(3)重点注意函数的调用、函数的返回值类型,函数的形参,这个是上机考试中的重点(4)注意细节,请参考以下为考生总结的知识(5)多练习,多思考,多总结

二、改错题之语法错误 1.关键字出错

(1)关键字出错,指的是C语言中的关键字出错。C语言的关键字都是小写字母,并且在VC++6.0中以蓝色字体显示,如果常见的关键字是黑色字体,可以断定关键字出错;

(2)if关键字出错

1)举例:上机题库P79第6题

/************found************/ If(substr[k+1]==')

2)类似题目:

12、35题

(3)double关键字出错

1)举例:上机题库P86第23题

/**********found**********/ double fun(double a, dounle x0)2)类似题目:

36、51(4)while关键字出错

1)举例:上机题库P77第2题

/**********found**********/ wihle(q>p)2)类似题目:

(5)return关键字出错

1)举例:上机题库P101第54题

/************found************/ Return(Value);2)类似题目:86 2.格式出错

(1)C语言中的语句、基本结构、函数等都有相应的规范格式,程序中将这些格式书写错误,将导致编译器无法识别程序,因此导致出错;

(2)语句末尾少分号

1)分号是语句结束的标志,每个语句都必须以分号结尾 2)举例:上机题库P77第2题第一个出错点

/**********found**********/ q=p+i 3)类似的题目:28题第一空、29题第1空、34题第2空、37题第2空、48题第2空,49第1空,59第2空、70、79、97

(3)for结构格式出错

1)for结构的格式:for(表达式1;表达式2;表达式3){ 循环体语句 },for结构体中表达式必须以分号隔开,改错题中经常出现将for结构中分号错写为逗号的情况;

2)举例:上机题库P77第3题第2个出错点

/************found************/ for(i = 100, i <= m, i += 100)3)类似的题目:6题第一空、14题第二空、53第1空、73、86第1空

(4)if结构格式出错

1)if结构的格式:if(表达式),if后面必须加上小括号 2)举例:P93第37第1个出错点 /************found************/ if n = = 0 3)类似题目:59题第1空

(5)数组格式出错

1)一维数组的定义形式:类型名 数组名[常量表达式],谨记[]是数组的独有特征 2)举例:P89第28题第2个出错点

/**********found**********/ t(k)=b(j);3)举例2:P97第1个出错点(二维数组不能省略列下标)

/************found************/ int fun(int n, int xx[][])4)类似题目:95题第1空

(6)函数格式出错

1)记住函数名后面一定是花括号,不能是方括号,方括号只有在数组下标中用到 2)举例:P86第22题第1出错点

/**********found**********/ n=strlen[ aa ];3)scanf(输入控制,输入数据列表),scanf函数中输入数据列表要求为变量的地址 4)举例2:P95第41题第2出错点

/*********found**********/ scanf(“%d”,a[i][j]);5)类似题目:第80题第1空

(7)命令行格式错误

1)#include “stdio.h”,include和define前面都必须有# 2)举例:P84第17题第1出错点

/************found************/ include(stdio.a)3.使用了未定义的变量:变量必须先定义后执行

(1)0(零)和o(字母欧)的区别

1)区别:零像鸡蛋,字母欧像乒乓球 2)举例:上机题库P85第19题第一个出错点 /************found************/ a2=k/1o;3)类似题目:19题第一空、23题第二空、43题第二空、51题第二空、77、98、(2)P(大)和p(小)的区别

1)区别:一般在定义时候p为小写,但是在使用的时候变为大写P,做题时候一定要细心

2)举例:上机题库P91第33题第一出错点

fun(int *a,int n,int x){ int p=0,i;a[n]=x;while(x!=a[p])p=p+1;/**********found**********/ if(P==n)return-1;3)类似题目:33题第一空、82

(3)普通变量大小写的区别

1)定义时候和使用时候变量的大小写不一致,违背了变量必须“先定义后执行”的原则

2)举例:18题第2空

int fun(float *s, int n, float *aver){ float ave, t = 0.0;int count = 0, k, i;for(k = 0;k < n;k++)/**************found**************/ t = s[k];ave = t / n;for(i = 0;i < n;i++)if(s[ i ] < ave)count++;/**************found**************/ *aver = Ave;/*分析:定义时候float ave, t = 0.0;ave为小写,但是此时使用时候却是Ave大写,因此出错*/ return count;} 3)类似题目:18题第2空、22题第2空、38题第1空、54题第2空

三、改错题之逻辑错误 1.运算符号出错:

(1)C语言中除号是“/”不是“”(2)赋值号(=)和等号(= =)混淆

1)记住在if语句中出现赋值号(=)一般是讲它改为等号(= =)。2)类似题目:14题第一空和29题第二空都是这样的错误、87、91、94 2.表达式的取值范围出错:

(1)当遇到计算表达式的累加或是累减时,一定用到循环来完成相应的操作。

(2)例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-….-1/m*m这个表达式,在这个题目中第一空有这样的for语句:for(i=2;i

y=1-1/2*2-1/3*3-….-1/(m-1)*(m-1)和题目要求的不符,因此将i

(3)做这样的题目看两点:一看题目中的表达式,二看for语句中变量的取值范围。(4)类似题目:31题第二空、52第2空、81、88、3.C语言中的除法运算:

(1)这个考点同样考查表达式的相关知识。

(2)例如:改错题第七题中要求计算t=1-1/2*2-1/3*3-….-1/m*m这个表达式,在这个题目中第一空有这样的for语句:for(i=2;i

(3)记住:1/2的值为零,只有1.0/2或是1.0/2.0的值为0.5。(4)类似题目:39题第一空也同样是这种错误、57、76 4.找最大值和排序问题:

(1)遇到这种题目在改错题中最容易考查的是大于(>)、小于(<)等符号的变化,当你查找出错的地方没有语法错误,也没有使用了未定义的变量时,记住这个口诀:将大于改为小于,将小于改为大于!

(2)类似题目:11题第二空、12题第一空和13题第二空、4题第二空、58 5.函数的返回值及其参数:重点

int fun(int x,int y)

main(){

{ if(x>y)return x;

int a,b,c;else return y;

scanf(“%d%d”,&a,&b);}

c=fun(a,b);

printf(“最大值为:%d”,c);}(1)函数的返回类型:

1)在上面的例子中fun函数的返回值是int,如果将int改为double,很明显是错误的。从两个地方来看,首先return x;中x的类型必须和fun函数中的返回值相同,x是整型。其次c=fun(a,b);中fun函数将一个返回值赋值给了变量C,说明函数返回的值一定是整型。

2)记住:函数调用、函数的返回值和ruturn中数据类型必须一致!

3)类似题目:1.1、3.1、16.1、19.2、34.1、36.1、40.1、48.1、71都死这样的错误,(注1.1表示第一题第一空)。78、89、90、(2)return后面的表达式及其类型:19.2、30.2、39.2(3)函数传递的参数:

int fun(int *x,int *y)

main(){

{ if(*x>*y)return *x;

int a,b,c;else return *y;

scanf(“%d%d”,&a,&b);}

c=fun(&a,&b);

printf(“最大值为:%d”,c);

} 1)一定注意:传递的是值还是地址。比较上面两个例子大家很容易区别传递的是值还是地址,第一个例子调用函数的时候传递的是值,因此在fun函数的形参中x和y仅仅是普通的变量,而第二个例子中调用函数的时候传递的是地址,因此在fun函数的形参中x和y就是两个指针变量。

2)类似题目:5.1、13.1、17.2、20.1、25.2、52.1、56、84、85、100(4)指针的使用:

int fun(int *x,int *y){ if(*x>*y)return *x;else return *y;}

1)在此例中fun函数的形参是x和y,它们的类型是整型的指针,那么在fun函数的函数体中使用到x和y的值时一定要区分:x>y比较的是x和y所存变量地址的大小,*x>*y才是比较值的大小。2)如果存在*x=x+y;的类似情况一定是错误的,必须要将赋值号的左右两边的类型变为一致。

3)类似题目:5.2、5.3、20.2、24.2、35.1、44.1、72、75、一定特别注意!

6.数组:

(1)数组下标的初始值:数组下标从零开始,到长度减一结束。

1)考试技巧:当出错行在定义部分时,先检查该定义语句有没有语法错误,再看定义语句中的变量有没有赋初始值,最后看变量赋的初始值有没有正确。

2)定义初始值有窍门,遇到累加时,用来存放累加和的变量一般赋值为零,遇到求阶乘时,用来存放阶乘值的变量一般赋值为一。

3)8.1中的变量k赋值为1,但是数组的下标只能从0开始,因此将1改为0就行了。

(2)普通变量的初始值:

1)依照上面的技巧,我们同样可以将它延伸到普通变量中。41.1中需要将变量的值进行初始化,题目中有这样的要求:“输出主对角线元素之和”,既然这样我们很肯定初始值应该为零,接着我们看看是给哪个变量赋值?看printf(“sum=%d”,sum);输出的是sum的值,说明sum就是我们要补充在横线上的变量。2)10.1也可以用同样的方法来分析。

(3)数组和字符串长度减一:

1)当使用数组中的元素时,最大值只能到数组长度减一。字符串以’’作为字符串的结束标志,因此取值最大也只能到字符串长度减一。25.2中输出printf(“%d”,aa[i]);分析程序知道i在此时就是数组的长度,我们要输出数组中的元素,最大就只能到aa[i-1],因此改为 printf(“%d”,aa[i-1]);就行了。2)4.1和38.2中考查的是字符串长度减一的问题。

(4)数组下标往后走:

1)当题目要求将一个数组中的元素直接赋值或是以某种方式复制到另一个数组中时,接受数据的数组中的下标要自增。9.1中s[j]=s[i];将s[i]中的值复制给s[j],联系上下函数段发现i是一个变量被for语句控制,从0开始直到遇到’’结束。i一直在加但是j没有变化,因此改为s[j++]=s[i];即可。2)类似的题目有:25.2、26.2、32.1、50.2。

7.特例:

(1)部分题目的解答很特殊,需要根据上下文中的内容来解答题目:例如10.1,在此题目中,定义了变量t=0;根据下面程序中的循环,s=0.0,首先加的是变量t的值,即s的值是从 0.0开始的,s得到的值是:s=0.0+0.0+1.0/3+„„,观察表达式的值,这个少加了第一项1.0的值,所以变量t的初值不能是0.0,只能是1.0,或者是1;

(2)21.2中的这个题目中,表达式的值是从2/1+3/2+5/3„„即表达式的规律是从第一项开始,以后的每一项的分子是前一项的分子和分母的和,分母为前一项的分子。所以该题目的第二个空中的内容应该是:c=a;a+=b;b+=c;这一条语句中 a代表的变量的分子,b代表的是变量的分母,执行第一个表达式的值,把a的值赋值给变量c,第二个表达式是把分子和分母的和相加复制给变量a,第三个表达式是把原来a的值和变量b的值相加之后得到的值赋值给变量b,则变量b得到的值也为分子分母的和,不满足题意,而分母应该为原来分子的值。第三表达式的值应该改为:b=c;

(3)类似的题目有:33.2、40.2、43.1、47.1、50.1 8.素数 11.1、29、83(1)判断一个数是否是素数的方法很多,的是只用掌握一种即可,首先掌握判断一个素数的方法;

(2)素数的定义:

1)是自然数

2)只能被1和本身整除,2到本身减一之间的数不能整除该数。

(3)判断m是否为素数的格式:

for(i=2;i

if(m%i= =0)

break;

if(m= =i)

表明m是素数;

(4)素数只能被1和m,那么用2到m-1之间的数除m,如果有一个数能整除m,说明m不是一个素数,就不用再判断后面的数值了,用一条break语句提前结束函数;如果一直都不能整除,则说明m是一个素数。那么用循环语句表示2到m-1之间的数的语句为:for(i=2;i

上一篇:农产品质量安全项目下一篇:木渎严家花园导游词