c 练习题 附答案

程序没有唯一答案

作业: 

1、指出下列常量的类型和意义(如果有的话):
a) ‘\b’   退格
b) 1066  无意义
c) 99.44  float类型
d) 0XAA   16进制数
e) 2.0e30   科学计数 2x10^30 保留1位小数


2、编写一个程序,要求输入一个ASCII码值(如66),然后输出相应的字符
答:
  1 #include <stdio.h>
  2 
  3 int main(){
  4   int num;
  5 
  6   while(1){
  7 printf("125 exit\n");
  8   scanf("%d", &num);
  9   printf("ascii is:\n %c\n",num);                                           
 10   
 11   if(num==125)break;
 12   }
 13 return 0;
 14 }
~      
3、Mr. Bing写了下面这个程序,请指出你认为不妥的地方:
include “stdio.h” //应该是#include <stdio.h> 库函数应该使用<>包含头文件 个人生成的库文件才使用"" 
main{ }//不是标准姿势int main()
(//不是标准姿势{
    float g; h; //g后面需要,号或者h前面需要有float
    float tax, rate;
    g = e21; //e21会报错未标识的符号 没有正确赋值或声明e21
    tax = rate * g; //rate没初始化 g是错误的赋值
    printf(“%f\n”, tax);//应是""而不是中文符号
	//没有标准姿势return 0;
)不是标准姿势}

4、一年大约有3.1536*107s。编写一个程序,要求输入你的年龄,然后显示该年龄等于多少秒
答:
  1 #include <stdio.h>                                                          
  2 int main(){
  3 long long  age;
  4 printf("Pleasei enter your age: ");
  5 scanf("%lld",&age);
  6 printf("Your age =%lld  m",age*365*24*3600);
  7 return 0;
  8 }
~              

6、假设ch为char类型变量。使用转义序列、十进制值、八进制字符常量以及十六进制字符常量等方法将其赋值为回车符(使用ASCII码)。
ch=13;      //十进制值
ch='\n';    //ASCII
ch='\015';  //八进制
ch='\x0D';  //十六进制
7、实现下面代码,观察输出结果并给出解释。
#include <stdio.h>
int main(void)
{
    char c1, c2;//声明两个字符行变量
    int diff;    
    float num;
    c1 = ‘S’;
    c2 = ‘O’;
    diff = c1 – c2;
    num = diff;
    printf(“%c%c%c: %d %3.2f\n”, c1, c2, diff, num);
    return 0;
}
  1 #include <stdio.h>
  2 int main(void)
  3 {   
  4     char c1, c2;
  5     int diff;
  6     float num;
  7     c1 = 'S';
  8     c2 = 'O';
  9     diff =c1-c2;
 10     num = diff;
 11      printf("%c%c%c: %d %3.2f\n", c1, c2, diff, diff, num);
 12     return 0;
 13 }                                                                           
~                                                                               
~                                                                               
~               
输出:

SO: 4 4.00
8、编写一个程序,将用分钟表示的时间转换成以小时和分钟表示的时间。使用#define来创建一个代表60的符号常量。
 答:
  1 #include <stdio.h>
  2 #define F  60
  3 
  4 int main(){
  5 int s, m, a, b, i;
  6 scanf("%d", &i);
  7 a=i/F;
  8 b=i%F;
  9 
 10 printf("%dfenzhong == %dhour  and  %dminute ", i, a, b);
 11 
 12 return 0;
 13 }                                                                           
~          

13、以下两个程序片段A和B,问哪个能进入循环体?	 B
片段A:                         片段B:
-------------------------------------------------------------------
unsigned short i;                unsigned short i;
unsigned short index=0;          unsigned long index=0;   
for(i = 0; i <index-1; i++)      for(i=0; i<index-1; i++)
{                                {
    ... ...                          … …
}                                }
-------------------------------------------------------------------


1、指出以下程序的不妥之处。
//没有包含stdio.h头文件 #include <stdio.h>
int main(void)
{
    int i = 1, //;结尾
    float n;
    printf(“watch out! Here come a bunch of fraction!\n”);  //不是英文""
    while(i<30)
        n = 1/i ;//没有跳出循环条件  程序会一直停留在while里面
        printf(“%f”, n);//不是英文""
    printf(“That’s all, folks!\n”);//不是英文""
    return;//return 0;
}

2 、在程序中实现以下表达式,观察运算后a的值并解释原因。(设原来a=12)
(1) a += a
(2) a -= 2
(3) a *= 2+3
(4) a /= a+a
(5) a %= (n%2),n的值为5
(6) a += a -= a *= a
  1 #include <stdio.h>
  2 
  3 int main(){
  4 
  5 int a=12;
  6 a += a;
  7 printf("1 a += a=%d\n", a);
  8 a -= 2;
  9 printf("2 a -= 2=%d\n", a);
 10 a *= 2+3;
 11 printf("3 a *= 2+3=%d\n", a);
 12 a /= a+a;
 13 printf("4 a /= a+a=%d\n", a);
 14 int n=5;
 15 a %= (n%2);
 16 printf("5 a %%=(n%%2) =%d\n", a);
 17 a += a -= a *= a;
 18 printf("6 a += a -= a* = a =%d\n", a);
 19 
 20 return 0;
 21 }                                                                           
1 a += a=     24    //a=a+a ==12+12=24
2 a -= 2      22    // a=24-2
3 a *= 2+3=   110    // *= 优先级比 +小 所以先算2+3=5 所以等于110 
4 a /= a+a=   0       //+ 的优先级高 所以先算 a+a a=a/220  =0是因为int类型会舍去小数部分保留整数
5 a %= (n%2)  = 0    //()优先级高 先算括号的内容 (5%2)=1 a=0%1 =0 
6 a += a -= a *= a =0    //0乘 加 减任何数都得零
   

 3、请写出下列代码的输出内容
#include <stdio.h>
int main(void){
    int a,b,c,d;
    a=10;
    b=a++; //b=10 a=11
    c=++a;  //c=12
    d=10*a++; //b=120
    printf(“b,c,d:%d,%d,%d”,b,c,d);
    return 0;
}
b,c,d:10,12,120
       
4、编写一个程序,该程序要求输入一个float型数并打印该数的立方值。使用你自己设计的函数来计算该值的立方并且将它的立方打印出来。main函数负责把输入的值传递给该函数。
答:
  1 #include <stdio.h>
  2 
  3 void lf(float a);
  4 int main(){
  5      float a;                                                              
  6      scanf("%f",&a);
  7      lf(a);
  8 return 0;
  9 }
 10 void  lf ( float a) {
 11     a=a*a*a;
 12     printf("%f",a);
 13 }
~          
6、编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。
  1 #include <stdio.h>
  2 int susu (int a);
  3 void pr (void);
  4 int main(){
  5     int i, a, c=0;
  6     pr();
  7     scanf("%d",&a);
  8     for (int i=0;i<=a;i++){
  9         if (susu(i)){
 10             printf(" %d ",i);
 11             c++;
 12         }
 13     }
 14     printf("\n susu is have%d \n", c);
 15     return 0;
 16 }
 17 int susu (int a){
 18     int i;
 19     if (1>=a) return 0;//0 1                                                                                                                                                                            
 20     if (2==a) return 1;
 21     if (0==a%2) return 0;
 22     for (i=3;i*i<=a;i += 2){
 23         if(a%i==0)return 0;
 24     } 
 25     return 1;
 26 }
 27 void pr (void){
 28     printf("Please enter one number\n");
 29 }
~           
7、编写一个程序,用户输入某个大写字母,产生一个金字塔图案。例如用户输入字母D,则产生如下图案:
         A
        ABA
       ABCBA
      ABCDCBA
	 答:
  1 #include <stdio.h>
  2 int main(){
  3    char ch;
  4    int a,q;
  5    int c=65;
  6 printf("Please enter the capital letters A to Z:\n");
  7    scanf("%c",&ch);
  8    if(ch>='A'&&ch<='Z'){
  9    a=ch-65+1;
 10    int i,j,k;
 11 for(i=0;i<a;i++){
 12     for(j=0;j<a-i;j++){
 13         printf(" ");
 14     }
 15     for(k=0;k<=i;k++){
 16             printf("%c",c+k);
 17             }
 18     for(q=0;q<i;q++){
 19      printf("%c",c+i-q-1);
 20     }
 21     printf("\n");
 22 }
 23 }else {                                                                                                                                                                                                 
 24 printf("error\n");
 25 }
 26 return 0;
 27 }
 
      
12、编写一个函数my_power,用循环的方法实现返回一个float类型数的某个整数次幂(保留6位小数)。如调用my_power(3.14,-2)返回0.101424

答:  1 #include <stdio.h>
  2 float my_power(float a,int b);
  3 int main(){
  4 
  5 printf("%.6f", my_power(3.14,-2));
  6 
  7 return 0;
  8 }
  9 
 10 
 11 
 12 float my_power(float a,int b){
 13 float  c=1.0;
 14 int i;
 15 if ( 0 == b ) {
 16 return 1;
 17 } else if ( 0 > b ){
 18 
 19 b=b*(-1);
 20 
 21 }
 22 for ( i=0;i<b;i++){
 23     c *= a ;
 24 }
 25 c=(1.0)/c;                                                                                                                                                                                              
 26 
 27 return  c;
 28 
 29 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头真的要秃啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值