实验一
- 编写程序,程序中使用两种方法,将两个变量的值互换后输出。
#include<stdio.h>
int main(){
int a, b , temp;
printf("请输入两个用空格相间隔的数字");
scanf("%d %d", &a, &b);
temp = a;
a = b;
b = temp;
printf("互换后:%d %d\n", a, b);
return 0;
}
#include<stdio.h>
int main(){
int a, b, sum;
printf("请输入两个用空格相间隔的数字");
scanf("%d %d",&a, &b);
sum = a + b;
a = sum - a;
b = sum - b;
printf("互换后:%d %d\n", a,b);
return 0;
}
2.从键盘输入一个四位正整数,首先分离出该整数中的每一位数字,并按升序显示输出各位数字;然后用分离出的最大数做为十位数,最小数做为个位数组成一个新的数字,并显示输出结果。例如,若输入的四位正整数为 9215,按升序显示输出分离出的各位数字为 1 2 5 9;组成数字为 91。
具体要求: ①四位正整数由键盘输入,程序应该对输入的数字是否为四位正整数进行简单的判断; ②对输出结果要有具体说明。
#include<stdio.h>
void swap(int *i, int *n){
int temp;
temp = *i;
*i = *n;
*n = temp;
}
int main(){
int number, a, b, c, d,e;
printf("输入数字:");
scanf("%d", &number);
if(number < 10000 && number >= 1000){
d = number % 10;
c = (number % 100 - d) / 10;
b = (number % 1000 - number % 100)/100;
a = (number - b*100 - c*10 - d) / 1000;
int str[4] = {a, b, c, d};
for(int f = 0; f < 4; f++){
for(int m = 0; m < 3-f; m++){
if (str[m] > str[m+1]){
swap(&str[m], &str[m+1]);
}
}
}
printf("排序后升序显示:");
int i;
for(i = 0; i < 4; i++){
if(i != 0)printf(",");
printf("%d", str[i]);
if(i == 3)printf("\n");
}
printf("新组成的数字:%d%d\n", str[3], str[0]);
}else{
printf("输入的数字不符合要求!\n");
}
return 0;
}
3.编写程序,计算并输出下面分段函数的值:
x*x x<10
y= 2x+5 10≤x≤20
3x-7 其它
#include<stdio.h>
int main(){
double x;
printf("请输入数字x的值");
scanf("%lf", &x);
printf("分段函数计算结果为:");
if(x < 10){
printf("%lf\n", x * x);
}else if(x <= 20 && x >= 10){
printf("%lf\n", 2*x + 5);
}else if(1){
printf("%lf\n", 3*x +-7);
}
return 0;
}
4.将长整型数 s 中每一个数字位上为偶数的数依次取出,构成一个新数放在 t 中,数的高低位置不变。例如:s 中的数字数为:87653142 时,t 中的数为 8642。
#include<stdio.h>
long int fanzhuan(long int r){
int a;
long int sum;
sum = 0;
while(r != 0){
a = r % 10;
sum = sum*10 + a;
r = r / 10;
}
return sum;
}
int main(){
long int a;
int b ;
long int sum = 0;
long int mus;
printf("请输入长整型数字s:");
scanf("%ld", &a);
for(int i = 0; i < 99; i++){
b = a % 10;
if(b % 2 == 0 ){
sum = sum*10 + b;
}
a = a / 10;
if(a == 0)break;
}
mus = fanzhuan(sum);
printf("依次取出偶数结果为:%ld\n", mus);
return 0;
}
6.计算:
具体要求:
①最后一项若小于等于 0.001 时停止计算; ②输出形式为:n=具体值,s=和的具体值;
③按照上述要求,则程序的计算结果:n=500,S=2.985678。
#include<stdio.h>
int main(){
double n = 1;
double S = 0;
int a;
while ((2*n - 1)/(4*n*n) > 0.001){
S = S + (2*n - 1)/(4*n*n);
n = n + 1;
}
a = (double)n;
printf("n = %d, S = %lf\n", a, S);
return 0;
}
实验二 数组
- 从键盘输入 N 个正整数,完成下列的操作要求:
(1).计算并显示这组整数的平均值。输入和求累加和的功能不要放在一个循环之中。
(2).统计小于平均值的非素数的数量。若有小于平均值的非素数,首先显示这些素数的数量。然后再按照输入顺序显示这些非素数。
#include<stdio.h>
int panduan(int a){
int x;
if(a == 1 || a == 0)return 1;
else if(a == 2)return 0;
else if(a > 2){
for(x = 2; x <= a; x++){
if(a % x == 0 && a != x)return 1;
if(a == x)return 0;
}
}
}
int main(){
int str[9];
double sum = 0;
int i, n, a = 0;
double average;
printf("输入10个整数,将显示小于平均值的非素数。\n");
for(i = 0; i <= 9; i++){
printf("输入第%d个数字:", i + 1);
scanf("%d", &str[i]);
}
for(i = 0; i <= 9; i++){
sum = sum + str[i];
}
average = sum / 10;
printf("平均值:%0.2lf\n", average);
for(i = 0;i <= 9; i++){
if(panduan(str[i]) && str[i] < average) a = a + 1;
}
printf("符合条件的非素数共有%d个\n", a);
printf("分别是:\n");
for(i = 0; i <= 9; i++){
if(panduan(str[i]) && str[i] < average)printf("第%d个数字:%d\n", i+1,str[i]);
}
return 0;
}
- 从键盘输入一个(合理的)身份证号码,显示该号码中对应的出生日期及性别信息。具体要求:不允许输入空串。
#include<stdio.h>
int main(){
char str[19];
int i;
int a;
printf("请输入身份证号:");
for(i = 0; i < 19; i++){
scanf("%c", &str[i]);
}
a = str[16] - '0';
if(a % 2 == 0){
printf("出生日期为%c%c%c%c年%c%c月%c%c日, 性别为女性。\n", str[6], str[7], str[8], str[9], str[10], str[11], str[12], str[13]);
}else{
printf("出生日期为%c%c%c%c年%c%c月%c%c日, 性别为男性。\n", str[6], str[7], str[8], str[9], str[10], str[11], str[12], str[13]);
}
return 0;
}
- 将字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出的字符绕回到第一个奇数位置。下标为偶数的字符不动。例如:原字符串的内容:“abcdefgh”,移动后的字符串内容:“ahcbedgf”。字符串可以直接在定义时赋初值。
#include<stdio.h>
int main(){
char str[8] = {"abcdefgh"};
char str2[4];
int i;
printf("原字符串为:");
for(i = 0; i < 8; i++){
printf("%c", str[i]);
}
printf("\n");
str2 [0] = str [7];
for(i = 0; i < 3; i++){
str2[i + 1] = str[2 * i + 1];
}
printf("移动后的字符串为:");
for(i = 0; i < 8; i++){
if(i % 2 == 0)printf("%c", str[i]);
if(i % 2 != 0)printf("%c", str2[(i-1) / 2]);
}
printf("\n");
return 0;
}
实验三 函数
- 从键盘输入整数 m(10-100 之间),将所有大于 1 小于整数 m 的非素数存放到一个数组中,最后将该数组中的这些非素数显示在屏幕上。
例如:输入:17,则应输出:4 6 8 9 10 12 14 15 16。
程序设计要求: main 函数完成数据结构的定义,并调用自定义函数完成题目要求的工作; 自定函数 F1 完成找出非素数的工作; 自定函数 F2 完成输出非素数的工作。
#include<stdio.h>
int F1 (int a){
int x;
for(x =2; x <=a; x++){
if(a % x == 0 && a != x)return 1;
if(a == x)return 2;;
}
}
void F2(int a, int *str){
int i;
for(i = 0; i < a; i++){
printf("%d ", str[i]);
}
}
int main(){
int i, a, b = 0, c = 0;
int str[50];
printf("输入一个整数(10 - 100之间):");
scanf("%d", &a);
for(i = 4; i <= a; i++){
if(F1(i) == 1){
b = b + 1;
str[c] = i;
c++;
}
}
printf("共有%d个非素数!\n",b);
F2(c, str);
return 0;
}
- 保证从键盘上输入一个 N(N 值在程序中指定)位正整数,将数字中的奇数数字按照逆序组成一个新的数字并输出结果。例如:输入:四位数字 2349,则最后的结果应输出:93。
程序设计要求: main 函数完成数据结构的定义及输出最终结果,并调用自定义函数完成题目要求的工作; 自定函数 F4 完成输入 N 位正整数的工作; 自定函数 F5 完成将数字中的奇数数字按照逆序保存的工作; 自定函数 F6 完成逆序组成数字的工作。
#include<stdio.h>
void swap(int *i, int *n){
int temp;
temp = *i;
*i = *n;
*n = temp;
}
int main(){
int number;
int f, m;
int str[4];
int i;
printf("输入数字:");
scanf("%d", &number);
if(number < 10000 && number >= 1000){
for(i = 0;i < 4;i++){
str[i] = number % 10;
number = number / 10;
}
for(f = 0; f < 4; f++){
for(m = 0; m < 3-f; m++){
if (str[m] > str[m+1]){
swap(&str[m], &str[m+1]);
}
}
}
printf("排序后升序显示:");
for(i = 0; i < 4; i++){
if(i != 0)printf(",");
printf("%d", str[i]);
if(i == 3)printf("\n");
}
printf("新组成的数字:%d%d\n", str[3], str[0]);
}else{
printf("输入的数字不符合要求!\n");
}
return 0;
}
- 按下面递归公式编写程序求函数值
fun(n)= 10 (n=1)
fun(n)= fun(n-1)+2 (n>1)
例如:当输入 5 时,函数值为 18;当输入 3 时,函数值为 14。
程序设计要求: main 函数完成变量 n 值的输入,调用自定义递归函数完成题目要求的工作,并输出最终的结果。
#include<stdio.h>
int fun(int n){
int y;
if(n == 1){
y = 10;
}else{
y = fun(n - 1) + 2;
}
return (y);
}
int main(){
int n;
printf("请输入n的值:");
scanf("%d", &n);
printf("%d", fun(n));
return 0;
}
实验四,五 指针
- 移动一维数组中的内容;若数组中有 n 个整数,要求把下标从 0 到 p(含 p,p小于等于 n-1)的数组元素平移到数组的最后。
例如:一维数组的原始内容为:1,2,3,4,5,6,7,8,9,10;p 的值为 3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。
程序设计要求:
main 函数完成数据结构的定义,调用自定义函数完成题目要求的工作,输出最终的结果,变量 p 的值可以再 main 函数中输入; 自定函数 fun1 完成移动数组中数据的工作; 自定函数 f1 完成输出数组中数据的工作。
※函数调用的实际参数传递的数据若是指针,形式参数必须是指针变量的形态。
#include<stdio.h>
void fun1(int str[], int p){
int a, i, x, *b, *c;
b = str;
c = b + 1;
for(x = 0; x < p + 1; x++){
a = str[0];
for(i = 0; i < 10; i++){
*b++ = *c++;
}
str[9] = a;
b = str;
c = str + 1;
}
}
void f1(int str[]){
int i;
for(i = 0; i < 10; i++){
printf("%d ", str[i]);
}
printf("\n");
}
int main(){
int str[12] = {1,2,3,4,5,6,7,8,9,10};
int p;
printf("请输入p的值");
scanf("%d", &p);
fun1(str, p);
f1(str);
return 0;
}
- 从键盘输入一个非空字符串,右截取 n 个字符并输出结果。此题应考虑使用返回指针值的函数的方法来完成程序设计。
程序设计要求: main 函数完成数据结构的定义,调用自定义函数完成题目要求的工作,并输出最终的结果; 自定函数 f3 完成输入非空字符串的工作; 自定函数 fun5 完成右截取定位数据指针的工作。
※函数调用的实际参数传递的数据若是指针,形式参数必须是指针变量的形态。
#include<stdio.h>
#include<string.h>
void f3(char *str){
printf("请输入非空字符串:\n");
gets(str);
}
void fun5(char *str, char *str2, int n){
char *p = str2;
char *p2 = str;
int len = strlen(str);
if(n > len) len = n;
p2 = p2 + (len - n);
while(*p2 != '\0'){
*p++ = *p2++;
}
}
int main(){
char str[99] = "";
int n;
char str2[99] = "";
printf("请输入右截取的字符个数n:\n");
scanf("%d", &n);getchar();
f3(str);
fun5(str, str2, n);
printf("%s\n", str2);
return 0;
}
版权声明:本文为qq_45948139原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。