为使用《C Primer Plus》学习C的初学者准备的。
- 编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。
#include <stdio.h>
int main(int argc, char const **argv) {
char name[20];
char surname[20];
printf("请输入名:");
scanf("%s", name);
printf("请输入姓:");
scanf("%s", surname);
printf("Hello, %s %s", name, surname);
return 0;
}
- 编写一个程序,提示用户输入名和姓,并执行以下操作:
a.打印名和姓,包括双引号;
b.在宽度为20的字段右端打印名和姓,包括双引号;
c.在宽度为20的字段左边打印名和姓,包括双引号;
d.在比姓名宽度宽3的字段打印名和姓。
#include <stdio.h>
#include <string.h>
int main(int argc, char const **argv) {
char name[20];
char surname[20];
printf("请输入名:");
scanf("%s", name);
printf("请输入姓:");
scanf("%s", surname);
char fullName[50];
//strcpy字符串拷贝函数
strcpy(fullName, name);
//strcat字符串连接函数 (在原字符串后面接上指定字符串)
strcat(fullName, " ");
strcat(fullName, surname);
printf("\"%20s\"\n", fullName);
//负号表示左对齐
printf("\"%-20s\"\n", fullName);
//strlen获取字符串长度
int length = strlen(fullName);
//*用于通过变量指定宽度
printf("%*s", length+3, fullName);
return 0;
}
- 编写一个程序,读取一个浮点数,首先以小数计数法打印,然后以指数计数法打印。用下面的格式进行输出(系统不同,输出可能不同):
a.输出21.3或2.1e+001;
b.输出+21.290或2.129E+001;
#include <stdio.h>
int main(int argc, char const **argv) {
float f;
scanf("%f", &f);
//%g输出自适应格式 e输出时指数计数那里的E是小写
printf("%g %e\n", f, f);
//正号表示输出时带正号 E输出时指数计数那里的E是大写
printf("%+g, %E", f, f);
return 0;
}
- 编写一个程序,提示用户输入身高(英寸)和姓名,然后以下面的格式显示用户输入的信息。
#include <stdio.h>
int main(int argc, char const **argv) {
float f;
char name[20];
printf("输入身高(英寸):");
scanf("%f", &f);
printf("输入姓名:");
scanf("%s", name);//字符数组的名字即字符数组的地址
printf("%s, you are %g feet tall.", name, f);
return 0;
}
- 编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度和兆字节(MB)为单位的文件大小。程序中应计算文件下载的时间。注意,这里1字节等于8位。使用float类型,并用/作为除号。该程序要以下面的格式打印3个变量的值,显示小数点后面两位数字。
At 18.12 megebits per second, a file of 2.20 megabytes
downloads in 0.97 seconds.
#include <stdio.h>
int main(int argc, char const **argv) {
float speed;
float fileSize;
printf("请输入下载速度(Mb/s)和文件大小(MB):") ;
scanf("%f %f", &speed, &fileSize);
/*一字节等于八位*/
printf("At %.2f megebits per second, a file of %.2f megabytes\ndownloads in %.2f seconds.", speed, fileSize, (fileSize*8)/speed);
return 0;
}
- 编写一个程序,先提示用户输入名,然后提示用户输入姓。在一行打印名和姓,下一行分别打印名和姓的字母数。字母数要和相应名和姓的结尾对齐,如下所示。
#include <stdio.h>
#include <cstring>
int main(int argc, char const **argv) {
char name[20];
char surname[20];
scanf("%s", name);
scanf("%s", surname);
printf("%s %s\n", name, surname);
/*strlen函数获取字符串长度*/
int length_name = strlen(name);
int length_surname = strlen(surname);
printf("%*d %*d", length_name, length_name, length_surname, length_surname);
return 0;
}
- 编写一个程序,将一个double类型的变量设置为1.0/3.0,一个float类型的变量设置为1.0/3.0.分别显示两次的计算结果各三次:一次显示小数点后6位数字;一次显示小数点后12位数字;一次显示小数点后16位数字。程序中要包含float.h头文件,并显示FLT_DIG和DBL_DIG的值。
#include <stdio.h>
#include <float.h>
int main(int argc, char const **argv) {
double d = 1.0 / 3.0;
float f = 1.0 / 3.0;
printf("%.6lf %.6f\n", d, f);
printf("%.12lf %.12f\n", d, f);
printf("%.16lf %.16f\n", d, f);
printf("FLT_DIG:%d DBL_DIG:%d\n", FLT_DIG, DBL_DIG);
return 0;
}
- 编写一个程序,提示用户输入旅行的里程和消耗的汽油量。然后计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下来,使用一加仑大约3.785升,1英里大约1.609千米,把单位为英里/加仑的值转换为升/100公里,并显示结果,显示小数点后面一位小数。
#include <stdio.h>
#define GALLON_PER_L 3.785
#define MILE_PER_KILOMETER 1.609
int main(int argc, char const **argv) {
float mile;
float gasoline;
printf("请输入旅行的里程(英里)和汽油量(加仑):");
scanf("%f %f", mile, gasoline);
printf("每加仑汽油行驶的公里数:%.1f.\n", mile / gasoline);
printf("每100千米燃烧的汽油量(升):%.1.f.", (mile * MILE_PER_KILOMETER * 100) / (gasoline * GALLON_PER_L));
return 0;
}