第2章 数据类型、常量和变量练习题答案 华中社《C语言程序设计上机指导与练习》

合集下载

c语言与程序设计-第2章课后习题参考答案

c语言与程序设计-第2章课后习题参考答案

2.1 下列哪些是词法记号?关键字(是)注释空白符八进制常量(是)三字符序列字符串常量(是)括号(是)2.2 C编译器可将下列每一个源字符串分解为哪些记号?(不必考虑记号组合是否合法)(1)x+++y x, ++, +, y(2)-0xabL -, 0xabL(3) 2.89E+12L 2.89E+12L(4)"String+\"FOO\"" " String+ \"FOO\""(5)x**2 x, *, *, 2(6)"X??/" "X??/"(7)a?b a, ?, b(8)x--+=y x, --, +=, y(9)intx=+10 intx, =, +, 10(10)"String""FOO" "String", "FOO"(这道题当时改的时候有几个小题改得有错误,注意!)2.3 下列哪些不是标识符,为什么?标识符由字母、数字和下划线组成,但首字符必须是字母或下划线。

4th 不是,以数字开头;sizeof 不是(标准C的关键字)_limit 是_is2 是xYshould 是x*y 不是,* 非法o_no_o_no 是temp-2 不是,- 非法isn't 不是,' 非法enum 不是(标准C的关键字。

注:关键字也称为保留字,是被系统赋予特定含义并有专门用途的标识符。

关键字不能作为普通标识符,但可以作为宏名。

所有预处理均发生在识别这些关键字之前。

)2.4 在下列表示中,哪些是合法常数,哪些是非法常数?对于合法常数,指出其类型;对于非法常数,说明其错误原因。

2L 合法,long长整型''' 不合法,单引号组中的单引号前需要转义字符.12 合法,double双精度浮点型0x1ag 不合法,g不是16进制数中的符号,也不表示任何类型33333 合法,int整形"a" 合法,字符串常量"" 合法,字符串常量0.L 合法,long double长双精度浮点型E20 不合法,缺少尾数部分0377UL 合法,unsigned long无符号长整型'\18' 不合法,存在非8进制位'\0xa' 不合法,不符合十六进制字符码表示规则\xhh0x9cfU 合法,unsigned int无符号整形'\45' 合法,char字符型1.E-5 合法,double双精度浮点型'\0' 合法,char字符型3.F 合法,float浮点型"3'4"" 不合法,缺少转义符'"' 合法,char字符型(P35,双引号作为字符常量时既可用图形符号也可用转义序列表示)'\a' 合法,char字符型2.6 以下的变量声明语句中有什么错误?(1)int a; b = 5; 第一个分号改为逗号int a, b=5;(2)doubel h; 关键字错误double h;(3)int x = 2.3; 类型错误float x = 2.3;(4)const long y; 需要赋初值const long y = 0;(5)float a = 2.5*g; g未定义变量int g = 1; float a = 2.5*g;(6)int a = b = 2; b未定义变量int a = 2, b = 2;2.7 设变量说明为:int a = 1, b = 2, c = 3, d;double x = 2.0; y = 7.7;请给出下列表达式的值。

第2章基本数据类型习题及答案(最新整理)

第2章基本数据类型习题及答案(最新整理)
(6)变量名不能与关键字同名;
(7)定义时不能连续赋值;பைடு நூலகம்
(8)类型名错,应为bool。
思考:为变量取名字有哪些规则与要求?
2-7取一个适当的名字描述下列数据,并考虑用哪种数据类型好。
(1)一个人去年的年龄。
(2)一个人的体重。
(3)考试的分数。
(4)今天的温度。
(5)地球到月亮的距离。
(6)一天的开支。答:(1)intlast_age
第2章基本数据类型
2-1从类型名称、取值、主要运算三个方面综述基本整型。
答:类型名称:int
取值范围:-32768~+32767。
运算操作:算术运算为+,-,*,/, %(求余);
关系运算为<, <=,==,!= ,> ,>=。
2-2从类型名称、取值、主要运算三个方面综述单精度实型。答:类型名称:float
思考:进行数据分析的作用是什么?
2-9给出上题中相应的变量定义。
解:见习题2-8.
2-10编写程序,求两个整数的和、积与平均值。解:#include<stdio.h>
main()
0作为逻辑数据代表假,非0的数作为逻辑数据代表真;C语言规定逻辑数据真为1,逻辑数据假为0.
2-6下列变量定义中,哪些地方不正确?
(1)a,b, c:int;
(2)float x;y;x;
(3)char c1 ,c2;int c1;
(4)int i, y , long k;
(5)n1,n2 ,n3 ,long ;
取值范围:绝对值范围为10-38~10+38,有效数字为7位。运算操作:算术运算为+,-,*, / ,(没有求余(%)运算);

C语言程序设计习题解答

C语言程序设计习题解答

《C语言程序设计》习题解答第二章数据类型、运算符和表达式一、简答题:1.常量有数值常量、字符常量、字符串常量和符号常量;字符u、l和f主要是对数值常量进行修饰。

字符u和l对整型常量进行修饰:表明常量是否是unsigned类型以及是否是long型;字符l对实型常量进行修饰:表明常量之是否是float类型。

2.字符常量用单引号‘’界定单个字符,内存空间只占一个字节;字符串常量用双引号界定零个或多个字符,字符串常量的结尾都有一个结束字符‘\0’。

3.&&、||和!是构成逻辑表达式的逻辑运算符,表达式运算结果是0(真)或1(假);&、|和~是位操作运算符中的逻辑为运算符,对整型操作数的二进制位进行运算,结果为整型值。

4.表达式在计算中根据运算符的优先级和结合型进行运算,在计算过程中要求运算符的两个操作数类型必须相同,根据数据类型之间的隐式转换规则对操作数的类型进行转换,最后运算符运算结果的类型就是表达式值的类型。

5.类型转换有隐式转换和显示转换。

隐士转换是在计算过程中根据隐士转换规则进行;显示转换利用强制转换运算符进行;在赋值运算中,表达式右边值得类型都强制转换成左边变量的类型。

二、选择题:(1)D (2)B (3)D (4)D (5)B (6)D (7)D (8)C (9)C (10)C (11)C (12)A(13)A(14)D (15)A(16)A、C (17)A(18)A(19)9 (20)A三、计算表达式的值:1.(1)24 (2)10 (3)96 (4)0 (5)0 (6)02.(1)5 (2)10 (3)403.(1)0 (2)1 (3)3 (4)16 (5)14.(1)3.500000 (2)3.0000005.(1)6 (2)6 (3)0 (4)0四、写出给出式子的C语言表示形式:1.x*x+3*x+12.(a*x+b)/(c*y+d)*(m*x*x+n*y*y)3.sqrt(4*x*x*x+5*x*x+x+3)4.sin(x+0.5)*sin(x+0.5)+3*cos(2*x+4)5.(a/x)/(a/(a+y)+b/(a+b/z))6.labs(3-exp(x)*ln(1+x))第三章简单程序设计一、简答题:(略)二、选择题:(1)C (2)D (3)C (4)B (5)B (6)D (7)D (8)C (9)A(10)A三、编程实现1.void main(){int a,b;int min;printf("please input two integer data:");scanf("%d%d",&a,&b);min=a>b?b:a;printf("the min is : %d\n",min);}2.void main(){float f;printf("please input float data:");scanf("%f",&f);printf("the data is %.2f\n",f);}3.void main(){char ch;printf("please input char:");scanf("%c",&ch);printf("the three characters are:%c,%c,%c.\n",ch-1,ch,ch+1); }4.#include<math.h>void main(){float a,b,c;float l,mid,area;printf("please input three eadge:");scanf("%f%f%f",&a,&b,&c);l=0.5*(a+b+c);mid=l*(l-a)*(l-b)*(l-c);area=sqrt(mid);printf("area is :%f\n",area);}第四章数组一、简答题:(略)二、选择题:(1)C (2)A(3)C (4)B (5)D (6)B (7)C (8)B (9)A(10)B (11)C (12)C三、编写程序:1.#include <string.h>#define LEN 128void main(){char str1[LEN],str2[LEN];int len1,len2;printf("please input first string:\n");gets(str1);printf("please input second string:\n");gets(str2);len1=strlen(str1);len2=strlen(str2);if(len1>len2)printf("the string is:%s\n",str1);if(len1<len2)printf("the string is:%s\n",str2);if(len1==len2){if(strcmp(str1,str2)>0)printf("the string is:%s\n",str1);elseprintf("the string is:%s\n",str2);}}2.#include<string.h>#define LEN 128void main(){char str1[LEN],str2[LEN];puts("please input first string:");gets(str1);puts("please input second string:");gets(str2);strcat(str1,str2);printf("the sresult is:\n%s\n",str1); }第五章基本语句各小题的参考程序如下:1.#define PI 3.14159void main(){float r,h;float s,v;printf("please input r and h:");scanf("%f%f",&r,&h);s=PI*r*r;s+=2*PI*PI*r*h;v=1.0/3*PI*r*r*h;printf("the area is %f\n",s);printf("the volume is %f\n",v); }2.void main(){float x;int y;printf("input x:");scanf("%f",&x);if(x>0)y=1;elseif(x==0)y=0;elsey=-1;printf("y is %d\n",y);}3.void main(){int flag=0;int data;printf("input data:");scanf("%d",&data);if(data%3==0)flag++;if(data%5==0)flag++;if(data%7==0)flag++;switch(flag){case 0: printf("can\'t divided by anyone!\n");break;case 1: printf("can divided by one data!\n");break;case 2: printf("can divided by two data!\n");break;case 3: printf("can divided by three data!\n");}}4.#include<math.h>void main(){float a,b,c;float l,s;printf("input a,b and c:");scanf("%f%f%f",&a,&b,&c);if(a+b>c&&fabs(a-b)<c){l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c));printf("the area of triangle is %f.\n",s);}elseprintf("can\'t construct triangle.\n");}5.#include<math.h>void main(){float m,n,k;float det,x1,x2;printf("input m,n,k:");scanf("%f%f%f",&m,&n,&k);det=n*n-4*m*k;if(det>=0){det=sqrt(det);x1=(-n+det)/(2*m);x2=(-n-det)/(2*m);if(det){printf("the first root is %f.\n",x1);printf("the second root is %f.\n",x2);}elseprintf("the root is %f.\n",x1);}else{det=sqrt(-det);x1=-n/(2*m);x2=det/(2*m);x2=fabs(x2);printf("the fisrt virtual root is %f+%fi.\n",x1,x2);printf("the scond virtual root is %f-%fi.\n",x1,x2);}}6.void main(){float a,b,result;char ch;printf("please input expression:");scanf("%f%c%f",&a,&ch,&b);switch(ch){case '+':result=a+b;break;case '-':result=a-b;break;case '*':result=a*b;break;case '/': if(b){ result=a/b;break;}else{ printf("Divided Zero!\n");return;}default: printf("expression Error!\n");return;}printf("%f%c%f=%f.\n",a,ch,b,result);}7.void main(){int n,num[6];int i,x;printf("please input num of data:");scanf("%d",&n);printf("input data:\n");for(i=0;i<n;i++){scanf("%d",&x);if(x>0&&x<=5)num[x]++;}printf("the result is:\n");for(i=1;i<=5;i++)printf("the num of %d is %d.\n",i,num[i]); }8.void main(){int n,i;double fac=1;printf("input n:");scanf("%d",&n);for(i=1;i<=n;i++)fac*=i;printf("%d!=%.0f\n",n,fac);}9.void main(){float a,b,temp;float s;int i;a=1,b=2;for(i=1,s=0;i<=30;i++){s+=b/a;temp=b;b=a+b;a=temp;}printf("the result is %f.\n",s);}10.void main(){float avg_age=0,avg_score=0;float age,score;int num=0;printf("input age and score:\n");scanf("%f%f",&age,&score);while(age!=-1){avg_age+=age;avg_score+=score;num++;printf("input age and score:\n");scanf("%f%f",&age,&score);}printf("the average age is %.1f.\n",avg_age/num);printf("the average score is %.1f.\n",avg_score/num); }11.void main(){int n1=0,n2=0,n3=0;int x,max,min;int i;printf("please input ten data:\n");scanf("%d",&x);max=min=x;if(x>0)n1++;elseif(x==0)n2++;elsen3++;for(i=1;i<10;i++){scanf("%d",&x);if(min>x)min=x;if(max<x)max=x;if(x>0)n1++;elseif(x==0)n2++;elsen3++;}printf("the max is %d.\n",max);printf("the min is %d.\n",min);printf("the num of positive is %d.\n",n1);printf("the num of Zero is %d.\n",n2);printf("the num of negative is %d.\n",n3);}12.void main(){int n;double num1=1,num2=1;printf("input n:");scanf("%d",&n);while(n-->0){num1*=3;num2/=3;}printf("the result1 is %f.\n",num1);printf("the result2 is %f.\n",num2);}13.#include<stdio.h>void main(){char* s[9]={"one","two","three","four","five","six","seven","eight","nine"};long d;int num[10],i=0,j;printf("input data:");scanf("%ld",&d);while(d){num[i++]=d%10;d=d/10;}for(j=i-1;j>=0;j--)printf("%s ",s[num[j]-1]);putchar('\n');}14.void main(){float pi;int n,flag;for(pi=1,n=2,flag=-1;1.0/(2*n-1)>1.0e-6;n++,flag*=-1) pi+=flag*1.0/(2*n-1);printf("pi=%f\n",4*pi);}15.void main(){int x,i;int count,sum;for(i=1,count=0,sum=0;i<=500;i++)if(i%3==2&&i%5==3&&i%7==2){count++;sum+=i;printf("%5d",i);if(count%5==0)printf("\n");}printf("the sum is %d.\n",sum);}16.#include<stdio.h>void main(){char ch;int ch_num=0,dig_num=0,other=0;printf("please input string:\n");while((ch=getchar())!='!')if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')ch_num++;elseif(ch>='0'&&ch<='9')dig_num++;elseother++;printf("the num of character is %d.\n",ch_num);printf("the num of number is %d.\n",dig_num);printf("the num of other character is %d.\n",other);}17.#define N 6void main(){int i,j;for(i=1;i<=N;i++){for(j=1;j<=N-i;j++)printf("%c",' ');for(j=1;j<=i;j++)printf("* ");printf("\n");}for(i=1;i<=N-1;i++){for(j=1;j<=i;j++)printf("%c",' ');for(j=1;j<=N-i;j++)printf("* ");printf("\n");}}18.#define N 6void main(){int i,j;for(i=1;i<=N;i++){for(j=1;j<=2*i;j++)printf(" ");for(j=1;j<=i;j++)printf("# ");printf("\n");}}19.#include<stdio.h>void main(){int flag=0,num=0;char ch;printf("input expression:");while((ch=getchar())!=';'){if(ch=='(')num++;if(ch==')'){num--;if(num<0&&!flag)flag++;}}if(num==0&&!flag)printf("it\'s OK!\n");if(num>0 && !flag)printf("the num of \'(\' more than \')\'!\n");if(flag&&num>=0)printf("the \')\'is prior of \'(\'!\n");if(flag&& num<-1)printf("the \')\'is prior of \'(\'! and the num of \')\' more than \'(\'!\n"); }20.void main(){long d;int sum=0;printf("input data:");scanf("%ld",&d);while(d){sum+=d%10;d/=10;}printf("the sum of %ld is %d.\n",d,sum);}21.#define N 4void main(){float sc[N][6];float avg[2][N],t;int i,j,no;printf("please input No. and scores:\n");printf("No. s1 s2 s3 s4 s5\n");for(i=0;i<N;i++)for(j=0;j<6;j++)scanf("%f",&sc[i][j]);for(i=0;i<N;i++){for(j=1;j<6;j++)avg[0][i]+=sc[i][j];avg[0][i]/=5;avg[1][i]=i;}for(i=0;i<N-1;i++)for(j=i+1;j<N;j++){if(avg[0][i]<avg[0][j]){t=avg[0][i];avg[0][i]=avg[0][j];avg[0][j]=t;t=avg[1][i];avg[1][i]=avg[1][j];avg[1][j]=t;}}printf("the result is :\n");printf("NO. g1 g2 g3 g4 g5 avg\n"); for(i=0;i<N;i++){no=(int)avg[1][i];printf("%3.0f",sc[no][0]);for(j=1;j<6;j++)printf("%6.1f",sc[no][j]);printf("%6.1f\n",avg[0][i]); }}22.#include<stdio.h>#define N 3void main(){int array[N][N];int max,min;int max_index[2][N*N];int min_index[2][N*N];int i,j,max_flag,min_flag; printf("input array:\n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&array[i][j]); max=min=array[0][0];max_flag=min_flag=0;for(i=0;i<N;i++)for(j=0;j<N;j++){if(max<=array[i][j]){if(max<array[i][j]){max_flag=0;max=array[i][j];}max_index[0][max_flag]=i;max_index[1][max_flag]=j;max_flag++;}if(min>=array[i][j]){if(min>array[i][j]){min_flag=0;min=array[i][j];}min_index[0][min_flag]=i;min_index[1][min_flag]=j;min_flag++;}}printf("the max value is %d,",max);printf("it\'s index:");for(i=0;i<max_flag;i++)printf("(%d,%d),",max_index[0][i],max_index[1][i]); putchar('\b');putchar('\n');printf("the min value is %d,",min);printf("it\'s index:");for(i=0;i<min_flag;i++)printf("(%d,%d),",min_index[0][i],min_index[1][i]); putchar('\b');putchar('\n');}23.#define N 100void main(){int data[N];int num=0,equ,i,j;int x;int chioce;printf("input chioce:");scanf("%d",&chioce);while(chioce){if(chioce==1){printf("input insert data:");scanf("%d",&x);for(i=0;i<num;i++)if(x<data[i])break;for(j=num;j>i;j--)data[j]=data[j-1];data[i]=x;num++;printf("inserted %d!\n",x);}elseif(chioce==2){printf("input deleted data:");scanf("%d",&x);for(i=0;i<num;i++)if(data[i]==x)break;for(j=i;j<num;j++)if(x<data[j])break;equ=j-i;for(j=i;j<num-equ;j++)data[j]=data[j+equ];num-=equ;printf("deleted %d,the num of %d is %d!\n",x,x,equ);}elseif(chioce==3){printf("the list of data:\n");for(i=0;i<num;i++)printf("%5d",data[i]);printf("\n");}elseprintf("input error!\n");printf("input chioce:");scanf("%d",&chioce);}}24.#include<string.h>#define N 128void main(){char str1[N],str2[N];int m,n;printf("input string:\n");gets(str1);n=strlen(str1);printf("input the begin pos of copy: ");scanf("%d",&m);if(m>n)str2[0]='\0';elsestrcpy(str2,str1+m);printf("the second string is:%s\n",str2); }第六章程序设计方法各小题参考程序如下:1.void main(){int a,b,c;int gc,md;printf("input a,b,c:");scanf("%d%d%d",&a,&b,&c);gc=a;while(1){if(a%gc==0&&b%gc==0&&c%gc==0)break;gc--;}md=a*b*c/gc;printf("the greatest command is %d.\n",gc);printf("the minest command is %d.\n",md);}2.void main(){int i,j,data,t;int num[4];for(i=10;i<100;i++){data=i*i;j=0;t=data;while(data){num[j++]=data%10;data/=10;}if((num[1]+num[3]==10)&&(num[0]*num[2]==12)) printf("%5d",t);}}3.void main(){int i,t;int s,s1;for(i=100;i<=300;i++){t=i,s=0,s1=1;while(t){s+=t%10;s1*=t%10;t/=10;}if(s==12&&s1==42)printf("%5d",i);}}4.void main(){int i,j,k;int num[3],t,c=0;for(i=1;i<1000;i++){if(i%3==0){j=0,t=i;while(t){num[j++]=t%10;t/=10;}for(k=0;k<j;k++)if(num[k]==5)break;if(k<j){printf("%5d",i);c++;if(c%5==0)printf("\n");}}}}5.void main(){int a,b,c;printf("the result is:\n"); for(a=1;a<10;a++)for(b=0;b<10;b++)for(c=1;c<10;c++)if(a*101+b*20+c*101==1333)printf("%5d",a*100+b*10+c); }6.void main(){float e,ee;int i;e=1,ee=1;for(i=1;ee>1.0e-6;i++){ee/=i;e+=ee;}printf("e=%f\n",e);}7.void main(){int i,a,t,sum;printf("the result is:");for(i=100;i<1000;i++){sum=0,t=i;while(t){a=t%10;sum+=a*a*a;t/=10;}if(sum==i)printf("%5d",i);}}8.#define N 100void main(){int i,j,k,sum;int fac[N];for(i=1;i<1000;i++){sum=0,k=0;for(j=1;j<i;j++)if(i%j==0){sum+=j;fac[k++]=j;}if(sum==i){printf("%d\'s factors are: ",i);for(j=0;j<k-1;j++)printf("%d,",fac[j]);printf("%d.\n",fac[k-1]);}}}9.void main(){int i,j;printf("the result are: ");for(i=2;i<1000;i++){ j=i%10;if(j*j==i)printf("%5d",i);else{j=i%100;if(j*j==i)printf("%5d",i);}}}10.#define N 6void main(){int i,sum;sum=1;for(i=1;i<N;i++)sum=(sum+1)*2;printf("the num of cherry: %d.\n ",sum); }第七章函数一、选择题(1)A(2)B (3)A(4)A(5)B (6)D (7)A (8)B (9)B (10)C (11)A(12)D (13)A(14)B二、填空题(1)54(2)i=3,j=2,x=6i=2,j=3,x=4(3)i<=y;z=z*x;(4) 2 4 8 16 32(5)list(a,num-1);三、编写程序:各小题的参考程序如下:1.#define N 10void inverse(int a[],int n);void main(){int data[N];int i;printf("input %d data:\n",N);for(i=0;i<N;i++)scanf("%d",data+i);inverse(data,N);printf("the result after inversed:\n");for(i=0;i<N;i++)printf("%5d",data[i]);}void inverse(int a[],int n){int i,mid;int t;mid=(n-1)/2;for(i=0;i<=mid;i++){t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}2.long inverse(long );void main(){long data,data1;printf("input data:");scanf("%ld",&data);data1=inverse(data);printf("the result of inverse is %ld.\n",data1); }long inverse(long d){long d1=0;while(d){d1*=10;d1+=d%10;d/=10;}return d1;}3.#define N 50int change(int a[],int d,int n ){int i=0;while(d){a[i++]=d%n;d/=n;}return i;}void main(){int num[N];char ch[20]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J'};int n,data,m;int i;printf("input data:");scanf("%d",&data);printf("input change mod:");scanf("%d",&n);m=change(num,data,n);printf("the result of %d mod with %d :",n,data);for(i=m-1;i>=0;i--)printf("%c",ch[num[i]]); printf("\n");}4.long n_dou(int n);void main(){long re;int d;printf("input n:");scanf("%d",&d);re=n_dou(d);printf("the result is: %ld.\n",re); }long n_dou(int n){if(n==0)return 0;return n*n+n_dou(n-1);}5.double ee(double exp){int i=1;double re=0,part_re=1;while(part_re>exp){re+=part_re;part_re*=(double)i/(2*i+1);i++;}return re*2;}void main(){double result,exp;printf("input exp:");scanf("%lf",&exp);result=ee(exp);printf("e=%lf.\n",result);}6.int max(int a,int b){return a>b?a:b;}#define MAX(x,y) ((x)>(y)?(x):(y))void main(){int a,b,c;int m,m1;printf("input data :");scanf("%d%d%d",&a,&b,&c);m=max(a,b);m=max(m,c);printf("the value of function :%d.\n",m);m1=MAX(a,b);m1=MAX(m1,c);printf("the value of Macro: %d.\n",m1);}7.#include<stdio.h>void cla(int days,int week_no){int i;printf(" mon wed thi tue fri sta sun\n"); for(i=1;i<week_no;i++)printf("%5c",' ');for(i=1;i<=days;i++){printf("%5d",i);week_no++;if(week_no==8){week_no=1;putchar('\n');}}putchar('\n');}int is_leap(int year){return ((year%4==0&&year%100!=0)||year%400==0); }void main(){int week_no,year;int i;int days[12]={31,28,31,30,31,30,31,31,30,31,30,31}; char str[10];printf("input year:");scanf("%d",&year);printf("input the first day\'s week_no: ");scanf("%d",&week_no);gets(str);if(is_leap(year))days[1]++;printf("the calandy of %d list:\n",year);for(i=0;i<12;i++){printf("the No. %d month:\n",i+1);cla(days[i],week_no);week_no+=days[i];week_no%=7;if(!week_no)week_no=1;printf("press ENTER continue...");getchar();}}8.int gcd(int a,int b){int g=a;while(1){if(a%g==0&&b%g==0)break;g--;}return g;}void main(){int gg;int a, n,i;printf("input the num of data:");scanf("%d",&n);printf("input data:");scanf("%d",&gg);for(i=1;i<n;i++){scanf("%d",&a);gg=gcd(gg,a);}printf("the greatest commond data is:%d.\n",gg);}第八章指针一、选择题:(1)B (2)C (3)B (4)A(5)C (6)D (7)C (8)A (9)C (10)B (11)B (12)C (13)D (14)B (15)C二、分析程序运行结果:(1)5(2)1,2,3,3,5,4(3)100(4)Hello(5)k=33(6)12(7)defg,100(8)Look this!三、编写程序:各小题参考程序如下:1.#define N 10int max_value(int a[],int n,int index[],int* p ){int i;int flag=0;int max=a[0];for(i=0;i<n;i++){if(max<=a[i]){if(max<a[i])max=a[i],flag=0;index[flag++]=i;}}*p=flag;return max;}void main(){int data[N],index[N];int num,max,i;printf("input %d data:\n");for(i=0;i<N;i++)scanf("%d",data+i);max=max_value(data,N,index,&num);printf("the max data is %d,its index: ",max);for(i=0;i<num;i++)printf("%5d",index[i]);printf("\n");}2.#define N 10void print(int *a,int n){int i;int m=0;for(i=0;i<n;i++){printf("%5d",*(a+m));m+=2;if(m>=N)m=1;}}void main(){int data[N];int i;printf("input %d data:\n",N);for(i=0;i<N;i++)scanf("%d",data+i);print(data,N);}3.#include<stdio.h>#define N 128void main(){char str[N];char *p;int chap_num=0,lit_num=0,dit_num=0,bla_num=0,other=0; printf("input string:\n");gets(str);p=str;while(*p++){if(*p>='A'&&*p<='Z')chap_num++;elseif(*p>='a'&&*p<='z')lit_num++;elseif(*p>='0'&&*p<='9')dit_num++;if(*p==' '||*p=='\t'||*p=='\n')bla_num++;elseother++;}printf("the result list:\n");printf("the num of captal char: %d\n",chap_num); printf("the num of little char: %d\n",lit_num); printf("the num of digit char: %d\n",dit_num); printf("the num of blank char: %d\n",bla_num); printf("the num of other char: %d\n",other);}4.#define N 128void main(){char str[N],*p;int num=0,i;int data,d[N];printf("input string:");gets(str);p=str;while(*p){while(*p<'0'||*p>'9')p++;data=0;while(*p>='0'&&*p<='9'){data*=10;data+=*p-'0';p++;}d[num++]=data;}printf("the data num is %d,its are:\n",num);for(i=0;i<num;i++)printf("%8d",d[i]);}5.#define N 128#include<stdio.h>char* str_mcpy(char* str1,char* str2,int m){char *p,*p1;int len;p1=str2;len=strlen(str1);if(len<m)*str2='\0';else{p=str1+m;while(*p1++=*p++);}return str2;}void main(){char str[N],str1[N];int beg_pos;printf("input string:");gets(str);printf("input begin pos:");scanf("%d",&beg_pos);str_mcpy(str,str1,beg_pos);printf("str2 is:%s.\n",str1);}6.void main(){char* s[7]={"Mon","Wen","Thi","Tue","Fri","Sat","Sun"}; int no;printf("input No:");scanf("%d",&no);printf("the English name of %d :%s.\n",no,s[no-1]);}7.#define N 4#include<string.h>#include<stdio.h>void main(){char* s[N]={"Hello!","Word","Are","you"};int i,j;char* p;for(i=0;i<N-1;i++)for(j=i+1;j<N;j++){if(strcmp(s[i],s[j])<0) p=s[i],s[i]=s[j],s[j]=p;}for(i=0;i<N;i++)puts(s[i]);}第九章结构体与共用体一、选择题:(1)C (2)A(3)B (4)D (5)C (6)D (7)A(8)C 二、编写程序:各小题参考程序如下:1.#include<stdio.h>#define N 10struct book{char name[50];float price;};void main(){struct book b[N];int max,min,i;printf("input %d prices and names:\n",N);for(i=0;i<N;i++){scanf("%f",&(b[i].price));gets(b[i].name);}max=min=0;for(i=1;i<N;i++){if(b[i].price>b[max].price)max=i;if(b[i].price<b[min].price)min=i;}printf("the highest price book is:%s,%f.\n",b[max].name,b[max].price);printf("the lowest price book is:%s,%f.\n",b[min].name,b[min].price);}2.struct date{int year;int month;int day;};int is_leap(int y){return (y%4==0&&y%100!=0||y%400==0);}int change_day(struct date dd){int mons[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,days=0;if(is_leap(dd.year))mons[1]++;for(i=1;i<dd.month;i++)days+=mons[i-1];days+=dd.day;return days;}struct date change_date(int year,int days){int mons[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,d=0;struct date dd;if(is_leap(year))mons[1]++;for(i=0;d+mons[i]<days;i++)d+=mons[i];dd.year=year;dd.month=i+1;dd.day=days-d;return dd;}void main(){int y,days;struct date d;int chioce;do{printf("please input chioce(0,1,2):");scanf("%d",&chioce);switch(chioce){case 1:printf("input year, month and day:");scanf("%d%d%d",&d.year,&d.month,&d.day);printf("its days:%d\n.",change_day(d));break;case 2:printf("input year and days:");scanf("%d%d",&y,&days);d=change_date(y,days);printf("its date:%d/%d/%d.\n",d.year,d.month,d.day);}}while(chioce);}3.#define N 3#include<stdio.h>struct stu{int No;char name[20];int math,chinese,english;};void main(){struct stu s[N],t;float s_avg[3]={0};int i,j;printf("input %d datas:\n");printf("NO math chinese english name\n");for(i=0;i<N;i++){scanf("%d%d%d%d",&s[i].No,&s[i].math,&s[i].chinese,&s[i].english);gets(s[i].name);}for(i=0;i<N;i++){s_avg[0]+=s[i].math;s_avg[1]+=s[i].chinese;s_avg[2]+=s[i].english;}for(i=0;i<3;i++)s_avg[i]/=3;printf("average of each object:\n");printf("math:%.1f,chinese:%.1f,english:%.1f.\n",s_avg[0],s_avg[1],s_avg[2]); for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(s[i].math+s[i].chinese+s[i].english<s[j].math+s[j].chinese+s[i].english)t=s[i],s[i]=s[j],s[j]=t;printf("result list after sorted:\n");printf(" No Name math chinese english\n");for(i=0;i<N;i++)。

c语言程序设计基础教程课后答案

c语言程序设计基础教程课后答案

c语言程序设计基础教程课后答案C语言程序设计基础教程课后答案第一章:C语言概述1. 简述C语言的特点。

- C语言是一种结构化编程语言,具有高效、灵活、功能强大等特点。

- 它支持多种编程范式,如过程式编程、结构化编程、面向对象编程等。

- C语言具有较低的抽象级别,接近硬件,因此执行效率较高。

2. C语言的发展历史。

- C语言在1972年由丹尼斯·里奇(Dennis Ritchie)在贝尔实验室开发。

- 它最初是作为UNIX操作系统的系统编程语言而设计的。

第二章:C语言环境和基本语法1. 如何设置C语言的开发环境?- 选择一个C语言编译器,如GCC、MSVC等。

- 安装编译器并配置环境变量,以便在命令行中直接调用编译器。

2. C语言的基本语法结构是什么?- C语言的基本结构包括预处理指令、函数定义、变量声明和语句。

第三章:数据类型、运算符和表达式1. C语言中的基本数据类型有哪些?- 整型(int)、字符型(char)、浮点型(float和double)等。

2. 运算符的分类及其用法。

- 算术运算符:+、-、*、/、%等。

- 赋值运算符:=、+=、-=等。

- 比较运算符:==、!=、>、<等。

- 逻辑运算符:&&、||、!等。

第四章:控制语句1. 条件语句的用法。

- if语句用于基于条件执行代码块。

- switch语句用于多条件选择。

2. 循环语句的用法。

- while循环用于在满足条件时重复执行代码块。

- for循环用于已知迭代次数的循环。

- do-while循环先执行代码块再判断条件。

第五章:数组和字符串1. 数组的基本概念和使用。

- 数组是相同数据类型的元素集合,存储在连续的内存位置。

- 声明数组:int arr[10]; 表示一个包含10个整数的数组。

2. 字符串的表示和操作。

- 在C语言中,字符串是以空字符('\0')结尾的字符数组。

- 使用标准库函数如strcpy、strlen等操作字符串。

C语言程序设计 上机实验指导与习题 参考答案

C语言程序设计 上机实验指导与习题 参考答案

C 语言程序设计上机实验指导与习题参考答案仅供教师内部参考华南农业大学目录上机实验1实验1 C 语言程序初步1一实验目的1二实验内容1实验2 基本数据类型运算和表达式3一实验目的3二实验内容3实验3 基本输入与输出5一实验目的5二实验内容5实验4 选择结构程序设计4一实验目的4二实验内容4实验5 循环结构程序设计一9一实验目的9二实验内容9实验6 循环结构程序设计二15一实验目的15二实验内容15实验7 数组17一实验目的17二实验内容17实验8 字符数组的应用22一实验目的22二实验内容22实验9 函数的基本应用24 一实验目的24二实验内容24实验10 指针与结构体26一实验目的26二实验内容26*实验11 链表29一实验目的29二实验内容29*实验12 文件32一实验目的32二实验内容32上机实验实验1 C 语言程序初步一实验目的1了解所用的计算机系统的基本操作方法学会独立使用该系统2 了解在该系统上如何编辑编译连接和运行一个C 程序3 通过运行简单的C 程序初步了解C 程序的特点4 在教师的指导下学会使用JudgeOnline 实验系统二实验内容1 运行第一个C 程序[题目The first C Program]将下列程序输入TC 或VC编译连接和运行该程序void mainprintf "The first C Program\n"[具体操作步骤]以Turbo C 上的操作为例1Windows 进入后按照第一章中介绍的方法进入Turbo C2在编辑窗口中输入程序3保存程序取名为a1c4按照第一章中介绍的方法编译连接和运行程序2 在JudgeOnline 系统中提交实现了计算ab 功能的程序[题目1001计算ab]由键盘输入两个整数计算并输出两个整数的和实现该功能的程序如下void mainint a bscanf "dd" a b1 printf "d" a b1在程序编辑窗口中输入程序2保存程序取名为a2c3按照前二章中介绍的方法编译连接和运行程序4在程序运行过程中输入15 30↙↙表示输入回车符5 如果看到如下输出结果则表明1530 的结果正确如果得不到如下结果则需检查并更正程序456 按照第三章中介绍的方法进入JudgeOnline 实验系统7 显示题目列表点击题号为1001题名为计算ab的题目8 查看完题目要求后点击页面下端的sumbit 参照第二章提交程序的方法提交程序a2c9 查看评判结果如果得到accepted则该题通过否则返回第一步检查程序是否正确2实验2 基本数据类型运算和表达式一实验目的1掌握C 语言数据类型熟悉如何定义一个整型和实型的变量以及对它们赋值的方法2 掌握不同的类型数据之间赋值的规3 学会使用C 的有关算术运算符以及包含这些运算符的表达式特别是自加和自减-- 运算符的使用4 进一步熟悉C 程序的编辑编译连接和运行的过程二实验内容1 变量的定义[题目1117变量定义按要求完成程序]下面给出一个可以运行的程序但是缺少部分语句请按右边的提示补充完整缺少的语句void mainint a b 定义整型变量a 和bint i j 定义实型变量i 和ja 5b 6i 314 j iabprintf "a db di fj f\n" a b i j[具体操作步骤]1将代码补充完整2在TC 或VC上运行通过3在JudgeOnline 实验系统上提交2 赋值表达式与赋值语句[题目1118赋值表达式与赋值语句写出程序运行结果] 阅读下面程序写出运行结果void mainfloat aint b cchar d ea 35b ac 330d c3e \\printf "fddcc" abcde运行结果为35000003330J\[提示]赋值语句具有类型转换的功能但可能会改变数据3 基本运算[题目1119基本运算写出程序运行结果]阅读下面程序写出运行结果void mainint a b cfloat d 15 e fa 357b 1510c be 1510f d10printf "dddfff" abcdef运行结果为0211500000010000001500000[提示]除法分整除与普通除法之分4实验3 基本输入与输出一实验目的1熟练掌握putchargetcharprintf scanf 函数的使用方法2 掌握各种类型数据的输入输出的方法能正确使用各种格式转换符二实验内容[题目1126字符的输入与输出]编程实现由键盘输入一个字符后在屏幕上输出该字符[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]a↙↙[正确输出] [正确输出]a参考程序include "stdioh"mainchar chch getcharputchar ch[题目1127计算加法]编程实现由键盘输入一个加法式输出正确的结果两个加数均为整数[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]1020 ↙- 1560↙[正确输出] [正确输出]30 45参考程序include "stdioh"mainint a bscanf "dcd" abprintf "d" ab[题目1014求圆面积]由键盘输入圆半径r 请计算该圆的面积注取314159结果保留两位小数位另外程序只要能对r 在0 到10000 范围的情况输出正确答案即可[第一组自测数据] [键盘输入]5652 ↙[键盘输入][正确输出] 112↙1335502 [正确输出][第二组自测数据] 39408[提示]结果保留两位小数可采用printf 函数的格式控制字符来实现参考程序include "stdioh"mainfloat arearscanf "f"rarea 314159rrprintf "02f"area2[题目1015计算摄氏温度值]从键盘输入一个华氏温度值要求按格式输出其对应的摄氏温度值精确到小数点后两位数学公式描述为5C F 329[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]100↙100↙[正确输出] [正确输出]3778 3778[提示]注意公式中的除为普通除法参考程序includevoid mainfloat fcscanf "f"fc 509 f-32printf "2f"c3实验4 选择结构程序设计一实验目的1了解C 语言表示逻辑的方法以0 代表假以非0 代表真2 学会正确使用逻辑运算符和逻辑表达式3 熟练掌握if 语句和switch 语句4 结合程序掌握一些简单的算法二实验内容[题目1120判断点是否在圆]由键盘输入一个点的坐标要求编程判断这个点是否在单位圆上点在圆上输出Y 不在圆上输出N 使用小数点后3 位精度进行判断[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]07070707 ↙8>0505↙[正确输出] [正确输出]Y N[提示] 1平面上的点与圆的关系分为在圆内在圆上在圆外三种本题要求判断是否在圆上2判断两实数相等采用判断这两实数的差的绝对值小于规定误差精度本题为0001 的方法实现参考程序include "stdioh"include "mathh"void mainfloat abscanf "ff"abif fabs aabb-1 1e-3printf "Y\n"else printf "N\n"[题目1017求数的位数]由键盘输入一个不多于9 位的正整数要求输出它是几位数[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]349213 ↙10000↙[正确输出] [正确输出]6 5[提示]划定一位数二位数九位数的范围后用if else if else 语句实现判断4参考程序mainint nplacescanf "ld"nif n 99999999 place 9else if n 9999999 place 8else if n 999999 place 7else if n 99999 place 6else if n 9999 place 5else if n 999 place 4else if n 99 place 3else if n 9 place 2else place 1printf "ld\n"place[题目1018数的排序]由键盘输入三个整数a b c按从小到大的顺序输出这三个数[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]654590 ↙963 ↙[正确输出] [正确输出]456590 369参考程序includemainint abctscanf "ddd"abcif a b t aa bb tif a c t aa cc tif b c t bb cc tprintf "ddd"abc[题目1016字符变换]由键盘输入5 个字符将其中的大写字母变成小写其它类型的字符不变并按输入顺序逐个输出[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]ApPLe ↙aB 5 ↙[正确输出] [正确输出]apple ab 5[提示]下面代码实现由键盘读入一个字符并按题意处理后输出char aa getcharif a A a Z a a32putchar a5现在题目要求处理5 个字符怎么做呢请自己思考参考程序includemainchar abcdescanf "ccccc"abcdeif a Za A a a32if b Zb A b b32if c Zc A c c32if d Zd A d d32if e Ze A e e32printf "ccccc"abcde[题目1019数的整除]由键盘输入5 个整数逐个判断它们能否被27 整除能的输出YES不能的输出NO 注意输出时一个判断结果占一行5 个数的判断共占5 行[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]8 27 17577 325 54 ↙8 27 17577 325 54 ↙[正确输出] [正确输出]NO NOYES YESYES YESNO NOYES YES[提示]整除即除得余数为0参考程序include "stdioh"mainint abcdescanf "d d d d d"abcdeif a27 0 printf "YES\n" else printf "NO\n"if b27 0 printf "YES\n" else printf "NO\n"if c27 0 printf "YES\n" else printf "NO\n"if d27 0 printf "YES\n" else printf "NO\n"if e27 0 printf "YES\n" else printf "NO\n"[题目1020正负奇偶判断]由键盘输入非零整数x 判断该数正负正数输出positive 负数输出negative 接着判断该数的奇偶性奇数输出odd偶数输出even[第一组自测数据] negative[键盘输入] odd-43 ↙[第二组自测数据][正确输出] [键盘输入]698 ↙positive[正确输出] even参考程序include "stdioh"mainint nscanf "d"nif n 0 printf "negative\n"else printf "positive\n"if n2 0 printf "even\n"else printf "odd\n"[题目1023简单计算器]下面程序是实现一个简单的运算器保留两位小数点如果由键盘输入1050计算机可以输出结果6000如果输入8 *6计算机输出4800如果输入204 计算机输出500 如果输入8-6计算机输出200 请在空处填上适当的代码运行通过后并提交include "stdioh"void mainfloat abcscanf "fcf"switch opcasecase - _case _case __default printf "error"returnprintf "result " c[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]452↙501-23 ↙[正确输出] [正确输出]90 27107参考程序includeint mainchar opscanf "fcf"aopbswitch opcase c abbreakcase -c a-bbreakcase c abbreakcase c abbreakdefaultprintf "error"breakprintf "result 2f"c8实验5 循环结构程序设计一一实验目的1熟悉掌握用while 语句do-while 语句和for 语句实现循环的方法2 掌握在程序设计中用循环实现一些常用算法如穷举迭代递推等二实验内容[题目1024计算阶乘]输入正整数n计算n 结果用长整型数表示注n 123n[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]5 ↙8 ↙[正确输出] [正确输出]120 40320参考程序includemainlong in 1ascanf "ld"afor i 1i ai n niprintf "ld\n"n[题目1025计算数列和]有数列1357911现要求由键盘输入n计算输出该数列的前n 项和[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]2 ↙ 5 ↙[正确输出] [正确输出]4 259参考程序includemainlong nsum 0it 1scanf "ld"nfor i 1i nisum sumtt t2printf "ld\n"sum或includemainlong nsumscanf "ld"nsum nnprintf "ld"sum注评判系统不对程序实现细节进行分析只对运行结果进行评测[题目1026 加一行字符中的数字]由键盘输入一行字符总字符个数从1 个至80 个均有可能以回车符表示结束将其中每个数字字符所代表的数值累加起来输出结果[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]abc123↙A6H7T65↙[正确输出] [正确输出]6 24[提示] 1可以使用下面程序段逐个读入键盘输入的一行字符char chwhile ch getchar \n2 数字字符转为对应的数值可用a ch-0参考程序includemainchar cint s 0awhile c getchar \nif c 0c 9a c-48s saprintf "d"s10[题目1029求最大公约数]由键盘输入两个正整数mn mn 用长整数表示计算它们的最大公约数[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]1624↙1725↙[正确输出] [正确输出]8 1[提示]公约数是既能整除m 又能整除n 的数题目要求满足这一条件的最大的一个参考程序includemainlong rmntempscanf "ldld"mnwhile m 0r nmn mm rprintf "ld\n"n或includemainlong mntisscanf "ldld"mnt m nnmfor i t-1i 1i--if mi 0ni 0s i breakprintf "d"s[题目1030字符变换]由键盘输入一个句子总字符个数从1 个至80 个均有可能以回车符表示结束将其中的大写字符变成小写其它类型的字符不变最后输出变换后的句子[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]How Are You ↙ThiS IS My fIrSt C ProgrAm ↙[正确输出] [正确输出]how are you this is my first c program11参考程序includemainchar cwhile c getchar \nif c Ac Zc c32putchar c[题目1037计算数列和]有数列编程实现由键盘输入n计算输出数列前n 项和结果保留四位小数[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]20 ↙30 ↙[正确输出] [正确输出]326603 880403参考程序includemainint itnfloat a 2b 1s 0scanf "d"nfor i 1i nis sabt aa abb tprintf "4f\n"s[题目1044输出最小值]从键盘输入十个整数输出最小值[ 自测数据][键盘输入]12 45 76 87 5 87 43 55 99 21 ↙[正确输出]512参考程序include "stdioh"mainint itminscanf "d" minfor i 1i 10iscanf "d" tif t min min tprintf "d\n"min*[题目1031统计单词个数]由键盘输入一个句子总字符个数从1 个至80 个均有可能以回车符表示结束以空格分割单词要求输出单词的个数[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]How Are You ↙There are many students and many[正确输出] trees↙3 [正确输出]7参考程序includemainint inum 0word 0char cfor i 0 c getchar \niif c word 0else if word 0word 1numprintf "d"num*[题目1042百万富翁]一个百万富翁遇到一个陌生人陌生人找他谈了一个换钱的计划该计划如下我每天给你m 元而你第一天只需给我一分钱第二天我仍给你m 元你给我2 分钱第三天我仍给你m 元你给我4分钱依次类推你每天给我的钱是前一天的两倍直到一个月38 天百万富翁很高兴欣接受这个契约现要求编写一个程序由键盘输入m计算多少天后百万富翁开始亏钱[第一组自测数据] 18[键盘输入] [第二组自测数据]100↙[键盘输入][正确输出] 10000↙13[正确输出] 25参考程序includeincludemainint nmiscanf "d"mfor i 1i 38iif 001 pow 2i-1 -1 -im 0 breakprintf "d"i-114实验6 循环结构程序设计二一实验目的1进一步熟悉掌握用while 语句do-while 语句和for 语句实现循环的方法2 掌握在程序设计中使用多重循环二实验内容[题目1028求素数]输出2 到200 之间包括2 200 的所有素数注要求1 行1 个素数按由小到大的顺序输出[提示]采用双重循环外层循环产生2 到200 之间的数内层循环对数进行判断是否为素数参考程序includeincludemainint mkifor m 2m 200mk sqrt mfor i 2i kiif mi 0 breakif i k printf "d\n"m[题目1035打印菱形]由键盘输入正数n要求输出2n1 行的菱形图案要求菱形左边紧靠屏幕左边[第一组自测数据] [第二组自测数据] [键盘输入] [键盘输入]3 ↙ 2 ↙[正确输出] [正确输出]15参考程序include "stdioh"include "mathh"mainint nijkscanf "d"nfor i 1i 2n1ik abs n1-ifor j 1j kj printf " "for j 1j 2n1-2kj printf ""printf "\n"[题目1038打印图案]由键盘输入正数n要求输出中间数字为n 的菱形图案要求菱形左边紧靠屏幕左边[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]4 ↙ 3[正确输出] [正确输出]1 1121 121 12321 12321 1234321 121 12321 1 1211参考程序includeincludemainint nijkhscanf "d"nfor i -n1i n-1ifor j 0j abs i jprintf " "for k 1k n-abs i k printf "d"kfor h n-abs i -1h 1h-- printf "d"hprintf "\n"16实验7 数组一实验目的1掌握一维数组和二维数组的定义赋值和输入输出方法2 掌握与数组有关的算法二实验内容[题目1039倒序]由键盘输入10 个整数倒序输出数字间由一个空格分隔[ 自测数据][键盘输入]70 5 14 20 19 2 99 67 13 66 ↙[正确输出]66 13 67 99 2 19 20 14 5 70参考程序includemainint a [10]int ifor i 0i 10i scanf "d"a[i]for i 9i 0i-- printf "d\n"a[i][题目1040统计不同数字个数]由键盘输入20 个整数统计不同数字的个数[ 自测数据][键盘输入]70 5 14 22 19 2 99 67 13 66 5 93 44 38 22 11 39 22 33 11↙[正确输出]16[提示]上述答案中因为5 有1 个重复数字11 有1 个重复数字22 有2 个重复数字故不同数字有16个分别是70 5 14 22 19 2 99 67 13 66 93 44 38 11 39 3317参考程序include"stdioh"mainint a [20]int itp 0for i 0i 20iscanf "d"a[i]for t 0t itif a[t] a [i] breakif t ipprintf "d"p[题目1062打印矩阵]由键盘输入一个3×4 的矩阵要求输出它的转置矩阵[ 自测数据][键盘输入] [正确输出] 1 6 9 3 1 1 11 1 02 6 1 91 9 8 9 9 0 83 2 9参考程序includemainint a [3][4]b[4][3]ijfor i 0i 3ifor j 0j 4jscanf "d"a[i][j]b[j][i] a [i][j]for i 0i 4ifor j 0j 3jprintf "d "b[i][j]printf "\n"*[题目1047冒泡排序]由键盘输入10 个数用冒泡法对10 个数从小到大排序并按格式要求输出代码如下请填充完整数字间由一个空格分隔incude "stdioh"mainint a[10] i j t18for i 0i 10iscanf "d"___________for ___________for j 0j ____jif ______________________for i 0i 10iprintf "d "a[i][ 自测数据][键盘输入]70 5 14 20 19 2 99 67 13 66 ↙[正确输出]2 5 13 14 19 20 66 67 70 99参考程序includemainint a [10]int ijtfor i 0i 10iscanf "d"a[i]for i 0i 9ifor j 0j 9-ijif a[j] a [j1]t a [j] a [j] a[j1] a[j1] tfor i 0i 10iprintf "d "a[i]*[题目1046计算高精度加法]由键盘输入两个位数很长的整数一行一个数每个数最长不超过80 位试计算并输出这两个数的和[ 自测数据][键盘输入]1XXXXXXXXXX23456789 ↙987654321098765 ↙[正确输出]1XXXXXXXXXX4455555419参考程序include "stdioh"include "stringh"mainint a [100] 0 b[100] 0 c[100] 0char s[101]int i 0n1 0n2 0 0e 0gets sn1 strlen sfor i n1-1i 0i-- a[n1-1-i] s[i]-0gets sn2 strlen sfor i n2-1i 0i-- b[n2-1-i] s[i]-0if n1 n2 n1else n2for i 0i ic[i] a[i]b[i]e 10e a[i]b[i]e 10if c[] 0 printf "d"c[]for i -1i 0i--printf "d"c[i]*[题目找矩阵中的鞍点]由键盘输入一个3 ×4 3 行4 列的矩阵输出矩阵中的鞍点即在矩阵行中最大列中最小的数若没有鞍点输出NO 字样[ 自测数据][键盘输入]87 90 110 98 ↙70 97 210 65 ↙98 45 120 30 ↙[正确输出]11020参考程序includemainint ijka[3][4]jflagfor i 0i 3ifor j 0j 4jscanf "d"a[i][j] for i 0i 3ia [i][0]j 0for j 0j 4jif a[i][j]a [i][j] j jflag 1for k 0k 3kif a [k][j]flag 0 breakif flagprintf "d" breakif flagprintf "NO"21实验8 字符数组的应用一实验目的1掌握字符数组和字符串函数的使用2 掌握与字符串处理有关的算法二实验内容[题目1121定义存贮字符串的字符数组]在下面程序中填充定义字符数组的语句使程序完整include "stringh"void mainchar s[80] 定义字符数组sstrcpy s "abcdefghij klmn"printf "s" s参考程序[题目1123字符串的输入与输出]下面程序实现从键盘读入字符串后输出到屏幕请填充必要的语句include "stdioh"void mainchar s[50]printf "Whats your name"gets s 由键盘读入字符串printf "Your name is "printf "s" s 打印字符串参考程序[题目1122字符串的合并]从键盘输入3 个字符串每个字符串以回车符做为结束标志将3 个字符串以输入先后顺序合并到字符串s 中请填空使用程序完整include "stdioh"include "stringh"mainchar s[100] ""char a [30]gets a strcat s a22gets a strcat s agets a strcat s a可以写多行代码printf "s" s[ 自测数据][键盘输入] [正确输出]123 123abc456abc456参考程序[题目1050寻找字符串]由键盘输入两个字符串假设第一个字符串必包含第二个字符串如第一个字符串为ABCDEF第二个为CDE则CDE 包含在ABCDEF 中现要求编程输出第二字符串在第一行字符串中出现的位置如果第二个字符串在第一个字符串中出现多次则以最前出现的为准[第一组自测数据] [第二组自测数据][键盘输入] [键盘输入]ABCDEFG ↙hellhello ↙DE ↙hello ↙[正确输出] [正确输出]4 5[提示]方法1建立双重循环外层循环变量指示第一个串的查找起始位置内层循环从起始位置开始判断第二个字符中是否出现在此处方法2 使用字符串函数strstr参考程序include "stdioh"mainint ijchar a [80] b[80]gets a gets bfor i 0a[i] \0ifor j 0b[j] \0jif a[ij] b[j] breakif b[j] \0 breakif a[i] \0 printf "d"i1else printf "Not Found"23实验9 函数的基本应用一实验目的1掌握定义函数的方法2 掌握函数实参与参的对应关系以及值传递的方式3 掌握函数的嵌套调用和递归调用的方法4 掌握全局变量和局部变量动态变量静态变量的概念和使用方法二实验内容[题目1059函数定义]下面是使用辗转相除法求最大公约数的程序请补充完整程序中函数的定义与调用include "stdioh"int f int m int nint rwhile r mn 0m nn rreturn nmainint a b nscanf "dd" a bprintf "d\n" f a b[题目1083编写函数计算阶乘]下面程序实现由键盘读入整数n计算并输出n 请补充完整计算阶乘的函数long fanc int along in 1for i 1i ai n nireturn nvoid mainint nscanf "d" n24printf "ld" fanc n[题目1124函数中的变量]写出下面程序的运行结果int f1 int xstatic int z 3y 0yzreturn xyzmainint a 1kfor k 0k 3k printf "4d"f1 a 程序运行结果为6 8 10*[题目1084编写递归调用函数实现十进制数转二进制数]下面程序实现由键盘输入一个正整数不大于100000000 输出其对应的二进制数原码表示请填空include "stdioh"void fun int iif i 1fun i2printf "d" i2mainint nscanf "d" nfun n25实验10 指针与结构体一实验目的1通过实验进一步掌握指针的概念会定义和使用指针变量2 能正确使用数组的指针和指向数组的指针变量3 能正确使用字符串的指针和指向字符中的指针变量4 掌握结构体类型变量的定义和使用二实验内容[题目1091交换两数由大到小输出]下面程序交换两数使两数由大到小输出请填空include "stdioh"void swap int p1 int p2int temptemp p1p1 p2p2 tempint mainint ab int papbscanf "dd" a bpa a pb bif a b swap pa pbprintf "d d\n"ab[题目1065数组中的指针]设有如下数组定义int a[3][4] 1357 9111315 17192123计算下面各项的值设数组a 的首地址为2000一个int 类型数占四个字节注意地址则输出地址变量则输出变量值要求一行一个答案不允许多余空行及空格1a[2][1] 2 a[1] 3 a 4 a 15 a 16 a 17 a[2] 18 a 1 19 a2 226参考程序include "stdioh"mainprintf "19\n"printf "2016\n"printf "2000\n"printf "2016\n"printf "2004\n"printf "2016\n"printf "2036\n"printf "2020\n"printf "21"[题目1092函数实现求字符串长度]下面程序以指针方式传递参数由函数实现求字符串长度请填空完成include "stdioh"include "stringh"int f char preturn strlen pint mainchar s[80]int iscanf "s" si f sprintf "d" i[题目1125定义结构体类型]要求定义一个名为student 的结构体类型其包含如下成员1字符数组name 最多可存放10 个字符2 字符变量sex用于记录性别3 整数类型变量num用于记录学号4 float 类型变量score 用于记录成绩并使下列代码完整定义结构体类型struct studentchar name[20]char sex。

c语言第二章试题库及答案详解

c语言第二章试题库及答案详解

c语言第二章试题库及答案详解C语言作为一门经典的编程语言,其试题库及答案详解对于学习者来说至关重要。

以下是C语言第二章的试题库及答案详解,内容涵盖了基本的C语言概念、数据类型、运算符和表达式等。

一、选择题1. 在C语言中,以下哪个是合法的整型常量?- A. 2023- B. 0x1A3F- C. 2023.0- D. '2023'答案: A, B2. 以下哪个选项表示的是C语言中的浮点型常量?- A. 3.14159- B. 2.5e2- C. 0.314E-2- D. All of the above答案: D3. 在C语言中,哪个运算符用于计算两个数的乘积?- A. +- B. -- C. *- D. /答案: C二、填空题1. 在C语言中,基本数据类型包括______、______、______和______。

- 答案:整型(int),字符型(char),浮点型(float),双精度型(double)2. 赋值语句的一般形式是______。

- 答案:变量名 = 表达式3. 表达式 `5 + (fl + 2) * 3 / 2` 的正确计算顺序是先计算______,然后是______,最后是______。

- 答案:括号内的表达式,乘除,加减三、简答题1. 请简述C语言中的变量声明和变量初始化的区别。

- 答案:变量声明是指告诉编译器变量的类型和名称,但不赋予其具体的值。

而变量初始化是在声明的同时赋予变量一个初始值。

2. 解释C语言中的运算符优先级及其对表达式求值的影响。

- 答案:运算符优先级决定了在没有括号的情况下,表达式中各个运算符的执行顺序。

例如,乘法和除法的优先级高于加法和减法,因此在没有括号的情况下,乘除运算会先于加减运算执行。

四、编程题1. 编写一个C语言程序,计算并输出1到10的整数之和。

```c#include <stdio.h>int main() {int sum = 0, i;for(i = 1; i <= 10; i++) {sum += i;}printf("The sum of integers from 1 to 10 is: %d\n", sum);return 0;}```2. 编写一个C语言程序,实现两个浮点数的加法,并输出结果。

C_C++程序设计与上机指导002

C_C++程序设计与上机指导002


2.2.4 字符型常量
C语言中,一个字符常量代表ASCII字符集中的一个字符。 语言中,一个字符常量代表 字符集中的一个字符。 语言中 字符集中的一个字符 字符常量是用一对单引号括起来的一个字符。 字符常量是用一对单引号括起来的一个字符。例如作为字 符常量的小写字母a,在程序中写成‘ , 符常量的小写字母 ,在程序中写成‘a’,以便和标识符 a区别开。因此,‘A'、‘t'、‘2’、‘+'、‘?'都是合 区别开。 区别开 因此, 、 、 、 、 都是合 法的字符常量。 法的字符常量。
3.十六进制整常数 十六进制整常数
• 十六进制整常数用数字 和字母x(或大写字母 )开头。 十六进制整常数用数字0和字母 (或大写字母X)开头。 和字母 其数码取值为0~ , ~ 或 ~ 。 其数码取值为 ~9,A~F或a~f。

2.2.3 实型常量
实型常量也称为实数或者浮点数。 实型常量也称为实数或者浮点数。在C语言中, 语言中, 实数只采用十进制。 实数只采用十进制。用“+”和“–”号来区分实 和 号来区分实 数的正负,但是在表示正实数时,如无特殊需要, 数的正负,但是在表示正实数时,如无特殊需要, 一般都省略“ 实型常量有两种形式: 一般都省略“+” 。实型常量有两种形式:小数 形式、指数形式。 形式、指数形式。而在计算机内部实型数据都以 指数形式存储。 指数形式存储。

2.2.2 整型常量
整型常量就是整常数。 整型常量就是整常数。在C语言中,使用的整常 语言中, 数有八进制、十六进制和十进制三种形式。 数有八进制、十六进制和十进制三种形式。三种 进制只能用于整型常量或整型变量, 进制只能用于整型常量或整型变量,正整数前面 一般省略不写。 的“+”一般省略不写。 一般省略不写

c语言第二章课后习题答案

c语言第二章课后习题答案

第3章数据类型、运算符与表达式习题答案一、选择题1.以下表示正确常量的是()。

(A) E-5 (B) 1E5.1 (C) 'a12' (D) 32766L【答案】D2.若有定义:int a=1,b=2,c=3,d=4,x=5,y=6; 则表达式(x=a>b)&&(y=c>d) 的值为()。

(A)0 (B) 1 (C) 5 (D) 6【答案】A3.以下()是正确的字符常量。

(A)"c" (B) '\\'' (C) 'W' (D) "\32a"【答案】C4.以下()是不正确的字符串常量。

(A) 'abc' (B) "12'12" (C) "0" (D) " "【答案】A5.以下是正确的浮点数的是()。

(A)e3 (B) .62 (C) 2e4.5 (D) 123【答案】B6.若有定义:int a=2; 则正确的赋值表达式是()。

(A)a-=(a*3) (B) double(-a) (C) a*3 (D) a*4=3【答案】A7.若有定义:int x=1111,y=222,z=33;则语句printf("%4d+%3d+%2d", x, y, z);运行后的输出结果为()。

(A)111122233 (B)1111,222,33(C)1111 222 33 (D)1111+222+33【答案】D8.已有如下定义和输入语句:int a,b;scanf("%d,%d",&a,&b);若要求a、b的值分别为11和22,正确的数据输入是哪一个?()(A)11 22 (B)11,22 (C)a=11,b=22 (D)11;22【答案】B9.已有如下定义和输入语句,int a; char c1,c2;scanf("%d%c%c",&a,&c1,&c2);若要求a、c1、c2的值分别为40、A和A,正确的数据输入是()。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第2章数据类型、常量和变量
一、选择题
1. A
2. C
二、填空题
1. 基本数据类型构造数据类型指针类型空类型
2. \
三、简答题
1. C语言规定对所用到的变量要“先定义后使用”,这样做有什么好处?
答:(1)凡未被事先定义的,系统不把它认作变量名,这就能保证程序中变量名使用得正确。

(2)每一个变量被指定未一个确定类型,在编译时就能为其分配性相应的存储单元。

(3)指定每一变量属于一个类型,这就便于在编译时据此检查在程序中要求对该变量进行的运算是否合法。

2. 字符常量与字符串常量有什么区别?
答:字符常量在内存中占一个字节(byte),而字符串可占多个;字符常量表示时要用单引号引起来并且只能是一个字符,字符串常量要用双引号,里面可有多个字符,并且存储时自动在字符串后面加一个结束标志\0。

四、应用题
1. 请将下面各数用八进制和十六进制数(补码)表示。

(1)12 (2)-1 (3)65 (4)-10
解:(1)(12)10=(14)8=(C)16
(2)(-1)10=(177777)8=(FFFF)16
(3)(65)10=(101)8=(41)16
(4)(-10)10=(177766)8=(FFF6)16
2. 写出以下程序的运行结果。

(1)程序运行结果如下图所示。

(2)程序运行结果如下图所示。

(3)程序运行结果如下图所示。

(4)程序运行结果如下图所示。

3. 编写一个C程序,要求输出本学期的课程表。

参考格式如下:
星期一星期二星期三星期四星期五1-2 英语高数C语言英语C语言3-4 上机英语高数美术高数5-6 体育美术音乐自习自习解:略。

相关文档
最新文档