程序没有唯一答案
作业:
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 }