五种方法输出字符串“China”
/*指针和字符数组的应用,用五种方法输出字符串“China”。请改正程序中的错误,使它能得出正确的//果。*/
#include
main()
{
int i = 0;
char str[6] = {'C', 'h', 'i', 'n', 'a', '\0'}, str1[6] , *ptr, *ptr1, *ptr2 , str2[5]; //char str[6] = {'C', 'h', 'i', 'n', 'a', '\0'}, str1[6] , *ptr, *ptr1, *ptr2 , str2[6];
while (str[i] != '\0')
{
putchar(*str); //putchar(str[i]);
str++; //i++
}
scanf("%s", ptr);
puts(ptr);
ptr1 = str;
puts(ptr1);
ptr2 = "China";
puts(ptr2);
str2 = "China"; //strcpy(str2,"China");
printf("%s", str2);
}
实验五(2016春刘秉权C语言课):利用矩阵相乘公式,编程计算M*N阶矩阵和N*M阶矩阵B之积C(M*M阶矩阵)。 要求: 1.输入输出格式形如: Input 3*4 matrix a:(输出) a[0,0]:(输出)11(输入) a[0,1]:2 ... a[2,2]:7 a[2,3]:9 Input 4*3 matrix b:(输出) b[0,0]:23(输入) b[0,1]:21 ... b[3,1]:7 b[3,2]:54 Results:(输出) 1643 2063 1063(整数输出6位) 4144 5205 5394 1014 1106 1923 2.用宏定义形式分别定义M、N的值为3、4。 3.函数原型分别定义成: void MultiplyMatrix(int a[M][N], int b[N][M], int c[M][M]);/* 函数功能:计算矩阵相乘之积,结果存于二维数组c中 */ void InputMatrixA(int a[M][N]);/* 函数功能:输入矩阵a中的元素 */ void InputMatrixB(int b[N][M]);/* 函数功能:输入矩阵b中的元素 */ void OutputMatrix(int a[M][M]);/* 函数功能:输出矩阵a中的元素 */ 4.主函数定义成: int main() { int a[M][N], b[N][M], c[M][M]; InputMatrixA(a); InputMatrixB(b); MultiplyMatrix(a,b,c); OutputMatrix(c); return 0; }
#include
#define M 3
#define N 4
/* 函数功能:计算矩阵相乘之积,结果存于二维数组c中 */
void MultiplyMatrix(int a[M][N], int b[N][M], int c[M][M])
{
int i, j, k;
for (i = 0; i < M; i++) //i,j都从横行M开始
{
for (j = 0; j < M; j++)
{
c[i][j] = 0; //初始化c[][]
for (k = 0; k < N; k++) //从纵列N开始
{
c[i][j] = c[i][j] + a[i][k] * b[k][j];
}
}
}
}
/* 函数功能:输出矩阵a中的元素 */
void InputMatrixA(int a[M][N])
{
int i, j;
printf("Input %d*%d matrix a:\n", M, N);
for (i = 0; i < M ; i++)
{
for (j = 0; j < N; j++)
{
printf("a[%d,%d]:", i, j);
scanf("%d", &a[i][j]);
}
}
}
void InputMatrixB(int b[N][M])
{
int i, j;
printf("Input %d*%d matrix b:\n", N, M);
for (i = 0; i < N ; i++)
{
for (j = 0; j < M; j++)
{
printf("b[%d,%d]:", i, j);
scanf("%d", &b[i][j]);
}
}
}
void OutputMatrix(int a[M][M])
{
int i , j ;
printf("Results:\n");
for (i = 0; i < M; i++)
{
for (j = 0; j < M; j++)
{
printf("%6d", a[i][j]);
}
printf("\n");
}
}
int main()
{
int a[M][N], b[N][M], c[M][M];
InputMatrixA(a);
InputMatrixB(b);
MultiplyMatrix(a, b, c);
OutputMatrix(c);
return 0;
}
1~9组成三个3位数的平方数。 将1、2、3、4、5、6、7、8、9九个数字分成三组,每个数字只能用一次,即每组三个数不许有重复数字,要求每组中的三位数都组成一个平方数 **输入格式要求:提示信息:"The 3 squares with 3 different digits each are:\n" **输出格式要求:"%d,%d,%d\n" 程序运行示例如下: The 3 squares with 3 different digits each are: 361,529,784
#include
int main()
{
int a[20],num[20][3],b[10];
int i,j,k,m,n,t,flag;
printf("The 3 squares with 3 different digits each are:\n");
for(j=0,i=11;i<=31;i++)
if(i%10!=0) //整10的平方会出现0;
{
k=i*i;
num[j+1][0]=k/100;
num[j+1][1]=k/10%10;
num[j+1][2]=k%10;
if(!(num[j+1][0]==num[j+1][1]||num[j+1][0]==num[j+1][2]||
num[j+1][1]==num[j+1][2]))
a[++j]=k;//找到满足条件的三位数//
}
for(i=1;i<=j-2;++i)
{
b[1]=num[i][0];
b[2]=num[i][1];
b[3]=num[i][2];//第i个数的个十百//
for(t=i+1;t<=j-1;++t)//j是总个数,i的下一个数//
{
b[4]=num[t][0];
b[5]=num[t][1];
b[6]=num[t][2];//下一个数的个十百//
for(flag=0,m=1;!flag&&m<=3;m++)
for(n=4;!flag&&n<=6;n++)
if(b[m]==b[n])flag=1;//比较6个数都不同//
if(!flag)
for(k=t+1;k<=j;k++)
{
b[7]=num[k][0];
b[8]=num[k][1];
b[9]=num[k][2];
for(flag=0,m=1;!flag&&m<=6;m++)
for(n=7;!flag&&n<=9;n++)
if(b[m]==b[n])flag=1;
if(!flag)
printf("%d,%d,%d\n",a[i],a[t],a[k]);
}
}
}
return 0;
}
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 **输入格式要求:"%d" 提示信息:"please input the total of numbers:" **输出格式要求:"%d is left\n" 程序运行示例如下: please input the total of numbers:30 29 is left
#include
const int M = 3;
int main()
{
int n, s = 0,i;
printf("please input the total of numbers:");
scanf("%d", &n);
for (i = 2; i <= n; ++i)
s = (s + M) % i;
printf("%d is left\n", s + 1);
return 0;
}
此题是约瑟夫环问题 详细解释:(12条消息) 约瑟夫环——公式法(递推公式)_陈浅墨的博客-CSDN博客_约瑟夫问题
谁家孩子跑最慢
张、王、李三家各有三个小孩。一天,三家的九个孩子在一起比赛短 跑,规定不分年龄大小,跑第一得9分,跑第二得8分,一次类推。比赛结果 各家的总分相同,且这些孩子没有同时到达终点,也没有一家的两个或三 个孩子获得相连的名次。已知获第一名的是李家的孩子,获得第二的是王 家的孩子。求各家各个孩子的得分,获得最后一名的是谁家的孩子? **输入格式要求:提示信息:"The last one arrived to end is a child from family Zhang.\n" **输出格式要求:"%d " 程序运行示例如下: 7 5 3 8 6 1 9 4 2 The last one arrived to end is a child from family Wang.
#include
int score[4][4];
main()
{
int i, j, k, who; //最慢孩子标记为who
score[1][1] = 7; //张孩子一定第三
score[2][1] = 8; //王
score[3][1] = 9; //李
for (i = 4; i < 6; i++) //不能有两个孩子连号 所以张二最大为5
for (j = 4; j < 7; j++)
for (k = 4; i != j && k < 7; k++)
if (k != i && k != j
&& 15 - i - score[1][1] != 15 - j - score[2][1]
//三个孩子互不相等
&& 15 - i - score[1][1] != 15 - k - score[3][1]
&& 15 - j - score[2][1] != 15 - k - score[3][1])
{
score[1][2] = i;
score[1][3] = 15 - i - 7;
score[2][2] = j;
score[2][3] = 15 - j - 8;
score[3][2] = k;
score[3][3] = 15 - k - 9;
}
for (who = 0, i = 1; i <= 3; i++, printf("\n"))
for (j = 1; j <= 3; j++)
{
printf("%d ", score[i][j]);
if (score[i][j] == 1)
who = i;
}
if (who == 1)
printf("The last one arrived to end is a child from family Zhang.\n");
else if (who == 2)
printf("The last one arrived to end is a child from family Wang.\n");
else
printf("The last one arrived to end is a child from family Wang.\n");
}
改错 指针数组编程实现按奥运会参赛国国名排序
请用指针数组编程实现按奥运会参赛国国名,在字典中的顺序对其入场次序进行排序。
假设参赛国不超过150个。
下面程序中存在比较隐蔽的错误,请通过分析和调试程序,发现并改正程序中的错误。
注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。
对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。
当且仅当错误全部改正,且程序运行结果调试正确,才给加2分。
经教师手工核对后,如果未用指针数组做函数参数编程,那么即使做对也不给分。
改错时不能改变程序原有的意图,不能改变函数原型。
#include
#define MAX_LEN 80
#define N 150
void SortString(char *ptr[], int n);
main()
{
int i, n;
char *pStr[N]; //char *pStr[N], str[N][MAX_LEN];
printf("How many countries?\n");
scanf("%d",&n);
// for (i = 0; i < N; i++) //在使用数组指针之前必须对数组元
素初始化
// pStr[i] = str[i];//让pStr[i]指向二维数组str的第i行
printf("Input their names:\n");
for (i=0; i
字符串结束标志'\0' 和空格符' ' 不是同一个ASCII码
绘制金字塔
要求用户从键盘输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案: A ABA ABCBA ABCDCBA
/*注意,最后一行输出的字符前面也有一个空格*/
#include
main(){
char c;
printf("Please input a capital:\n");
scanf("%c",&c);
for(int i='A';i<=c;i++ ){
for(int j=c-i;j>=0;j--)
printf(" ");
for(int m=0;m<=i-'A';m++)
printf("%c",'A'+m);
for(int j=1;j<=i-'A';j++)
printf("%c",i-j);
printf("\n");
}
}
4位以内的相亲数
220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284 284的真因数之和为:1+2+4+71+142=220 毕达哥拉斯吧这样的数对A,B称为相亲数:A的真因数之和为B,而B的真因数之和为A。设计程序求4位以内的相亲数。
#include
#include
int main()
{
int i, j, s, t, s1; //相亲数 i,s
for (i = 11; i <= 9999; i++)
{
s = 1;
t = sqrt(i); //只需算根号i次 后面的会重复
for (j = 2; j <= t; j++)
{
if (i % j == 0)
s = s + j + i / j;
}
if (i == t * t) //如果i为平方数,则其开方只能使用一次
s -= t;
if (i < s)
{
s1 = 1;
t = sqrt(s);
for (j = 2; j <= t; j++)
{
if (s % j == 0)
s1 = s1 + j + s / j;
}
if (s == t * t)
s1 -= t;
if (s1 == i)
{
printf("相亲数:%d,%d\n", i, s);
printf("%d 的真因数之和为:%d", i, 1);
for (j = 2; j <= i / 2; j++)
{
if (i % j == 0)
printf("+%d", j);
}
printf("=%d\n", s);
printf("%d 的真因数之和为:%d", s, 1);
for (j = 2; j <= s / 2; j++)
{
if (s % j == 0)
printf("+%d", j);
}
printf("=%d\n", i);
}
}
}
return 0;
}
用switch语句实现“ + ” “ - ” “ * ” " / "
#include
#include
int main(){
float a,b;
char op,c;
loop: printf("Please enter the expression:\n");
scanf("%f %c%f",&a,&op,&b);
switch(op)
{
case '+':
printf("%f + %f = %f\n",a,b,a+b);
printf("Do you want to continue(Y/N or y/n)?");
scanf(" %c",&c);
if (c=='y'||c=='Y') goto loop;
break;
case '-':
printf("%f - %f = %f\n",a,b,a-b);
printf("Do you want to continue(Y/N or y/n)?");
scanf(" %c",&c);
if (c=='y'||c=='Y') goto loop;
break;
case '*':
printf("%f * %f = %f\n",a,b,a*b);
printf("Do you want to continue(Y/N or y/n)?");
scanf(" %c",&c);
if (c=='y'||c=='Y') goto loop;
break;
case '/':
if(fabs(b)<=1e-7) {
printf("Division by zero!\n");
printf("Do you want to continue(Y/N or y/n)?");
scanf(" %c",&c);
if (c=='y'||c=='Y') goto loop;
break;
}
printf("%f / %f = %f\n",a,b,a/b);
printf("Do you want to continue(Y/N or y/n)?");
scanf(" %c",&c);
if (c=='y'||c=='Y') goto loop;
break;
default:
printf("Unknown operator!\n");
printf("Do you want to continue(Y/N or y/n)?");
scanf(" %c",&c);
if (c=='y'||c=='Y') goto loop;
}
return 0;
}
八皇后问题。
在一个8*8的国际象棋棋盘上,有八个皇后,每个皇后占一格;要求皇后间不会出现相互“攻击”的现象,即不能有两个皇后处在同一行、同一列或同一对角线上。问共有多少种不同的方法。
#include
#define NUM 8
int a[NUM + 1]; //由于每一行只能有一个皇后,故只需要记录列号
int main()
{
int i, k, flag, not_finish = 1, count = 0;
i = 1;
a[1] = 1;
printf("The possible configuration of 8 queens are:\n");
while (not_finish)
{
while (not_finish && i <= NUM) //没找完毕
{
for (flag = 1, k = 1; flag && k < i; k++) //列排除
if (a[k] == a[i]) flag = 0;
for (k = 1; flag && k < i; k++) //主、副对角线排除
if ((a[i] == a[k] - (k - i)) || (a[i] == a[k] + (k - i)))
flag = 0;
if (!flag) //冲突解决
{
if (a[i] == a[i - 1]) //列冲突
{
i--; //回溯上一个
if (i > 1 && a[i] == NUM) //第i行已满
a[i] = 1;
else if (i == 1 && a[i] == NUM) //第一行已满
not_finish = 0; //结束
else a[i]++; //i行下一个
}
else if (a[i] == NUM)a[i] = 1;
else a[i]++;
}
else if (++i <= NUM)
{
if (a[i - 1] == NUM)
a[i] = 1;
else
a[i] = a[i - 1] + 1;
}
}
if (not_finish)
{
++count;
printf((count - 1) % 3 ? " [%2d]:" : "\n [%2d]:", count);
for (k = 1; k <= NUM; k++)
printf(" %d", a[k]);
if (a[NUM - 1] < NUM)
a[NUM - 1]++;
else a[NUM - 1] = 1;
i = NUM - 1;
}
}
return 0;
}