c语言第六次作业(DOC)

c语言第六次作业(DOC)
c语言第六次作业(DOC)

第六次作业:指针

(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)

1.数组元素循环移位

有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。写一函数实现以上功能。

在主函数中输入n及n个整数,输入m (m

#include

void main()

{

void inv(int *p,int n,int m);

int n,m,a[20],*p;

printf("please input n=");

scanf("%d",&n);

printf("please input %d numbers:",n);

p=a;

while(p

scanf("%d",p++);

printf("please input m=");

scanf("%d",&m);

p=a;

inv(a,n,m);

printf("the new array:\n");

while(p

printf("%d ",*p++);

putchar('\n');

}

void inv(int *p,int n,int m)

{

int i;

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

*(p+n-i+m)=*(p+n-i);

for(i=0;i

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

}

2. 矩阵元素的排序

将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即

4,41,10,14,03,02,01,00,0.......a a a a a a a a ≤≤≤≤≤≤≤。

要求编写一个函数实现上述排序功能。

在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。

#include

void main()

{

void inv(int (*x)[5]);

int i,j,a[5][5];

int (*p)[5];

printf("please input an 5*5 array:\n");

p=a;

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

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

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

inv(p);

printf("the new array:\n");

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

{

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

printf("%4d",*(*(p+i)+j));

putchar('\n');

}

putchar('\n');

}

void inv(int (*x)[5])

{

int i,j,t;

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

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

{

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

{t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;}

}

return;

}

3.星期的查找

编写一个程序,输入一个1~7之间的整数,表示星期几,然后输出相应的文字。

例如:如用户输入3,则输出“星期三”。

要求:用指针数组的方法来实现。

#include

void main()

{

int n;

char (*p)[3];

char a[7][3]={"一","二","三","四","五","六","七"};

printf("please input n=");

scanf("%d",&n);

p=a;

printf("星期%s\n",p+n-1);

}

4.字符串库函数的实现

请使用指针的方法来实现如下的库函数:

Char * strncpy( char *s, char * t, int n) //复制t的前n个字符至s

Char * strncat( char *s, char * t, int n) //连接t的前n个字符至s的末尾int strncmp( char *s, char * t, int n) //比较s和t的前n个字符

并请编写一个主函数来调用并测试自己编写的库函数。

#include

#include

char *strncpy(char *s,char *t,int n)

{

int i,length;

length=strlen(s);

for(i=0;i

*(s+i)=*(t+i);

if(length

return(s);

}

char *strncat(char *s,char *t,int n)

{

int i,length;

length=strlen(s);

for(i=0;i

*(s+i+length)=*(t+i);

*(s+length+n)='\0';

return(s);

}

int strncmp(char *s,char *t,int n)

{

int i;

for(i=0;i

{

if(*(s+i)==*(t+i))continue;

else if(*(s+i)>*(t+i)){return(1);break;}

else {return(-1);break;}

}

}

void main()

{

char a[20],b[20];

int n;

scanf("%s%s%d",a,b,&n);

printf("%s\n",strncpy(a,b,n));

scanf("%s%s%d",a,b,&n);

printf("%s\n",strncat(a,b,n));

scanf("%s%s%d",a,b,&n);

printf("%d\n",strncmp(a,b,n));

}

5.算术练习程序(指针型函数)

一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。

该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表达式的计算结果,并判断答案是否正确。

#include

#include

#include

int result=1;

void GetRanddomExpression(int *num1,char *a,int *num2)

{

int n;

srand(time(NULL));

*num1=rand()%100+1;

*num2=rand()%100+1;

n=rand()%4;

switch(n)

{

case 0:{while(*num2>*num1) *num2=rand()%100+1;

result=(*num1)-(*num2);*a='-';}break;

case 1:{while((*num1+*num2)>100)*num2=rand()%100+1;

*a='+';result=(*num1)+(*num2);}break;

case 2:while((*num1*(*num2))>100)*num2=rand()%100+1;

*a='*';result=(*num1)*(*num2);break;

case 3:{while(*num1%*num2!=0)*num2=rand()%100+1;

result=(*num1)/(*num2);*a='/';}break;

}

}

int judge(int answer)

{

if(answer==result)return(1);

else return(0);

}

void main()

{

int num1,num2;

char a;

int answer;

while(result!=answer)

{

GetRanddomExpression(&num1,&a,&num2);

printf("please input the result of the expression:\n%d%c%d=",num1,a,num2);

scanf("%d",&answer);

if(judge(answer)==1)printf("you are right!");

else printf("sorry,it not the right answer.\n");

}

}

6.数组分区(指针作为函数参数)

本题由三个部分构成

(1)编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数

的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回

奇数、偶数的个数)

(2)利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能

是找出给定长度的一个整型数组中的所有奇数和偶数,并把它们分别保存在两

个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两

个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及

其长度、偶数数组及其长度。

(3)编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,

然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。#include

#include

#include

#include

void CountEvensAndOdds(int *parr,int arr_len,int *even_count,int *odds_count) {

int i;

int count_even=0,count_odds=0;

for (i=0;i

{

if ((*(parr+i)%2)==0)count_even++;

else count_odds++;

}

*even_count=count_even;

*odds_count=count_odds;

}

void Partition(int *parr,int arr_len,int **even_arr,int *even_len,int **odds_arr,int *odds_len)

{

int even_count,odds_count,i,m=0,n=0;

int count_even=0,count_odds=0;

CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);

*even_arr=(int *)malloc(sizeof(int)*even_count);

*odds_arr=(int *)malloc(sizeof(int)*odds_count);

for (i=0;i

{

if((*(parr+i)%2)==0)

{*(*even_arr+m) = *(parr+i);m++;}

else

{*(*odds_arr+n) = *(parr+i);n++;}

}

*even_len=m;

*odds_len=n;

}

void print_arr(int *parr,int arr_len)

{

int i;

for(i=0;i

{printf("%-3d",*(parr+i));if((i+1)%10==0)printf("\n");}

printf("\n");

}

void main()

{

int *parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len;

srand(time(NULL));

arr_len = rand()%50;

parr=(int *)malloc(sizeof(int)*arr_len);

printf("arr_len=%d\n",arr_len);

for(i=0;i

parr[i] = rand()%100;

Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);

printf("arr:\n");

print_arr(parr,arr_len);

printf("even_arr len=%d\n",even_len);

printf("even_arr:\n");

print_arr(even_arr,even_len);

printf("odds_arr len=%d\n",odds_len);

printf("odds_arr:\n");

print_arr(odds_arr,odds_len);

}

7.字符串压缩(使用字符指针)

编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:

(1)如果该字符是空格,则保留该字符。

(2)如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符

(3)否则删除该字符。

例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为:occurrence 。

#include

#include

#include

void main()

{

char *p,str[50]={'0'};

int n,i,j=0,num[26]={0};

gets(str);

n=strlen(str);

p=(char*)malloc(n*sizeof(char));

for(i=0;str[i]!=0;i++)

{

if(str[i]==' ')*(p+j++)=str[i];

else

{

if(num[str[i]-97]==0||num[str[i]-97]==2||num[str[i]-97]==5)

{

*(p+j++)=str[i];

num[str[i]-97]++;

}

else num[str[i]-97]++;

}

}

for(i=0;i

printf("%c",*(p+i));

putchar('\n');

}

8.字符查找(使用指针数组)

用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC”;输入”C”,显示”C”和”COBOL”。

#include

#include

void main()

{

char

*a[6]={"FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"};

char b[6],*p;

int length,i,k;

printf("please input some charactors:");

scanf("%s",b);

length=strlen(b);

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

{

for(p=b;p

{

if(*p==*a[i])k=i;

else {k=6;break;}

}

if(k==i)printf("%s\n",a[i]-length);

}

}

9.字符串排序(使用多级指针)

用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)

//用指向指针的指针的方法对于输入的5个字符串进行排序并输出。

#include

#include

void sort(char *name[],int n)

{

char *temp;

int i,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(strcmp(name[k],name[j])>0)k=j;

if(k!=i){temp=name[i];name[i]=name[k];name[k]=temp;} }

}

void print(char *name[],int n)

{

int i;

for(i=0;i

printf("%s\n",name[i]);

}

void main()

{

char *name[5];

char a[5][20];

int n=5,i;

printf("please input five str:\n");

for(i=0;i

{

scanf("%s",a[i]);

name[i]=*(a+i);

}

printf("\nthe new str:\n");

sort(name,n);

print(name,n);

}

10.最长公共字串(提示使用strstr()库函数)

编写一个程序,求给定三个字符串的最长公共子串。

假设给定的三个字符串分别为:

What is local bus?

Name some local bus.

A Local bus is high speed I/O bus close to the processor. #include

#include

int str_match(char *s1,char *s2,int len)

{

while(len>0)

{

if(*s1!=*s2)return 0;

s1++;

s2++;

len--;

}

return 1;

}

void main()

{

int i,j,s,l,flag1,flag2;

char str[3][60]={{"what the local bus?"},{"Name some local bus."},{"A Local bus is high speed I/O bus close to the processor."}};

int len[3];

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

len[i]=strlen(str[i]);

for(l=len[0];l>0;l--)

{

for(s=0; s+l-1

{

flag1=1;

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

{

flag2 = 0;

for(j=0;j+l-1

{if(str_match(str[0]+s,str[i]+j,l)){flag2=1;break;}}

if(!flag2){flag1=0;break;}

}

if(flag1)goto L;

}

}

L:printf("最长公共子串为:");

for(i=0;i

printf("%c",*(str[0]+s+i));

putchar('\n');

}

//以下为选做题目

11.网络警察

作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。

程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。

程序的输出为在该句子中所找到的经过顺序调整的关键词。

例如输入:

guns mines missiles

aameric ssell snugs dan iimsssle ot sit neeemis

则输出为:

guns missiles

#include

#include

int FindCode(char keyword[100], int string_num, char string[100])

{

int k,letter1[26]={0},letter2[26]={0};

for(k=0;k

letter1[keyword[k]-97]++,letter2[string[k]-97]++;

for(k=0;k<26;k++)

if(letter1[k]!=letter2[k])break;

if(k==26)return 1;

return 0;

}

void Part(char keyword[][100], char temp[100], int *Size) {

char *p;

int i=0,j;p=temp;

while(*p!='\0')

{

j=0;

while(*p!=' '&&*p!='\0')keyword[i][j++]=*(p++);

keyword[i++][j]='\0';

while(*p==' ')p++;

}

*Size=i;

}

void main()

{

char keyword[100][100], string[100][100],temp[100];

int key_num,string_num;

int i,j;

gets(temp);

Part(keyword,temp,&key_num);

gets(temp);

Part(string,temp,&string_num);

for(i=0;i

for(j=0;j

if(FindCode(keyword[i],strlen(keyword[i]),string[j]))

printf("%s ",keyword[i]);

printf("\n");

}

12.动态三维数组

a、编写一个函数CreateGrid(int m, int n, int t),用来创建一个动态的三维数组,其中m、n、t分别表示该数组每一维的长度。要求整个数组的存储空间都是用用C语言的库函数malloc函数动态申请的。

b、另外编写一个FreeGrid函数,用来释放这个三维数组。

C、在主函数中

●输入三维数组的三个维度,调用CreateGrid()函数生成数组

●使用整数指针将1到m*m*t的整数依次赋值给该三维数组的每个元素

●使用数组指针依次按每个n*t平面输出其中各个元素的值

●调用FreeGrid()函数,释放空间

如,输入的三个维度依次为2,3,4

#include

#include

#include

int ***CreateGrid(int m, int n, int t)

{

int ***p=NULL;int i,j;

p=(int ***)malloc(sizeof(int)*m);

for(i=0;i

{

*(p+i)=(int**)malloc(sizeof(int)*n);

for(j=0;j

*(*(p+i)+j)=(int*)malloc(sizeof(int)*t);

}

return p;

}

void FreeGrid(int ***p,int m,int n,int t)

{

int i,j;

if(p!=NULL)

{

for(i=0;i

{

for(j=0;j

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

free(*(p+i));

}

free(p);

p=NULL;

}

}

void main()

{

int ***p,m,n,t,i,j,k,s=1;

scanf("%d,%d,%d",&m,&n,&t);

p=CreateGrid(m,n,t);

for(i=0;i

{

for(j=0;j

{

for(k=0;k

{

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

s++;

}

}

}

for(i=0;i

{

printf("dimension %d:\n",i);

for(j=0;j

{

for(k=0;k

printf("%-3d",*(*(*(p+i)+j)+k));

putchar('\n');

}

}

FreeGrid(p,m,n,t); }

第六次作业

习题九 一、选择题 9-1.C语言程序由函数组成。它的。 A.主函数必须在其它函数之前,函数内可以嵌套定义函数 B.主函数可以在其它函数之后,函数内不可以嵌套定义函数 C.主函数必须在其它函数之前,函数内不可以嵌套定义函数 D.主函数必须在其它函数之后,函数内可以嵌套定义函数 9-2.一个C语言程序的基本组成单位是。 A.主程序B.子程序C.函数D.过程 9-3.以下说法中正确的是。 A.C语言程序总是从第一个定义的函数开始执行 B.在C语言程序中,要调用的函数必须在main( )函数中定义 C.C语言程序总是从main( )函数开始执行 D.C语言程序中的main( )函数必须放在程序的开始部分 9-4.已知函数abc的定义为: void abc ( ) { ....... } ?则函数定义中void的含义是。 A.执行函数abc后,函数没有返回值B.执行函数abc后,函数不再返回??C.执行函数abc后,可以返回任意类型D.以上三个答案全是错误的 9-5.在以下对C语言的描述中,正确的是。 A.在C语言中调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参B.C语言函数既可以嵌套定义又可以递归调用 C.函数必须有返回值,否则不能使用函数 D.C语言程序中有调用关系的所有函数都必须放在同一源程序文件中 9-6.以下叙述中错误的是。 A.在C语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值 B.在C语言中,在调用函数时,实参和对应形参在类型上只需赋值兼容 C.在C语言中,外部变量的隐含类别是自动存储类别 D.在C语言中,函数形参的存储类型是自动(auto)类型的变量 9-7.说明语句"static int i=10;"中"i=10"的含义是。 A.只说明了一个静态变量B.与"auto i=10;"在功能上等价 C.将变量i初始化为10 D.将变量i赋值为10 9-8.C语言中的函数。

C语言第七、八章补充作业-答案

第七章数组补充作业 【1】在C语言中,引用数组元素时,其数组下标的数据类型允许是 C 。 A)整型常量B)整型表达式 C)整型常量或整型表达式D)任何类型的表达式 【2】以下对一维整型数组a的正确说明是 D 。 A)int a(10); B)int n=10,a[n]; C)int n; D)#define SIZE 10 scanf(“%d”,&n); int a[SIZE]; int a[n]; 【3】若有说明:int a[10];则对a数组元素的正确引用是 D 。 A)a[10] B)a[] C)a(5) D)a[10-10] 【4】以下能对一维数组a进行正确初始化的语句是 C 。 A)int a[10]=(0,0,0,0,0); B)int a[10]={}; C)int a[]={0}; D)int a[10]={10*1}; 【5】以下对二维数组a的正确说明是 B 。 A)int a[3][]; B)double a[1][4]; C)float a(3,4); D)float a(3)(4); 【6】若有说明:int a[3][4];则对a数组元素的正确引用是 D 。 A)a[2][4] B)a[1,3] C)a(2)(1) D)a[1+1][0] 【7】以下不能对二维数组a进行正确初始化的语句是 C 。 A) int a[2][3]={0}; B) int a[][3]={{1,2},{0}}; C) int a[2][3]={{1,2},{3,4},{5,6}}; D) int a[][3]={1,2,3,4,5,6}; 【8】指出下面各说明语句中哪些是合法的:(多选) A. int abcd[0x80]; B. char 9ab[10]; C. char chi[-200]; D. int aaa[5]={3,4,5}; E. float key[]={,,1,0}; F. char disk[]; G. int n,floppy[n]; H. int cash[4]={1,2,3,4,5,6}; 答案: ADE 【9】下面程序中有错误的行是 D (每行程序前面的数字表示行号)。 1 main()

第六次c语言作业

第六次课作业 下次课默写交换排序、选择排序和冒泡排序。 习题6-1 题码:章节:数组考查点:一维数组的定义、引用及格式输出难度:2 编写一程序p717.C实现以下功能 输入10个整型数存入一维数组,输出值和下标都为奇数(数组第1个元素的下标为0)的元素及其个数。编程可用素材:printf("Input 10 integers.\n")...、printf("count=...\n"...、 printf("a[...]=...\n"...。 程序的运行效果应类似地如图1所示,图1中的2 45 34 56 78 12 41 55 86 37是从键盘输入的内容。 图1 程序运行效果示例 习题6-2 题码:章节:数组考查点:一维数组定义、输入和输出的掌握,对递推算法的掌握难度:2 编写一程序p725.C实现以下功能 利用数组,求斐波拉契数列的前n(n的范围为:3~20)项,并输出到屏幕上(数和数之间用字符'\t'隔开),斐波拉契公式:f(1)=1,f(2)=1,f(n)=f(n-1)+f(n-2) (n≥3)。编程可用素材:printf("input a data(3--20): ")...。 程序的运行效果应类似地如图1所示,图1中的11是从键盘输入的内容。 图1 程序运行效果示例 习题6-3 题码:章节:数组考查点:一维数组的应用难度:2 编写一程序p718.C实现以下功能 有一递推数列,满足f(0)=0,f(1)=1,f(2)=2, f(n+1)=2f(n)+f(n-1)f(n-2) (n>=2), 编写程序求f(n)的值(n由键盘输入,13>=n>=2)。编程可用素材:printf(“Input n (13>=n>=2): ”)...、printf(“\nf(...)=...\n”...。 程序的运行效果应类似地如图1所示,图1中的10是从键盘输入的内容。 图1 程序运行效果示例 习题6-4 题码:章节:数组考查点:键盘输入技巧的掌握和二维数组的应用,判断条件的设定难度:2 编写一程序p217.C实现以下功能 求任意的一个m×m矩阵的对角线上元素之和,m(2<=m<=20)及矩阵元素从键盘输入(只考虑int型,且不需考虑求和的结果可能超出int型能表示的范围)。编程可用素材:printf("Please input m: ")...、 printf("\nPlease input array:\n")...、printf("\nsum=...\n"...。 程序的运行效果应类似地如图1所示,图1中的5和 1 45 67 235 464 35 6 89 32342 8 347 9346 47 95 746 46 785 436 19434 634 3235 567 24 8465 25 是从键盘输入的内容。

C语言第5次作业 简单程序设计

单选题: 1、以下程序段的输出结果是 int a=1234; printf("%2d\n",a); A.12 B.34 C.1234 D.提示出错、无结果 学生答案: C 参考答案: C 2、若有说明语句:int a,b,c,*d=&c; 则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是 A.scanf("%d%d%d",&a,&b,*d); B.scanf("%d%d%d",&a,&b,&d); C.scanf("%d%d%d",a,b,d); D.scanf("%d%d%d",a,b,*d); 学生答案: B 参考答案: A 3、以下合法的赋值语句是 A.x=y=100 B.d--; C.x+y; D.c=int(a+b); 学生答案: D 参考答案: B 4、设正x、y均为整型变量,且x=10 y=3,则以下语句的输出结果是 printf("%d,%d\n",x--,--y); A.10,3 B.9,3 C.9,2 D.10,2 学生答案: D 参考答案: D 5、以下程序的输出结果是 main()

{ int a=3; printf("%d\n",(a+=a-=a*a));} } A.-6 B.12 C.0 D.-12 学生答案: D 参考答案: D 6、以下程序段的输出结果是 char s[]="\\141\141abc\t"; printf ("%d\n",strlen(s)); A.9 B.12 C.13 D.14 学生答案: A 参考答案: A 7、下列程序执行后的输出结果是 main() { int x='f'; printf("%c \n",'A'+(x-'a'+1)); } A.G B.H C.I D.J 学生答案: A 参考答案: A 8、下列程序执行后的输出结果是 main() { char x=0xFFFF; printf("%d \n",x--); } A.-32767 B.FFFE C.-108 D.-32768

c语言第六次作业

第五题 #include int main () { int a[10][10],i,j,n; printf("Input n:"); scanf("%d",&n); printf("* "); for(j=1;j<=n;j++) { a[0][j]=j; printf("%d ",a[0][j]); } printf("\n"); for(i=1;i<=n;i++) { a[i][0]=i; printf("%d ",a[i][0]); for(j=1;j<=i;j++) { a[i][j]=a[i][0]*a[0][j]; printf("%d ",a[i][j]); } printf("\n"); } return 0; } 第二题 #include int main(void) { int a[12]={31,0,31,30,31,30,31,31,30,31,30,31};

int year,month,day,sum=0,i; printf("Input year,month,day:"); scanf("%d%d%d",&year,&month,&day); if(year%4==0&&year%100!=0||year%400==0) a[1]=29; else a[1]=28; for(i=0;i int main () { int n,i,j,a[6][6],index1,index2,index3,max; printf("Input n:"); scanf("%d",&n); printf("Input arry:"); for(i=0;i=max)

C语言作业

实验一 C程序的运行环境及简单程序编写(一) 一、实验目的 1. 了解VC++6.0集成环境的基本操作方法。 2. 了解在该系统上如何编辑、编译、连接和运行一个C程序。 3. 通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1. 打印输出你的姓名,年龄,地址信息。 2. 编写程序,实现输出 ********************************************* C语言程序设计 ********************************************* 3. 编写程序,求2个整数的和、差、积、商。 实验二C程序的运行环境及简单程序编写(二) 一、实验目的 1. 编写运行简单的C程序,了解C源程序的特点。 二、实验内容 1. 编写程序,已知长方形的长为8cm,宽为3cm,求长方形的周长和面积。 2. 在上一题的源代码中,用2种注释方法,添加注释内容: 这是一个简单的C语言程序。 3. 编写程序,实现输出三行文字,第一行 Print: (1)\\\\\\\\\\ (2)&&&&&&&&&& (3)|||||||||| 实验三数据的存储与运算(一) 一、实验目的

1. 掌握变量的定义及使用 2. 掌握整型数据在程序中的表示及使用 二、实验内容 1.教材P19例2.1 2. 编写一个程序,要求用户输入一个美金数量,然后显示出如何用最少的面值为20美 元、10美元、5美元和1美元钞票来付款。 运行结果: Ener a dollar amount:93 Result: $20 bills:4 $10 bills:1 $5 bills:0 $1 bills:3 3. 输入2个变量的值,交换这2个变量的值后输出。 Input (x,y):2,3 output(x,y):3,2 实验四数据的存储与运算(二) 一、实验目的 1. 掌握整型数据在程序中的表示及使用 2. 掌握实型数据在程序中的表示及使用。 二、实验内容 1.教材P24例2.2 2.教材P46习题1 3. 编写一个程序,要求用户输入一个两位数,然后逆序打印出这个数。 Enter a two-digit number:28 The reversal is :82 实验五数据的存储与运算(三) 一、实验目的 1. 掌握符号常量、字符型数据、字符串的应用 2. 掌握强制类型的转换 二、实验内容 1.给出园半径,求园的体积v=4/3πr3 2.将小写字母转换为大写字母,并将其按字符和整数两种方式输出。 3.输入从午夜开始的秒数total_sec,请计算出等价的时间,用小时(0 ~23)、分钟(0 ~59) 和秒(0 ~59)表示。(建议使用%运算符) Enter total seconds:2590 Time:0:43:10 4.编程计算1/2+1/3+1/5的结果。 实验六数据的存储与运算(四)

c语言第六次作业解析

第六次作业:指针 (以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素) 1.数组元素循环移位 有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。写一函数实现以上功能。 在主函数中输入n及n个整数,输入m (m void main() { void inv(int *p,int n,int m); int n,m,a[20],*p; printf("please input n="); scanf("%d",&n); printf("please input %d numbers:",n); p=a; while(p

2. 矩阵元素的排序 将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即 4,41,10,14,03,02,01,00,0.......a a a a a a a a ≤≤≤≤≤≤≤。 要求编写一个函数实现上述排序功能。 在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。 #include void main() { void inv(int (*x)[5]); int i,j,a[5][5]; int (*p)[5]; printf("please input an 5*5 array:\n"); p=a; for(i=0;i<5;i++) for(j=0;j<5;j++) scanf("%d",*(p+i)+j); inv(p); printf("the new array:\n"); for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%4d",*(*(p+i)+j)); putchar('\n'); }

C语言练习作业及参考答案

习题一 1、C语言源程序最多可能由____ABCD____________部分组成? A) 预处理部分B)变量说明部分 C) 函数原型声明部分D)函数定义部分 2、一个完整的C语言源程序最少必须有___C____。 A)若干个主函数B)若干个函数 C)且只能有一个主函数D)一个函数 3、C语言以函数为源程序的基本单位最主要有利于__B_____。 A)程序设计结构化B)程序设计模块化 C)程序设计简单化D提高程序设计有效性 4、要使得C语言编写的程序能够在计算机上运行并得出正确结果,必须要先经过______________B_______________________。 A)编辑和链接B)编译和链接 C)修改和运行D运行并输入数据 5、一个C程序的执行是从______A______。 A)本程序的main函数开始,到main函数结束。 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的main函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序main函数结束 6、以下叙述正确的是__A______。 A)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句 C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误 7、以下叙述不正确的是___D_____。 A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数 C)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 8、C语言规定:在一个源程序中,main函数的位置是___A_____。 A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后

北航大一上c语言第四五六七八次作业

3. 字母频率统计 【问题描述】 编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。 【输入形式】 在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表示结束。 【输出形式】 在屏幕上依次输出表示每个小写字母出现次数的柱状图(以“*”字符表示柱状图,空白处用空格字符表示,某个小写字母出现多少次,就显示多少“*”字符;柱状图的高度以出现最多的字母次数为准),在最后一行依次输出26个小写字母。 【样例输入】 The computing world has undergone a revolution since the publication of The C Programming Language in 1978. 【样例输出】 【样例说明】 在输入的英文短文中,小写字母a出现了6次,所以其上输出了6个字符"*"。出现次数最多的是字母n,所以柱状图的高度为9个字符。字母j没有出现,所以其上都为空格字符。 【评分标准】 该题要求输出柱状图表示的字母出现次数,共有5个测试点。上传C语言文件名为bar.c。

【输入形式】从标准输入读取顶点坐标。格式为:第一行是点的个数N(3≤N≤15),后面紧接着N 行,每行两个数字(由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。所有点的坐标互不相同,且按顺时针次序给出。 输入数据确保该多边形是一个凸多边形。 【输出形式】向标准输出打印一个浮点数,是该多边形的面积。该浮点数保留两位小数。 【输入样例】 4 3 3 30 10 1 2 【输出样例】 5.00 【样例说明】输入数据表示了如图所示的四边形。其面积为5.00。 提示:求三角形面积可用海伦公式,求平方根可用头文件中定义的sqrt函数。 【评分标准】结果完全正确得20分,每个测试点4分。提交程序名为:points.c。

C语言第7次作业

单选题: 1、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为________。 A.a < > 0 B.!a C.a=0 D.a!=0 学生答案: C 参考答案: D 2、若变量都已经说明,则以下程序段输出为( ) a=10;b=50;c=30; if (a > b) a=b; b=c;c=a; printf("a=%db=%dc=%d\n",a,b,c); A.a=10 b=50 c=10 B.a=10 b=30 c=10 C.a=50 b=30 c=10 D.a=50 b=30 c=50 学生答案: C 参考答案: B 3、以下程序的输出结果是 main() { int a= -1,b=1; if((++a < 0)&& ! (b-- < =0)) printf("%d %d\n",a,b); else printf("%d %d\n",b,a); } A.-1 1 B.0 1 C.1 0 D.0 0 学生答案: B 参考答案: C 4、若执行下面的程序从键盘输入3和4,则输出是_______ main() { int a,b,s; scanf("%d%d",&a,&b); s=a; if (a < b) s=b; s=s*s; printf("%d\n",s); } A.14

B.16 C.18 D.20 学生答案: C 参考答案: B 5、下面的程序是______ main() { int x=3,y=0,z=0; if (x==y+z) printf("****"); else printf("####"); } A.有语法错误不能过通过编译 B.输出**** C.可能通过编译,但是不能通过连接,因而不能运行 D.输出#### 学生答案: C 参考答案: D 6、请读程序: main() { float x,y; scanf("%f",&x); if(x < 0.0) y=0.0 else if((x < 5.0)&&(x!=2.0)) y=1.0/(x+2.0); else if( x < 10.0) y=1.0/x; else y=10.0; printf("%f\n",y); } 若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是 A.0.000000 B.0.250000 C.0.500000 D.1.000000 学生答案: B 参考答案: C 7、执行下面语句后的输出为( ) int i= -1; if (i < =0)printf("****\n") else printf("%%%%\n") A.**** B.%%%% C.%%%%C D.有语法错,不能执行 学生答案: B

C语言第四次作业解析

第四次作业:数组 1.字符筛选 编写一个程序,先输入一个字符串str1(长度不超过20),再输入一个单独的字符ch,然后程序会把字符串str当中出现的所有的ch字符都删掉,从而得到一个新的字符串str2,然后把这个字符串打印出来。例如: ●输入:字符串str1为:86-010-******** 字符ch为:- ●输出:字符串str2为:861062785001 程序代码: #include #include void main() { int i,j=0,length; char str1[21],str2[21],ch; printf("字符串str1为:"); gets(str1); printf("字符ch为:"); scanf("%c",&ch); length=strlen(str1); for(i=0;i<=length;i++) { if(str1[i]!=ch) { str2[j]=str1[i]; j++; } else continue; } puts(str2); }

2.数据合并 编写一个程序,能够输入两个预先从小到大排列的整数型数组(假设数组长度最大为20,数组输入时遇到数字0结束);要求将这两个数组的数字能够合并成为一个新的从小到大顺序排列的整数型数据,并将新数组输出。例如: ●输入:请输入第一个数组:1,2,3,12,16,20,25,40,0 请输入第二个数组:4,5,6,15,18,20,21,22,25,38,45,0 ●输出:合并后的数组为:1,2,3,4,5,6,12,15,16,18,20,20,21,22,25,25,38,40,45 /*编写一个程序,能够输入两个预先从小到大排列的整数型数组(假设数组长度最大为20,数组输入时遇到数字0结束); 要求将这两个数组的数字能够合并成为一个新的从小到大顺序排列的整数型数据,并将新数组输出。 例如: 输入:请输入第一个数组:1,2,3,12,16,20,25,40,0 请输入第二个数组:4,5,6,15,18,20,21,22,25,38,45,0 输出:合并后的数组为:1,2,3,4,5,6,12,15,16,18,20,20,21,22,25,25,38,40,45*/ 程序代码: #include #include void main() { int i,j,t,k,m,n,r; int a[20],b[20],c[40]; printf("请输入第一个数组:");

C语言程序改错第七次作业概要

第七次作业 ——程序改错 完成实验教程《C语言程序设计上机指导与习题》中的程序改错题:一、P155——四、程序改错 1.从键盘输入两个整数,求出较大数并输出。 main() { int x,y,max; /**********FOUND(1)**********/ printf("%d %d",&x,&y); /**********FOUND(2)**********/ if(x>y); max=x; /**********FOUND(3)**********/ else(x<=y) /**********FOUND(4)**********/ y=max; printf("max=%d\n",max); } 2.从键盘输入一个实数,求其绝对值并输出。 main() {

/**********FOUND(1)**********/ int x,y; /**********FOUND(2)**********/ scanf("%f",&x) if(x>=0) /**********FOUND(3)**********/ y=-x; else /**********FOUND(4)**********/ y=x; printf("y=%f\n",y); } 3.从键盘输入x的值,求y的值并输出。main() {/**********FOUND(1)**********/ float x; scanf("%f",&x); /**********FOUND(2)**********/ if(x>0); y=1; /**********FOUND(3)**********/ else if(x=0)

中国大学MOOC哈工大C语言程序设计精髓第六周编程题答案

6.1 下面代码的功能是将百分制成绩转换为5分制成绩,具体功能是:如果用户输入的是非法字符或者不在合理区间内的数据(例如输入的是a,或者102,或-45等),则程序输出 Input error!,并允许用户重新输入,直到输入合法数据为止,并将其转换为5分制输出。目前程序存在错误,请将其修改正确。并按照下面给出的运行示例检查程序。 #include #include int main() { char score[100]; int flag = 0, i, s; char grade; printf("Please input score:\n"); while (1) { flag=0; scanf("%s", score); for (i = 0; i < strlen(score); i++) { if (score[i] >= '0' && score[i] <= '9') { continue; } else { flag = 1; break; } } s = atoi(score); if (s < 0 || s > 100 || flag == 1) { printf("Input error!\n"); printf("Please input score:\n"); continue; } else{ break; } } s = atoi(score); if (s >= 90)

grade = 'A'; } else if (s >= 80) { grade = 'B'; } else if (s >= 70) { grade = 'C'; } else if (s >= 60) { grade = 'D'; } else { grade = 'E'; } printf("grade: %c\n", grade); return 0; } 6.2 编程计算a+aa+aaa+…+aa…a(n个a)的值(4分) 题目内容: 编程计算a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。例如,当n=4,a=2,表示计算2+22+222+2222的值。 #include #include int main() { int n,a,i,j; double p=0,q=0; printf("Input a,n:\n"); scanf( "%d,%d",&a,&n); for(i=1;i<=n;i++) { for(j=0,p=0;j

《C语言程序设计》第六次课外作业 (1)

数组程序设计(1) 一、实验目的 1.掌握数组的定义、引用,以及数组的输入和输出方法; 2.掌握字符数组,以及字符函数的使用; 3.学习与数组相关的常见的算法,如:查找、排序等; 4.学习与矩阵相关的常见的算法,如:加、减、乘等。 二、实验预备知识 1.一维数组、二维数组、字符数组。 2.与数组相关的常见的算法。 三、实验内容 编写程序,实现以下功能。 1.由键盘任意输入10个数据,找出其中的最大数。 2.由键盘任意输入10个数据,找出其中的最小数。 3.定义一个有10个元素的数组,用其代表10个学生的考试成绩,从键盘输入10个成绩,统计平均成绩。 4.定义一个有10个元素的数组,用其代表10个学生的考试成绩,从键盘输入10个成绩,分别统计优、良、中、及格、不及格的人数。 5.编写程序,由键盘任意输入10个整数,分别统计其中的奇数和偶数的个数。 6.编写程序,由键盘任意输入10个学生的成绩,分别统计各分数段的百分比。 7.定义一个有80个元素的字符数组,从键盘输入一串字符,将其中的大写字母转换为小写字母,而将原来为小写的字母转换为大写字母,其他字符不变。 8.由键盘任意输入10个整形数据,将其按由小到大的顺序排序后输出(用冒泡排序)。9.由键盘任意输入10个整形数据,将其按由小到大的顺序排序后输出(用选择排序)。10.由键盘任意输入10个数据,将它们倒序后输出。 四、实验分析 1.注意数组下标的起始值和终止值。 2.合理利用数组下标和循环变量的关系,以遍历数组中的元素。 3.注意利用字符数组处理字符的方法。 4.总结常见的算法。 五、实验报告 1.参考教材,注意自己的编程风格。 2.每做一题,保存该题的源代码文件(.C )。 3.建立自己的专属文件夹,文件夹名为:”学号+姓名”(如2015211234张三)。 4.将完成的源代码文件复制到自己的专属文件夹中,再上传上FTP指定的文件夹中。上传作业\冷金麟\ 本人的班级名。 如:上传作业\冷金麟\土木工程15-1。 交作业截止时间:2016.5.3,请大家及时上交到服务器上。 ⒒求100----200之间的所有能被3以及7整除的自然数的平方根 之和。12求级数a=2/1 + 3/2 + 5/3 +8/5 +13/8+21/13…的前30项之和13求数列41+n(n –1)

c语言第七次作业解析

第七次作业:结构体 1.计算日期的差值 (1)编写一函数,计算两个日期之间的时间差,并将其值返回。 日期以年、月、日表示。 “时间差”以天数表示。 注意考虑日期之间的闰年。 函数的输入参数为日期1和日期2, 函数的返回值为时间差,单位为天数。 (2)编写一程序,在主函数中输入两个日期,调用上述函数计算两个日期之间的时间差,并将结果输出。 为了计算简便,假设用户输入的日期1总是早于日期2。 #include #include struct date {int day;int month;int year;}date1,date2; int totaldays(struct date *p,struct date *q) { int years,total=0,i; int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31}; years=q->year-p->year; if(years==0) { if(p->month==q->month) total=q->day-p->day; else {for(i=p->month;imonth-1;i++) total+=monthday[i]; total+=monthday[p->month-1]-p->day+q->day;} if(((q->year)%4==0&&(q->year)%100!=0)||(q->year)%400==0) if(p->month<=2||q->month>2) total++; } else if(years!=0) { for(i=p->month;i<12;i++)total+=monthday[i]; total+=monthday[p->month-1]-p->day; for(i=0;imonth-1;i++)total+=monthday[i]; total+=q->day; for(i=p->year+1;i<(q->year);i++) { total+=365; if((i%4==0&&i%100!=0)||i%400==0)

C语言编程第六章作业答案

1. 输入两个正整数m和n,求其最大公约数和最小公倍数。 辗除法——辗转相除法,又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法,其可追溯至3000年前。它首次出现于欧几里德的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。 证明:设两数为a、b(a>b),求它们最大公约数(a、b)的步骤如下:用a除以b,余数为r 1。若r1=0,则(a,b)=b;若r1≠0,则再用b除以r1,得r2 . 若r2=0,则(a,b)=r1,若r2≠0,则继续用r1除以r2,……如此下去,直到能整除为止。其最后一个非零余数即为(a,b)。 例如,和7890 的最大公因子是6, 这可由下列步骤看出: a b a mod b 7890 5106 7890 5106 2784 5106 2784 2322 2784 2322 462 2322 462 12 462 12 6 12 6 0 #include #include main() { int a,b,num1,num2,temp;/*temp主要用来转换大小*/ printf("please input two numbers:\n"); scanf("%d,%d",num1,&num2);

if(num1 #include main() { char c; int letter=0,space=0,digit=0,others=0; printf("please input some characters\n"); while((c=getchar())!='\n') /*终端接收一个字符赋给c,然后判断此赋值表达式的值是否不等于’\n’,如果不等于,就执行循环体*/ { if(c>='a'&&c<='z'||c>='A'&&c<='Z') /*如果满足字符那么就在此条件范围内*/ letter++; /*字符累加*/ else if(c==' ') space++; /*空格的累加*/ else if(c>='0'&&c<='9') digit++;/*数字累加*/ else others++;/*其他字符累加*/ } printf("all in all:letter=%d,space=%d,digit=%d,others=%d",letter,space,digit,others); getch(); 评析:此程序最主要是用while,if复合语句 (利用while语句,条件为输入的字符不为'\n'.)

7~8次C语言上机作业

实验7 数组(1) 【实验题7-1】此程序的功能:给数组元素赋值并进行输出。但程序中有错误,请查找原因,并调试程序以实现程序功能。 【实验题7-2】以下程序的功能:求整型数组中元素的最大值及其下标。请选择合适的内容填入程序中空白处。 【实验题7-3】以下程序的功能:把整型数组里的元素按逆序进行排序并输出。请选择合适的内容填入程序中空白处。

【实验题7-4】编写一个程序,定义一个有五个元素的一维数组,从键盘对该数组的元素进行赋值后再显示在屏幕上。 【实验题7-5】编写程序对整型数组iA的各元素进行从大到小排序。

【实验题7-6】在数组iA和数组iB中分别存放了na和nb个由小到大的有序数。编写程序,完成把两个数组中的元素按从小到大的顺序归并存放在数组iC中。

【实验题7-7】假设数组iA中的元素按由小到大的顺序存放。编写程序把数组iA中相同的元素删除至一个,然后按照每行六个元素的形式输出数组iA中的各个元素值。 【实验题7-8】在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素为该二维数组的一个鞍点。编写程序要求从键盘输入一个二维数组,当鞍点存在时,把鞍点找出来。 #include #define M 3 #define N 4 int main(){ int a[M][N],i,j,k; printf("\n请输入二维数组的数据:\n"); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); for(i=0;i for(j=0;j printf("M",a[i][j]);

《C语言程序设计》第6章习题答案

1、选择题 (1)A(2)C(3)A(4)B(5)B(6)D(7)D(8)B(9)D(10)B 2、填空题 (1)a=10,b=20 a=20,b=10 (2)**pp=60 3、程序设计题 (1) #include char *month_name(int n); void main() { int n; printf("\nPlease enter 1 integer:"); scanf("%d",&n); printf("%d month :%s\n",n,month_name(n)); } char *month_name(int n) { static char*name[]={"illegal month", "Jan","Feb","Mar","Apr","May","Jun", "July","Aug","Sept","Oct","Nov","Dec"}; return ((n<1||n>12)?name[0]:name[n]); } (2) #include #define N 10 sort(int data[]) { int i,j,min_a,temp;

for(i=0;i void reverse(char *c); void main()

C语言作业

20.下面程序的功能是输入若干字符,分别统计数字字符个数,英文字母个数,输入换行符时输出统计结果,请填空. # include void main ( ) { char ch;⑴ while ( (⑵)! = …\n? ) { if (ch>=?0?&& ch<=?9?) s1 ++ ; if (ch >=?a?&& ch<=?z?⑶) s2++ ; } ⑷ } 5.下面的程序是在输入的一批正数中求最大值,输入0结束循环,请填空.# include main ( ) { int a, max=0 ; scanf (“%d ”,&a); while (⑴) { if (⑵) max=a ; scanf (“%d”,&a ) ; } printf (“%d”, max) ; } 8.下面的程序在输入m后求n使n!<=m<= (n+1)! (例如输入726,应输出n=6),请填空.⑴ void main ( ) { int ⑵; scanf (⑶); for ( n=2 ; jc<=m ;n++) jc=jc*n ; printf (“n=%d \n”,⑷); } 10.下述程序用“碾转相除法”计算两个整数m和n的最大公约数。该方法的基本思想是计算m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算m和n相除的余数,判断是否为0,请填空。 # include main ( ) { int m ,n , w ; scanf (“%d ,%d ”,&m , &n ); while (n) { w=⑴; m=⑵; n=⑶; } printf (“%d”,m) ; } 12.下面程序的功能是输入1至100之间每位数的乘积大于每位数的和的数,例如23,其各位数乘积为2*3=6 .各位数之和为2+3=5,故23满足条件,请填空使程序完整. # include

相关文档
最新文档